@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.
- package/dist/applied-seq-roster.d.ts +77 -0
- package/dist/applied-seq-roster.d.ts.map +1 -0
- package/dist/applied-seq-roster.js +45 -0
- package/dist/applied-seq-roster.js.map +1 -0
- package/dist/build-info.generated.d.ts +1 -1
- package/dist/build-info.generated.js +2 -2
- package/dist/chat-cancel/cancel-controller.d.ts +1 -1
- package/dist/chat-cancel/cancel-controller.js +1 -1
- package/dist/chat-cancel/index.d.ts +1 -1
- package/dist/chat-cancel/index.js +1 -1
- package/dist/machine-capabilities/redact.d.ts +1 -1
- package/dist/machine-capabilities/redact.js +2 -2
- package/dist/machine-capabilities/types.d.ts +3 -3
- package/dist/machine-capabilities/types.js +1 -1
- package/dist/machine-console/index.d.ts +4 -0
- package/dist/machine-console/index.d.ts.map +1 -1
- package/dist/machine-console/index.js +52 -0
- package/dist/machine-console/index.js.map +1 -1
- package/dist/mcp-spawn.d.ts +1 -1
- package/dist/mcp-spawn.js +1 -1
- package/dist/migration-seq-guard.d.ts +34 -5
- package/dist/migration-seq-guard.d.ts.map +1 -1
- package/dist/migration-seq-guard.js +45 -6
- package/dist/migration-seq-guard.js.map +1 -1
- package/dist/prepr-gate.d.ts +12 -1
- package/dist/prepr-gate.d.ts.map +1 -1
- package/dist/prepr-gate.js +34 -3
- package/dist/prepr-gate.js.map +1 -1
- package/dist/production-migrations/executor.d.ts +28 -0
- package/dist/production-migrations/executor.d.ts.map +1 -1
- package/dist/production-migrations/executor.js +27 -2
- package/dist/production-migrations/executor.js.map +1 -1
- package/dist/staging-migrations/executor.d.ts +16 -0
- package/dist/staging-migrations/executor.d.ts.map +1 -1
- package/dist/staging-migrations/executor.js +20 -1
- package/dist/staging-migrations/executor.js.map +1 -1
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +13 -2
- package/dist/task-runner.js.map +1 -1
- package/dist/user-auth/device-login.d.ts +13 -0
- package/dist/user-auth/device-login.d.ts.map +1 -1
- package/dist/user-auth/device-login.js +113 -40
- package/dist/user-auth/device-login.js.map +1 -1
- 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 = "
|
|
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 = "
|
|
3
|
-
export const BUILD_DIST_SHA256 = "
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
* (
|
|
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
|
|
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
|
-
* (
|
|
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
|
|
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()` (
|
|
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 (
|
|
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()` (
|
|
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;
|
|
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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"}
|
package/dist/mcp-spawn.d.ts
CHANGED
|
@@ -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
|
+
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.
|
|
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
|
|
48
|
-
* with the fresh remote head so a migration applied out-of-band
|
|
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
|
-
/**
|
|
69
|
-
|
|
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":"AAkDA,mFAAmF;AACnF,eAAO,MAAM,aAAa,4BAA4B,CAAC;AAIvD,0EAA0E;AAC1E,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,aAAa,GACb,mBAAmB,GACnB,gBAAgB,GAChB,UAAU,GACV,gBAAgB,GAChB,eAAe,GACf,iBAAiB,CAAC;AAEtB,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;iEAE6D;IAC7D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,mBAAmB,EAAE,OAAO,CAAC;IAC7B;sFACkF;IAClF,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mCAAmC;IACnC,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB
|
|
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
|
|
162
|
-
|
|
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
|
-
|
|
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,
|