@dzhechkov/harness-core 0.5.0 → 0.5.2
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/.dz-manifest.json +339 -75
- package/README.md +47 -4
- package/dist/codex-hooks-assets.d.ts.map +1 -1
- package/dist/codex-hooks-assets.js +39 -2
- package/dist/codex-hooks-assets.js.map +1 -1
- package/dist/codex-hooks-verify.d.ts +23 -2
- package/dist/codex-hooks-verify.d.ts.map +1 -1
- package/dist/codex-hooks-verify.js +29 -0
- package/dist/codex-hooks-verify.js.map +1 -1
- package/dist/codex-hooks.d.ts +90 -7
- package/dist/codex-hooks.d.ts.map +1 -1
- package/dist/codex-hooks.js +171 -21
- package/dist/codex-hooks.js.map +1 -1
- package/dist/feature-adr-routing.d.ts +22 -0
- package/dist/feature-adr-routing.d.ts.map +1 -1
- package/dist/feature-adr-routing.js +45 -0
- package/dist/feature-adr-routing.js.map +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/loop-blobs.generated.d.ts +1 -1
- package/dist/loop-blobs.generated.d.ts.map +1 -1
- package/dist/loop-blobs.generated.js +12 -3
- package/dist/loop-blobs.generated.js.map +1 -1
- package/dist/loop-plan.d.ts +70 -0
- package/dist/loop-plan.d.ts.map +1 -1
- package/dist/loop-plan.js +103 -0
- package/dist/loop-plan.js.map +1 -1
- package/dist/loop-render.d.ts.map +1 -1
- package/dist/loop-render.js +38 -130
- package/dist/loop-render.js.map +1 -1
- package/dist/loop-run-semantics.d.ts +130 -0
- package/dist/loop-run-semantics.d.ts.map +1 -0
- package/dist/loop-run-semantics.js +257 -0
- package/dist/loop-run-semantics.js.map +1 -0
- package/dist/loop-trace.d.ts +106 -5
- package/dist/loop-trace.d.ts.map +1 -1
- package/dist/loop-trace.js +151 -18
- package/dist/loop-trace.js.map +1 -1
- package/dist/managed-hooks.d.ts +10 -0
- package/dist/managed-hooks.d.ts.map +1 -1
- package/dist/managed-hooks.js +17 -5
- package/dist/managed-hooks.js.map +1 -1
- package/dist/named-lock.d.ts +57 -0
- package/dist/named-lock.d.ts.map +1 -0
- package/dist/named-lock.js +247 -0
- package/dist/named-lock.js.map +1 -0
- package/dist/operations.d.ts +81 -5
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +356 -38
- package/dist/operations.js.map +1 -1
- package/dist/parity.d.ts +70 -2
- package/dist/parity.d.ts.map +1 -1
- package/dist/parity.js +133 -2
- package/dist/parity.js.map +1 -1
- package/dist/qe-bridge.d.ts +291 -0
- package/dist/qe-bridge.d.ts.map +1 -0
- package/dist/qe-bridge.js +538 -0
- package/dist/qe-bridge.js.map +1 -0
- package/dist/score.d.ts.map +1 -1
- package/dist/score.js +43 -9
- package/dist/score.js.map +1 -1
- package/dist/trace-corroborate.d.ts +48 -0
- package/dist/trace-corroborate.d.ts.map +1 -0
- package/dist/trace-corroborate.js +172 -0
- package/dist/trace-corroborate.js.map +1 -0
- package/dist/workflow-run-dispatch.d.ts +230 -0
- package/dist/workflow-run-dispatch.d.ts.map +1 -0
- package/dist/workflow-run-dispatch.js +363 -0
- package/dist/workflow-run-dispatch.js.map +1 -0
- package/dist/workflow-run.d.ts +513 -0
- package/dist/workflow-run.d.ts.map +1 -0
- package/dist/workflow-run.js +1377 -0
- package/dist/workflow-run.js.map +1 -0
- package/package.json +2 -2
- package/sbom.json +740 -80
- package/src/codex-hooks-assets.ts +39 -2
- package/src/codex-hooks-verify.ts +55 -2
- package/src/codex-hooks.ts +172 -20
- package/src/feature-adr-routing.ts +55 -0
- package/src/index.ts +46 -1
- package/src/loop-blobs.generated.ts +12 -3
- package/src/loop-plan.ts +185 -0
- package/src/loop-render.ts +38 -128
- package/src/loop-run-semantics.ts +278 -0
- package/src/loop-trace.ts +207 -16
- package/src/managed-hooks.ts +26 -5
- package/src/named-lock.ts +277 -0
- package/src/operations.ts +441 -40
- package/src/parity.ts +177 -2
- package/src/qe-bridge.ts +737 -0
- package/src/score.ts +50 -9
- package/src/trace-corroborate.ts +205 -0
- package/src/workflow-run-dispatch.ts +459 -0
- package/src/workflow-run.ts +1773 -0
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `workflow-run` — the PURE scheduler half of `dz workflow run` (feature dz-workflow-run).
|
|
3
|
+
*
|
|
4
|
+
* `dz workflow run` INTERPRETS a `loop-plan/1` plan; it never executes the rendered Claude-host
|
|
5
|
+
* script (ADR-001). That is the whole design in one sentence, and everything in this file follows
|
|
6
|
+
* from it: the plan is read through a PROJECTION (`toRunProjection` — the AM-3 doctrine, now with a
|
|
7
|
+
* second enactor), the enactment DECISIONS come from the one shared module the rendered script also
|
|
8
|
+
* carries as a blob (`loop-run-semantics`), and the trace is emitted through the SAME validated
|
|
9
|
+
* grammar the Claude host uses (`loop-trace`), so a divergent event cannot even be buffered.
|
|
10
|
+
*
|
|
11
|
+
* PURITY (NFR-3): everything here is deterministic under injected seams — a `Dispatcher` per family,
|
|
12
|
+
* a `RunStore` for every byte that touches a disk, an injected clock and an injected runId. No
|
|
13
|
+
* `spawn`, no `fs`, no `Date`, no randomness. That is what buys the determinism test, the
|
|
14
|
+
* replay-derived discrimination leg, the landed-barrier mutant and all 22 taxonomy producers
|
|
15
|
+
* WITHOUT spawning a single child.
|
|
16
|
+
*
|
|
17
|
+
* The three refusal planes, in the order a run meets them:
|
|
18
|
+
* 1. PREFLIGHT — decidable before anything is spawned (no trace plane, unroutable model, a write
|
|
19
|
+
* that escapes the root, same-family QE, an operator override that cannot fit a boundary).
|
|
20
|
+
* 2. RESUME — decidable from state + checkpoints + artifact probes, never from a step list.
|
|
21
|
+
* 3. RUNTIME — dispatch failures, gate verdicts, deliverables that did not land, budget.
|
|
22
|
+
* Every refusal names itself from ONE closed list (`WF_RUN_REASONS`), and the list is the count
|
|
23
|
+
* authority a reachability suite walks.
|
|
24
|
+
*/
|
|
25
|
+
import type { LoopPlan, RunProjection, RunStepSpec } from './loop-plan.js';
|
|
26
|
+
import { type BridgeFamily } from './qe-bridge.js';
|
|
27
|
+
import { type Dispatcher } from './workflow-run-dispatch.js';
|
|
28
|
+
export declare const WF_RUN_STATE_SCHEMA = "wf-run-state/1";
|
|
29
|
+
export declare const WF_BUDGET_ROW_SCHEMA = "wf-budget-1";
|
|
30
|
+
export declare const WF_PAUSE_ENVELOPE_SCHEMA = "wf-pause-envelope/1";
|
|
31
|
+
export declare const WF_RUN_RESULT_SCHEMA = "wf-run-result/1";
|
|
32
|
+
export declare const WF_RUN_OWNER_HOST = "dz-workflow-run";
|
|
33
|
+
/** ADR-004 W9 — a DECLARED GUESS, deliberately ONE exported constant so calibration is a one-line
|
|
34
|
+
* change with a name, not a number sprinkled through the scheduler. */
|
|
35
|
+
export declare const WALLCLOCK_CEILING_MULTIPLIER = 1.5;
|
|
36
|
+
/** 75 = sysexits EX_TEMPFAIL ("try again later"). NOT 3: that collides with workflow-lint's
|
|
37
|
+
* inconclusive and reads ignorable, while a pause strands resumable progress (AM-11). */
|
|
38
|
+
export declare const WF_EXIT: {
|
|
39
|
+
readonly completed: 0;
|
|
40
|
+
readonly failed: 1;
|
|
41
|
+
readonly usage: 2;
|
|
42
|
+
readonly pause: 75;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* The CLOSED reason set (AM-1 + AM-15 + AM-19) as DATA — the single count authority. The
|
|
46
|
+
* reachability suite WALKS this array: a member no in-suite scenario can produce fails the suite, so
|
|
47
|
+
* the list can never quietly grow a decorative member or lose a real one. Every count written in
|
|
48
|
+
* prose anywhere is a DESCRIPTION of this array, never a second authority.
|
|
49
|
+
*/
|
|
50
|
+
export declare const WF_RUN_REASONS: readonly ["plan-invalid", "trace-emit-required", "plan-model-unroutable", "artifact-path-escapes-root", "probe-failed", "dispatch-timeout", "dispatch-dead", "gate-verdict-unparseable", "deliverable-not-landed", "same-family-qe-refused", "prompt-over-ceiling", "stale-input-refused", "resume-model-unavailable", "foreign-run-refused", "run-exists", "run-locked", "budget-exhausted", "budget-extension-exhausted", "budget-invariant-violated", "resume-already-completed", "wall-extension-exhausted", "reservation-unsatisfiable", "gate-failed", "plan-pause"];
|
|
51
|
+
export type WfRunReason = (typeof WF_RUN_REASONS)[number];
|
|
52
|
+
/**
|
|
53
|
+
* The members whose PRODUCER lives in the impure half (`dz workflow run`'s CLI): a run DIRECTORY
|
|
54
|
+
* that already holds a run, and a LIVE owner marker. Neither is decidable without a filesystem, so
|
|
55
|
+
* neither can be produced by the core suite.
|
|
56
|
+
*
|
|
57
|
+
* Exported as DATA so the reachability proof spans both packages WITHOUT either side restating the
|
|
58
|
+
* other's list: the core suite asserts `produced-in-core ∪ this === WF_RUN_REASONS`, and the CLI
|
|
59
|
+
* suite asserts it produces every member of exactly this array. Together that is a real 23/23 walk;
|
|
60
|
+
* a member that fell out of both halves would fail the core union check, and a member added here
|
|
61
|
+
* without a CLI producer would fail the CLI check.
|
|
62
|
+
*/
|
|
63
|
+
export declare const WF_RUN_REASONS_CLI_PRODUCED: readonly ["run-exists", "run-locked"];
|
|
64
|
+
export interface WfRunOwner {
|
|
65
|
+
host: typeof WF_RUN_OWNER_HOST;
|
|
66
|
+
runnerVersion: string;
|
|
67
|
+
pid: number;
|
|
68
|
+
startedMarker: string;
|
|
69
|
+
}
|
|
70
|
+
export interface WfRunState {
|
|
71
|
+
schema: typeof WF_RUN_STATE_SCHEMA;
|
|
72
|
+
/**
|
|
73
|
+
* CONTENT binding for the attestation (feature honest-trace-provenance, ADR-001 round 3).
|
|
74
|
+
* Identifiers alone were not enough: a fabricated trace dropped beside a genuine run-state with
|
|
75
|
+
* matching ids satisfied the binding, which is exactly the counterexample that failed round 2.
|
|
76
|
+
* Optional because a state written before this feature has none — and a state with NO binding can
|
|
77
|
+
* never mint `instrument`, which is the fail-closed direction.
|
|
78
|
+
*/
|
|
79
|
+
traceSha256?: string;
|
|
80
|
+
traceLines?: number;
|
|
81
|
+
owner: WfRunOwner;
|
|
82
|
+
status: 'running' | 'paused' | 'completed' | 'failed';
|
|
83
|
+
runId: string;
|
|
84
|
+
/** BARE hex everywhere it is stored or compared (K7) — the rendered header's `sha256:` prefix is
|
|
85
|
+
* display-only. One domain, so no comparison has to remember to strip a prefix. */
|
|
86
|
+
planDigest: string;
|
|
87
|
+
execFp: string;
|
|
88
|
+
argsHash: string;
|
|
89
|
+
pause?: {
|
|
90
|
+
state: string;
|
|
91
|
+
resumeArg: string;
|
|
92
|
+
payloadSchema: Record<string, unknown> | null;
|
|
93
|
+
remainingSteps: string[];
|
|
94
|
+
reservationNote: string;
|
|
95
|
+
};
|
|
96
|
+
failure?: {
|
|
97
|
+
reason: WfRunReason;
|
|
98
|
+
detail: string;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* DIAGNOSTIC-ONLY (W10). Read by NOTHING — the resume cursor comes from checkpoint lines plus
|
|
102
|
+
* artifact probes, never from a step list a crashed writer may have half-updated. A test corrupts
|
|
103
|
+
* this field arbitrarily and asserts every resume decision is byte-identical.
|
|
104
|
+
*/
|
|
105
|
+
completedSteps: string[];
|
|
106
|
+
/** stepId → PROBED model id (joins resume identity, AM-8). */
|
|
107
|
+
resolvedModels: Record<string, string>;
|
|
108
|
+
budget: {
|
|
109
|
+
total: number;
|
|
110
|
+
spent: number;
|
|
111
|
+
extensions: {
|
|
112
|
+
ts: string;
|
|
113
|
+
extra: number;
|
|
114
|
+
newTotal: number;
|
|
115
|
+
}[];
|
|
116
|
+
};
|
|
117
|
+
wallClock: {
|
|
118
|
+
ceilingMs: number;
|
|
119
|
+
spentMs: number;
|
|
120
|
+
extensions: {
|
|
121
|
+
ts: string;
|
|
122
|
+
extraMs: number;
|
|
123
|
+
newCeilingMs: number;
|
|
124
|
+
}[];
|
|
125
|
+
};
|
|
126
|
+
waivers: {
|
|
127
|
+
kind: 'same-family-qe';
|
|
128
|
+
step: string;
|
|
129
|
+
recordedDebt: string;
|
|
130
|
+
}[];
|
|
131
|
+
/**
|
|
132
|
+
* Every resume arg supplied so far, across ALL legs (Step-8 re-QE NEW-B2). Which pauses are
|
|
133
|
+
* SATISFIED is run state, not an argument of the current invocation: a three-pause plan is
|
|
134
|
+
* resumed three times, and leg 3 supplies only its own key.
|
|
135
|
+
*/
|
|
136
|
+
resumeArgs?: Record<string, string>;
|
|
137
|
+
coderFamily: BridgeFamily;
|
|
138
|
+
startedAt: string;
|
|
139
|
+
updatedAt: string;
|
|
140
|
+
/** True when a scripted-dispatcher TEST SEAM supplied the dispatchers — recorded LOUDLY, because
|
|
141
|
+
* a test seam that leaves no trace in the artifact is indistinguishable from a real run. */
|
|
142
|
+
dispatcherOverride?: boolean;
|
|
143
|
+
}
|
|
144
|
+
export interface WfBudgetRow {
|
|
145
|
+
schema: typeof WF_BUDGET_ROW_SCHEMA;
|
|
146
|
+
kind: 'stage' | 'probe';
|
|
147
|
+
runId: string;
|
|
148
|
+
/** Joins 1:1 to the trace's dispatch events; null on a probe row (a probe is not a dispatch). */
|
|
149
|
+
dispatchSeq: number | null;
|
|
150
|
+
stepId: string | null;
|
|
151
|
+
itemKey: string | null;
|
|
152
|
+
attempt: number | null;
|
|
153
|
+
family: BridgeFamily;
|
|
154
|
+
model: string | null;
|
|
155
|
+
wallMs: number;
|
|
156
|
+
tokensIn: number | null;
|
|
157
|
+
tokensOut: number | null;
|
|
158
|
+
tokensSource: 'claude-envelope' | 'codex-stderr' | null;
|
|
159
|
+
outcome: 'ok' | 'null' | 'error' | null;
|
|
160
|
+
timeoutMs: number | null;
|
|
161
|
+
}
|
|
162
|
+
export interface WfPauseEnvelope {
|
|
163
|
+
schema: typeof WF_PAUSE_ENVELOPE_SCHEMA;
|
|
164
|
+
runId: string;
|
|
165
|
+
exitCode: 75;
|
|
166
|
+
pauseState: string;
|
|
167
|
+
/** CLOSED (Step-8 HIGH-7): a member of `WF_RUN_REASONS`, never a free string. */
|
|
168
|
+
reason: WfRunReason;
|
|
169
|
+
/** The REAL path of this run's state file — a custom `--run-dir` must not be told to look in the
|
|
170
|
+
* default one. */
|
|
171
|
+
runStatePath: string;
|
|
172
|
+
/** A command that actually works for this run, `--run-dir` included. */
|
|
173
|
+
resumeCmd: string;
|
|
174
|
+
}
|
|
175
|
+
export interface WfRunResult {
|
|
176
|
+
schema: typeof WF_RUN_RESULT_SCHEMA;
|
|
177
|
+
runId: string;
|
|
178
|
+
status: 'completed' | 'failed';
|
|
179
|
+
reason?: WfRunReason;
|
|
180
|
+
exitCode: 0 | 1;
|
|
181
|
+
/**
|
|
182
|
+
* The gate `terminal:` route this run ended on, when it ended on one (Step-8 MEDIUM-13).
|
|
183
|
+
*
|
|
184
|
+
* A terminal route is a PLAN-DECLARED ending, so the exit code stays 0 — parity with the rendered
|
|
185
|
+
* script, whose top-level terminal `return` also completes the Workflow. But "completed" and
|
|
186
|
+
* "completed because a gate rejected it" are different facts, and a wrapper could not tell them
|
|
187
|
+
* apart from the result line alone; the route was visible only in the ledger. It is a field
|
|
188
|
+
* rather than a new exit code because changing the exit semantics would silently reclassify every
|
|
189
|
+
* existing terminal-route run.
|
|
190
|
+
*/
|
|
191
|
+
terminalRoute?: string;
|
|
192
|
+
/** True when the SCRIPTED dispatcher seam supplied the models (Step-8 MEDIUM-11) — a run that
|
|
193
|
+
* dispatched to no real model must say so in its own result, not only in a state file. */
|
|
194
|
+
dispatcherOverride?: boolean;
|
|
195
|
+
}
|
|
196
|
+
export interface RunnerInputs {
|
|
197
|
+
plan: LoopPlan;
|
|
198
|
+
runId: string;
|
|
199
|
+
coderFamily: BridgeFamily;
|
|
200
|
+
allowSameFamilyQe: boolean;
|
|
201
|
+
defaultFamily: BridgeFamily | null;
|
|
202
|
+
budgetOverride: number | null;
|
|
203
|
+
maxWallClockMsOverride: number | null;
|
|
204
|
+
stageTimeoutMsOverride: number | null;
|
|
205
|
+
/** runId to resume, or null for a fresh run. */
|
|
206
|
+
resume: string | null;
|
|
207
|
+
resumeArgs: Record<string, string>;
|
|
208
|
+
budgetExtra: number | null;
|
|
209
|
+
wallClockExtraMs: number | null;
|
|
210
|
+
runnerVersion: string;
|
|
211
|
+
cwdRoot: string;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* The run-args identity hash, over the inputs MINUS an ENUMERATED exclusion list (AM-13 / W12).
|
|
215
|
+
*
|
|
216
|
+
* The exclusions are the whole point and they are returned as DATA so a test can pin them rather
|
|
217
|
+
* than restate them: the plan-declared `resumeArg` keys (supplying one is what a resume IS),
|
|
218
|
+
* `budgetExtra` and `wallClockExtra` (extending a ceiling is a resume-plane input, not a different
|
|
219
|
+
* run). Everything else — including a resume arg the plan never declared — is IDENTITY, so changing
|
|
220
|
+
* it makes the resume stale rather than silently continuing a different run.
|
|
221
|
+
*/
|
|
222
|
+
export declare function computeRunArgsHash(inputs: RunnerInputs, proj: RunProjection): {
|
|
223
|
+
hash: string;
|
|
224
|
+
excluded: string[];
|
|
225
|
+
};
|
|
226
|
+
export interface BoundaryReservation {
|
|
227
|
+
boundaryId: string;
|
|
228
|
+
kind: 'stage' | 'region' | 'gate';
|
|
229
|
+
steps: string[];
|
|
230
|
+
/** Worst-case agent invocations this boundary can consume, retries and redos included. */
|
|
231
|
+
invocations: number;
|
|
232
|
+
/** Worst-case wall clock, before the ceiling multiplier. */
|
|
233
|
+
wallMs: number;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Worst-case reservation PER BOUNDARY (AM-4: a region is reserved as a whole and never interrupted,
|
|
237
|
+
* which is what makes "pause BEFORE the region" expressible at all).
|
|
238
|
+
*
|
|
239
|
+
* • stage — the step's declared `maxAgents`;
|
|
240
|
+
* • gate — the gate's own allowance PLUS the declared redo allowance, reserved AT the gate
|
|
241
|
+
* boundary (a plan-declared redo must be affordable where it is spent, not somewhere
|
|
242
|
+
* upstream, or a short budget pauses in the middle of a redo loop);
|
|
243
|
+
* • region — every activated member × the whole chain. This is the number that can legitimately
|
|
244
|
+
* exceed the plan's total: the render's ceiling counts a member step ONCE, the runtime
|
|
245
|
+
* dispatches it per item. Naming the gap here is what makes the extension cap
|
|
246
|
+
* satisfiable instead of a surprise mid-run.
|
|
247
|
+
*/
|
|
248
|
+
export declare function computeBoundaryReservations(proj: RunProjection, timeoutMsFor: (s: RunStepSpec) => number): BoundaryReservation[];
|
|
249
|
+
/**
|
|
250
|
+
* The extension cap (AM-14, correcting AM-5's doubling): `max(2 × originalTotal, Σ reservations)`.
|
|
251
|
+
*
|
|
252
|
+
* The doubling bound ALONE left a valid plan permanently unresumable — counterexample from the
|
|
253
|
+
* amendment: T=10 with a last boundary needing 25 can never be finished, because the achievable cap
|
|
254
|
+
* is 20 and the prefix already spent some of it. Σ reservations is PREFIX-CLOSED (actual spend per
|
|
255
|
+
* construct never exceeds its own reservation), so default caps are satisfiable BY CONSTRUCTION.
|
|
256
|
+
* The named cost: for attempt-heavy plans the cap is larger than 2×T, so the doubling guarantee is
|
|
257
|
+
* weakened exactly there — the extension records are what keep that audited.
|
|
258
|
+
*/
|
|
259
|
+
export declare function computeAchievableMax(originalTotal: number, reservations: BoundaryReservation[]): number;
|
|
260
|
+
/** ADR-004 W9: Σ worst-case wall × the declared multiplier. The multiplier is a GUESS with a name. */
|
|
261
|
+
export declare function computeWallClockCeilingMs(reservations: BoundaryReservation[]): number;
|
|
262
|
+
export interface PreflightDeps {
|
|
263
|
+
/** Resolve a path to its real location, or null when it cannot be resolved. */
|
|
264
|
+
realpath: (p: string) => string | null;
|
|
265
|
+
exists: (p: string) => boolean;
|
|
266
|
+
}
|
|
267
|
+
export interface PreflightOk {
|
|
268
|
+
ok: true;
|
|
269
|
+
projection: RunProjection;
|
|
270
|
+
planDigest: string;
|
|
271
|
+
execFp: string;
|
|
272
|
+
argsHash: string;
|
|
273
|
+
/** stepId → family, TOTAL over every dispatching step (AM-8): resolution happens ONCE, here. */
|
|
274
|
+
families: Record<string, BridgeFamily>;
|
|
275
|
+
reservations: BoundaryReservation[];
|
|
276
|
+
budgetTotal: number;
|
|
277
|
+
wallCeilingMs: number;
|
|
278
|
+
achievableMax: number;
|
|
279
|
+
/** The wall twin of `achievableMax` (AM-14 arithmetic): `max(2 × the COMPUTED default ceiling,
|
|
280
|
+
* Σ boundary wall reservations)`. Plan-derived, so an operator override cannot inflate its own
|
|
281
|
+
* cap (Step-8 HIGH-5). */
|
|
282
|
+
achievableWallMs: number;
|
|
283
|
+
/** same-family QE steps proceeding under the LOUD waiver (each one owes a re-QE debt). */
|
|
284
|
+
qeWaivers: {
|
|
285
|
+
step: string;
|
|
286
|
+
}[];
|
|
287
|
+
}
|
|
288
|
+
export interface PreflightRefusal {
|
|
289
|
+
ok: false;
|
|
290
|
+
reason: WfRunReason;
|
|
291
|
+
detail: string;
|
|
292
|
+
}
|
|
293
|
+
/** The per-stage timeout the run uses: the operator's override, else the measured codex xhigh
|
|
294
|
+
* ceiling (the far end of the distribution — a shorter default would turn slow models into
|
|
295
|
+
* `dispatch-timeout` noise). */
|
|
296
|
+
export declare function stageTimeoutMs(inputs: RunnerInputs): number;
|
|
297
|
+
/**
|
|
298
|
+
* Refusals in a FIXED order, each one named:
|
|
299
|
+
* trace-emit-required → plan-model-unroutable → artifact-path-escapes-root →
|
|
300
|
+
* same-family-qe-refused (unless waived) → reservation-unsatisfiable.
|
|
301
|
+
*
|
|
302
|
+
* The order is not cosmetic. `trace-emit-required` comes first because a run with no trace plane is
|
|
303
|
+
* unverifiable — refusing it later would mean deciding routing for a run nobody could ever check.
|
|
304
|
+
* `reservation-unsatisfiable` comes last because it is the only refusal that depends on every
|
|
305
|
+
* preceding resolution, and it fires ONLY for an EXPLICIT operator override: the defaults are
|
|
306
|
+
* satisfiable by construction (AM-14), so a default-budget run that cannot fit a boundary pauses and
|
|
307
|
+
* resumes rather than refusing to start.
|
|
308
|
+
*
|
|
309
|
+
* `plan-invalid` never reaches here — the CLI parses and validates first and exits 2.
|
|
310
|
+
*/
|
|
311
|
+
export declare function preflight(inputs: RunnerInputs, deps: PreflightDeps): PreflightOk | PreflightRefusal;
|
|
312
|
+
export interface RunResumeDecision {
|
|
313
|
+
ok: boolean;
|
|
314
|
+
reason?: WfRunReason;
|
|
315
|
+
detail?: string;
|
|
316
|
+
/** Completed top-level boundaryIds. Built from checkpoint lines + artifact probes ONLY. */
|
|
317
|
+
cursor: Set<string>;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* The runner's checkpoint key: `checkpointInputHash` (the `fa-ckpt-2` line shape the timeline reader
|
|
321
|
+
* already merges), SALTED with the exec fingerprint exactly like the rendered script's
|
|
322
|
+
* `__ckptInputHash`. Salting with the fingerprint is what makes a semantics change invalidate every
|
|
323
|
+
* prior checkpoint instead of resuming into a plan that no longer means the same thing.
|
|
324
|
+
*/
|
|
325
|
+
export declare function runnerCheckpointHash(boundaryId: string, execFp: string, promptText: string, depResults: unknown[]): string;
|
|
326
|
+
/**
|
|
327
|
+
* Refusals in a FIXED order: foreign-run-refused → resume-already-completed → stale-input-refused →
|
|
328
|
+
* resume-model-unavailable. (`run-locked` is the CALLER's — it belongs to the lock, not to the
|
|
329
|
+
* decision.)
|
|
330
|
+
*
|
|
331
|
+
* Two properties this function exists to guarantee:
|
|
332
|
+
* • A STALE-INPUT mismatch never resumes, in ANY mode — there is no override, because the hash
|
|
333
|
+
* proves run-INPUT identity and an input change means the remaining work is not the work the
|
|
334
|
+
* checkpoints describe.
|
|
335
|
+
* • The cursor is built from CHECKPOINT LINES plus ARTIFACT PROBES and from nothing else.
|
|
336
|
+
* `completedSteps` in run-state is diagnostic: a crashed writer can leave it optimistic, and a
|
|
337
|
+
* resume that believed it would skip work that never happened.
|
|
338
|
+
*/
|
|
339
|
+
/**
|
|
340
|
+
* The OWNERSHIP + IDENTITY half of the resume decision — everything decidable WITHOUT dispatching
|
|
341
|
+
* anything (Step-8 re-QE NEW-B1).
|
|
342
|
+
*
|
|
343
|
+
* Round 1 hoisted the model probe above the whole decision so `resume-model-unavailable` could be
|
|
344
|
+
* produced at all. That was right, and it had a cost nobody priced: a foreign, completed or
|
|
345
|
+
* stale-input run PROBED first and therefore wrote a `wf-budget-1` probe row before being refused.
|
|
346
|
+
* A refused run must spend NOTHING — a budget row is a record of work, and there was none.
|
|
347
|
+
*
|
|
348
|
+
* So the decision is in two phases now. This one needs no dispatcher, runs first, and refuses on
|
|
349
|
+
* ownership or identity. The model-availability half stays in `decideRunResume`, after the probe.
|
|
350
|
+
* Returns null when there is nothing to refuse.
|
|
351
|
+
*/
|
|
352
|
+
export declare function decideResumeIdentity(opts: {
|
|
353
|
+
runState: WfRunState | null;
|
|
354
|
+
hasTrace: boolean;
|
|
355
|
+
identity: {
|
|
356
|
+
planDigest: string;
|
|
357
|
+
execFp: string;
|
|
358
|
+
argsHash: string;
|
|
359
|
+
};
|
|
360
|
+
}): {
|
|
361
|
+
reason: WfRunReason;
|
|
362
|
+
detail: string;
|
|
363
|
+
} | null;
|
|
364
|
+
/**
|
|
365
|
+
* Accumulate the resume args of the WHOLE pause chain (Step-8 re-QE NEW-B2).
|
|
366
|
+
*
|
|
367
|
+
* A pause is satisfied by an arg supplied in SOME leg, not necessarily the current one. Reading only
|
|
368
|
+
* `inputs.resumeArgs` meant leg 3 (supplying `go2`) forgot that leg 2 had supplied `go1`, so the run
|
|
369
|
+
* fell back to the already-satisfied first pause and could never advance past two pauses at all
|
|
370
|
+
* (MEASURED: P1 → P2 → P1 → P1). The satisfied set is run STATE, so it lives in run-state.
|
|
371
|
+
*
|
|
372
|
+
* FIRST WINS for a key that has already been consumed: the boundary it satisfied has already run,
|
|
373
|
+
* and its result is in the checkpoints and the trace. Re-supplying the SAME value is a harmless
|
|
374
|
+
* repeat; re-supplying a DIFFERENT one is refused rather than silently re-deciding history.
|
|
375
|
+
*/
|
|
376
|
+
export declare function accumulateResumeArgs(persisted: Record<string, string> | undefined, supplied: Record<string, string>): {
|
|
377
|
+
args: Record<string, string>;
|
|
378
|
+
conflict: {
|
|
379
|
+
key: string;
|
|
380
|
+
was: string;
|
|
381
|
+
now: string;
|
|
382
|
+
} | null;
|
|
383
|
+
};
|
|
384
|
+
export declare function decideRunResume(opts: {
|
|
385
|
+
runState: WfRunState | null;
|
|
386
|
+
hasTrace: boolean;
|
|
387
|
+
identity: {
|
|
388
|
+
planDigest: string;
|
|
389
|
+
execFp: string;
|
|
390
|
+
argsHash: string;
|
|
391
|
+
};
|
|
392
|
+
checkpointsText: string | null;
|
|
393
|
+
expectedHashFor: (boundaryId: string) => string;
|
|
394
|
+
probeArtifact: (rel: string) => boolean;
|
|
395
|
+
/** The declared writes of a boundary — its checkpoint is only resumable while they still EXIST.
|
|
396
|
+
* (Step-8 BLOCKER-2: this was missing, so `probeArtifact` was never called and a checkpointed
|
|
397
|
+
* file stage whose deliverable had been deleted was skipped on resume.) */
|
|
398
|
+
declaredWritesFor?: (boundaryId: string) => string[];
|
|
399
|
+
reprobedModels: Record<string, string | null>;
|
|
400
|
+
}): RunResumeDecision;
|
|
401
|
+
/**
|
|
402
|
+
* Torn-tail-tolerant JSONL reader (ADR-004 Confirmation-4b). A malformed LAST line is the signature
|
|
403
|
+
* of a process that died mid-append — it is skipped with a NAMED warning. A malformed INTERIOR line
|
|
404
|
+
* is not: something rewrote history, and silently continuing would hide it.
|
|
405
|
+
*/
|
|
406
|
+
export declare function readJsonlTolerant(text: string): {
|
|
407
|
+
rows: unknown[];
|
|
408
|
+
tornTail: boolean;
|
|
409
|
+
warnings: string[];
|
|
410
|
+
};
|
|
411
|
+
/** The machine-readable pause envelope (AM-16): a wrapper distinguishes pause from failure using
|
|
412
|
+
* ONLY stdout + the exit code, never prose. */
|
|
413
|
+
export declare function buildPauseEnvelope(runId: string, pauseState: string, reason: WfRunReason, planPath: string, resumeArg: string | null, where?: {
|
|
414
|
+
runStatePath?: string | undefined;
|
|
415
|
+
runDirArg?: string | null | undefined;
|
|
416
|
+
}): WfPauseEnvelope;
|
|
417
|
+
export interface RunStore {
|
|
418
|
+
runDirExists(): boolean;
|
|
419
|
+
hasTrace(): boolean;
|
|
420
|
+
/**
|
|
421
|
+
* The trace text written so far, or null when there is none.
|
|
422
|
+
*
|
|
423
|
+
* ADDED to the architecture's verbatim `RunStore` (flagged, not smuggled): a RESUMED leg must
|
|
424
|
+
* CONTINUE the seq counter, not restart it at 1. Without this the two legs of one run collide on
|
|
425
|
+
* seq 1..n and the CONCATENATED trace fails `seq-monotonic` and `join-coverage` — which is
|
|
426
|
+
* exactly the property ADR-004 Confirmation-3 requires to hold across a resume. Reading the file
|
|
427
|
+
* is the only way the pure half can know the high-water mark, and putting the mark in run-state
|
|
428
|
+
* instead would make a diagnostic field load-bearing (the W10 mistake).
|
|
429
|
+
*/
|
|
430
|
+
readTraceText(): string | null;
|
|
431
|
+
/** sha256 + non-empty line count of trace.jsonl AS IT NOW STANDS ON DISK, or null when absent.
|
|
432
|
+
* Impure by nature (hashing a file), so it lives behind the store seam like every other fs read. */
|
|
433
|
+
measureTrace(): {
|
|
434
|
+
sha256: string;
|
|
435
|
+
lines: number;
|
|
436
|
+
} | null;
|
|
437
|
+
readRunState(): WfRunState | null;
|
|
438
|
+
/** Atomic in the fs impl (temp + rename): a half-written state is a foreign run forever. */
|
|
439
|
+
writeRunState(s: WfRunState): void;
|
|
440
|
+
appendTraceLines(lines: string[]): void;
|
|
441
|
+
readCheckpointsText(): string | null;
|
|
442
|
+
appendCheckpointLine(line: string): void;
|
|
443
|
+
appendBudgetRow(row: WfBudgetRow): void;
|
|
444
|
+
appendLedgerLine(line: string): void;
|
|
445
|
+
probeArtifact(rel: string): boolean;
|
|
446
|
+
/**
|
|
447
|
+
* Does this declared artifact path STILL resolve inside the run root, RIGHT NOW? (re-QE R3-A /
|
|
448
|
+
* round-1 C4's "repeat containment immediately before filesystem access".) The fs impl applies
|
|
449
|
+
* the realpath + symlinked-ancestor walk; a symlink planted between preflight and dispatch is
|
|
450
|
+
* caught here for reads AND writes, not only inferred from a landed-barrier miss on writes.
|
|
451
|
+
*/
|
|
452
|
+
pathContainmentOk(rel: string): boolean;
|
|
453
|
+
/** Pre-dispatch content fingerprints of the declared writes (null = absent). */
|
|
454
|
+
snapshotWrites(rels: string[]): Record<string, string | null>;
|
|
455
|
+
writeReqeDebt(record: object): void;
|
|
456
|
+
}
|
|
457
|
+
export interface SchedulerDeps {
|
|
458
|
+
store: RunStore;
|
|
459
|
+
dispatchers: Record<BridgeFamily, Dispatcher>;
|
|
460
|
+
/** Short state transactions ONLY — never held across a dispatch. */
|
|
461
|
+
lock<T>(fn: () => T): T;
|
|
462
|
+
/** Injected ISO clock (determinism, NFR-2). */
|
|
463
|
+
now(): string;
|
|
464
|
+
monotonicMs(): number;
|
|
465
|
+
/**
|
|
466
|
+
* TEST SEAM (named, never a casual flag): disables the landed barrier so the F5 mutant can show
|
|
467
|
+
* the lying file-step passing. Default false; a run that sets it records `dispatcherOverride`.
|
|
468
|
+
*/
|
|
469
|
+
disableLandedBarrier?: boolean;
|
|
470
|
+
/** TEST SEAM: corrupts reservation arithmetic so the per-spawn guard fires inside a reserved
|
|
471
|
+
* region — the ONLY way to reach `budget-invariant-violated` without a real arithmetic bug. */
|
|
472
|
+
corruptReservations?: boolean;
|
|
473
|
+
/** Recorded loudly in run-state when the dispatchers came from the scripted test seam. */
|
|
474
|
+
dispatcherOverride?: boolean;
|
|
475
|
+
planPath?: string;
|
|
476
|
+
slug?: string;
|
|
477
|
+
/** The REAL path of this run's `run-state.json` (Step-8 HIGH-7 — the envelope may not guess it). */
|
|
478
|
+
runStatePath?: string;
|
|
479
|
+
/** The `--run-dir` value the caller used, so the resume command reproduces THIS run. */
|
|
480
|
+
runDirArg?: string | null;
|
|
481
|
+
/** The pid that actually HOLDS this run's owner claim, and when it took it (Step-8 HIGH-6).
|
|
482
|
+
* `run-state.owner.pid` used to be initialised to 0 — a durable record of a process that never
|
|
483
|
+
* existed, which no liveness check could ever mean anything against. */
|
|
484
|
+
ownerPid?: number;
|
|
485
|
+
ownerStartedMarker?: string;
|
|
486
|
+
}
|
|
487
|
+
export type RunOutcome = {
|
|
488
|
+
kind: 'completed';
|
|
489
|
+
exitCode: 0;
|
|
490
|
+
result: WfRunResult;
|
|
491
|
+
} | {
|
|
492
|
+
kind: 'failed';
|
|
493
|
+
exitCode: 1;
|
|
494
|
+
reason: WfRunReason;
|
|
495
|
+
detail: string;
|
|
496
|
+
result: WfRunResult;
|
|
497
|
+
} | {
|
|
498
|
+
kind: 'paused';
|
|
499
|
+
exitCode: 75;
|
|
500
|
+
envelope: WfPauseEnvelope;
|
|
501
|
+
};
|
|
502
|
+
/**
|
|
503
|
+
* THE interpreter loop.
|
|
504
|
+
*
|
|
505
|
+
* Per boundary, in plan order: RESERVE (and pause BEFORE the boundary if the worst case does not
|
|
506
|
+
* fit) → dispatch through the family `Dispatcher` with immediate retries over the closed classes →
|
|
507
|
+
* settle through the shared trace emitter → verify a file deliverable actually landed → checkpoint →
|
|
508
|
+
* append the budget row. A per-spawn guard fires only if the reservation arithmetic was WRONG, and
|
|
509
|
+
* that is a FAILURE (`budget-invariant-violated`), never a pause: a pause promises the remaining
|
|
510
|
+
* work fits after an extension, and a broken invariant promises nothing.
|
|
511
|
+
*/
|
|
512
|
+
export declare function runWorkflow(inputs: RunnerInputs, pre: PreflightOk, deps: SchedulerDeps): Promise<RunOutcome>;
|
|
513
|
+
//# sourceMappingURL=workflow-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-run.d.ts","sourceRoot":"","sources":["../src/workflow-run.ts"],"names":[],"mappings":"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"}
|