Skip to content

v2.2.0 — 14/14 steps, working product, root cause fixed

Choose a tag to compare

@Hainrixz Hainrixz released this 28 Jul 05:58
· 7 commits to main since this release

Third build cycle. A zero-context agent generated a blueprint; a second zero-context agent built it with real commands on a no-services stack — so this time there were no environmental excuses.

Cycle 1 Cycle 2 Cycle 3
Steps completed 2/4 1/3 14/14
Blueprint defects 18 18 10
Guesses per step ~6 ~6 1.7
§20.1 acceptance gate — — PASSED 10/10

The product genuinely works. It indexed real markdown notes, searched by tag + date + full text, folded diacritics, did incremental re-indexing, honored its documented exit codes, and installed from a tarball into a clean directory. 84 tests, 0 failed.

The root cause, found by executing

It still returned FALSE on self-containment, because a literal builder stops at step 3. One root cause produced both hard stops and 4 of the 10 defects: the bundle never decided how a plain node scripts/*.ts reaches TypeScript source.

Verified on Node 24 / TypeScript 6.0.3:

Result
.js specifier + node script.ts ERR_MODULE_NOT_FOUND
.ts specifier + tsc, no flags TS5097
.ts + allowImportingTsExtensions + rewriteRelativeImportExtensions exit 0, emits ./lib.js, and the build runs

knowledge/runtime-tracks/ts-node.md now settles this once, with the four-context table and the exact compiler options, so no blueprint re-opens it.

Five generalizable rules

Each shipped as a writer obligation + validator check — three cycles proved a rule with no enforcer is not prevention.

Rule What it cost
F A resolution convention is decided once and reconciled against every loader — app, tests, scripts, build Both hard stops
G A Verify command must exit 0 when the step is correct # expect: exit 2 read as a failing gate by every runner
H A check must be possible in the medium it runs in A runtime check asked to see type-only exports, erased before runtime
I The workspace copy must be safe to re-run A bare recursive copy reverted the package manifest
J A NOT APPLICABLE section cannot carry a contract The builder invented 100% of a "byte-exact" format that existed nowhere

Also

  • cli-library-mcp no longer hard-requires a container — the pack-and-install path is documented and was executed end to end.
  • Phase 4 Step 6: a data layer needing no service is a clean pass, not a blocked one. It now also runs the formatter over workspace/.
  • Who authors the package manifest is decided, not left to the writer.
  • SKILL.md rule 6: the obligation is the live registry check; the delegation is the means. A missing Task tool no longer blocks generation.
  • Validator Sweep 12 splits honestly — static half to the validator, executable half handed by name to the main thread, which has the shell. A check nobody can perform is worse than no check.

Honest status

The design is right; three cycles of executing it have been steadily removing the places where the executable details contradicted themselves. The remaining gap is narrow and named, and every rule above came from a real failure with a real error message, not from inspection.

Verified: 5/5 CI checks green · plugin manifest validates · 88 classification edges symmetric · 0 version pins outside runtime-tracks/ · every cross-reference resolves.