@tacuchi/agent-workflow-cli 22.4.1 → 23.0.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/README.md +2 -2
- package/dist/adapters/git-cli.js +59 -17
- package/dist/adapters/git-cli.js.map +1 -1
- package/dist/adapters/node-file-system.js +55 -1
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/artifacts-service.js +2 -2
- package/dist/application/artifacts-service.js.map +1 -1
- package/dist/application/capability/dispatcher.js +2 -2
- package/dist/application/capability/dispatcher.js.map +1 -1
- package/dist/application/capability/installed-inventory.js +2 -2
- package/dist/application/capability/installed-inventory.js.map +1 -1
- package/dist/application/capability/readiness.js +1 -1
- package/dist/application/capability/readiness.js.map +1 -1
- package/dist/application/check-branch-service.js +2 -2
- package/dist/application/check-branch-service.js.map +1 -1
- package/dist/application/checkpoint/files-touched.js +271 -0
- package/dist/application/checkpoint/files-touched.js.map +1 -0
- package/dist/application/checkpoint/markdown.js +61 -8
- package/dist/application/checkpoint/markdown.js.map +1 -1
- package/dist/application/checkpoint/state-reader.js +8 -2
- package/dist/application/checkpoint/state-reader.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +16 -5
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/claims-ledger.js +330 -0
- package/dist/application/claims-ledger.js.map +1 -0
- package/dist/application/claims-recovery.js +338 -0
- package/dist/application/claims-recovery.js.map +1 -0
- package/dist/application/dev-only-services.js +154 -44
- package/dist/application/dev-only-services.js.map +1 -1
- package/dist/application/elicitation-server.js +382 -0
- package/dist/application/elicitation-server.js.map +1 -0
- package/dist/application/elicitation-stdio.js +48 -0
- package/dist/application/elicitation-stdio.js.map +1 -0
- package/dist/application/flow/advance.js +86 -5
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/checkout-observation.js +152 -0
- package/dist/application/flow/checkout-observation.js.map +1 -0
- package/dist/application/flow/flow-service.js +72 -13
- package/dist/application/flow/flow-service.js.map +1 -1
- package/dist/application/flow/internal-actions.js +460 -1
- package/dist/application/flow/internal-actions.js.map +1 -1
- package/dist/application/flow/internal-drive.js +22 -9
- package/dist/application/flow/internal-drive.js.map +1 -1
- package/dist/application/flow/prove.js +205 -0
- package/dist/application/flow/prove.js.map +1 -0
- package/dist/application/flow/run-journey.js +15 -0
- package/dist/application/flow/run-journey.js.map +1 -0
- package/dist/application/flow/run-projection.js +15 -3
- package/dist/application/flow/run-projection.js.map +1 -1
- package/dist/application/flow/run-state-service.js +19 -4
- package/dist/application/flow/run-state-service.js.map +1 -1
- package/dist/application/flow/submit.js +250 -72
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/generate-launch-service.js +4 -4
- package/dist/application/generate-launch-service.js.map +1 -1
- package/dist/application/git-flow-service.js +9 -0
- package/dist/application/git-flow-service.js.map +1 -1
- package/dist/application/local-proposal.js +9 -0
- package/dist/application/local-proposal.js.map +1 -1
- package/dist/application/lock-service.js +6 -3
- package/dist/application/lock-service.js.map +1 -1
- package/dist/application/mcp-doctor-service.js.map +1 -1
- package/dist/application/mcp-host-reader.js +30 -13
- package/dist/application/mcp-host-reader.js.map +1 -1
- package/dist/application/mcp-host-writer.js +136 -112
- package/dist/application/mcp-host-writer.js.map +1 -1
- package/dist/application/mcp-remove-service.js +7 -3
- package/dist/application/mcp-remove-service.js.map +1 -1
- package/dist/application/mcp-scope-common.js +1 -3
- package/dist/application/mcp-scope-common.js.map +1 -1
- package/dist/application/mcp-setup-service.js +7 -3
- package/dist/application/mcp-setup-service.js.map +1 -1
- package/dist/application/merge-state-service.js +10 -16
- package/dist/application/merge-state-service.js.map +1 -1
- package/dist/application/multiroot/claude.js +34 -15
- package/dist/application/multiroot/claude.js.map +1 -1
- package/dist/application/multiroot/codex.js +9 -5
- package/dist/application/multiroot/codex.js.map +1 -1
- package/dist/application/multiroot-service.js +20 -11
- package/dist/application/multiroot-service.js.map +1 -1
- package/dist/application/parsers/project-block.js +25 -2
- package/dist/application/parsers/project-block.js.map +1 -1
- package/dist/application/paths-service.js +30 -31
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/plan-exec-batch-service.js +549 -0
- package/dist/application/plan-exec-batch-service.js.map +1 -0
- package/dist/application/plan-exec-decision-service.js +273 -0
- package/dist/application/plan-exec-decision-service.js.map +1 -0
- package/dist/application/project-md-service.js +2 -2
- package/dist/application/project-md-service.js.map +1 -1
- package/dist/application/project-md-upsert-service.js +4 -4
- package/dist/application/project-md-upsert-service.js.map +1 -1
- package/dist/application/project-tab-data.js +12 -7
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/release-data-service.js +2 -2
- package/dist/application/release-data-service.js.map +1 -1
- package/dist/application/resume-service.js +32 -11
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/retirement/apply.js +84 -0
- package/dist/application/retirement/apply.js.map +1 -1
- package/dist/application/retirement/attribution.js +31 -1
- package/dist/application/retirement/attribution.js.map +1 -1
- package/dist/application/retirement/graph.js +19 -1
- package/dist/application/retirement/graph.js.map +1 -1
- package/dist/application/retirement/journal.js +11 -0
- package/dist/application/retirement/journal.js.map +1 -1
- package/dist/application/retirement/prepare.js +89 -3
- package/dist/application/retirement/prepare.js.map +1 -1
- package/dist/application/retirement/preview.js +16 -0
- package/dist/application/retirement/preview.js.map +1 -1
- package/dist/application/retirement/resolve.js +65 -0
- package/dist/application/retirement/resolve.js.map +1 -1
- package/dist/application/self/host-states.js +2 -0
- package/dist/application/self/host-states.js.map +1 -1
- package/dist/application/self/install-skill.js +53 -19
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/mcp-config.js +28 -30
- package/dist/application/self/mcp-config.js.map +1 -1
- package/dist/application/self/mcp-offer.js +96 -0
- package/dist/application/self/mcp-offer.js.map +1 -0
- package/dist/application/self/mcp-via-state.js +59 -0
- package/dist/application/self/mcp-via-state.js.map +1 -0
- package/dist/application/self/uninstall-skill.js +18 -3
- package/dist/application/self/uninstall-skill.js.map +1 -1
- package/dist/application/self/uninstall.js +37 -8
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/session-close-service.js +24 -1
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/application/session-create-service.js +7 -0
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/session-resume-service.js +2 -2
- package/dist/application/session-resume-service.js.map +1 -1
- package/dist/application/sessions-service.js +2 -4
- package/dist/application/sessions-service.js.map +1 -1
- package/dist/application/skills-resolver-service.js +4 -4
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/source-boundary-policy.js +18 -7
- package/dist/application/source-boundary-policy.js.map +1 -1
- package/dist/application/source-remove-service.js +12 -1
- package/dist/application/source-remove-service.js.map +1 -1
- package/dist/application/sources-service.js +2 -2
- package/dist/application/sources-service.js.map +1 -1
- package/dist/application/status-service.js +4 -0
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/visibility-doctor-service.js +1 -1
- package/dist/application/visibility-doctor-service.js.map +1 -1
- package/dist/application/workline-index-service.js +182 -27
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +85 -265
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/application/workspace-materialization-service.js +300 -0
- package/dist/application/workspace-materialization-service.js.map +1 -0
- package/dist/application/worktree-service.js +32 -3
- package/dist/application/worktree-service.js.map +1 -1
- package/dist/cli/commands/capability.js +4 -7
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/claims.js +72 -0
- package/dist/cli/commands/claims.js.map +1 -0
- package/dist/cli/commands/dev-only.js +73 -25
- package/dist/cli/commands/dev-only.js.map +1 -1
- package/dist/cli/commands/flow.js +145 -42
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/mcp.js +124 -35
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/multiroot.js +40 -7
- package/dist/cli/commands/multiroot.js.map +1 -1
- package/dist/cli/commands/resume.js +9 -3
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/retirement.js +9 -0
- package/dist/cli/commands/retirement.js.map +1 -1
- package/dist/cli/commands/session-create.js +1 -1
- package/dist/cli/commands/session-create.js.map +1 -1
- package/dist/cli/commands/skills.js +1 -1
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/status.js +72 -24
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/workspace-init.js +5 -5
- package/dist/cli/commands/workspace-init.js.map +1 -1
- package/dist/cli/help-groups.js +5 -0
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/main.js +112 -39
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/parser.js +3 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/tui/app.js +3 -2
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/host-admin-section.js +46 -2
- package/dist/cli/tui/components/host-admin-section.js.map +1 -1
- package/dist/cli/tui/components/workspace-init-form.js +7 -7
- package/dist/cli/tui/components/workspace-init-form.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +2 -2
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/config-tab.js +4 -3
- package/dist/cli/tui/tabs/config-tab.js.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab-helpers.js +1 -1
- package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +18 -21
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/cli/tui/workspace-root.js +13 -0
- package/dist/cli/tui/workspace-root.js.map +1 -0
- package/dist/domain/capability/protocol.js +2 -2
- package/dist/domain/capability/protocol.js.map +1 -1
- package/dist/domain/degradation-notice.js +60 -0
- package/dist/domain/degradation-notice.js.map +1 -0
- package/dist/domain/elicitation.js +152 -0
- package/dist/domain/elicitation.js.map +1 -0
- package/dist/domain/flow/answer.js +173 -42
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +180 -127
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/directive.js +47 -1
- package/dist/domain/flow/directive.js.map +1 -1
- package/dist/domain/flow/rules.js +7 -4
- package/dist/domain/flow/rules.js.map +1 -1
- package/dist/domain/flow/run-state.js +636 -31
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/harnesses.js +17 -1
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/mcp-entry.js +36 -14
- package/dist/domain/mcp-entry.js.map +1 -1
- package/dist/domain/retirement/proposal.js +1 -0
- package/dist/domain/retirement/proposal.js.map +1 -1
- package/dist/domain/structured-choice-stamp.js +32 -4
- package/dist/domain/structured-choice-stamp.js.map +1 -1
- package/dist/domain/workline-mcp-entry.js +37 -0
- package/dist/domain/workline-mcp-entry.js.map +1 -0
- package/dist/runtime/namespace-resolver.js +104 -18
- package/dist/runtime/namespace-resolver.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/README.md +2 -2
- package/skills/w/SKILL.md +9 -10
- package/skills/w/artifacts/README.md +1 -1
- package/skills/w/commands/README.md +3 -3
- package/skills/w/commands/persist.md +3 -1
- package/skills/w/commands/resume.md +1 -1
- package/skills/w/commands/spec-new.md +2 -2
- package/skills/w/commands/status.md +1 -1
- package/skills/w/commands/workspace-init.md +9 -10
- package/skills/w/context/MANIFEST.json +1 -4
- package/skills/w/harness/HARNESS.md +1 -1
- package/skills/w/loops/quick-loop/LOOP.md +1 -1
- package/skills/w/modules/PROMPT-CONTINUITY.md +1 -1
- package/skills/w/modules/WORKSPACE-SCAFFOLD.md +17 -20
- package/skills/w/schemas/capability-descriptor.schema.json +1 -1
|
@@ -29,13 +29,14 @@
|
|
|
29
29
|
* saying so. `attempted` with a non-idempotent one stops at its boundary with the
|
|
30
30
|
* row's own recovery: applying it twice is the one failure nobody can undo.
|
|
31
31
|
*/
|
|
32
|
-
import { internalActionOf,
|
|
32
|
+
import { internalActionOf, } from "../../domain/flow/authority.js";
|
|
33
33
|
import { stepOf } from "../../domain/flow/directive.js";
|
|
34
34
|
import { executionVerdict } from "../../domain/flow/execution-result.js";
|
|
35
|
-
import { applyTransition, restatesLastEvent, withActionAttempted, withAttempt, withBoundary, withEvent, withPendingAction, withProposal, } from "../../domain/flow/run-state.js";
|
|
35
|
+
import { applyTransition, currentBatchIteration, restatesLastEvent, withActionAttempted, withAttempt, withBoundary, withEvent, withPendingAction, withPlanExecBatchStageForTransition, withProposal, } from "../../domain/flow/run-state.js";
|
|
36
36
|
import { semanticDigest } from "../semantic-operation/protocol.js";
|
|
37
37
|
import { sessionNumericCode } from "../session-resolver.js";
|
|
38
38
|
import { advanceFlowRun, directiveFor, effectsOfTransition, failedExecutionAttempt, resolveBoundary, } from "./advance.js";
|
|
39
|
+
import { journeyForRun } from "./run-journey.js";
|
|
39
40
|
import { applyUnderLock } from "./run-state-service.js";
|
|
40
41
|
/**
|
|
41
42
|
* How many internal actions one invocation may chain.
|
|
@@ -94,6 +95,7 @@ async function run(executor, pending, state) {
|
|
|
94
95
|
code: sessionNumericCode(state.session) ?? state.session,
|
|
95
96
|
scope: state.scope,
|
|
96
97
|
proposal: state.proposal,
|
|
98
|
+
state_digest: state.digest,
|
|
97
99
|
};
|
|
98
100
|
try {
|
|
99
101
|
return await executor(pending.plan, coordinates);
|
|
@@ -116,7 +118,7 @@ async function run(executor, pending, state) {
|
|
|
116
118
|
* same conclusion as the one that left it there.
|
|
117
119
|
*/
|
|
118
120
|
function nextInternal(state) {
|
|
119
|
-
const journey =
|
|
121
|
+
const journey = journeyForRun(state);
|
|
120
122
|
const resolved = resolveBoundary(state, journey);
|
|
121
123
|
if (resolved.kind !== "execution" || resolved.stopped === null || resolved.action === null) {
|
|
122
124
|
return null;
|
|
@@ -157,8 +159,13 @@ async function settle(fs, location, current, pending, outcome) {
|
|
|
157
159
|
const applied = await applyUnderLock(fs, location, (live) => {
|
|
158
160
|
if (live === null)
|
|
159
161
|
return { ok: false, failure: RUN_VANISHED };
|
|
160
|
-
return accept(live, pending, outcome);
|
|
161
|
-
},
|
|
162
|
+
return accept(live, pending, outcome, current.state);
|
|
163
|
+
},
|
|
164
|
+
// A stateful internal action (the v10 batch publisher) writes its own
|
|
165
|
+
// pre-intent and final trace while the driver is outside the run lock. Settle
|
|
166
|
+
// against that returned state, not the obsolete "attempted" copy; any other
|
|
167
|
+
// interleaving still fails the same CAS.
|
|
168
|
+
{ expectDigest: outcome.state?.digest ?? current.state.digest });
|
|
162
169
|
if (!applied.ok)
|
|
163
170
|
return applied;
|
|
164
171
|
return {
|
|
@@ -167,8 +174,12 @@ async function settle(fs, location, current, pending, outcome) {
|
|
|
167
174
|
advanced: applied.value.advanced,
|
|
168
175
|
};
|
|
169
176
|
}
|
|
170
|
-
function accept(state, pending, outcome) {
|
|
171
|
-
const journey =
|
|
177
|
+
function accept(state, pending, outcome, actionState) {
|
|
178
|
+
const journey = journeyForRun(state);
|
|
179
|
+
// A stateful batch close returns the NEXT iteration's loop cursor. Its event
|
|
180
|
+
// still belongs to the batch whose action just ran, so identity comes from the
|
|
181
|
+
// marked pre-action state rather than the post-publication state we settle.
|
|
182
|
+
const batchIteration = currentBatchIteration(actionState, pending.decision.id);
|
|
172
183
|
// What the row declares is the CEILING; what a sealed proposal really does is
|
|
173
184
|
// the effect. Judging the publication against the ceiling would refuse a
|
|
174
185
|
// proposal that only creates files on a row that also permits overwriting.
|
|
@@ -179,6 +190,7 @@ function accept(state, pending, outcome) {
|
|
|
179
190
|
const failure = {
|
|
180
191
|
kind: "failed",
|
|
181
192
|
transition: pending.decision.id,
|
|
193
|
+
...(batchIteration === null ? {} : { batch_iteration: batchIteration }),
|
|
182
194
|
operation: pending.plan.operation,
|
|
183
195
|
code: verdict.detail.code,
|
|
184
196
|
// What the operation really found, not the contract's restatement of it:
|
|
@@ -199,7 +211,7 @@ function accept(state, pending, outcome) {
|
|
|
199
211
|
// The try the cap counts: the action RAN and came back refused. Charged here
|
|
200
212
|
// rather than on the way into the next advance, so somebody who fixes the
|
|
201
213
|
// cause gets the run that would have worked instead of a degradation.
|
|
202
|
-
const failed = withAttempt(traced, failedExecutionAttempt(
|
|
214
|
+
const failed = withAttempt(traced, failedExecutionAttempt(actionState, pending.decision, {
|
|
203
215
|
code: verdict.detail.code,
|
|
204
216
|
message: outcome.summary,
|
|
205
217
|
}));
|
|
@@ -233,13 +245,14 @@ function accept(state, pending, outcome) {
|
|
|
233
245
|
let next = withEvent(state, {
|
|
234
246
|
kind: "executed",
|
|
235
247
|
transition: pending.decision.id,
|
|
248
|
+
...(batchIteration === null ? {} : { batch_iteration: batchIteration }),
|
|
236
249
|
operation: pending.plan.operation,
|
|
237
250
|
summary: outcome.summary,
|
|
238
251
|
output_digest: outputDigest,
|
|
239
252
|
effects: [...outcome.effects],
|
|
240
253
|
evidence: [...pending.action.evidence],
|
|
241
254
|
});
|
|
242
|
-
next = applyTransition(next, pending.decision.id, declared);
|
|
255
|
+
next = withPlanExecBatchStageForTransition(applyTransition(next, pending.decision.id, declared), pending.decision.id);
|
|
243
256
|
// A published proposal is spent. Leaving it seated would keep a preview of
|
|
244
257
|
// bytes that are already on disk standing in front of the next boundary, and the
|
|
245
258
|
// grant given over its seal would outlive the thing it was given for.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-drive.js","sourceRoot":"","sources":["../../../src/application/flow/internal-drive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,EAIL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"internal-drive.js","sourceRoot":"","sources":["../../../src/application/flow/internal-drive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,EAIL,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAGL,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,mCAAmC,EACnC,YAAY,GACb,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAA8C,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEpG;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAI9B;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAkB,EAClB,QAAyB,EACzB,QAA4C,EAC5C,IAAe;IAEf,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,kBAAkB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QAErC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAC9B,OAAO,GAAG,MAAM,CAAC;QAEjB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,OAAO,CAAC;QAChC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD;;;;;;;;GAQG;AACH,KAAK,UAAU,GAAG,CAChB,QAAgC,EAChC,OAAwB,EACxB,KAAmB;IAEnB,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO;QACxD,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,YAAY,EAAE,KAAK,CAAC,MAAM;KAC3B,CAAC;IACF,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,iCAAiC,GAAG,GAAG;YACzE,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,KAAmB;IACvC,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,+EAA+E;IAC/E,gFAAgF;IAChF,gBAAgB;IAChB,IAAI,KAAK,CAAC,cAAc,EAAE,SAAS,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACzF,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,qFAAqF;AACrF,KAAK,UAAU,aAAa,CAC1B,EAAkB,EAClB,QAAyB,EACzB,OAAkB;IAElB,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,EAAE,EACF,QAAQ,EACR,CAAC,IAAI,EAAE,EAAE;QACP,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC/D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC,EACD,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CACvC,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AACjE,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,MAAM,CACnB,EAAkB,EAClB,QAAyB,EACzB,OAAkB,EAClB,OAAwB,EACxB,OAA8B;IAI9B,MAAM,OAAO,GAAG,MAAM,cAAc,CAClC,EAAE,EACF,QAAQ,EACR,CAAC,IAAI,EAAE,EAAE;QACP,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC/D,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,sEAAsE;IACtE,8EAA8E;IAC9E,4EAA4E;IAC5E,yCAAyC;IACzC,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAChE,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;QACvE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CACb,KAAmB,EACnB,OAAwB,EACxB,OAA8B,EAC9B,WAAyB;IAEzB,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,6EAA6E;IAC7E,+EAA+E;IAC/E,4EAA4E;IAC5E,MAAM,cAAc,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/E,8EAA8E;IAC9E,yEAAyE;IACzE,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvF,MAAM,YAAY,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,GAA8C;YACzD,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC/B,GAAG,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;YACvE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;YACjC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,yEAAyE;YACzE,sEAAsE;YACtE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;YAC/B,0EAA0E;YAC1E,0EAA0E;YAC1E,sEAAsE;YACtE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;SAC9B,CAAC;QACF,4EAA4E;QAC5E,+EAA+E;QAC/E,gFAAgF;QAChF,4EAA4E;QAC5E,uEAAuE;QACvE,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrF,6EAA6E;QAC7E,0EAA0E;QAC1E,sEAAsE;QACtE,MAAM,MAAM,GAAG,WAAW,CACxB,MAAM,EACN,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE;YACpD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CACH,CAAC;QACF,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC/C,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpF,UAAU,EAAE,GAAG,OAAO,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;SAC5D,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5D,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,MAAM;YACb,KAAK,EAAE;gBACL,SAAS,EAAE;oBACT,GAAG,KAAK,CAAC,SAAS;oBAClB,sEAAsE;oBACtE,uEAAuE;oBACvE,uEAAuE;oBACvE,wDAAwD;oBACxD,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI;wBACvB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;wBACzB,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;wBACjD,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;qBAC9B;iBACF;gBACD,QAAQ,EAAE,KAAK;aAChB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE;QAC1B,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC/B,GAAG,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;QACvE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;QACjC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,YAAY;QAC3B,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;KACvC,CAAC,CAAC;IACH,IAAI,GAAG,mCAAmC,CACxC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EACpD,OAAO,CAAC,QAAQ,CAAC,EAAE,CACpB,CAAC;IACF,2EAA2E;IAC3E,iFAAiF;IACjF,sEAAsE;IACtE,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,kBAAkB;QAAE,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnF,yEAAyE;IACzE,gFAAgF;IAChF,4EAA4E;IAC5E,8CAA8C;IAC9C,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IAClE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;KACzD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,QAAQ,CAAC,OAAwB,EAAE,OAA8B;IACxE,OAAO;QACL,+EAA+E;QAC/E,6EAA6E;QAC7E,+EAA+E;QAC/E,gFAAgF;QAChF,OAAO,EAAE,WAAW;QACpB,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;QACrC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE;QAClE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAChD,EAAE;YACF,MAAM,EAAE,OAAO,CAAC,EAAE;YAClB,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO;SACtD,CAAC,CAAC;QACH,OAAO,EAAE;YACP,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAC7B,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAC9B,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;SAC9B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAsB;IACtC,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,0EAA0E;IACnF,MAAM,EAAE,iFAAiF;CAC1F,CAAC"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aw flow prove` — produce the boundary's `CheckoutProof` and check it BEFORE the
|
|
3
|
+
* submit that would charge for getting it wrong.
|
|
4
|
+
*
|
|
5
|
+
* It exists because the only previously known way to obtain a valid proof was to
|
|
6
|
+
* import the CLI's own modules and re-derive the digest formula by hand. That
|
|
7
|
+
* recipe works, but it makes the formula a de facto public API and it is not
|
|
8
|
+
* discoverable: every executor paid the same tuition, and the tuition is a
|
|
9
|
+
* boundary's attempts.
|
|
10
|
+
*
|
|
11
|
+
* Two properties are load-bearing:
|
|
12
|
+
*
|
|
13
|
+
* - **It writes nothing.** The digest expires on every write to the tree being
|
|
14
|
+
* proved, so a capture that touched that tree would invalidate its own result.
|
|
15
|
+
* - **It prevalidates with the SAME policy `submit` applies**, not a copy of its
|
|
16
|
+
* rules. A second implementation would eventually disagree, and a proof this
|
|
17
|
+
* surface blessed being rejected downstream is worse than no surface at all.
|
|
18
|
+
* One deliberate asymmetry, and it runs in the safe direction only: an unstable
|
|
19
|
+
* fingerprint is a hard refusal HERE while `submit` merely records it and lets a
|
|
20
|
+
* matching digest through. So this surface can refuse a capture the submit would
|
|
21
|
+
* have taken — never the reverse. It fails closed by requirement, not by drift.
|
|
22
|
+
*
|
|
23
|
+
* It never advances the boundary and never spends an attempt: it only reads.
|
|
24
|
+
*/
|
|
25
|
+
import { SOURCE_BOUNDED_EVIDENCE, } from "../../domain/source-boundary.js";
|
|
26
|
+
import { resolveSessionTarget } from "../session-resolver.js";
|
|
27
|
+
import { validateCheckoutProof } from "../source-boundary-policy.js";
|
|
28
|
+
import { resolveBoundary } from "./advance.js";
|
|
29
|
+
import { observeCheckout, resolveCheckoutCandidates } from "./checkout-observation.js";
|
|
30
|
+
import { journeyForRun } from "./run-journey.js";
|
|
31
|
+
import { locateRun, readRun } from "./run-state-service.js";
|
|
32
|
+
/**
|
|
33
|
+
* The alias is not one this run can prove — and the two reasons need different fixes.
|
|
34
|
+
*
|
|
35
|
+
* With nothing eligible at all, "use workspace" would be advice to repeat what the
|
|
36
|
+
* caller just did: the failure is upstream, in a workspace boundary that could not
|
|
37
|
+
* be read. Only when there ARE eligible sources is naming them the useful answer.
|
|
38
|
+
*/
|
|
39
|
+
function notEligible(wanted, candidates) {
|
|
40
|
+
if (candidates.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
code: "WORKLINE_CHECKOUT_PROOF_INVALID",
|
|
43
|
+
message: `esta corrida no pudo resolver ninguna frontera elegible, así que '${wanted}' no se puede probar`,
|
|
44
|
+
action: "el límite del workspace no se pudo leer: comprobá que el marcador de Workline y su bloque de fuentes existan y sean legibles desde este directorio",
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
code: "WORKLINE_CHECKOUT_PROOF_INVALID",
|
|
49
|
+
message: `'${wanted}' no es una fuente elegible de esta corrida (elegibles: ${candidates
|
|
50
|
+
.map((candidate) => candidate.source)
|
|
51
|
+
.join(", ")})`,
|
|
52
|
+
action: "usá 'workspace' para el checkout documental, o el alias de una unidad de aislamiento que esta sesión ya tomó",
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Why there is nothing to capture here, said as the thing to do about it.
|
|
57
|
+
*
|
|
58
|
+
* Keyed off the boundary KIND, not off "the action is missing". Those are not the
|
|
59
|
+
* same question: an action is absent at a semantic boundary, a human one AND at an
|
|
60
|
+
* authorization gate, and only the last of the three is fixed by approving an
|
|
61
|
+
* effect. Telling the other two to approve something sends the reader to a control
|
|
62
|
+
* that is not there — the same misdirection this surface exists to stop.
|
|
63
|
+
*/
|
|
64
|
+
function notApplicable(boundary, kind, blocked) {
|
|
65
|
+
if (boundary === null) {
|
|
66
|
+
return {
|
|
67
|
+
code: "FLOW_PROVE_NOT_APPLICABLE",
|
|
68
|
+
message: "el recorrido ya terminó: no hay frontera que exija un CheckoutProof",
|
|
69
|
+
action: "no queda trabajo pendiente en este recorrido",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// A blocked boundary already declares WHY, and that cause is the only actionable
|
|
73
|
+
// thing here. The directive contract refuses to emit a block without its error;
|
|
74
|
+
// a read surface over the same boundary must not quietly drop it either.
|
|
75
|
+
if (kind === "blocked" && blocked !== null) {
|
|
76
|
+
return {
|
|
77
|
+
code: "FLOW_PROVE_NOT_APPLICABLE",
|
|
78
|
+
message: `'${boundary}' está bloqueada (${blocked.code}): ${blocked.message}`,
|
|
79
|
+
action: blocked.action ?? "resolvé la causa del bloqueo antes de capturar una prueba",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (kind === "authorization") {
|
|
83
|
+
return {
|
|
84
|
+
code: "FLOW_PROVE_NOT_APPLICABLE",
|
|
85
|
+
message: `'${boundary}' está esperando que autorices su efecto, así que todavía no selló su invocación`,
|
|
86
|
+
action: "aprobá el efecto que la directiva nombra y volvé a capturar: la invocación se sella recién ahí, y una prueba sin invocación sellada no acredita nada",
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
code: "FLOW_PROVE_NOT_APPLICABLE",
|
|
91
|
+
message: `'${boundary}' no exige evidencia '${SOURCE_BOUNDED_EVIDENCE}'`,
|
|
92
|
+
action: "avanzá con 'aw flow advance' hasta una frontera que la exija; su directiva lo dice en 'evidencia exigida'",
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export async function proveFlowBoundary(fs, paths, input) {
|
|
96
|
+
// A read intent: proving is not a walk and must never bind, advance or mutate.
|
|
97
|
+
const resolution = await resolveSessionTarget(fs, paths, {
|
|
98
|
+
intent: "read",
|
|
99
|
+
...(input.code !== undefined ? { code: input.code } : {}),
|
|
100
|
+
...(input.contextId !== undefined ? { contextId: input.contextId } : {}),
|
|
101
|
+
allowClosed: false,
|
|
102
|
+
bind: false,
|
|
103
|
+
});
|
|
104
|
+
if (resolution.outcome !== "resolved")
|
|
105
|
+
return { ok: false, session: resolution };
|
|
106
|
+
const session = resolution.session.folder;
|
|
107
|
+
const run = await readRun(fs, locateRun(paths, session));
|
|
108
|
+
if (!run.ok)
|
|
109
|
+
return { ok: false, failure: run.failure };
|
|
110
|
+
const resolved = resolveBoundary(run.state, journeyForRun(run.state));
|
|
111
|
+
const action = resolved.action;
|
|
112
|
+
if (action === null || !action.evidence.includes(SOURCE_BOUNDED_EVIDENCE)) {
|
|
113
|
+
// Three different situations, and they need three different sentences. Saying
|
|
114
|
+
// "it demands no such evidence" when the run is merely parked at an unapproved
|
|
115
|
+
// effect would be the same wrong blame this surface exists to end: the row may
|
|
116
|
+
// demand it, but no invocation has been sealed yet, so there is nothing to prove.
|
|
117
|
+
return {
|
|
118
|
+
ok: false,
|
|
119
|
+
failure: notApplicable(resolved.stopped?.id ?? null, resolved.kind, resolved.error),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const wanted = input.source ?? "workspace";
|
|
123
|
+
const candidates = await resolveCheckoutCandidates(fs, paths, session);
|
|
124
|
+
const identity = candidates.find((candidate) => candidate.source === wanted);
|
|
125
|
+
if (identity === undefined)
|
|
126
|
+
return { ok: false, failure: notEligible(wanted, candidates) };
|
|
127
|
+
// The SAME observation `submit` makes, from the same function. What differs is the
|
|
128
|
+
// policy applied to it, and only in the strict direction: `submit` keeps an
|
|
129
|
+
// unstable reading so its rejection can say the fingerprint moved, while a
|
|
130
|
+
// capture refuses to hand back a proof built on one.
|
|
131
|
+
const state = await observeCheckout(fs, input.git, identity);
|
|
132
|
+
if (state === null) {
|
|
133
|
+
return {
|
|
134
|
+
ok: false,
|
|
135
|
+
failure: {
|
|
136
|
+
code: "FLOW_PROVE_CHECKOUT_UNOBSERVABLE",
|
|
137
|
+
// Three causes reach here and the message names all three, because it used
|
|
138
|
+
// to assert the first two and fire on the third: a root can exist, be a
|
|
139
|
+
// repo, and still yield no fingerprint (un HEAD sin commits, un gitdir
|
|
140
|
+
// movido, el índice tomado). Denying facts that hold is the wrong-blame
|
|
141
|
+
// this surface exists to stop.
|
|
142
|
+
message: `no se pudo observar la raíz de '${identity.source}' (${identity.root}): o no existe, o no es un checkout git, o git no pudo leerla`,
|
|
143
|
+
action: "comprobá que esa raíz responda a 'git status' y tenga al menos un commit; para 'workspace' es el ancestro con el marcador de Workline, y para otro alias tomá su unidad con 'aw worktree ensure --source <alias> --code <NNN>'",
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (state.reproducible === false) {
|
|
148
|
+
return {
|
|
149
|
+
ok: false,
|
|
150
|
+
failure: {
|
|
151
|
+
code: "FLOW_PROVE_FINGERPRINT_UNSTABLE",
|
|
152
|
+
message: `la huella de '${identity.source}' (${identity.root}) no coincide entre dos cómputos consecutivos`,
|
|
153
|
+
action: "algo está escribiendo en esa raíz: estabilizala y volvé a capturar, porque una prueba sobre una huella inestable sería rechazada igual",
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const proof = input.artifact === undefined
|
|
158
|
+
? {
|
|
159
|
+
kind: "command",
|
|
160
|
+
source: identity.source,
|
|
161
|
+
relative_cwd: ".",
|
|
162
|
+
checkout_digest: state.digest,
|
|
163
|
+
// The sealed invocation's program and args, and ONLY those: `target` and
|
|
164
|
+
// `input` belong to the directive's invocation, and carrying them into a
|
|
165
|
+
// proof is the most natural way to get one rejected — the whole object is
|
|
166
|
+
// right there, so copying it whole is the obvious wrong move.
|
|
167
|
+
invocation: { program: action.invocation.program, args: [...action.invocation.args] },
|
|
168
|
+
}
|
|
169
|
+
: {
|
|
170
|
+
kind: "inspection",
|
|
171
|
+
source: identity.source,
|
|
172
|
+
relative_cwd: ".",
|
|
173
|
+
checkout_digest: state.digest,
|
|
174
|
+
invocation: { artifact: input.artifact },
|
|
175
|
+
};
|
|
176
|
+
// The same function `submit` runs. If this ever disagrees with the submit, it is
|
|
177
|
+
// because the tree moved in between — never because two rule sets drifted apart.
|
|
178
|
+
const rejection = validateCheckoutProof(proof, [state]);
|
|
179
|
+
if (rejection !== null) {
|
|
180
|
+
return {
|
|
181
|
+
ok: false,
|
|
182
|
+
failure: {
|
|
183
|
+
code: rejection.code,
|
|
184
|
+
message: `la prueba capturada no pasa su propia prevalidación: ${rejection.message}`,
|
|
185
|
+
action: "no la envíes: corregí lo que el mensaje nombra y volvé a capturar, que es gratis y no gasta el intento de la frontera",
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
ok: true,
|
|
191
|
+
receipt: {
|
|
192
|
+
session,
|
|
193
|
+
boundary: resolved.stopped?.id ?? null,
|
|
194
|
+
evidence: action.evidence,
|
|
195
|
+
checkout: identity,
|
|
196
|
+
proof,
|
|
197
|
+
// The id is spelled out because the validator does not search: it looks up
|
|
198
|
+
// exactly the item called `workline.source-bounded`. Hanging the proof on any
|
|
199
|
+
// other item of the list reads as a proof that never arrived, and that costs
|
|
200
|
+
// an attempt — which is the cost this surface exists to avoid.
|
|
201
|
+
usage: `va como campo 'proof' del ítem de 'validations' cuyo id es exactamente '${SOURCE_BOUNDED_EVIDENCE}', no de otro ítem de la lista. Caduca con la próxima escritura a esa raíz: no toques el árbol entre esta captura y el submit.`,
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=prove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prove.js","sourceRoot":"","sources":["../../../src/application/flow/prove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The journey that a persisted run may cross.
|
|
3
|
+
*
|
|
4
|
+
* PLAN-exec is the single flow whose persisted batch cursor changes the shape of
|
|
5
|
+
* its journey. Every other flow remains the registry journey verbatim. Keeping
|
|
6
|
+
* that distinction at this application seam also lets controlled registry
|
|
7
|
+
* fixtures replace `journeyOfFlow` without accidentally reading the production
|
|
8
|
+
* registry through `journeyForState`'s lexical implementation.
|
|
9
|
+
*/
|
|
10
|
+
import { journeyForState, journeyOfFlow } from "../../domain/flow/authority.js";
|
|
11
|
+
export function journeyForRun(state) {
|
|
12
|
+
const base = journeyOfFlow(state.flow);
|
|
13
|
+
return state.flow === "plan-exec" ? journeyForState(state, base) : base;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=run-journey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-journey.js","sourceRoot":"","sources":["../../../src/application/flow/run-journey.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAGhF,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC"}
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
* (`null`, and the caller keeps its own answer), and a run whose state does not
|
|
12
12
|
* match its journey says so instead of projecting a boundary nobody can trust.
|
|
13
13
|
*/
|
|
14
|
-
import {
|
|
15
|
-
import { checkAgainstJourney } from "../../domain/flow/run-state.js";
|
|
14
|
+
import { checkAgainstJourney, legacyRunNeedsAdoption, } from "../../domain/flow/run-state.js";
|
|
16
15
|
import { resolveBoundary } from "./advance.js";
|
|
16
|
+
import { journeyForRun } from "./run-journey.js";
|
|
17
17
|
import { locateRun, readRun } from "./run-state-service.js";
|
|
18
18
|
export async function projectRun(fs, paths, folder) {
|
|
19
19
|
const read = await readRun(fs, locateRun(paths, folder));
|
|
@@ -36,7 +36,19 @@ export async function projectRun(fs, paths, folder) {
|
|
|
36
36
|
scope: null,
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
if (legacyRunNeedsAdoption(read.state)) {
|
|
40
|
+
return {
|
|
41
|
+
flow: read.state.flow,
|
|
42
|
+
boundary: "blocked",
|
|
43
|
+
transition: read.state.boundary,
|
|
44
|
+
title: null,
|
|
45
|
+
invocation: null,
|
|
46
|
+
command: `aw flow advance --code ${folder} --flow ${read.state.flow} --adopt`,
|
|
47
|
+
summary: `corrida legacy v${read.state.version}: requiere adopción explícita antes de continuar`,
|
|
48
|
+
scope: read.state.scope,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const journey = journeyForRun(read.state);
|
|
40
52
|
const incoherent = checkAgainstJourney(read.state, journey);
|
|
41
53
|
if (incoherent !== null) {
|
|
42
54
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-projection.js","sourceRoot":"","sources":["../../../src/application/flow/run-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"run-projection.js","sourceRoot":"","sources":["../../../src/application/flow/run-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* previous state exactly as it was rather than a half-applied one.
|
|
14
14
|
*/
|
|
15
15
|
import { dirname, join } from "node:path";
|
|
16
|
-
import { FLOW_RUN_STATE_FILE,
|
|
16
|
+
import { FLOW_RUN_STATE_FILE, FLOW_RUN_STATE_VERSION, attemptCounterKeyForIteration, legacyRunNeedsAdoption, parseRunState, serializeRunState, withAttemptCounters, } from "../../domain/flow/run-state.js";
|
|
17
17
|
import { LockBusyError, acquireLock } from "../lock-service.js";
|
|
18
18
|
import { semanticDigest } from "../semantic-operation/protocol.js";
|
|
19
19
|
/**
|
|
@@ -88,7 +88,10 @@ export async function readRun(fs, location) {
|
|
|
88
88
|
return { ok: false, failure: rolledBack };
|
|
89
89
|
return {
|
|
90
90
|
ok: true,
|
|
91
|
-
state
|
|
91
|
+
// Reading historical state is deliberately non-mutating. A v7–v9 run stays
|
|
92
|
+
// itself until `aw flow advance --adopt` explicitly accepts v10's batch
|
|
93
|
+
// semantics; merely asking status/resume must never re-stamp it.
|
|
94
|
+
state: withAttemptCounters(parsed.state, {
|
|
92
95
|
floor: counters.value.attempts,
|
|
93
96
|
grants: counters.value.granted,
|
|
94
97
|
}),
|
|
@@ -207,7 +210,8 @@ async function raiseCounters(fs, location, state) {
|
|
|
207
210
|
return current;
|
|
208
211
|
const spent = new Map();
|
|
209
212
|
for (const attempt of state.attempts) {
|
|
210
|
-
|
|
213
|
+
const key = attemptCounterKeyForIteration(attempt.transition, attempt.batch_iteration);
|
|
214
|
+
spent.set(key, (spent.get(key) ?? 0) + 1);
|
|
211
215
|
}
|
|
212
216
|
const attempts = { ...current.value.attempts };
|
|
213
217
|
for (const [transition, count] of spent) {
|
|
@@ -262,8 +266,9 @@ function readCounterMap(value) {
|
|
|
262
266
|
* caller had — which is what makes this a compare-and-swap instead of a hopeful
|
|
263
267
|
* overwrite.
|
|
264
268
|
*/
|
|
269
|
+
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: lock acquisition, state validation, counter-before-state persistence, and release must remain one visibly ordered transaction.
|
|
265
270
|
export async function applyUnderLock(fs, location, mutate, options = {}) {
|
|
266
|
-
const { expectDigest, allowAbsent, ...lockOptions } = options;
|
|
271
|
+
const { expectDigest, allowAbsent, allowLegacyAdoption, ...lockOptions } = options;
|
|
267
272
|
await fs.mkdirp(location.dir);
|
|
268
273
|
let lock;
|
|
269
274
|
try {
|
|
@@ -290,6 +295,16 @@ export async function applyUnderLock(fs, location, mutate, options = {}) {
|
|
|
290
295
|
return { ok: false, failure: current.failure };
|
|
291
296
|
}
|
|
292
297
|
const state = current.ok ? current.state : null;
|
|
298
|
+
if (state !== null && legacyRunNeedsAdoption(state) && allowLegacyAdoption !== true) {
|
|
299
|
+
return {
|
|
300
|
+
ok: false,
|
|
301
|
+
failure: {
|
|
302
|
+
code: "FLOW_RUN_LEGACY_ADOPTION_REQUIRED",
|
|
303
|
+
message: `la corrida v${state.version} se puede leer, pero no continuar sin adopción explícita`,
|
|
304
|
+
action: `corré 'aw flow advance --code ${state.session} --flow ${state.flow} --adopt' para adoptar v${FLOW_RUN_STATE_VERSION} sin inventar batches históricos`,
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
}
|
|
293
308
|
if (expectDigest !== undefined && state?.digest !== expectDigest) {
|
|
294
309
|
return {
|
|
295
310
|
ok: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-state-service.js","sourceRoot":"","sources":["../../../src/application/flow/run-state-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"run-state-service.js","sourceRoot":"","sources":["../../../src/application/flow/run-state-service.ts"],"names":[],"mappings":"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"}
|