@tokenfactory/acc-runner 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/applied-seq-roster.d.ts +77 -0
  2. package/dist/applied-seq-roster.d.ts.map +1 -0
  3. package/dist/applied-seq-roster.js +45 -0
  4. package/dist/applied-seq-roster.js.map +1 -0
  5. package/dist/build-info.generated.d.ts +1 -1
  6. package/dist/build-info.generated.js +2 -2
  7. package/dist/chat-cancel/cancel-controller.d.ts +1 -1
  8. package/dist/chat-cancel/cancel-controller.js +1 -1
  9. package/dist/chat-cancel/index.d.ts +1 -1
  10. package/dist/chat-cancel/index.js +1 -1
  11. package/dist/machine-capabilities/redact.d.ts +1 -1
  12. package/dist/machine-capabilities/redact.js +2 -2
  13. package/dist/machine-capabilities/types.d.ts +3 -3
  14. package/dist/machine-capabilities/types.js +1 -1
  15. package/dist/machine-console/index.d.ts +4 -0
  16. package/dist/machine-console/index.d.ts.map +1 -1
  17. package/dist/machine-console/index.js +52 -0
  18. package/dist/machine-console/index.js.map +1 -1
  19. package/dist/mcp-spawn.d.ts +1 -1
  20. package/dist/mcp-spawn.js +1 -1
  21. package/dist/migration-seq-guard.d.ts +34 -5
  22. package/dist/migration-seq-guard.d.ts.map +1 -1
  23. package/dist/migration-seq-guard.js +45 -6
  24. package/dist/migration-seq-guard.js.map +1 -1
  25. package/dist/prepr-gate.d.ts +12 -1
  26. package/dist/prepr-gate.d.ts.map +1 -1
  27. package/dist/prepr-gate.js +34 -3
  28. package/dist/prepr-gate.js.map +1 -1
  29. package/dist/production-migrations/executor.d.ts +28 -0
  30. package/dist/production-migrations/executor.d.ts.map +1 -1
  31. package/dist/production-migrations/executor.js +27 -2
  32. package/dist/production-migrations/executor.js.map +1 -1
  33. package/dist/staging-migrations/executor.d.ts +16 -0
  34. package/dist/staging-migrations/executor.d.ts.map +1 -1
  35. package/dist/staging-migrations/executor.js +20 -1
  36. package/dist/staging-migrations/executor.js.map +1 -1
  37. package/dist/task-runner.d.ts.map +1 -1
  38. package/dist/task-runner.js +13 -2
  39. package/dist/task-runner.js.map +1 -1
  40. package/dist/user-auth/device-login.d.ts +13 -0
  41. package/dist/user-auth/device-login.d.ts.map +1 -1
  42. package/dist/user-auth/device-login.js +113 -40
  43. package/dist/user-auth/device-login.js.map +1 -1
  44. package/package.json +1 -1
@@ -0,0 +1,77 @@
1
+ /**
2
+ * L1-B — the live `acc.applied_migrations` roster, read with the runner's OWN
3
+ * authenticated Supabase session.
4
+ *
5
+ * WHY IT EXISTS
6
+ * ----------------------------------------------------------------------------
7
+ * MIG-SEQ-GUARD's baseline is "every migration seq claimed OUTSIDE this
8
+ * worktree". That has two halves:
9
+ *
10
+ * • the freshly-fetched integration head — seqs whose FILE has merged;
11
+ * • the applied ledger — seqs that were APPLIED but whose file has not merged
12
+ * yet (an operator `psql` apply per MIGRATION_PROMOTION_RUNBOOK, or the
13
+ * halt-processor auto-apply; both record the row before the PR merges).
14
+ *
15
+ * `revalidateMigrationSeq` has always accepted the second half
16
+ * (`SeqGuardOptions.appliedSeqs`), and the runner — its only caller — never
17
+ * passed one. So the ledger half of the baseline was a silent no-op in
18
+ * production: a seq already burned in the ledger still read as free, and the
19
+ * guard would let the branch push straight into the collision that
20
+ * `migration-lint`'s AU-4/live-seq rules then reject on the PR.
21
+ *
22
+ * WHY POSTGREST AND NOT `psql`
23
+ * ----------------------------------------------------------------------------
24
+ * `scripts/ci/migration-lint.mjs` (`gatherAppliedSeqs`) shells out to
25
+ * `psql "$ACC_DB_URL"`. The runner has no `ACC_DB_URL` and must not grow one —
26
+ * that is a CI/server credential and CLAUDE.md §Secrets keeps it there. What the
27
+ * runner does hold is an authenticated Supabase client scoped to the `acc`
28
+ * schema (src `supabase.ts`), and migration 0325 put
29
+ *
30
+ * create policy applied_migrations_read on acc.applied_migrations
31
+ * for select to authenticated using (true);
32
+ *
33
+ * on the ledger for exactly this reason ("non-sensitive metadata the drift /
34
+ * version UI may read; keep signed-in reads working"). So the runner reads the
35
+ * roster as ITSELF: no new credential, no new env var, no new grant.
36
+ *
37
+ * VERIFIED, 2026-09-25 — on the production parent (ctknjrtevjrzwpuojghx, the
38
+ * live operational board the runner's session points at) `authenticated` holds
39
+ * SELECT on acc.applied_migrations and the 0325 policy is present, so the read
40
+ * returns the full 402-row roster. On the STAGING branch (qfevnwuybyygexkcbdfy)
41
+ * the policy exists but the table grant does not, so the same read is refused
42
+ * there and this module returns `null` — the guard then falls back to the
43
+ * remote head alone, exactly as it behaved before L1-B. Closing that
44
+ * divergence is a grant-only migration and belongs to the schema track, not
45
+ * here; nothing in this module depends on it.
46
+ *
47
+ * BEST-EFFORT BY CONSTRUCTION
48
+ * ----------------------------------------------------------------------------
49
+ * Every failure — RLS refusing the read, an offline machine, a pre-0325
50
+ * database, a malformed row — yields `null`, which is byte-for-byte the input
51
+ * the guard handled before this module existed (`opts.appliedSeqs ?? []`). An
52
+ * unreadable ledger must never be the reason a push is delayed, and never the
53
+ * reason a seq moves.
54
+ */
55
+ import type { RunnerSupabaseClient } from "./supabase.js";
56
+ /**
57
+ * Row cap on the roster read. The ledger is ~400 rows today and only grows, and
58
+ * PostgREST silently truncates an over-large response — so the rows are ordered
59
+ * by seq DESCENDING before the cap. A truncated read then still carries the
60
+ * HIGHEST seqs, which is what the guard's staleness test turns on; a truncation
61
+ * that dropped the top rows would lower the baseline and disarm the guard.
62
+ */
63
+ export declare const APPLIED_SEQ_ROSTER_LIMIT = 2000;
64
+ /**
65
+ * Numeric seqs recorded in `acc.applied_migrations`, newest-first, or `null`
66
+ * when the ledger could not be read (or is empty).
67
+ *
68
+ * Non-numeric seqs are dropped, mirroring `gatherAppliedSeqs`'s
69
+ * `where seq ~ '^[0-9]+$'` — the two rosters must agree on what counts as a
70
+ * migration seq, because the guard hands this one to that same linter as
71
+ * `--baseline-seqs`.
72
+ *
73
+ * Never throws and never logs: the connection string, the JWT and the row
74
+ * contents stay out of the transcript (CLAUDE.md §Secrets).
75
+ */
76
+ export declare function readAppliedMigrationSeqs(supabase: RunnerSupabaseClient): Promise<number[] | null>;
77
+ //# sourceMappingURL=applied-seq-roster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applied-seq-roster.d.ts","sourceRoot":"","sources":["../src/applied-seq-roster.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAK1D;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAO9C;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAmB1B"}
@@ -0,0 +1,45 @@
1
+ /** Table name, relative to the client's `acc` schema binding. */
2
+ const LEDGER_TABLE = "applied_migrations";
3
+ /**
4
+ * Row cap on the roster read. The ledger is ~400 rows today and only grows, and
5
+ * PostgREST silently truncates an over-large response — so the rows are ordered
6
+ * by seq DESCENDING before the cap. A truncated read then still carries the
7
+ * HIGHEST seqs, which is what the guard's staleness test turns on; a truncation
8
+ * that dropped the top rows would lower the baseline and disarm the guard.
9
+ */
10
+ export const APPLIED_SEQ_ROSTER_LIMIT = 2_000;
11
+ /**
12
+ * Numeric seqs recorded in `acc.applied_migrations`, newest-first, or `null`
13
+ * when the ledger could not be read (or is empty).
14
+ *
15
+ * Non-numeric seqs are dropped, mirroring `gatherAppliedSeqs`'s
16
+ * `where seq ~ '^[0-9]+$'` — the two rosters must agree on what counts as a
17
+ * migration seq, because the guard hands this one to that same linter as
18
+ * `--baseline-seqs`.
19
+ *
20
+ * Never throws and never logs: the connection string, the JWT and the row
21
+ * contents stay out of the transcript (CLAUDE.md §Secrets).
22
+ */
23
+ export async function readAppliedMigrationSeqs(supabase) {
24
+ try {
25
+ const { data, error } = await supabase
26
+ .from(LEDGER_TABLE)
27
+ .select("seq")
28
+ .order("seq", { ascending: false })
29
+ .limit(APPLIED_SEQ_ROSTER_LIMIT);
30
+ if (error || !Array.isArray(data))
31
+ return null;
32
+ const seqs = data
33
+ .map((row) => Number(String(row?.seq ?? "").trim()))
34
+ .filter((n) => Number.isFinite(n) && n > 0)
35
+ .map((n) => Math.trunc(n));
36
+ // Empty → null, same as `gatherAppliedSeqs`: "no readable roster" and "a
37
+ // roster with nothing in it" are indistinguishable here and neither may
38
+ // change a verdict.
39
+ return seqs.length > 0 ? seqs : null;
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ //# sourceMappingURL=applied-seq-roster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applied-seq-roster.js","sourceRoot":"","sources":["../src/applied-seq-roster.ts"],"names":[],"mappings":"AAwDA,iEAAiE;AACjE,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAO9C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ;aACnC,IAAI,CAAC,YAAY,CAAC;aAClB,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;aAClC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,IAAI,GAAI,IAAuB;aAClC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aACnD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,yEAAyE;QACzE,wEAAwE;QACxE,oBAAoB;QACpB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const BUILD_COMMIT_SHA = "c2d9263550b5c1bada2200efc5b5005cfedf44e0";
1
+ export declare const BUILD_COMMIT_SHA = "31f604212edc74723cdd951c39b4d3d0765e1a3e";
2
2
  export declare const BUILD_DIST_SHA256 = "pending-build";
3
3
  //# sourceMappingURL=build-info.generated.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Generated by scripts/gen-build-info.mjs. Do not edit by hand.
2
- export const BUILD_COMMIT_SHA = "c2d9263550b5c1bada2200efc5b5005cfedf44e0";
3
- export const BUILD_DIST_SHA256 = "36349d116b1a233a568ad752996a7ee362436cff4ecd94cdc219e39bfe0918f0";
2
+ export const BUILD_COMMIT_SHA = "31f604212edc74723cdd951c39b4d3d0765e1a3e";
3
+ export const BUILD_DIST_SHA256 = "3a5a93ca6a0d24819ef93df18e81040ab231ed7681fb9b2c1cd5dc70f6c8ac95";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * CX-3 STOP-CANCEL: the runner-side cancel controller.
3
3
  *
4
- * The browser's Stop calls acc.cancel_chat_turn (migration 0278), which makes the
4
+ * The browser's Stop calls acc.cancel_chat_turn (migration 0282), which makes the
5
5
  * turn terminal-CANCELLED server-side. This controller is the local counterpart
6
6
  * that tears the still-running engine down promptly so the child is provably dead
7
7
  * and the runner's slot frees:
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * CX-3 STOP-CANCEL: the runner-side cancel controller.
3
3
  *
4
- * The browser's Stop calls acc.cancel_chat_turn (migration 0278), which makes the
4
+ * The browser's Stop calls acc.cancel_chat_turn (migration 0282), which makes the
5
5
  * turn terminal-CANCELLED server-side. This controller is the local counterpart
6
6
  * that tears the still-running engine down promptly so the child is provably dead
7
7
  * and the runner's slot frees:
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * CX-3 STOP-CANCEL: the runner-side chat-cancel barrel.
3
3
  *
4
- * When the operator hits Stop, acc.cancel_chat_turn (migration 0278) makes the
4
+ * When the operator hits Stop, acc.cancel_chat_turn (migration 0282) makes the
5
5
  * turn terminal-CANCELLED server-side and persists the partial reply. These
6
6
  * primitives tear the still-running engine down locally so the child is provably
7
7
  * dead and the slot frees:
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * CX-3 STOP-CANCEL: the runner-side chat-cancel barrel.
3
3
  *
4
- * When the operator hits Stop, acc.cancel_chat_turn (migration 0278) makes the
4
+ * When the operator hits Stop, acc.cancel_chat_turn (migration 0282) makes the
5
5
  * turn terminal-CANCELLED server-side and persists the partial reply. These
6
6
  * primitives tear the still-running engine down locally so the child is provably
7
7
  * dead and the slot frees:
@@ -2,7 +2,7 @@ import { type EngineCapability, type MachineCapabilitySnapshot, type ToolCapabil
2
2
  /**
3
3
  * Credential SHAPES a developer machine actually holds, plus the two generic
4
4
  * carriers. Mirrors the regexes in `acc.machine_capability_material_free`
5
- * (0310 §2); `tests/unit/t1785160000000035-machine-capabilities.test.ts` asserts
5
+ * (0315 §2); `tests/unit/t1785160000000035-machine-capabilities.test.ts` asserts
6
6
  * the mirror by running the same vectors through both spellings.
7
7
  */
8
8
  export declare const CREDENTIAL_SHAPES: readonly RegExp[];
@@ -11,7 +11,7 @@
11
11
  * to capture can ride along. A rebuild rather than a filter: a field nobody
12
12
  * whitelisted is absent from the output by construction, not removed by a
13
13
  * rule somebody has to remember to write.
14
- * 2. `acc._normalize_machine_capability_{tools,engines}` (migration 0310 §6)
14
+ * 2. `acc._normalize_machine_capability_{tools,engines}` (migration 0315 §6)
15
15
  * does the same rebuild server-side, so a rogue or stale runner build cannot
16
16
  * widen the record.
17
17
  * 3. Two CHECK constraints on `acc.machine_capabilities` reject anything SHAPED
@@ -31,7 +31,7 @@ import { HOST_TOOLS, } from "./types.js";
31
31
  /**
32
32
  * Credential SHAPES a developer machine actually holds, plus the two generic
33
33
  * carriers. Mirrors the regexes in `acc.machine_capability_material_free`
34
- * (0310 §2); `tests/unit/t1785160000000035-machine-capabilities.test.ts` asserts
34
+ * (0315 §2); `tests/unit/t1785160000000035-machine-capabilities.test.ts` asserts
35
35
  * the mirror by running the same vectors through both spellings.
36
36
  */
37
37
  export const CREDENTIAL_SHAPES = [
@@ -11,7 +11,7 @@
11
11
  * There is deliberately no field that could hold a token, and the field set is
12
12
  * CLOSED on three sides: `sanitizeSnapshot` (redact.ts) rebuilds every record
13
13
  * from these fields before it leaves the host,
14
- * `acc._normalize_machine_capability_{tools,engines}` (migration 0310) rebuilds
14
+ * `acc._normalize_machine_capability_{tools,engines}` (migration 0315) rebuilds
15
15
  * it again from the same whitelist server-side, and two CHECK constraints reject
16
16
  * anything shaped like a credential at rest. Adding a field here without adding
17
17
  * it to BOTH whitelists means the field is silently dropped, which is the
@@ -22,7 +22,7 @@
22
22
  */
23
23
  import type { EngineAuthMode, EnginePlanHint } from "../engines/types.js";
24
24
  /**
25
- * The host tools ACC probes. Mirrors `acc.machine_capability_tools()` (0310 §1)
25
+ * The host tools ACC probes. Mirrors `acc.machine_capability_tools()` (0315 §1)
26
26
  * and `HOST_TOOLS` in api/_lib/machine-capabilities.ts — the unit suite asserts
27
27
  * all three agree, so a tool added on one side cannot silently be dropped by
28
28
  * the writer's whitelist on another.
@@ -103,7 +103,7 @@ export interface MachineCapabilitySnapshot {
103
103
  * what `recordMachineCapabilities` sends to
104
104
  * `acc.record_machine_capabilities` — note there is no timestamp: `probed_at` is
105
105
  * server time, because a host with a wrong clock would otherwise win every
106
- * last-writer-wins comparison forever (0310 §4).
106
+ * last-writer-wins comparison forever (0315 §4).
107
107
  */
108
108
  export interface MachineCapabilityReport {
109
109
  snapshot: MachineCapabilitySnapshot;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The host tools ACC probes. Mirrors `acc.machine_capability_tools()` (0310 §1)
2
+ * The host tools ACC probes. Mirrors `acc.machine_capability_tools()` (0315 §1)
3
3
  * and `HOST_TOOLS` in api/_lib/machine-capabilities.ts — the unit suite asserts
4
4
  * all three agree, so a tool added on one side cannot silently be dropped by
5
5
  * the writer's whitelist on another.
@@ -5,6 +5,8 @@ import { type MachineCommandTransport } from "./transport.js";
5
5
  export declare const MACHINE_CONSOLE_ENABLED_ENV = "ACC_RUNNER_MACHINE_CONSOLE";
6
6
  export declare const DEFAULT_MACHINE_POLL_MS = 1000;
7
7
  export declare const DEFAULT_MACHINE_WALL_MS = 120000;
8
+ /** Grace period for stdio to drain after "exit"; see drainStdio. */
9
+ export declare const STDIO_DRAIN_MS = 2000;
8
10
  export interface MachineConsoleHandle {
9
11
  stop(): Promise<void>;
10
12
  refreshClient(client: RunnerSupabaseClient): void;
@@ -17,6 +19,8 @@ export interface MachineConsoleDeps {
17
19
  supabase: RunnerSupabaseClient;
18
20
  pollMs?: number;
19
21
  wallClockMs?: number;
22
+ /** Override the post-exit stdio drain grace period (tests). */
23
+ stdioDrainMs?: number;
20
24
  onLog?: (line: string) => void;
21
25
  spawnCommand?: typeof spawn;
22
26
  transport?: MachineCommandTransport;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/machine-console/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AACxE,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAG/C,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAClD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,cAAc,IAAI,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,YAAY,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,KAAK,CAAC;IAC5B,SAAS,CAAC,EAAE,uBAAuB,CAAC;CACrC;AAED,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEnF;AAQD,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAc9E;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAKzF;AA+BD,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAgK/G;AAED,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,qBAAqB,EACrB,8BAA8B,EAC9B,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACjG,mBAAmB,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/machine-console/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AACxE,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAC/C,oEAAoE;AACpE,eAAO,MAAM,cAAc,OAAQ,CAAC;AAGpC,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAClD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,cAAc,IAAI,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,YAAY,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,KAAK,CAAC;IAC5B,SAAS,CAAC,EAAE,uBAAuB,CAAC;CACrC;AAED,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEnF;AAQD,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAc9E;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAKzF;AA2ED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAmK/G;AAED,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,qBAAqB,EACrB,8BAA8B,EAC9B,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACjG,mBAAmB,8BAA8B,CAAC"}
@@ -10,6 +10,8 @@ import { SupabaseMachineCommandTransport, } from "./transport.js";
10
10
  export const MACHINE_CONSOLE_ENABLED_ENV = "ACC_RUNNER_MACHINE_CONSOLE";
11
11
  export const DEFAULT_MACHINE_POLL_MS = 1_000;
12
12
  export const DEFAULT_MACHINE_WALL_MS = 120_000;
13
+ /** Grace period for stdio to drain after "exit"; see drainStdio. */
14
+ export const STDIO_DRAIN_MS = 2_000;
13
15
  const OUTPUT_CHUNK_BYTES = 48 * 1024;
14
16
  export function machineConsoleEnabled(env = process.env) {
15
17
  return (env[MACHINE_CONSOLE_ENABLED_ENV] ?? "").trim() !== "0";
@@ -63,6 +65,53 @@ function splitByBytes(value, maxBytes = OUTPUT_CHUNK_BYTES) {
63
65
  chunks.push(remaining);
64
66
  return chunks;
65
67
  }
68
+ /**
69
+ * Wait for the child's stdio pipes to finish delivering, AFTER its "exit".
70
+ *
71
+ * Node's "exit" fires when the process ends, which is NOT the same moment its
72
+ * stdout/stderr data has been handed to our listeners. Traced under CPU
73
+ * contention, the ordering inverts often enough to matter:
74
+ *
75
+ * flush end=0 push=0 finish=0 exitcode=0 <- we flushed and completed here
76
+ * data raw=84 dec=84 red=0 <- the output arrived after
77
+ *
78
+ * The 84 bytes were then dropped, because the streaming redactor had already
79
+ * been `finish()`ed, so a command was reported "succeeded" with its entire
80
+ * output missing. Reproduced in 5 of 120 runs under 24 busy-loop spinners on 8
81
+ * cores; it is a silent data-loss bug, not merely a slow test. See issue #2861.
82
+ *
83
+ * Bounded deliberately. The child is spawned `detached`, so a grandchild that
84
+ * inherited the pipes can hold them open long after the shell exits; waiting for
85
+ * "close" unconditionally would stall the serving loop for up to the wall-clock
86
+ * limit. A short grace period collects the data in the case that actually
87
+ * happens (a process that already exited) without introducing that stall.
88
+ */
89
+ async function drainStdio(child, graceMs) {
90
+ const ended = (stream) => {
91
+ if (!stream)
92
+ return Promise.resolve();
93
+ // `readableEnded` is already true when "end" fired before we got here.
94
+ if (stream.readableEnded)
95
+ return Promise.resolve();
96
+ return new Promise((resolve) => {
97
+ stream.once("end", resolve);
98
+ stream.once("close", resolve);
99
+ stream.once("error", () => resolve());
100
+ });
101
+ };
102
+ let timer;
103
+ const grace = new Promise((resolve) => {
104
+ timer = setTimeout(resolve, graceMs);
105
+ timer.unref?.();
106
+ });
107
+ try {
108
+ await Promise.race([Promise.all([ended(child.stdout), ended(child.stderr)]), grace]);
109
+ }
110
+ finally {
111
+ if (timer)
112
+ clearTimeout(timer);
113
+ }
114
+ }
66
115
  function terminateProcess(child) {
67
116
  if (child.exitCode !== null || child.killed)
68
117
  return;
@@ -197,6 +246,9 @@ export async function startMachineCommandServing(deps) {
197
246
  clearInterval(cancelPoll);
198
247
  clearTimeout(wallTimer);
199
248
  await statusCheck;
249
+ // Must precede the decoder/redactor flush below: finish() closes the
250
+ // redactors, and anything arriving afterwards is silently discarded.
251
+ await drainStdio(child, deps.stdioDrainMs ?? STDIO_DRAIN_MS);
200
252
  queueOutput("stdout", stdoutRedactor.push(stdoutDecoder.end()) + stdoutRedactor.finish());
201
253
  queueOutput("stderr", stderrRedactor.push(stderrDecoder.end()) + stderrRedactor.finish());
202
254
  if (timedOut)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/machine-console/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/machine-console/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export declare const ACC_MCP_KEY = "acc";
2
2
  export declare const MCP_CONFIG_FILENAME = ".mcp.json";
3
- export declare const ACC_MCP_PACKAGE_SPEC = "@tokenfactory/acc-mcp-server@0.6.3";
3
+ export declare const ACC_MCP_PACKAGE_SPEC = "@tokenfactory/acc-mcp-server@0.6.4";
4
4
  /** Env var acc-mcp-server reads the per-turn delegation JWT from (see cli.ts). */
5
5
  export declare const ACC_MCP_DELEGATION_TOKEN_ENV = "ACC_MCP_DELEGATION_TOKEN";
6
6
  /** Env var acc-mcp-server (future-facing) reads the calling agent's id from. */
package/dist/mcp-spawn.js CHANGED
@@ -34,7 +34,7 @@ import path from "node:path";
34
34
  import { execa } from "execa";
35
35
  export const ACC_MCP_KEY = "acc";
36
36
  export const MCP_CONFIG_FILENAME = ".mcp.json";
37
- export const ACC_MCP_PACKAGE_SPEC = "@tokenfactory/acc-mcp-server@0.6.3";
37
+ export const ACC_MCP_PACKAGE_SPEC = "@tokenfactory/acc-mcp-server@0.6.4";
38
38
  const ACC_MCP_BIN = "acc-mcp-server";
39
39
  /** Env var acc-mcp-server reads the per-turn delegation JWT from (see cli.ts). */
40
40
  export const ACC_MCP_DELEGATION_TOKEN_ENV = "ACC_MCP_DELEGATION_TOKEN";
@@ -44,9 +44,13 @@ export interface SeqGuardOptions {
44
44
  /** Remote to re-fetch. Defaults to `origin`. */
45
45
  remote?: string;
46
46
  /**
47
- * Live `acc.applied_migrations` seqs, when the caller can read them. Unioned
48
- * with the fresh remote head so a migration applied out-of-band still counts
49
- * as claimed. Omitted → the remote head alone is the baseline.
47
+ * Live `acc.applied_migrations` seqs, when the caller already HAS them in
48
+ * hand. Unioned with the fresh remote head so a migration applied out-of-band
49
+ * still counts as claimed. Omitted → the remote head alone is the baseline.
50
+ *
51
+ * A caller that must READ the roster passes `deps.loadAppliedSeqs` instead —
52
+ * that seam is consulted lazily, only once this branch is known to add a
53
+ * migration (L1-B). Both supplied → both are unioned in.
50
54
  */
51
55
  appliedSeqs?: number[] | null;
52
56
  }
@@ -65,9 +69,20 @@ export interface SeqGuardDeps {
65
69
  readWorkingFile?: (workdir: string, file: string) => Promise<string | null>;
66
70
  /** A file's content at a git ref (the fresh target's copy). `null` = absent/unreadable. */
67
71
  readRefFile?: (workdir: string, ref: string, file: string) => Promise<string | null>;
68
- /** Run the renumber pass with an out-of-tree baseline roster. */
69
- runRenumber?: (workdir: string, files: string[], baselineSeqs: number[]) => Promise<{
72
+ /**
73
+ * Run the renumber pass with an out-of-tree baseline roster.
74
+ *
75
+ * `targetRef` is the fresh target head this guard just read (FETCH_HEAD, or
76
+ * the tracking ref when the fetch failed). It is forwarded as
77
+ * `--renumber --target-ref`, which makes the renumber ENGINE itself refuse a
78
+ * candidate it can see is already merged there (#2132). The filter below
79
+ * already drops inherited candidates, so this is the belt on the engine side:
80
+ * every other caller of `--renumber` (prepr-gate's MIGFIX-01, a hand run)
81
+ * reaches the same refusal.
82
+ */
83
+ runRenumber?: (workdir: string, files: string[], baselineSeqs: number[], targetRef?: string) => Promise<{
70
84
  output: string;
85
+ exitCode?: number | null;
71
86
  }>;
72
87
  /** True when the working tree has uncommitted changes (did the renumber act?). */
73
88
  isDirty?: (workdir: string) => Promise<boolean>;
@@ -76,6 +91,20 @@ export interface SeqGuardDeps {
76
91
  listChangedFiles?: (workdir: string) => Promise<string[]>;
77
92
  /** Commit the rename so the push carries it. */
78
93
  commit?: (workdir: string, message: string) => Promise<void>;
94
+ /**
95
+ * L1-B: read the live `acc.applied_migrations` roster, unioned into the
96
+ * baseline alongside the fresh remote head so a seq that is APPLIED but whose
97
+ * file has not merged yet still reads as claimed. The runner binds this to
98
+ * `readAppliedMigrationSeqs` on its own authenticated Supabase client
99
+ * (applied-seq-roster.ts).
100
+ *
101
+ * An I/O seam and not an option because it is LAZY: it is called only after
102
+ * the branch is known to add a migration and the fresh head was readable, so
103
+ * the ordinary push — which touches no migration at all — still costs nothing
104
+ * but one `git diff`. Rejecting, or returning `null`/`[]`, is fully supported:
105
+ * the baseline is then the remote head alone, exactly as before L1-B.
106
+ */
107
+ loadAppliedSeqs?: () => Promise<number[] | null>;
79
108
  }
80
109
  /**
81
110
  * The numeric sequence prefix of a migration path (`…/0315_acc_x.sql` → 315),
@@ -1 +1 @@
1
- {"version":3,"file":"migration-seq-guard.d.ts","sourceRoot":"","sources":["../src/migration-seq-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration-seq-guard.d.ts","sourceRoot":"","sources":["../src/migration-seq-guard.ts"],"names":[],"mappings":"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"}
@@ -140,11 +140,15 @@ export function sameMigrationModuloSeq(a, b, seq) {
140
140
  const norm = (s) => s.split(String(seq).padStart(4, "0")).join("§").split(String(seq)).join("§");
141
141
  return norm(a) === norm(b);
142
142
  }
143
- async function defaultRunRenumber(workdir, files, baselineSeqs) {
143
+ async function defaultRunRenumber(workdir, files, baselineSeqs, targetRef) {
144
144
  const script = path.join(workdir, "scripts", "ci", "migration-lint.mjs");
145
145
  const args = ["--renumber"];
146
146
  if (baselineSeqs.length > 0)
147
147
  args.push("--baseline-seqs", baselineSeqs.join(","));
148
+ // #2132: hand the engine the same fresh ref this guard classified against, so
149
+ // the already-published refusal holds even if the filter above ever regresses.
150
+ if (targetRef)
151
+ args.push("--target-ref", targetRef);
148
152
  // `process.execPath`, not a bare "node": the runner may be launched by
149
153
  // launchd with a PATH that has no node at all, and a silently-unspawnable
150
154
  // renumber reads exactly like a clean no-op (empty output, clean tree).
@@ -158,8 +162,18 @@ async function defaultRunRenumber(workdir, files, baselineSeqs) {
158
162
  // whose explanation lives on `shortMessage` — present at runtime on the
159
163
  // failure shape, absent from execa's success type.
160
164
  const shortMessage = res.shortMessage;
161
- const spawnFailure = res.exitCode === 0 ? "" : `\n[exit ${res.exitCode ?? "signal"}] ${shortMessage ?? ""}`;
162
- return { output: `${res.stdout ?? ""}\n${res.stderr ?? ""}${spawnFailure}`.trim() };
165
+ const engineOutput = `${res.stdout ?? ""}\n${res.stderr ?? ""}`.trim();
166
+ // MIGFIX-01D: a non-zero exit is no longer synonymous with a spawn failure —
167
+ // `--renumber` now exits 1 when it renamed the file but left attributable PROSE
168
+ // references behind. Only an exit that produced NO engine output at all is the
169
+ // unspawnable-node case this note exists for.
170
+ const spawnFailure = res.exitCode === 0 || engineOutput
171
+ ? ""
172
+ : `\n[exit ${res.exitCode ?? "signal"}] ${shortMessage ?? ""}`;
173
+ return {
174
+ output: `${engineOutput}${spawnFailure}`.trim(),
175
+ exitCode: res.exitCode ?? null,
176
+ };
163
177
  }
164
178
  async function defaultIsDirty(workdir) {
165
179
  const res = await execa("git", ["status", "--porcelain"], {
@@ -281,7 +295,22 @@ export async function revalidateMigrationSeq(workdir, opts, deps = {}) {
281
295
  remoteBySeq.set(n, f);
282
296
  }
283
297
  }
284
- for (const n of opts.appliedSeqs ?? []) {
298
+ // The ledger half of the baseline. `opts.appliedSeqs` is whatever the caller
299
+ // already held; `deps.loadAppliedSeqs` reads it live, and is reached only
300
+ // here — after the branch is known to add a migration and the fresh head
301
+ // came back readable. Best-effort in the strongest sense: a rejection or an
302
+ // empty roster leaves the head as the entire baseline, which is the
303
+ // pre-L1-B behaviour, so an unreadable ledger can never move a seq.
304
+ const ledgerSeqs = [...(opts.appliedSeqs ?? [])];
305
+ if (deps.loadAppliedSeqs) {
306
+ try {
307
+ ledgerSeqs.push(...((await deps.loadAppliedSeqs()) ?? []));
308
+ }
309
+ catch {
310
+ /* unreadable ledger — the remote head alone is the baseline */
311
+ }
312
+ }
313
+ for (const n of ledgerSeqs) {
285
314
  if (Number.isFinite(n) && n > 0)
286
315
  claimed.add(Math.trunc(n));
287
316
  }
@@ -349,7 +378,7 @@ export async function revalidateMigrationSeq(workdir, opts, deps = {}) {
349
378
  const isDirty = deps.isDirty ?? defaultIsDirty;
350
379
  const commit = deps.commit ?? defaultCommit;
351
380
  // Renumber only the branch's OWN colliding migrations — never an inherited one.
352
- const { output } = await runRenumber(workdir, own, baselineSeqs);
381
+ const { output, exitCode: renumberExit } = await runRenumber(workdir, own, baselineSeqs, chosenRef);
353
382
  if (!(await isDirty(workdir))) {
354
383
  return {
355
384
  renumbered: false,
@@ -370,6 +399,16 @@ export async function revalidateMigrationSeq(workdir, opts, deps = {}) {
370
399
  // sibling test / contract fixture) so the seq text-substitution is never silent.
371
400
  const listChanged = deps.listChangedFiles ?? defaultListChangedFiles;
372
401
  const refsRewrittenOutside = (await listChanged(workdir)).filter((p) => !p.replace(/\\/g, "/").startsWith(`${MIGRATIONS_DIR}/`));
402
+ // MIGFIX-01D: `--renumber` exits non-zero when it moved the file but left
403
+ // PROSE references to the old seq that it could attribute and would not
404
+ // guess at. This guard still commits and pushes — the rename itself is
405
+ // correct and blocking a push on a comment would be worse — but the report
406
+ // must SAY so, because a silent push is exactly how v1.65-BC shipped 22
407
+ // stale mentions.
408
+ const staleProse = renumberExit != null && renumberExit !== 0 && /STALE PROSE/.test(output)
409
+ ? ` — STALE PROSE: the renumber left prose references to the old seq; ` +
410
+ `fix them by hand (tool said: ${output.slice(output.indexOf("STALE PROSE")).slice(0, 600)})`
411
+ : "";
373
412
  const first = own[0];
374
413
  const fromSeq = migrationSeq(first);
375
414
  // The tool's own log names the move (`0315 → 0316`); prefer it, and fall
@@ -382,7 +421,7 @@ export async function revalidateMigrationSeq(workdir, opts, deps = {}) {
382
421
  return {
383
422
  renumbered: true,
384
423
  detail: `migration seq ${fromSeq} was taken on a fresh ${remote}/${opts.integrationBranch} ` +
385
- `(head max ${remoteMaxSeq}) — auto-renumbered to ${toSeq} before push`,
424
+ `(head max ${remoteMaxSeq}) — auto-renumbered to ${toSeq} before push${staleProse}`,
386
425
  remoteMaxSeq,
387
426
  move: {
388
427
  file: first,