From a8c47a449b7bcb73318afe535f8b06fdf2dd0f2f Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 06:43:34 +0000 Subject: [PATCH 1/2] test(cli): drive migrate record-currency-codes in the --json stdout purity family discoverFamily() finds the new member (bootSchemaStack + --json flag); FAMILY did not list it, so the nightly reconciliation pin went red. Drive it with its required pair on the fixture's jp_ticket.title, reaching the INVALID_FIELD refusal face after a read-only boot. Claude-Session: https://claude.ai/code/session_01QUs3BuiMGLNsVXrDee61JM Co-authored-by: Claude --- packages/cli/test/json-stdout-purity.e2e.test.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/cli/test/json-stdout-purity.e2e.test.ts b/packages/cli/test/json-stdout-purity.e2e.test.ts index d591fbd770a..67787671b45 100644 --- a/packages/cli/test/json-stdout-purity.e2e.test.ts +++ b/packages/cli/test/json-stdout-purity.e2e.test.ts @@ -136,6 +136,17 @@ const FAMILY: Record = { // directory gains nothing. 'migrate organization-ownership': [], 'migrate plan': [], + // [ADR-0144] One pair per run, and all three flags are required. A dry run is + // its DEFAULT and the only form driven here: without `--apply` it boots + // read-only (`deferSchemaDdl` + `readOnlyProbe`) and writes nothing. The + // fixture's `jp_ticket.title` is not a record-mode currency field, so the + // face driven here is its REFUSAL face — the backfill's `INVALID_FIELD` + // before any row is read, emitted compact (`emitJson(…, 0, { compact: true })` + // then `this.exit(1)`) after the boot and before the `finally` shutdown, so + // the shutdown's diagnostics follow the document and must stay off stdout. + // Widening the shared fixture with a currency field would move the faces of + // the members that walk every object; the refusal still boots the stack. + 'migrate record-currency-codes': ['--object', 'jp_ticket', '--field', 'title', '--code', 'USD'], 'migrate recorded-by': [], 'migrate resume': [], // A preview is its DEFAULT and the only form driven here: without `--apply` From 1bdda92a6c509aab0fd8db69a7c6a1821ca8e94b Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 31 Oct 2026 06:57:59 +0000 Subject: [PATCH 2/2] test(cli): name the face record-currency-codes actually reaches in the purity drive Measured: on the uncompiled fixture the command answers its 'No app objects are loaded' refusal after the boot, not INVALID_FIELD. Comment only. Claude-Session: https://claude.ai/code/session_01QUs3BuiMGLNsVXrDee61JM Co-authored-by: Claude --- .../cli/test/json-stdout-purity.e2e.test.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/cli/test/json-stdout-purity.e2e.test.ts b/packages/cli/test/json-stdout-purity.e2e.test.ts index 67787671b45..cea60762339 100644 --- a/packages/cli/test/json-stdout-purity.e2e.test.ts +++ b/packages/cli/test/json-stdout-purity.e2e.test.ts @@ -136,16 +136,16 @@ const FAMILY: Record = { // directory gains nothing. 'migrate organization-ownership': [], 'migrate plan': [], - // [ADR-0144] One pair per run, and all three flags are required. A dry run is - // its DEFAULT and the only form driven here: without `--apply` it boots - // read-only (`deferSchemaDdl` + `readOnlyProbe`) and writes nothing. The - // fixture's `jp_ticket.title` is not a record-mode currency field, so the - // face driven here is its REFUSAL face — the backfill's `INVALID_FIELD` - // before any row is read, emitted compact (`emitJson(…, 0, { compact: true })` - // then `this.exit(1)`) after the boot and before the `finally` shutdown, so - // the shutdown's diagnostics follow the document and must stay off stdout. - // Widening the shared fixture with a currency field would move the faces of - // the members that walk every object; the refusal still boots the stack. + // [ADR-0144] `--object`, `--field` and `--code` are all required, so without + // them the run stops at flag parsing and never boots; the pair named here is + // the fixture's own. A dry run is its DEFAULT and the only form driven here: + // without `--apply` it boots read-only (`deferSchemaDdl` + `readOnlyProbe`) + // and writes nothing. It reads the app objects from the compiled artifact, + // which this fixture deliberately lacks (see the header), so the face driven + // here is its REFUSAL face — "No app objects are loaded" — emitted compact + // (`emitJson(…, 0, { compact: true })`, then `this.exit(1)`) after the boot + // and BEFORE the `finally` shutdown, so the shutdown's diagnostics follow + // the document and must stay off stdout. 'migrate record-currency-codes': ['--object', 'jp_ticket', '--field', 'title', '--code', 'USD'], 'migrate recorded-by': [], 'migrate resume': [],