@intentius/chant 0.124.24 → 0.124.26
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/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +4 -2
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +4 -2
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +39 -4
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +21 -7
- package/dist/cli/mcp/workspace-tools.d.ts +3 -3
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.js +27 -4
- package/dist/effect-receipt.d.ts +13 -0
- package/dist/effect-receipt.d.ts.map +1 -1
- package/dist/effect-receipt.js +19 -0
- package/dist/gate-decision.d.ts +1 -1
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +1 -1
- package/dist/lexicon-module.d.ts +7 -1
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +7 -2
- package/dist/lifecycle/gate-audit.d.ts +7 -1
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +40 -3
- package/dist/lifecycle/gate-checkpoint.d.ts +78 -0
- package/dist/lifecycle/gate-checkpoint.d.ts.map +1 -0
- package/dist/lifecycle/gate-checkpoint.js +103 -0
- package/dist/lifecycle/gate-ledger.d.ts +41 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +18 -0
- package/dist/lifecycle/receipt-plan.d.ts.map +1 -1
- package/dist/lifecycle/receipt-plan.js +4 -2
- package/dist/lifecycle/run-ledger.d.ts +2 -0
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +2 -0
- package/dist/lint/rules/op/index.d.ts +6 -2
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.js +7 -3
- package/dist/lint/rules/op/ops016-gate-resume.d.ts +14 -0
- package/dist/lint/rules/op/ops016-gate-resume.d.ts.map +1 -0
- package/dist/lint/rules/op/ops016-gate-resume.js +31 -0
- package/dist/lint/rules/op/ops017-gate-alias.d.ts +30 -0
- package/dist/lint/rules/op/ops017-gate-alias.d.ts.map +1 -0
- package/dist/lint/rules/op/ops017-gate-alias.js +67 -0
- package/dist/op/activity-contract.d.ts +14 -0
- package/dist/op/activity-contract.d.ts.map +1 -1
- package/dist/op/activity-contract.js +16 -0
- package/dist/op/builders.d.ts +7 -0
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +13 -0
- package/dist/op/gate-alias.d.ts +57 -0
- package/dist/op/gate-alias.d.ts.map +1 -0
- package/dist/op/gate-alias.js +127 -0
- package/dist/op/gate-checkpoint.d.ts +123 -0
- package/dist/op/gate-checkpoint.d.ts.map +1 -0
- package/dist/op/gate-checkpoint.js +280 -0
- package/dist/op/gate.d.ts +54 -2
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +142 -1
- package/dist/op/index.d.ts +4 -1
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +2 -1
- package/dist/op/local-executor.d.ts +57 -2
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +200 -11
- package/dist/op/local-output.d.ts.map +1 -1
- package/dist/op/local-output.js +20 -2
- package/dist/op/op-ir.d.ts +4 -0
- package/dist/op/op-ir.d.ts.map +1 -1
- package/dist/op/op-ir.js +4 -0
- package/dist/op/receipt-store.d.ts +5 -0
- package/dist/op/receipt-store.d.ts.map +1 -1
- package/dist/op/receipt-store.js +4 -3
- package/dist/op/runtime.d.ts +15 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/runtimes/local.d.ts.map +1 -1
- package/dist/op/runtimes/local.js +5 -0
- package/dist/op/step-output-ref.d.ts +26 -18
- package/dist/op/step-output-ref.d.ts.map +1 -1
- package/dist/op/step-output-ref.js +86 -63
- package/dist/op/types.d.ts +31 -0
- package/dist/op/types.d.ts.map +1 -1
- package/dist/wave-runtime.mjs +223 -221
- package/dist/workspace/agent-cli.d.ts.map +1 -1
- package/dist/workspace/agent-cli.js +3 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +16 -1
- package/dist/workspace/conformance/writer.js +1 -1
- package/dist/workspace/decide.d.ts +51 -9
- package/dist/workspace/decide.d.ts.map +1 -1
- package/dist/workspace/decide.js +125 -14
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
- package/dist/workspace/lineage-upgrade.js +20 -11
- package/dist/workspace/point-answer.schema.json +16 -1
- package/dist/workspace/points-cli.d.ts +5 -3
- package/dist/workspace/points-cli.d.ts.map +1 -1
- package/dist/workspace/points-cli.js +16 -7
- package/dist/workspace/points-write.schema.json +39 -4
- package/dist/workspace/points.schema.json +42 -3
- package/dist/workspace/reason-codes.d.ts +2 -1
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +2 -1
- package/dist/workspace/records-cli.d.ts +12 -2
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-cli.js +27 -7
- package/dist/workspace/records-write.d.ts.map +1 -1
- package/dist/workspace/records-write.js +2 -3
- package/dist/workspace/records.d.ts +10 -4
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/records.js +16 -3
- package/dist/workspace/records.schema.json +2 -1
- package/dist/workspace/trust/gate-seal.d.ts +32 -1
- package/dist/workspace/trust/gate-seal.d.ts.map +1 -1
- package/dist/workspace/trust/gate-seal.js +41 -2
- package/dist/workspace/trust/seal.d.ts +1 -1
- package/dist/workspace/trust/seal.d.ts.map +1 -1
- package/dist/workspace/trust/seal.js +1 -1
- package/dist/workspace/trust/verify-cli.d.ts.map +1 -1
- package/dist/workspace/trust/verify-cli.js +2 -1
- package/dist/workspace/trust/verify.d.ts +22 -0
- package/dist/workspace/trust/verify.d.ts.map +1 -1
- package/dist/workspace/trust/verify.js +94 -14
- package/dist/workspace/write-scope.d.ts +3 -1
- package/dist/workspace/write-scope.d.ts.map +1 -1
- package/dist/workspace/write-scope.js +11 -4
- package/package.json +1 -1
- package/src/cli/commands/build.ts +9 -2
- package/src/cli/commands/lint.ts +4 -2
- package/src/cli/compiled-cli.e2e.test.ts +45 -1
- package/src/cli/handlers/approve.ts +46 -4
- package/src/cli/handlers/operator.test.ts +91 -0
- package/src/cli/main.test.ts +10 -0
- package/src/cli/main.ts +21 -7
- package/src/cli/mcp/workspace-tools.e2e.test.ts +1 -1
- package/src/cli/mcp/workspace-tools.ts +27 -4
- package/src/effect-receipt.ts +22 -0
- package/src/gate-decision.ts +2 -0
- package/src/lexicon-module.ts +9 -2
- package/src/lifecycle/gate-audit.ts +41 -4
- package/src/lifecycle/gate-checkpoint.test.ts +128 -0
- package/src/lifecycle/gate-checkpoint.ts +133 -0
- package/src/lifecycle/gate-ledger.ts +61 -0
- package/src/lifecycle/receipt-plan.test.ts +9 -0
- package/src/lifecycle/receipt-plan.ts +4 -1
- package/src/lifecycle/run-ledger.ts +4 -0
- package/src/lint/rules/op/index.ts +9 -3
- package/src/lint/rules/op/ops016-gate-resume.test.ts +53 -0
- package/src/lint/rules/op/ops016-gate-resume.ts +48 -0
- package/src/lint/rules/op/ops017-gate-alias.test.ts +85 -0
- package/src/lint/rules/op/ops017-gate-alias.ts +89 -0
- package/src/op/activity-contract.ts +22 -1
- package/src/op/builders.ts +21 -1
- package/src/op/effect-step.test.ts +95 -1
- package/src/op/gate-alias.e2e.test.ts +78 -0
- package/src/op/gate-alias.test.ts +350 -0
- package/src/op/gate-alias.ts +137 -0
- package/src/op/gate-checkpoint.test.ts +284 -0
- package/src/op/gate-checkpoint.ts +322 -0
- package/src/op/gate.ts +198 -4
- package/src/op/index.ts +4 -1
- package/src/op/local-executor.test.ts +65 -0
- package/src/op/local-executor.ts +248 -12
- package/src/op/local-output.ts +18 -2
- package/src/op/op-ir.test.ts +25 -0
- package/src/op/op-ir.ts +8 -0
- package/src/op/receipt-store.ts +13 -3
- package/src/op/runtime.ts +8 -0
- package/src/op/runtimes/local.ts +5 -0
- package/src/op/step-output-ref.test.ts +68 -24
- package/src/op/step-output-ref.ts +85 -65
- package/src/op/types.ts +32 -0
- package/src/workspace/agent-cli.ts +2 -0
- package/src/workspace/conformance/__writer_fixture__/answers/answer.schema.json +16 -1
- package/src/workspace/conformance/writer.ts +1 -1
- package/src/workspace/decide.test.ts +87 -3
- package/src/workspace/decide.ts +142 -17
- package/src/workspace/lineage-upgrade.test.ts +21 -0
- package/src/workspace/lineage-upgrade.ts +19 -11
- package/src/workspace/point-answer.schema.json +16 -1
- package/src/workspace/points-cli.ts +16 -8
- package/src/workspace/points-write.schema.json +39 -4
- package/src/workspace/points.schema.json +42 -3
- package/src/workspace/reason-codes.ts +2 -1
- package/src/workspace/record-assets.test.ts +14 -0
- package/src/workspace/records-cli.ts +28 -7
- package/src/workspace/records-write-commands.e2e.test.ts +32 -0
- package/src/workspace/records-write.ts +2 -3
- package/src/workspace/records.schema.json +2 -1
- package/src/workspace/records.ts +17 -4
- package/src/workspace/trust/gate-seal.test.ts +29 -2
- package/src/workspace/trust/gate-seal.ts +46 -2
- package/src/workspace/trust/seal.ts +1 -1
- package/src/workspace/trust/trust.test.ts +105 -0
- package/src/workspace/trust/verify-cli.ts +2 -1
- package/src/workspace/trust/verify.ts +106 -13
- package/src/workspace/write-scope.test.ts +18 -0
- package/src/workspace/write-scope.ts +16 -5
package/dist/op/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/op/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/op/index.ts"],"names":[],"mappings":"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"}
|
package/dist/op/index.js
CHANGED
|
@@ -33,7 +33,8 @@ export { createLocalOpRuntime } from "./runtimes/local.js";
|
|
|
33
33
|
export { runStateOf } from "./runtime.js";
|
|
34
34
|
export { buildOpIR, serializeOpIR, opConfigFromIR, OP_IR_FORMAT_VERSION } from "./op-ir.js";
|
|
35
35
|
export { renderHuman, renderJson } from "./local-output.js";
|
|
36
|
-
export { activityContract, isActivityContract, collectActivityContracts, validateActivitySteps, KNOWN_ACTIVITY_PROFILES, pathExistsInSchema, } from "./activity-contract.js";
|
|
36
|
+
export { activityContract, isActivityContract, collectActivityContracts, validateActivitySteps, KNOWN_ACTIVITY_PROFILES, pathExistsInSchema, readsSecretOutput, } from "./activity-contract.js";
|
|
37
|
+
export { validateGateResume, resumeGatesOf, decideGateResume } from "./gate-checkpoint.js";
|
|
37
38
|
export { stepOutput, isStepOutputRef, collectStepOutputRefs, validateStepOutputRefs, validateStepOutputRefScope, makeOutProxy } from "./step-output-ref.js";
|
|
38
39
|
export { eq, neq, gt, gte, lt, lte, truthy, falsy, allOf, anyOf, evaluatePredicate, isWellFormedPredicate, predicateReferencesField, run, report, when, duplicateRuleIds, DEFAULT_FLAP_THRESHOLD, } from "./converge-rule.js";
|
|
39
40
|
export { discoverConvergeOps, runOperatorRound, runOperatorForever, formatRoundLine, formatSignalLine, DEFAULT_OPERATOR_INTERVAL_MS, acquireStewardLease, acquireStewardTurn, STEWARD_TURN_WAIT_MS, createBesideState, waitForBesideRuns, stopBesideRuns, } from "./operator.js";
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
* ledger, so `chant approve <op> <gate>` followed by `chant run <op>` is the
|
|
15
15
|
* whole loop.
|
|
16
16
|
*
|
|
17
|
+
* A gate with `resume: true` (#3947) also stores a checkpoint of the step
|
|
18
|
+
* outputs the steps after it read, and the next run after the approval starts
|
|
19
|
+
* at the gate instead of the first phase. It re-runs the step that produced
|
|
20
|
+
* the gate's plan first, and starts at the first phase after all when the
|
|
21
|
+
* plan moved. See `./gate-checkpoint.ts`.
|
|
22
|
+
*
|
|
17
23
|
* The executor is deliberately decoupled from any lexicon: activity
|
|
18
24
|
* implementations and profiles are passed in (loaded dynamically by the CLI),
|
|
19
25
|
* so core never statically depends on one.
|
|
@@ -26,6 +32,7 @@ import type { GateAnswerRef, PendingGateRecord } from "../lifecycle/gate-ledger.
|
|
|
26
32
|
import { type WaitingPoint } from "./steward-points.js";
|
|
27
33
|
import type { OpRunRecord } from "./runtime.js";
|
|
28
34
|
import { type WorkLeaseRunResult } from "./work-lease-run.js";
|
|
35
|
+
import type { ActivityContract } from "./activity-contract.js";
|
|
29
36
|
export { parseDuration } from "./duration.js";
|
|
30
37
|
export interface StepRecord {
|
|
31
38
|
phase: string;
|
|
@@ -59,12 +66,22 @@ export interface StepRecord {
|
|
|
59
66
|
resolvedBy: string;
|
|
60
67
|
timestamp: string;
|
|
61
68
|
url?: string;
|
|
62
|
-
/**
|
|
63
|
-
|
|
69
|
+
/**
|
|
70
|
+
* On a gate with an `approval` block (#2508): whether a quorum or a policy permit passed it. `"point"` on a gate that asks a decision point (#3170).
|
|
71
|
+
* `"alias"` (#3949) when an approval recorded under one of the gate's aliases counted, on any gate.
|
|
72
|
+
*/
|
|
73
|
+
via?: "quorum" | "policy" | "point" | "alias";
|
|
64
74
|
/** On a gate with a quorum (#2508): every approver who counted toward it. */
|
|
65
75
|
approvers?: string[];
|
|
66
76
|
/** On a gate that asks a decision point (#3170): the answer record that passed it, which the gate ledger's resolution cites too. */
|
|
67
77
|
answer?: GateAnswerRef;
|
|
78
|
+
/** With `via: "alias"` (#3949): the approvals carried from an alias, each by the op, gate and time it was recorded under. */
|
|
79
|
+
carriedFrom?: Array<{
|
|
80
|
+
op: string;
|
|
81
|
+
gate: string;
|
|
82
|
+
resolvedBy: string;
|
|
83
|
+
timestamp: string;
|
|
84
|
+
}>;
|
|
68
85
|
};
|
|
69
86
|
/**
|
|
70
87
|
* Why a step declined to proceed on something that is not a failure
|
|
@@ -89,6 +106,15 @@ export interface StepRecord {
|
|
|
89
106
|
op: string;
|
|
90
107
|
gate: string;
|
|
91
108
|
};
|
|
109
|
+
/**
|
|
110
|
+
* Set on a step this run did not execute because it resumed at a gate
|
|
111
|
+
* (#3947): the run whose checkpoint supplied the step's output, and the
|
|
112
|
+
* gate. The step's status is `skipped`.
|
|
113
|
+
*/
|
|
114
|
+
resumed?: {
|
|
115
|
+
run: string;
|
|
116
|
+
gate: string;
|
|
117
|
+
};
|
|
92
118
|
}
|
|
93
119
|
export interface OpRunResult {
|
|
94
120
|
op: string;
|
|
@@ -134,6 +160,22 @@ export interface OpRunResult {
|
|
|
134
160
|
* was released and with which outcome, or why it was lost.
|
|
135
161
|
*/
|
|
136
162
|
workLease?: WorkLeaseRunResult;
|
|
163
|
+
/**
|
|
164
|
+
* Set when this run resumed at an approved gate (#3947): the gate, the run
|
|
165
|
+
* whose checkpoint it carried on from, and that checkpoint's digest.
|
|
166
|
+
*/
|
|
167
|
+
resumed?: {
|
|
168
|
+
gate: string;
|
|
169
|
+
run: string;
|
|
170
|
+
checkpoint: string;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Why a gate that resumes did not (#3947), one line each: an approved gate
|
|
174
|
+
* whose checkpoint failed a check, so the run started at the first phase,
|
|
175
|
+
* or a gate this run stopped at that stored no checkpoint. Absent when
|
|
176
|
+
* there is nothing to say.
|
|
177
|
+
*/
|
|
178
|
+
resumeNotes?: string[];
|
|
137
179
|
}
|
|
138
180
|
/**
|
|
139
181
|
* Thrown on terminal Op failure; carries the partial run result for rendering.
|
|
@@ -242,6 +284,19 @@ export interface RunOpOptions {
|
|
|
242
284
|
stepOutput?: (line: string) => void;
|
|
243
285
|
/** How long a step may be quiet before the still-running line. Default 60s; `0` turns it off. */
|
|
244
286
|
stepHeartbeatMs?: number;
|
|
287
|
+
/**
|
|
288
|
+
* The commit the checkout is at, for an Op with a gate that resumes
|
|
289
|
+
* (#3947). A checkpoint records it and a resumed run must match it.
|
|
290
|
+
* Default: `git rev-parse HEAD` in `cwd`, and none when that fails, so no
|
|
291
|
+
* gate resumes.
|
|
292
|
+
*/
|
|
293
|
+
commit?: string;
|
|
294
|
+
/**
|
|
295
|
+
* The activity contracts the run knows (#3947). A gate that resumes stores
|
|
296
|
+
* no output a contract marks secret, and doesn't resume when a later step
|
|
297
|
+
* needs one. The local runtime passes the configured lexicons' contracts.
|
|
298
|
+
*/
|
|
299
|
+
contracts?: ReadonlyMap<string, ActivityContract>;
|
|
245
300
|
}
|
|
246
301
|
/**
|
|
247
302
|
* Execute an Op locally.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-executor.d.ts","sourceRoot":"","sources":["../../src/op/local-executor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"local-executor.d.ts","sourceRoot":"","sources":["../../src/op/local-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAmB,YAAY,EAAwC,MAAM,SAAS,CAAC;AAC7G,OAAO,EAAmB,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQ7F,OAAO,EAAuF,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAIlI,OAAO,EAA8C,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAInG,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAsE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAO/H,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3C,4GAA4G;IAC5G,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb;;;WAGG;QACH,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;QAC9C,6EAA6E;QAC7E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,oIAAoI;QACpI,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,6HAA6H;QAC7H,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC1F,CAAC;IACF;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC;;;;OAIG;IACH,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAC5C,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB;;;;OAIG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAID;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAKnB,MAAM,EAAE,WAAW;IAJrC,gFAAgF;IAChF,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhC,YACkB,MAAM,EAAE,WAAW,EACnC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAO9B;CACF;AA6ID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAa7E;AAiyBD,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,iGAAiG;IACjG,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iGAAiG;IACjG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACnD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACzC,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CA4CtB"}
|
|
@@ -14,18 +14,27 @@
|
|
|
14
14
|
* ledger, so `chant approve <op> <gate>` followed by `chant run <op>` is the
|
|
15
15
|
* whole loop.
|
|
16
16
|
*
|
|
17
|
+
* A gate with `resume: true` (#3947) also stores a checkpoint of the step
|
|
18
|
+
* outputs the steps after it read, and the next run after the approval starts
|
|
19
|
+
* at the gate instead of the first phase. It re-runs the step that produced
|
|
20
|
+
* the gate's plan first, and starts at the first phase after all when the
|
|
21
|
+
* plan moved. See `./gate-checkpoint.ts`.
|
|
22
|
+
*
|
|
17
23
|
* The executor is deliberately decoupled from any lexicon: activity
|
|
18
24
|
* implementations and profiles are passed in (loaded dynamically by the CLI),
|
|
19
25
|
* so core never statically depends on one.
|
|
20
26
|
*/
|
|
21
27
|
import { outcomeAttributesOf } from "./types.js";
|
|
22
28
|
import { resolveActivity } from "./activity-registry.js";
|
|
23
|
-
import { isStepOutputRef } from "./step-output-ref.js";
|
|
29
|
+
import { collectStepOutputRefs, isStepOutputRef } from "./step-output-ref.js";
|
|
30
|
+
import { canonicalJson } from "../effect-receipt.js";
|
|
31
|
+
import { contentDigest } from "../content-digest.js";
|
|
24
32
|
import { parseDuration } from "./duration.js";
|
|
25
33
|
import { stepLabel, withRunConsole, withStepConsole } from "./step-console.js";
|
|
26
34
|
import { stepTimeoutProblem } from "./activity-profiles.js";
|
|
27
35
|
import { describeGateMismatch, evaluateGate, gateIsSealed, gitGateLedgerPort } from "./gate.js";
|
|
28
36
|
import { gateName } from "./gate-name.js";
|
|
37
|
+
import { resolveGateAliases } from "./gate-alias.js";
|
|
29
38
|
import { gatePointOf } from "./gate-point.js";
|
|
30
39
|
import { evaluatePointGate, workspaceGatePointAsker } from "./gate-point-run.js";
|
|
31
40
|
import { GATE_PLAN_CONTEXT_KEY, gatePlanSummaryOfResult } from "./gate-plan-context.js";
|
|
@@ -39,6 +48,9 @@ import { RunWorkLease, LEASE_LOST, workLeaseProblems, workLeaseNeedsRunItem } fr
|
|
|
39
48
|
import { WORK_LEASE_STEP_ID } from "./types.js";
|
|
40
49
|
import { LiveRun, currentLiveRun, withLiveRun } from "./run-live.js";
|
|
41
50
|
import { runEnvOf } from "../lifecycle/run-ledger.js";
|
|
51
|
+
import { getHeadCommit } from "../lifecycle/git.js";
|
|
52
|
+
import { describePlanDigest, samePlanDigest } from "../lifecycle/plan-digest.js";
|
|
53
|
+
import { buildGateCheckpoint, decideGateResume, resumeGatesOf } from "./gate-checkpoint.js";
|
|
42
54
|
export { parseDuration } from "./duration.js";
|
|
43
55
|
// ── Errors ────────────────────────────────────────────────────────────────��─
|
|
44
56
|
/**
|
|
@@ -150,6 +162,45 @@ function resolveStepOutputRefs(value, resultsById) {
|
|
|
150
162
|
}
|
|
151
163
|
return value;
|
|
152
164
|
}
|
|
165
|
+
/** The activity steps a step runs: itself, or an effect's nested ones. */
|
|
166
|
+
function activitiesOf(step) {
|
|
167
|
+
return isEffect(step) ? step.steps.filter(isActivity) : [step];
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* The first step a compensation step references that has not completed in
|
|
171
|
+
* this run (#3948 decision A6), or `undefined` when every one did. A failure
|
|
172
|
+
* can stop the run before the step that a rollback reads, and calling the
|
|
173
|
+
* rollback with `undefined` in place of that value would undo the wrong
|
|
174
|
+
* thing, or nothing, while reporting `ok`.
|
|
175
|
+
*/
|
|
176
|
+
function unfinishedSource(step, resultsById) {
|
|
177
|
+
for (const activity of activitiesOf(step)) {
|
|
178
|
+
const missing = collectStepOutputRefs(activity.args).find((ref) => !resultsById.has(ref.step));
|
|
179
|
+
if (missing)
|
|
180
|
+
return missing.step;
|
|
181
|
+
}
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
/** The skipped record of a compensation step whose source did not complete. */
|
|
185
|
+
function unfinishedSourceRecord(step, phaseName, source) {
|
|
186
|
+
const record = isEffect(step) ? skippedRecord(phaseName, `effect:${step.receipt.name}`) : skippedRecord(phaseName, step.fn, step.args);
|
|
187
|
+
return { ...record, refusal: `step "${source}" did not complete in this run, so this compensation step, which reads its output, was skipped` };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* The digest of the step outputs an effect's nested steps read (#3948), or
|
|
191
|
+
* `undefined` when they read none. The receipt store folds it into the
|
|
192
|
+
* expectation, so a changed value re-fires the effect instead of the receipt
|
|
193
|
+
* matching on the declared inputs alone. An existence receipt says only that
|
|
194
|
+
* the effect ran once, so it takes none.
|
|
195
|
+
*/
|
|
196
|
+
function effectOutputsDigest(step, resultsById) {
|
|
197
|
+
if (step.receipt.flavor === "existence")
|
|
198
|
+
return undefined;
|
|
199
|
+
const read = activitiesOf(step).flatMap((a) => collectStepOutputRefs(a.args).map((ref) => ({ step: ref.step, path: ref.path ?? "", value: resolveStepOutputRefs(ref, resultsById) })));
|
|
200
|
+
if (read.length === 0)
|
|
201
|
+
return undefined;
|
|
202
|
+
return contentDigest(canonicalJson(read));
|
|
203
|
+
}
|
|
153
204
|
/**
|
|
154
205
|
* Find the first `policyGate` step anywhere in the Op (phases + `onFailure`,
|
|
155
206
|
* including steps nested inside effect steps), if any.
|
|
@@ -312,13 +363,14 @@ async function runStep(step, phaseName, activities, profiles, resultsById, signa
|
|
|
312
363
|
/** The step data the executor synthesizes to read a receipt through the store
|
|
313
364
|
* activities (`receiptRead`/`receiptWrite` — provided by the receipt row's
|
|
314
365
|
* lexicon, #1835, or a mock store in tests via `receiptActivities`). */
|
|
315
|
-
function receiptReadStep(step) {
|
|
366
|
+
function receiptReadStep(step, outputs) {
|
|
316
367
|
return {
|
|
317
368
|
kind: "activity",
|
|
318
369
|
fn: "receiptRead",
|
|
319
370
|
args: {
|
|
320
371
|
receipt: step.receipt,
|
|
321
372
|
...(step.expectation !== undefined ? { expectation: step.expectation } : {}),
|
|
373
|
+
...(outputs !== undefined ? { outputs } : {}),
|
|
322
374
|
},
|
|
323
375
|
profile: "fastIdempotent",
|
|
324
376
|
outcomeAttribute: { name: "EffectApplied", from: "applied" },
|
|
@@ -448,6 +500,24 @@ async function runGateStep(step, phaseName, gates, resultsById = new Map()) {
|
|
|
448
500
|
const resolvedPlan = resolveStepOutputRefs(step.plan, resultsById);
|
|
449
501
|
const planDigest = typeof resolvedPlan === "string" && resolvedPlan !== "" ? resolvedPlan : undefined;
|
|
450
502
|
const approval = resolveGateApproval(step, resultsById);
|
|
503
|
+
// #3947: a gate that resumes stores the outputs the steps after it read.
|
|
504
|
+
const resumeAt = gates.resume?.gates.get(step);
|
|
505
|
+
let checkpoint;
|
|
506
|
+
let blocked;
|
|
507
|
+
if (resumeAt && gates.resume) {
|
|
508
|
+
const built = buildGateCheckpoint(gates.resume.config, resumeAt, {
|
|
509
|
+
runId: gates.runId ?? "",
|
|
510
|
+
commit: gates.resume.commit,
|
|
511
|
+
...(gates.env !== undefined ? { environment: gates.env } : {}),
|
|
512
|
+
...(planDigest !== undefined ? { planDigest } : {}),
|
|
513
|
+
outputs: resultsById,
|
|
514
|
+
...(gates.resume.contracts ? { contracts: gates.resume.contracts } : {}),
|
|
515
|
+
});
|
|
516
|
+
if ("blocked" in built)
|
|
517
|
+
blocked = built.blocked;
|
|
518
|
+
else
|
|
519
|
+
checkpoint = built.checkpoint;
|
|
520
|
+
}
|
|
451
521
|
let check;
|
|
452
522
|
try {
|
|
453
523
|
check = await evaluateGate(gates.port, {
|
|
@@ -459,6 +529,8 @@ async function runGateStep(step, phaseName, gates, resultsById = new Map()) {
|
|
|
459
529
|
...(planDigest !== undefined ? { planDigest } : {}),
|
|
460
530
|
...(approval ? { approval } : {}),
|
|
461
531
|
...(gates.now ? { now: gates.now } : {}),
|
|
532
|
+
...(checkpoint ? { checkpoint } : {}),
|
|
533
|
+
...(step.aliases?.length ? { aliases: resolveGateAliases(step, gates.op) } : {}),
|
|
462
534
|
});
|
|
463
535
|
}
|
|
464
536
|
catch (err) {
|
|
@@ -490,6 +562,9 @@ async function runGateStep(step, phaseName, gates, resultsById = new Map()) {
|
|
|
490
562
|
...(resolution.url ? { url: resolution.url } : {}),
|
|
491
563
|
...(check.via ? { via: check.via } : {}),
|
|
492
564
|
...(check.approvals ? { approvers: check.approvals.map((r) => r.resolvedBy) } : {}),
|
|
565
|
+
...(check.carried?.length
|
|
566
|
+
? { carriedFrom: check.carried.map((r) => ({ op: r.carriedFrom.op, gate: r.carriedFrom.gate, resolvedBy: r.resolvedBy, timestamp: r.carriedFrom.timestamp })) }
|
|
567
|
+
: {}),
|
|
493
568
|
};
|
|
494
569
|
// #2522: a later step reads this gate's approval from the run context
|
|
495
570
|
// rather than re-tallying the ledger, so it sees the decision this run made.
|
|
@@ -505,6 +580,8 @@ async function runGateStep(step, phaseName, gates, resultsById = new Map()) {
|
|
|
505
580
|
},
|
|
506
581
|
};
|
|
507
582
|
}
|
|
583
|
+
if (blocked)
|
|
584
|
+
gates.resume?.note(`gate "${gateName(step)}" stored no checkpoint, so it won't resume: ${blocked}`);
|
|
508
585
|
const refusal = check.mismatch
|
|
509
586
|
? { refusal: describeGateMismatch(gates.op, gateName(step), check.mismatch, await gateIsSealed(gateName(step))) }
|
|
510
587
|
: {};
|
|
@@ -584,7 +661,16 @@ async function runPointGateStep(step, phaseName, gates, resultsById) {
|
|
|
584
661
|
*/
|
|
585
662
|
async function runEffectStep(step, phaseName, activities, profiles, resultsById, gates, signal) {
|
|
586
663
|
const records = [];
|
|
587
|
-
|
|
664
|
+
let outputs;
|
|
665
|
+
try {
|
|
666
|
+
outputs = effectOutputsDigest(step, resultsById);
|
|
667
|
+
}
|
|
668
|
+
catch (err) {
|
|
669
|
+
// A resolved value JSON cannot hold (canonicalJson refuses it) would be a wrong expectation.
|
|
670
|
+
pushRecord(records, gates, { phase: phaseName, fn: `effect:${step.receipt.name}`, args: {}, status: "fail", durationMs: 0, error: errMessage(err) });
|
|
671
|
+
return { records, failed: true };
|
|
672
|
+
}
|
|
673
|
+
const read = await runStep(receiptReadStep(step, outputs), phaseName, activities, profiles, resultsById, signal);
|
|
588
674
|
pushRecord(records, gates, read.record);
|
|
589
675
|
if (read.record.status === "fail")
|
|
590
676
|
return { records, failed: true };
|
|
@@ -675,8 +761,10 @@ async function runEffectStep(step, phaseName, activities, profiles, resultsById,
|
|
|
675
761
|
/**
|
|
676
762
|
* Run a phase. Throws `PhaseFailure` (with the records so far) if any step
|
|
677
763
|
* fails, or `GateStop` if a `gate` step in it is still pending approval.
|
|
764
|
+
* `from` starts a sequential phase at that step, for a run that resumes at a
|
|
765
|
+
* gate in it (#3947); the steps before it are the caller's to record.
|
|
678
766
|
*/
|
|
679
|
-
async function runPhase(phase, activities, profiles, resultsById, gates, signal) {
|
|
767
|
+
async function runPhase(phase, activities, profiles, resultsById, gates, signal, from = 0) {
|
|
680
768
|
if (phase.parallel) {
|
|
681
769
|
const eff = phase.steps.find(isEffect);
|
|
682
770
|
if (eff) {
|
|
@@ -719,7 +807,10 @@ async function runPhase(phase, activities, profiles, resultsById, gates, signal)
|
|
|
719
807
|
}
|
|
720
808
|
}
|
|
721
809
|
const steps = phase.steps.filter(isActivity);
|
|
722
|
-
const settled = await Promise.all(steps.map((s) =>
|
|
810
|
+
const settled = await Promise.all(steps.map((s) => {
|
|
811
|
+
const source = gates.compensating ? unfinishedSource(s, resultsById) : undefined;
|
|
812
|
+
return source ? { record: unfinishedSourceRecord(s, phase.name, source) } : runStep(s, phase.name, activities, profiles, resultsById, signal);
|
|
813
|
+
}));
|
|
723
814
|
const ran = settled.map((r) => r.record);
|
|
724
815
|
for (const r of ran)
|
|
725
816
|
gates.onRecord?.(r);
|
|
@@ -753,7 +844,7 @@ async function runPhase(phase, activities, profiles, resultsById, gates, signal)
|
|
|
753
844
|
}
|
|
754
845
|
}
|
|
755
846
|
};
|
|
756
|
-
for (let i =
|
|
847
|
+
for (let i = from; i < steps.length; i++) {
|
|
757
848
|
const step = steps[i];
|
|
758
849
|
// The work lease (#2748): claimed here when it is due, and checked before
|
|
759
850
|
// every step, so no step starts once the lease is lost.
|
|
@@ -783,6 +874,11 @@ async function runPhase(phase, activities, profiles, resultsById, gates, signal)
|
|
|
783
874
|
}
|
|
784
875
|
continue;
|
|
785
876
|
}
|
|
877
|
+
const source = gates.compensating ? unfinishedSource(step, resultsById) : undefined;
|
|
878
|
+
if (source) {
|
|
879
|
+
pushRecord(records, gates, unfinishedSourceRecord(step, phase.name, source));
|
|
880
|
+
continue;
|
|
881
|
+
}
|
|
786
882
|
if (isEffect(step)) {
|
|
787
883
|
const { records: effRecords, failed, pending, pushed, pushWarning, point } = await runEffectStep(step, phase.name, activities, profiles, resultsById, gates, signal);
|
|
788
884
|
records.push(...effRecords); // already emitted by runEffectStep
|
|
@@ -961,12 +1057,12 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
961
1057
|
const start = Date.now();
|
|
962
1058
|
// Each phase's wall-clock time, for the run record and the in-flight one.
|
|
963
1059
|
const phaseDurations = {};
|
|
964
|
-
const timedPhase = async (phase, ctx, phaseSignal) => {
|
|
1060
|
+
const timedPhase = async (phase, ctx, phaseSignal, from = 0) => {
|
|
965
1061
|
const live = currentLiveRun();
|
|
966
1062
|
const t0 = Date.now();
|
|
967
1063
|
live?.phaseStarted(phase.name);
|
|
968
1064
|
try {
|
|
969
|
-
const ran = await runPhase(phase, activities, profiles, resultsById, ctx, phaseSignal);
|
|
1065
|
+
const ran = await runPhase(phase, activities, profiles, resultsById, ctx, phaseSignal, from);
|
|
970
1066
|
live?.phaseEnded(phase.name, phaseVerdict(ran), Date.now() - t0);
|
|
971
1067
|
return ran;
|
|
972
1068
|
}
|
|
@@ -990,6 +1086,7 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
990
1086
|
...(gate ? { gate: { name: gate.gate, since: gate.timestamp, ...(gate.op !== config.name ? { op: gate.op } : {}) } } : {}),
|
|
991
1087
|
...(point ? { point: { ...point, since: ended } } : {}),
|
|
992
1088
|
...(options.steward ? { steward: options.steward } : {}),
|
|
1089
|
+
...(resumed ? { resumed } : {}),
|
|
993
1090
|
phaseDurations,
|
|
994
1091
|
});
|
|
995
1092
|
const record = { version: 1, ...input, id: runId };
|
|
@@ -1007,11 +1104,98 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
1007
1104
|
// steps finish, so a later step's step-output references resolve to real
|
|
1008
1105
|
// values before reaching an activity function — see `runStep`.
|
|
1009
1106
|
const resultsById = new Map();
|
|
1107
|
+
// #3947: the gates that resume. Each stores a checkpoint when the run stops
|
|
1108
|
+
// at it, and the run may start at one of them.
|
|
1109
|
+
let resumed;
|
|
1110
|
+
const resumeNotes = [];
|
|
1111
|
+
const resumeGates = resumeGatesOf(config);
|
|
1112
|
+
if (resumeGates.length > 0) {
|
|
1113
|
+
gates.resume = {
|
|
1114
|
+
config,
|
|
1115
|
+
gates: new Map(resumeGates.map((g) => [g.step, g])),
|
|
1116
|
+
commit: options.commit ?? (await getHeadCommit(options.cwd ? { cwd: options.cwd } : undefined).catch(() => undefined)),
|
|
1117
|
+
...(options.contracts ? { contracts: options.contracts } : {}),
|
|
1118
|
+
note: (line) => resumeNotes.push(line),
|
|
1119
|
+
};
|
|
1120
|
+
}
|
|
1121
|
+
const resumeFields = () => ({
|
|
1122
|
+
...(resumed ? { resumed } : {}),
|
|
1123
|
+
...(resumeNotes.length > 0 ? { resumeNotes: [...resumeNotes] } : {}),
|
|
1124
|
+
});
|
|
1125
|
+
/**
|
|
1126
|
+
* Resume at the gate `decision` names (#3947): seed the checkpoint's
|
|
1127
|
+
* outputs, record every step before the gate as resumed, and run the step
|
|
1128
|
+
* that produced the gate's plan again. Returns where the phases pick up, or
|
|
1129
|
+
* undefined when the plan moved and the run starts at the first phase.
|
|
1130
|
+
*/
|
|
1131
|
+
const resumeAt = async (decision) => {
|
|
1132
|
+
const { gate, checkpoint } = decision;
|
|
1133
|
+
for (const [id, value] of Object.entries(checkpoint.outputs))
|
|
1134
|
+
resultsById.set(id, value);
|
|
1135
|
+
const marker = { run: checkpoint.runId, gate: gate.name };
|
|
1136
|
+
const prefix = [];
|
|
1137
|
+
for (const [pi, phase] of config.phases.entries()) {
|
|
1138
|
+
if (pi > gate.phaseIndex)
|
|
1139
|
+
break;
|
|
1140
|
+
const steps = pi < gate.phaseIndex ? phase.steps : phase.parallel ? [] : phase.steps.slice(0, gate.stepIndex);
|
|
1141
|
+
for (const [si, step] of steps.entries()) {
|
|
1142
|
+
if (gate.planStep && pi === gate.planStep.phaseIndex && si === gate.planStep.stepIndex) {
|
|
1143
|
+
const ran = await runStep(gate.planStep.step, phase.name, activities, profiles, resultsById, stepSignal);
|
|
1144
|
+
prefix.push(ran.record);
|
|
1145
|
+
if (ran.record.status === "fail" || ran.pending || ran.record.point) {
|
|
1146
|
+
for (const r of prefix)
|
|
1147
|
+
gates.onRecord?.(r);
|
|
1148
|
+
if (ran.pending)
|
|
1149
|
+
throw new GateStop(prefix, ran.pending, phase.name);
|
|
1150
|
+
if (ran.record.point)
|
|
1151
|
+
throw new PointStop(prefix, ran.record.point, phase.name);
|
|
1152
|
+
throw new PhaseFailure(prefix);
|
|
1153
|
+
}
|
|
1154
|
+
continue;
|
|
1155
|
+
}
|
|
1156
|
+
const skipped = isEffect(step)
|
|
1157
|
+
? skippedRecord(phase.name, `effect:${step.receipt.name}`)
|
|
1158
|
+
: isGate(step)
|
|
1159
|
+
? skippedRecord(phase.name, gateFn(step))
|
|
1160
|
+
: skippedRecord(phase.name, step.fn, step.args);
|
|
1161
|
+
prefix.push({ ...skipped, resumed: marker });
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
// The plan the run would approve now against the one approved: a moved
|
|
1165
|
+
// plan is live drift since the approval, and starts the run over.
|
|
1166
|
+
const resolved = resolveStepOutputRefs(gate.step.plan, resultsById);
|
|
1167
|
+
const planned = typeof resolved === "string" && resolved !== "" ? resolved : undefined;
|
|
1168
|
+
if (!samePlanDigest(planned, decision.pending.planDigest)) {
|
|
1169
|
+
resultsById.clear();
|
|
1170
|
+
resumeNotes.push(`gate "${gate.name}" is approved, and the run starts at the first phase: the plan moved since the approval ` +
|
|
1171
|
+
`(approved ${describePlanDigest(decision.pending.planDigest)}, planned ${planned ?? "(none)"})`);
|
|
1172
|
+
return undefined;
|
|
1173
|
+
}
|
|
1174
|
+
records.push(...prefix);
|
|
1175
|
+
for (const r of prefix)
|
|
1176
|
+
gates.onRecord?.(r);
|
|
1177
|
+
resumed = { gate: gate.name, run: checkpoint.runId, checkpoint: decision.digest };
|
|
1178
|
+
return { phaseIndex: gate.phaseIndex, stepIndex: config.phases[gate.phaseIndex].parallel ? 0 : gate.stepIndex };
|
|
1179
|
+
};
|
|
1010
1180
|
try {
|
|
1011
|
-
|
|
1181
|
+
let from;
|
|
1182
|
+
if (gates.resume) {
|
|
1183
|
+
const decision = await decideGateResume(gates.port, config, {
|
|
1184
|
+
now: options.now ?? new Date().toISOString(),
|
|
1185
|
+
commit: gates.resume.commit,
|
|
1186
|
+
...(options.env !== undefined ? { environment: options.env } : {}),
|
|
1187
|
+
});
|
|
1188
|
+
if (decision.kind === "refused") {
|
|
1189
|
+
resumeNotes.push(`gate "${decision.gate}" is approved, and the run starts at the first phase: ${decision.reason}`);
|
|
1190
|
+
}
|
|
1191
|
+
else if (decision.kind === "resume") {
|
|
1192
|
+
from = await resumeAt(decision);
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
for (let pi = from?.phaseIndex ?? 0; pi < config.phases.length; pi++) {
|
|
1012
1196
|
if (signal?.aborted)
|
|
1013
1197
|
throw new PhaseFailure([]);
|
|
1014
|
-
records.push(...(await timedPhase(
|
|
1198
|
+
records.push(...(await timedPhase(config.phases[pi], gates, stepSignal, pi === from?.phaseIndex ? from.stepIndex : 0)));
|
|
1015
1199
|
}
|
|
1016
1200
|
// The last renewal before the run is recorded (#2748): a run whose lease
|
|
1017
1201
|
// was lost is never recorded as done.
|
|
@@ -1033,6 +1217,7 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
1033
1217
|
startedAt,
|
|
1034
1218
|
record,
|
|
1035
1219
|
...(await finishWork("ok")),
|
|
1220
|
+
...resumeFields(),
|
|
1036
1221
|
};
|
|
1037
1222
|
}
|
|
1038
1223
|
// An open decision point ends the run the way a pending gate does (#2749):
|
|
@@ -1050,6 +1235,7 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
1050
1235
|
point: err.question,
|
|
1051
1236
|
record,
|
|
1052
1237
|
...(await finishWork("waiting")),
|
|
1238
|
+
...resumeFields(),
|
|
1053
1239
|
};
|
|
1054
1240
|
}
|
|
1055
1241
|
// A pending gate ends the run where it stands: no later phase, and no
|
|
@@ -1069,6 +1255,7 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
1069
1255
|
...(err.pushWarning ? { gatePushWarning: err.pushWarning } : {}),
|
|
1070
1256
|
record,
|
|
1071
1257
|
...(await finishWork("gated")),
|
|
1258
|
+
...resumeFields(),
|
|
1072
1259
|
};
|
|
1073
1260
|
}
|
|
1074
1261
|
if (err instanceof WorkStop) {
|
|
@@ -1109,7 +1296,7 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
1109
1296
|
// Compensation: run onFailure phases in reverse order (best-effort). Skipped
|
|
1110
1297
|
// on abort (Ctrl-C) — the user asked to stop, so don't start new work.
|
|
1111
1298
|
// It runs whatever the work lease did, so it takes no work boundary.
|
|
1112
|
-
const compensation = { ...gates, work: undefined };
|
|
1299
|
+
const compensation = { ...gates, work: undefined, compensating: true };
|
|
1113
1300
|
if (!signal?.aborted) {
|
|
1114
1301
|
for (const phase of [...(config.onFailure ?? [])].reverse()) {
|
|
1115
1302
|
try {
|
|
@@ -1143,6 +1330,7 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
1143
1330
|
startedAt,
|
|
1144
1331
|
record: failed,
|
|
1145
1332
|
...(await finishWork("fail")),
|
|
1333
|
+
...resumeFields(),
|
|
1146
1334
|
}, { cause: err });
|
|
1147
1335
|
}
|
|
1148
1336
|
const record = await settle(records, "ok");
|
|
@@ -1154,6 +1342,7 @@ async function runOpInTurn(config, activities, profiles, signal, options, run) {
|
|
|
1154
1342
|
startedAt,
|
|
1155
1343
|
record,
|
|
1156
1344
|
...(await finishWork("ok")),
|
|
1345
|
+
...resumeFields(),
|
|
1157
1346
|
};
|
|
1158
1347
|
}
|
|
1159
1348
|
/** A finished phase's verdict, as the run ledger folds it: `fail`, `skipped` when every step was, else `ok`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-output.d.ts","sourceRoot":"","sources":["../../src/op/local-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIhE,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAerC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,MAAe,EAAE,MAAM,UAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"local-output.d.ts","sourceRoot":"","sources":["../../src/op/local-output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIhE,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAerC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,MAAe,EAAE,MAAM,UAAQ,GAAG,IAAI,CAyG7F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,MAAe,EAAE,MAAM,UAAQ,GAAG,IAAI,CAW5F;AAED,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAExC,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
package/dist/op/local-output.js
CHANGED
|
@@ -20,6 +20,10 @@ function formatDuration(ms) {
|
|
|
20
20
|
* stays clean for piping (the `--json` renderer owns stdout).
|
|
21
21
|
*/
|
|
22
22
|
export function renderHuman(result, write = stderr, sealed = false) {
|
|
23
|
+
// #3947: a run that resumed at a gate says where it picked up.
|
|
24
|
+
if (result.resumed) {
|
|
25
|
+
write(`[resume] at gate "${result.resumed.gate}", from run ${result.resumed.run}'s checkpoint ${result.resumed.checkpoint}`);
|
|
26
|
+
}
|
|
23
27
|
let currentPhase;
|
|
24
28
|
for (const record of result.records) {
|
|
25
29
|
if (record.phase !== currentPhase) {
|
|
@@ -28,7 +32,10 @@ export function renderHuman(result, write = stderr, sealed = false) {
|
|
|
28
32
|
}
|
|
29
33
|
const mark = record.status === "ok" ? "✓" : record.status === "fail" ? "✗" : "•";
|
|
30
34
|
const call = `${record.fn}(${formatArgs(record.args ?? {})})`;
|
|
31
|
-
if (record.status === "skipped") {
|
|
35
|
+
if (record.status === "skipped" && record.resumed) {
|
|
36
|
+
write(` ${mark} ${call} from run ${record.resumed.run}`);
|
|
37
|
+
}
|
|
38
|
+
else if (record.status === "skipped") {
|
|
32
39
|
write(` ${mark} ${call} skipped`);
|
|
33
40
|
}
|
|
34
41
|
else {
|
|
@@ -40,6 +47,10 @@ export function renderHuman(result, write = stderr, sealed = false) {
|
|
|
40
47
|
if (record.approval) {
|
|
41
48
|
write(` [approved] ${record.approval.resolvedBy} at ${record.approval.timestamp}` +
|
|
42
49
|
(record.approval.url ? ` (${record.approval.url})` : ""));
|
|
50
|
+
// #3949: an approval carried from one of the gate's aliases names where it came from.
|
|
51
|
+
for (const c of record.approval.carriedFrom ?? []) {
|
|
52
|
+
write(` [carried] ${c.resolvedBy}'s approval of ${c.op}/${c.gate} at ${c.timestamp}`);
|
|
53
|
+
}
|
|
43
54
|
}
|
|
44
55
|
if (record.refusal) {
|
|
45
56
|
write(` [refused] ${record.refusal}`);
|
|
@@ -64,6 +75,8 @@ export function renderHuman(result, write = stderr, sealed = false) {
|
|
|
64
75
|
else if (work?.refusal) {
|
|
65
76
|
write(`[work] nothing claimed: ${work.refusal}`);
|
|
66
77
|
}
|
|
78
|
+
for (const note of result.resumeNotes ?? [])
|
|
79
|
+
write(`[resume] ${note}`);
|
|
67
80
|
const total = `${(result.totalMs / 1000).toFixed(1)}s`;
|
|
68
81
|
if (result.status === "ok") {
|
|
69
82
|
write(`Op "${result.op}" completed in ${total}`);
|
|
@@ -99,6 +112,9 @@ export function renderHuman(result, write = stderr, sealed = false) {
|
|
|
99
112
|
if (gate.url)
|
|
100
113
|
write(` approve at: ${gate.url}`);
|
|
101
114
|
write(` expires : ${gate.expiresAt}`);
|
|
115
|
+
// #3947: the approval also lets the next run start here.
|
|
116
|
+
if (gate.checkpointDigest)
|
|
117
|
+
write(` resume : once approved, the next run starts at this gate (checkpoint ${gate.checkpointDigest})`);
|
|
102
118
|
// #2310: this run's own append reached only the local chant/lifecycle
|
|
103
119
|
// branch, not the remote. The pending fact is still correct — the gate is
|
|
104
120
|
// still right to stand — but an operator working from a clone of the
|
|
@@ -132,7 +148,9 @@ export function renderJson(result, write = stdout, sealed = false) {
|
|
|
132
148
|
const push = result.gatePushed === false
|
|
133
149
|
? { pushed: false, pushWarning: result.gatePushWarning ?? "the pending fact was recorded locally only" }
|
|
134
150
|
: {};
|
|
135
|
-
|
|
151
|
+
// #3947: why a gate that resumes did not, beside the record like `push`.
|
|
152
|
+
const notes = result.resumeNotes ? { resumeNotes: result.resumeNotes } : {};
|
|
153
|
+
write(JSON.stringify({ ...result.record, ...approve, ...push, ...notes }));
|
|
136
154
|
}
|
|
137
155
|
/** The command a person answers an open decision point with (#2749). */
|
|
138
156
|
export function pointAnswerCommand(id) {
|
package/dist/op/op-ir.d.ts
CHANGED
|
@@ -133,6 +133,10 @@ export interface OpIRGateStep {
|
|
|
133
133
|
approval?: GateStep["approval"];
|
|
134
134
|
/** The decision point the gate asks (#3170), carried as authored. Absent on a gate that `chant approve` passes. */
|
|
135
135
|
point?: GateStep["point"];
|
|
136
|
+
/** The gate resumes once approved (#3947). Absent on a gate that starts its run again at the first phase. */
|
|
137
|
+
resume?: true;
|
|
138
|
+
/** The gate's old names (#3949), carried as authored. Absent on a gate that has none. */
|
|
139
|
+
aliases?: GateStep["aliases"];
|
|
136
140
|
}
|
|
137
141
|
export interface OpIREffectStep {
|
|
138
142
|
kind: "effect";
|