@tacuchi/agent-workflow-cli 25.6.1 → 25.8.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/CHANGELOG.md +4398 -0
- package/README.md +1 -1
- package/dist/adapters/git-cli.js +160 -13
- package/dist/adapters/git-cli.js.map +1 -1
- package/dist/adapters/node-file-system.js +39 -2
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/branch-resolver.js +34 -1
- package/dist/application/branch-resolver.js.map +1 -1
- package/dist/application/capability/readiness.js +26 -10
- package/dist/application/capability/readiness.js.map +1 -1
- package/dist/application/capability/wrapper.js +10 -3
- package/dist/application/capability/wrapper.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +161 -39
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/dates.js +12 -0
- package/dist/application/dates.js.map +1 -1
- package/dist/application/dev-only-services.js +5 -7
- package/dist/application/dev-only-services.js.map +1 -1
- package/dist/application/doctor/provider-mcps.js +1 -1
- package/dist/application/doctor/provider-mcps.js.map +1 -1
- package/dist/application/fix-git-service.js +83 -13
- package/dist/application/fix-git-service.js.map +1 -1
- package/dist/application/flow/advance.js +64 -9
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/annul-service.js +159 -0
- package/dist/application/flow/annul-service.js.map +1 -0
- package/dist/application/flow/checkout-observation.js +49 -0
- package/dist/application/flow/checkout-observation.js.map +1 -1
- package/dist/application/flow/close-at-boundary.js +144 -0
- package/dist/application/flow/close-at-boundary.js.map +1 -0
- package/dist/application/flow/flow-service.js +213 -49
- package/dist/application/flow/flow-service.js.map +1 -1
- package/dist/application/flow/internal-actions.js +87 -4
- package/dist/application/flow/internal-actions.js.map +1 -1
- package/dist/application/flow/internal-drive.js +70 -33
- package/dist/application/flow/internal-drive.js.map +1 -1
- package/dist/application/flow/reopen-run.js +152 -0
- package/dist/application/flow/reopen-run.js.map +1 -0
- package/dist/application/flow/run-journey.js +11 -8
- package/dist/application/flow/run-journey.js.map +1 -1
- package/dist/application/flow/run-projection.js +37 -10
- package/dist/application/flow/run-projection.js.map +1 -1
- package/dist/application/flow/run-state-service.js +109 -36
- package/dist/application/flow/run-state-service.js.map +1 -1
- package/dist/application/flow/submit.js +217 -188
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/git-flow-service.js +325 -72
- package/dist/application/git-flow-service.js.map +1 -1
- package/dist/application/hook-sql-mutation-guard.js +290 -27
- package/dist/application/hook-sql-mutation-guard.js.map +1 -1
- package/dist/application/host-memory/claude-code.js +65 -0
- package/dist/application/host-memory/claude-code.js.map +1 -0
- package/dist/application/host-memory/codex.js +225 -0
- package/dist/application/host-memory/codex.js.map +1 -0
- package/dist/application/host-memory/destination.js +52 -0
- package/dist/application/host-memory/destination.js.map +1 -0
- package/dist/application/host-memory/reader.js +9 -0
- package/dist/application/host-memory/reader.js.map +1 -0
- package/dist/application/host-memory/report.js +136 -0
- package/dist/application/host-memory/report.js.map +1 -0
- package/dist/application/lifecycle-target.js +3 -1
- package/dist/application/lifecycle-target.js.map +1 -1
- package/dist/application/local-proposal.js +13 -3
- package/dist/application/local-proposal.js.map +1 -1
- package/dist/application/logging/log-events.js +22 -0
- package/dist/application/logging/log-events.js.map +1 -1
- package/dist/application/parsers/spec-relation.js +20 -7
- package/dist/application/parsers/spec-relation.js.map +1 -1
- package/dist/application/persist-service.js +45 -1
- package/dist/application/persist-service.js.map +1 -1
- package/dist/application/plan-exec-batch-service.js +47 -2
- package/dist/application/plan-exec-batch-service.js.map +1 -1
- package/dist/application/plan-lineage-seal.js +93 -0
- package/dist/application/plan-lineage-seal.js.map +1 -0
- package/dist/application/plan-lint-service.js +153 -0
- package/dist/application/plan-lint-service.js.map +1 -0
- package/dist/application/prod-consent.js +75 -0
- package/dist/application/prod-consent.js.map +1 -0
- package/dist/application/reseal-service.js +9 -3
- package/dist/application/reseal-service.js.map +1 -1
- package/dist/application/self/install-skill.js +40 -12
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/install-targets.js +73 -2
- package/dist/application/self/install-targets.js.map +1 -1
- package/dist/application/self/uninstall.js +21 -7
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/self/update-self.js +204 -8
- package/dist/application/self/update-self.js.map +1 -1
- package/dist/application/session-create-service.js +49 -0
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/session-custody-recorder.js +4 -0
- package/dist/application/session-custody-recorder.js.map +1 -1
- package/dist/application/session-narrative.js +36 -0
- package/dist/application/session-narrative.js.map +1 -1
- package/dist/application/session-resolver.js +28 -9
- package/dist/application/session-resolver.js.map +1 -1
- package/dist/application/session-resume-service.js +65 -16
- package/dist/application/session-resume-service.js.map +1 -1
- package/dist/application/source-boundary-policy.js +168 -34
- package/dist/application/source-boundary-policy.js.map +1 -1
- package/dist/application/working-branch-service.js +68 -0
- package/dist/application/working-branch-service.js.map +1 -0
- package/dist/application/workline-graph.js +7 -2
- package/dist/application/workline-graph.js.map +1 -1
- package/dist/cli/ascii.js +84 -0
- package/dist/cli/ascii.js.map +1 -0
- package/dist/cli/commands/amend.js +1 -0
- package/dist/cli/commands/amend.js.map +1 -1
- package/dist/cli/commands/capability.js +15 -0
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/check-branch.js +1 -0
- package/dist/cli/commands/check-branch.js.map +1 -1
- package/dist/cli/commands/checkpoint-read.js +1 -0
- package/dist/cli/commands/checkpoint-read.js.map +1 -1
- package/dist/cli/commands/checkpoint-write.js +22 -9
- package/dist/cli/commands/checkpoint-write.js.map +1 -1
- package/dist/cli/commands/claims.js +1 -0
- package/dist/cli/commands/claims.js.map +1 -1
- package/dist/cli/commands/code-scan.js +1 -0
- package/dist/cli/commands/code-scan.js.map +1 -1
- package/dist/cli/commands/context-budget.js +1 -0
- package/dist/cli/commands/context-budget.js.map +1 -1
- package/dist/cli/commands/context-plan.js +1 -0
- package/dist/cli/commands/context-plan.js.map +1 -1
- package/dist/cli/commands/cut-intent.js +1 -0
- package/dist/cli/commands/cut-intent.js.map +1 -1
- package/dist/cli/commands/designs.js +1 -0
- package/dist/cli/commands/designs.js.map +1 -1
- package/dist/cli/commands/dev-only.js +4 -0
- package/dist/cli/commands/dev-only.js.map +1 -1
- package/dist/cli/commands/doctor.js +5 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/export.js +13 -0
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/fix-git.js +46 -6
- package/dist/cli/commands/fix-git.js.map +1 -1
- package/dist/cli/commands/flow.js +61 -5
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/generate-launch.js +1 -0
- package/dist/cli/commands/generate-launch.js.map +1 -1
- package/dist/cli/commands/git-flow.js +104 -29
- package/dist/cli/commands/git-flow.js.map +1 -1
- package/dist/cli/commands/history-update.js +7 -9
- package/dist/cli/commands/history-update.js.map +1 -1
- package/dist/cli/commands/hook.js +11 -3
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/host-doctor.js +1 -0
- package/dist/cli/commands/host-doctor.js.map +1 -1
- package/dist/cli/commands/host-memory.js +26 -0
- package/dist/cli/commands/host-memory.js.map +1 -0
- package/dist/cli/commands/index.js +6 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/mcp.js +30 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/merge-state.js +1 -0
- package/dist/cli/commands/merge-state.js.map +1 -1
- package/dist/cli/commands/multiroot.js +16 -0
- package/dist/cli/commands/multiroot.js.map +1 -1
- package/dist/cli/commands/persist.js +6 -0
- package/dist/cli/commands/persist.js.map +1 -1
- package/dist/cli/commands/plan.js +51 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/plugin-cache.js +4 -0
- package/dist/cli/commands/plugin-cache.js.map +1 -1
- package/dist/cli/commands/plugin-doctor.js +3 -0
- package/dist/cli/commands/plugin-doctor.js.map +1 -1
- package/dist/cli/commands/project-md-upsert.js +3 -0
- package/dist/cli/commands/project-md-upsert.js.map +1 -1
- package/dist/cli/commands/release-data.js +12 -0
- package/dist/cli/commands/release-data.js.map +1 -1
- package/dist/cli/commands/release-pass.js +10 -0
- package/dist/cli/commands/release-pass.js.map +1 -1
- package/dist/cli/commands/remove-source.js +1 -0
- package/dist/cli/commands/remove-source.js.map +1 -1
- package/dist/cli/commands/reseal.js +1 -0
- package/dist/cli/commands/reseal.js.map +1 -1
- package/dist/cli/commands/resume-summary.js +9 -2
- package/dist/cli/commands/resume-summary.js.map +1 -1
- package/dist/cli/commands/resume.js +1 -0
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/retirement.js +1 -0
- package/dist/cli/commands/retirement.js.map +1 -1
- package/dist/cli/commands/self.js +33 -0
- package/dist/cli/commands/self.js.map +1 -1
- package/dist/cli/commands/session-artifacts.js +1 -0
- package/dist/cli/commands/session-artifacts.js.map +1 -1
- package/dist/cli/commands/session-close.js +129 -30
- package/dist/cli/commands/session-close.js.map +1 -1
- package/dist/cli/commands/session-create.js +1 -0
- package/dist/cli/commands/session-create.js.map +1 -1
- package/dist/cli/commands/session-resume.js +1 -0
- package/dist/cli/commands/session-resume.js.map +1 -1
- package/dist/cli/commands/sessions.js +1 -0
- package/dist/cli/commands/sessions.js.map +1 -1
- package/dist/cli/commands/set-branch.js +41 -6
- package/dist/cli/commands/set-branch.js.map +1 -1
- package/dist/cli/commands/settle.js +1 -0
- package/dist/cli/commands/settle.js.map +1 -1
- package/dist/cli/commands/skill-index.js +1 -0
- package/dist/cli/commands/skill-index.js.map +1 -1
- package/dist/cli/commands/skills.js +1 -0
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/sources.js +1 -0
- package/dist/cli/commands/sources.js.map +1 -1
- package/dist/cli/commands/stack.js +1 -0
- package/dist/cli/commands/stack.js.map +1 -1
- package/dist/cli/commands/status.js +1 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tool.js +5 -21
- package/dist/cli/commands/tool.js.map +1 -1
- package/dist/cli/commands/unknown-flags.js +67 -16
- package/dist/cli/commands/unknown-flags.js.map +1 -1
- package/dist/cli/commands/visibility.js +1 -0
- package/dist/cli/commands/visibility.js.map +1 -1
- package/dist/cli/commands/workspace-init.js +12 -0
- package/dist/cli/commands/workspace-init.js.map +1 -1
- package/dist/cli/commands/workspace-migrate.js +2 -13
- package/dist/cli/commands/workspace-migrate.js.map +1 -1
- package/dist/cli/commands/worktree.js +1 -0
- package/dist/cli/commands/worktree.js.map +1 -1
- package/dist/cli/help-groups.js +41 -0
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/main.js +41 -58
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/output-mode.js +11 -2
- package/dist/cli/output-mode.js.map +1 -1
- package/dist/cli/parser.js +14 -5
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli/render.js +30 -1
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/tui/components/git-flow-actions.js +65 -20
- package/dist/cli/tui/components/git-flow-actions.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +101 -12
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/domain/changelog-contract.js +172 -0
- package/dist/domain/changelog-contract.js.map +1 -0
- package/dist/domain/database-tools.js +1 -189
- package/dist/domain/database-tools.js.map +1 -1
- package/dist/domain/flow/answer.js +11 -0
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +153 -14
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/execution-result.js +78 -7
- package/dist/domain/flow/execution-result.js.map +1 -1
- package/dist/domain/flow/journey-baseline.js +131 -0
- package/dist/domain/flow/journey-baseline.js.map +1 -0
- package/dist/domain/flow/route.js.map +1 -1
- package/dist/domain/flow/rules.js +5 -6
- package/dist/domain/flow/rules.js.map +1 -1
- package/dist/domain/flow/run-state.js +440 -89
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/harnesses.js +8 -1
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/host-memory/model.js +2 -0
- package/dist/domain/host-memory/model.js.map +1 -0
- package/dist/domain/host-memory/provenance.js +43 -0
- package/dist/domain/host-memory/provenance.js.map +1 -0
- package/dist/domain/host-memory/topic.js +26 -0
- package/dist/domain/host-memory/topic.js.map +1 -0
- package/dist/domain/lineage.js +11 -3
- package/dist/domain/lineage.js.map +1 -1
- package/dist/domain/proposal.js +7 -0
- package/dist/domain/proposal.js.map +1 -1
- package/dist/domain/session/custody.js.map +1 -1
- package/dist/domain/sql-lexer.js +240 -0
- package/dist/domain/sql-lexer.js.map +1 -0
- package/package.json +2 -2
- package/skills/w/SKILL.md +9 -9
- package/skills/w/commands/README.md +2 -1
- package/skills/w/commands/recall.md +39 -0
- package/skills/w/context/MANIFEST.json +4 -0
- package/skills/w/harness/HARNESS.md +12 -6
- package/skills/w/hooks/README.md +27 -16
- package/skills/w/loops/CHASSIS.md +16 -12
- package/skills/w/loops/CODE-POLICIES.md +11 -6
- package/skills/w/loops/plan-exec-loop/LOOP.md +9 -9
- package/skills/w/modules/COMPACTION.md +1 -1
- package/skills/w/roles/design/CONTRACT.md +10 -3
|
@@ -5,16 +5,17 @@
|
|
|
5
5
|
* is the plumbing that makes the advance atomic and addressable — which session,
|
|
6
6
|
* which state, one write.
|
|
7
7
|
*/
|
|
8
|
-
import { MAX_BOUNDARY_ATTEMPTS, applyAttemptReconciliation,
|
|
8
|
+
import { MAX_BOUNDARY_ATTEMPTS, applyAttemptReconciliation, attemptAccountingAt, checkAgainstJourney, grantAttempts, inheritedBasesFrom, legacyRunNeedsAdoption, newRunState, normalizeAttemptChain, reconcileAttemptsAt, recoveryBlockedAt, restartInvocation, withEvent, withInheritedBases, withoutExhaustedRerun, } from "../../domain/flow/run-state.js";
|
|
9
9
|
import { WORKLINE_FLOWS } from "../capability/compose.js";
|
|
10
10
|
import { resolveCoreDocsCanon } from "../docs-canon-service.js";
|
|
11
|
-
import { recordFlowAdoption } from "../session-custody-recorder.js";
|
|
11
|
+
import { recordFlowAdoption, recordFlowRestart } from "../session-custody-recorder.js";
|
|
12
|
+
import { readCustody } from "../session-custody-service.js";
|
|
12
13
|
import { resolveSessionTarget } from "../session-resolver.js";
|
|
13
14
|
import { advanceFlowRun, directiveFor, resolveBoundary } from "./advance.js";
|
|
14
15
|
import { publishObservedCheckouts } from "./checkout-observation.js";
|
|
15
16
|
import { driveInternalActions } from "./internal-drive.js";
|
|
16
17
|
import { journeyForRun } from "./run-journey.js";
|
|
17
|
-
import { applyUnderLock, locateRun } from "./run-state-service.js";
|
|
18
|
+
import { applyUnderLock, locateRun, readRun, restartUnderLock, } from "./run-state-service.js";
|
|
18
19
|
export async function advanceFlow(fs, paths, input) {
|
|
19
20
|
const canon = await resolveCoreDocsCanon(fs, paths);
|
|
20
21
|
if (!canon.ok) {
|
|
@@ -29,13 +30,19 @@ export async function advanceFlow(fs, paths, input) {
|
|
|
29
30
|
}
|
|
30
31
|
// A write path: a closed line is never advanced by accident, and nothing is
|
|
31
32
|
// chosen by recency — several active sessions with no association is ambiguous.
|
|
32
|
-
const
|
|
33
|
+
const target = {
|
|
33
34
|
intent: "write",
|
|
34
35
|
...(input.code !== undefined ? { code: input.code } : {}),
|
|
35
36
|
...(input.contextId !== undefined ? { contextId: input.contextId } : {}),
|
|
37
|
+
};
|
|
38
|
+
let resolution = await resolveSessionTarget(fs, paths, {
|
|
39
|
+
...target,
|
|
36
40
|
allowClosed: false,
|
|
37
41
|
bind: true,
|
|
38
42
|
});
|
|
43
|
+
if (resolution.outcome === "error" && resolution.code === "SESSION_CLOSED") {
|
|
44
|
+
resolution = await closedOnItsOwnFinalize(fs, paths, target, resolution);
|
|
45
|
+
}
|
|
39
46
|
if (resolution.outcome !== "resolved")
|
|
40
47
|
return { ok: false, session: resolution };
|
|
41
48
|
const session = resolution.session.folder;
|
|
@@ -43,17 +50,26 @@ export async function advanceFlow(fs, paths, input) {
|
|
|
43
50
|
// Read BEFORE the advance: afterwards the state file always exists, so this is
|
|
44
51
|
// the only moment that can tell an adoption from an ordinary advance.
|
|
45
52
|
const adopting = input.adopt && !(await fs.exists(location.statePath));
|
|
46
|
-
let adoptedExisting = false;
|
|
47
53
|
const applied = await applyUnderLock(fs, location, (current) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
: current;
|
|
54
|
+
// A readable run older than v11 never reaches here: the lock refuses it and
|
|
55
|
+
// names `aw flow restart`. Continuing its cursor would invent batch limits
|
|
56
|
+
// the old run never declared.
|
|
57
|
+
const seeded = current === null ? seed(input, session) : current;
|
|
53
58
|
if ("failure" in seeded)
|
|
54
59
|
return { ok: false, failure: seeded.failure };
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
// A `--flow` that names another flow than the run's is refused, never
|
|
61
|
+
// ignored: since session-create seeds the run, the first advance is exactly
|
|
62
|
+
// where somebody still passes `--flow … --adopt` by habit.
|
|
63
|
+
if (current !== null && input.flow !== undefined && input.flow !== current.flow) {
|
|
64
|
+
return {
|
|
65
|
+
ok: false,
|
|
66
|
+
failure: {
|
|
67
|
+
code: "FLOW_ADOPTION_FLOW_MISMATCH",
|
|
68
|
+
message: `la corrida declara '${current.flow}', no '${input.flow}'`,
|
|
69
|
+
action: `avanzala sin --flow, o con '--flow ${current.flow}', o elegí la sesión correcta`,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
57
73
|
const advance = advanceFlowRun({
|
|
58
74
|
state: seeded,
|
|
59
75
|
journey: journeyForRun(seeded),
|
|
@@ -61,11 +77,11 @@ export async function advanceFlow(fs, paths, input) {
|
|
|
61
77
|
if (!advance.ok)
|
|
62
78
|
return { ok: false, failure: advance.failure };
|
|
63
79
|
return { ok: true, state: advance.state, value: advance.directive };
|
|
64
|
-
}, { allowAbsent: input.adopt
|
|
80
|
+
}, { allowAbsent: input.adopt });
|
|
65
81
|
if (!applied.ok)
|
|
66
82
|
return { ok: false, failure: applied.failure };
|
|
67
83
|
// What the session IS, recorded once, from the adoption that really happened.
|
|
68
|
-
if (adopting
|
|
84
|
+
if (adopting) {
|
|
69
85
|
await recordFlowAdoption({ fs, paths }, session, applied.state.flow);
|
|
70
86
|
}
|
|
71
87
|
// Deciding stopped at the first delegated step; executing continues past every
|
|
@@ -85,6 +101,184 @@ export async function advanceFlow(fs, paths, input) {
|
|
|
85
101
|
directive: await publishObservedCheckouts(fs, paths, session, input.git, driven.value),
|
|
86
102
|
};
|
|
87
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* A closed session whose run still stands on `chassis.finalize` — or the refusal.
|
|
106
|
+
*
|
|
107
|
+
* That is the close that happened and whose run write did not: `session.close`
|
|
108
|
+
* already wrote the marker and the HISTORY row, and only the cursor stayed
|
|
109
|
+
* behind. Reopening it, which is what the refusal asks for, would undo the one
|
|
110
|
+
* effect that did land. So this one shape resolves, the driver re-runs the close
|
|
111
|
+
* — which recognizes a closed session — and the run finishes. Any other closed
|
|
112
|
+
* session keeps its refusal: a line somebody closed is never advanced by accident.
|
|
113
|
+
*/
|
|
114
|
+
async function closedOnItsOwnFinalize(fs, paths, target, refused) {
|
|
115
|
+
const closed = await resolveSessionTarget(fs, paths, { ...target, allowClosed: true });
|
|
116
|
+
if (closed.outcome !== "resolved")
|
|
117
|
+
return refused;
|
|
118
|
+
const run = await readRun(fs, locateRun(paths, closed.session.folder));
|
|
119
|
+
// A run this CLI cannot continue is not finished by resolving it: its way out
|
|
120
|
+
// is `aw flow restart`, which needs the session open — so the reopen the
|
|
121
|
+
// refusal names comes first, instead of two refusals naming each other.
|
|
122
|
+
if (!run.ok || legacyRunNeedsAdoption(run.state))
|
|
123
|
+
return refused;
|
|
124
|
+
const standing = journeyForRun(run.state)[run.state.applied.length]?.id;
|
|
125
|
+
return standing === "chassis.finalize" ? closed : refused;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The way out of any stuck run, without touching `.flow-run.json` by hand.
|
|
129
|
+
*
|
|
130
|
+
* Under the run's lock it archives the registry and its attempt counter into a
|
|
131
|
+
* dated, sealed file inside the session, seeds a new run of the same flow whose
|
|
132
|
+
* first trace event names that archive and the cause, and records both in the
|
|
133
|
+
* session's custody. Then it advances the new run like any adoption. What it
|
|
134
|
+
* costs is the old run's answers — kept in the archive, never deleted — and in
|
|
135
|
+
* plan-exec the new run re-infers from the plan, so nothing validated is redone.
|
|
136
|
+
*
|
|
137
|
+
* The flow comes from the registry, then from custody's `flow_adopted`, then
|
|
138
|
+
* from `--flow`: what is already on record is never asked again, and a `--flow`
|
|
139
|
+
* that contradicts the record is refused before anything is archived.
|
|
140
|
+
*/
|
|
141
|
+
export async function restartFlow(fs, paths, input) {
|
|
142
|
+
const target = await writableSession(fs, paths, input, "reiniciar");
|
|
143
|
+
if (!target.ok)
|
|
144
|
+
return target.result;
|
|
145
|
+
return reseat(fs, paths, target.session, input, {
|
|
146
|
+
cause: (location) => restartCause(fs, location),
|
|
147
|
+
events: () => [],
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/** The session a run-replacing verb acts on: canon checked, open, bound. */
|
|
151
|
+
export async function writableSession(fs, paths, input, verb, bind = true) {
|
|
152
|
+
const canon = await resolveCoreDocsCanon(fs, paths);
|
|
153
|
+
if (!canon.ok) {
|
|
154
|
+
return {
|
|
155
|
+
ok: false,
|
|
156
|
+
result: {
|
|
157
|
+
ok: false,
|
|
158
|
+
failure: {
|
|
159
|
+
code: "DOCS_CANON_INVALID",
|
|
160
|
+
message: canon.error,
|
|
161
|
+
action: `corregí [docs] para conservar el layout documental canónico antes de ${verb}`,
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const resolution = await resolveSessionTarget(fs, paths, {
|
|
167
|
+
intent: "write",
|
|
168
|
+
...(input.code !== undefined ? { code: input.code } : {}),
|
|
169
|
+
...(input.contextId !== undefined ? { contextId: input.contextId } : {}),
|
|
170
|
+
allowClosed: false,
|
|
171
|
+
bind,
|
|
172
|
+
});
|
|
173
|
+
if (resolution.outcome !== "resolved") {
|
|
174
|
+
return { ok: false, result: { ok: false, session: resolution } };
|
|
175
|
+
}
|
|
176
|
+
return { ok: true, session: resolution.session };
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Archive the run, seed a new one of the same flow and advance it — the exit
|
|
180
|
+
* `restart` and `annul` share. The new run's first event is `restarted`; `events`
|
|
181
|
+
* adds what the verb itself has to say right after it.
|
|
182
|
+
*/
|
|
183
|
+
export async function reseat(fs, paths, session, input, verb) {
|
|
184
|
+
const location = locateRun(paths, session.folder);
|
|
185
|
+
const recorded = await adoptedFlowOf(fs, session.path);
|
|
186
|
+
const restarted = await restartUnderLock(fs, location, () => verb.cause(location), (cause, archived) => {
|
|
187
|
+
const flow = flowToReadopt(archived.state, recorded, input.flow);
|
|
188
|
+
if ("failure" in flow)
|
|
189
|
+
return { ok: false, failure: flow.failure };
|
|
190
|
+
const seeded = withEvent(newRunState(flow.flow, session.folder), {
|
|
191
|
+
kind: "restarted",
|
|
192
|
+
transition: RESTART_OPERATION,
|
|
193
|
+
operation: RESTART_OPERATION,
|
|
194
|
+
archive: archived.path,
|
|
195
|
+
cause,
|
|
196
|
+
});
|
|
197
|
+
const traced = verb.events().reduce(withEvent, seeded);
|
|
198
|
+
return { ok: true, state: withInheritedBases(traced, inheritedBasesFrom(archived.state)) };
|
|
199
|
+
}, input.now === undefined ? {} : { at: input.now });
|
|
200
|
+
if (!restarted.ok)
|
|
201
|
+
return { ok: false, failure: restarted.failure };
|
|
202
|
+
await recordFlowRestart({ fs, paths }, session.folder, restarted.archive.path);
|
|
203
|
+
await recordFlowAdoption({ fs, paths }, session.folder, restarted.state.flow);
|
|
204
|
+
return advanceFlow(fs, paths, {
|
|
205
|
+
code: session.folder,
|
|
206
|
+
adopt: false,
|
|
207
|
+
...(input.git === undefined ? {} : { git: input.git }),
|
|
208
|
+
executor: input.executor,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const RESTART_OPERATION = "flow.restart";
|
|
212
|
+
/**
|
|
213
|
+
* Why the old run could not go on, as `CODE: message` — what the trace keeps.
|
|
214
|
+
*
|
|
215
|
+
* Read with the same functions every other verb reads through, so the cause is
|
|
216
|
+
* the refusal the person was looking at, not a reinterpretation of it.
|
|
217
|
+
*/
|
|
218
|
+
async function restartCause(fs, location) {
|
|
219
|
+
const read = await readRun(fs, location);
|
|
220
|
+
if (!read.ok)
|
|
221
|
+
return `${read.failure.code}: ${read.failure.message}`;
|
|
222
|
+
const journey = journeyForRun(read.state);
|
|
223
|
+
const incoherent = checkAgainstJourney(read.state, journey);
|
|
224
|
+
if (incoherent !== null)
|
|
225
|
+
return `${incoherent.code}: ${incoherent.message}`;
|
|
226
|
+
if (legacyRunNeedsAdoption(read.state)) {
|
|
227
|
+
return `FLOW_RUN_LEGACY_ADOPTION_REQUIRED: la corrida v${read.state.version} no se continúa`;
|
|
228
|
+
}
|
|
229
|
+
const error = resolveBoundary(read.state, journey).error;
|
|
230
|
+
return error === null
|
|
231
|
+
? "FLOW_RESTART_REQUESTED: reinicio pedido"
|
|
232
|
+
: `${error.code}: ${error.message}`;
|
|
233
|
+
}
|
|
234
|
+
/** The flow custody recorded the last time this session adopted one, if any. */
|
|
235
|
+
async function adoptedFlowOf(fs, sessionPath) {
|
|
236
|
+
const read = await readCustody(fs, sessionPath);
|
|
237
|
+
if (read.status !== "present")
|
|
238
|
+
return null;
|
|
239
|
+
const adopted = read.custody.effects.filter((effect) => effect.kind === "flow_adopted");
|
|
240
|
+
return adopted.at(-1)?.paths[0] ?? null;
|
|
241
|
+
}
|
|
242
|
+
/** Registry, then custody, then `--flow` — and a `--flow` that contradicts them is refused. */
|
|
243
|
+
function flowToReadopt(archivedState, recorded, requested) {
|
|
244
|
+
const known = (value) => WORKLINE_FLOWS.includes(value);
|
|
245
|
+
const declared = flowDeclaredBy(archivedState);
|
|
246
|
+
const onRecord = known(declared) ? declared : known(recorded) ? recorded : null;
|
|
247
|
+
if (onRecord !== null && requested !== undefined && requested !== onRecord) {
|
|
248
|
+
return {
|
|
249
|
+
failure: {
|
|
250
|
+
code: "FLOW_ADOPTION_FLOW_MISMATCH",
|
|
251
|
+
message: `la corrida declara '${onRecord}', no '${requested}'`,
|
|
252
|
+
action: `reiniciala sin --flow, o con '--flow ${onRecord}', o elegí la sesión correcta`,
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
if (onRecord !== null)
|
|
257
|
+
return { flow: onRecord };
|
|
258
|
+
if (known(requested))
|
|
259
|
+
return { flow: requested };
|
|
260
|
+
return {
|
|
261
|
+
failure: {
|
|
262
|
+
code: "FLOW_ADOPTION_FLOW_MISSING",
|
|
263
|
+
message: "ni el registro ni la custodia dicen qué flow corría esta sesión",
|
|
264
|
+
action: `pasá --flow con uno de: ${WORKLINE_FLOWS.join(", ")}`,
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/** The `flow` an archived registry names, even when the rest of it cannot be read. */
|
|
269
|
+
function flowDeclaredBy(archivedState) {
|
|
270
|
+
if (archivedState === null)
|
|
271
|
+
return null;
|
|
272
|
+
try {
|
|
273
|
+
const parsed = JSON.parse(archivedState);
|
|
274
|
+
return typeof parsed === "object" && parsed !== null
|
|
275
|
+
? parsed.flow
|
|
276
|
+
: null;
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
88
282
|
/**
|
|
89
283
|
* Give a boundary that ran out of attempts a way back to being answerable.
|
|
90
284
|
*
|
|
@@ -178,7 +372,7 @@ function recover(state, named) {
|
|
|
178
372
|
// second answer on top of a half-applied one — and no attempt is worth that.
|
|
179
373
|
const blocked = recoveryBlockedAt(state, stopped.id);
|
|
180
374
|
if (blocked !== null)
|
|
181
|
-
return refuseRecovery(stopped.id, blocked);
|
|
375
|
+
return refuseRecovery(state.session, stopped.id, blocked);
|
|
182
376
|
// The SAME reconciliation the advance applies on its own, over the same input
|
|
183
377
|
// and through the same function: two copies of this arithmetic is exactly how
|
|
184
378
|
// the verb and the automatic repair would end up disagreeing about one run. It
|
|
@@ -193,9 +387,10 @@ function recover(state, named) {
|
|
|
193
387
|
// this grant covers, so nothing is forgiven twice.
|
|
194
388
|
const pending = attemptAccountingAt(reconciled, stopped.id);
|
|
195
389
|
const granted = pending.spent > 0 ? grantAttempts(reconciled, stopped.id, pending.spent) : reconciled;
|
|
196
|
-
const
|
|
390
|
+
const renumbered = attemptAccountingAt(granted, stopped.id).unanswerable === null
|
|
197
391
|
? granted
|
|
198
392
|
: normalizeAttemptChain(granted);
|
|
393
|
+
const recovered = withoutExhaustedRerun(renumbered, stopped.id);
|
|
199
394
|
const built = directiveFor(recovered, resolveBoundary(recovered, journey), []);
|
|
200
395
|
if (!built.ok)
|
|
201
396
|
return { ok: false, failure: built.failure };
|
|
@@ -210,12 +405,12 @@ function recover(state, named) {
|
|
|
210
405
|
* boundary whose action was begun and never reported back is the opposite — the
|
|
211
406
|
* missing thing is the verdict, and running the advance produces it.
|
|
212
407
|
*/
|
|
213
|
-
function refuseRecovery(transition, blocked) {
|
|
408
|
+
function refuseRecovery(session, transition, blocked) {
|
|
214
409
|
if (blocked.reason === "unverified") {
|
|
215
410
|
return refuse("FLOW_RECOVERY_EXECUTION_UNVERIFIED", `'${transition}' dejó anotado que su acción se iba a ejecutar y nunca registró en qué terminó: nadie puede decir si tocó el mundo`, "no se devuelven intentos sobre una ejecución sin veredicto: corré 'aw flow advance' para que la acción vuelva a correr y deje su resultado, y recuperá después si hace falta");
|
|
216
411
|
}
|
|
217
412
|
const moved = blocked.event;
|
|
218
|
-
return refuse("FLOW_RECOVERY_EFFECTS_APPLIED", `'${transition}' ya ejerció efectos en esta corrida (${moved.operation}): no se devuelven intentos sobre algo que ya ocurrió`, `el estado queda igual
|
|
413
|
+
return refuse("FLOW_RECOVERY_EFFECTS_APPLIED", `'${transition}' ya ejerció efectos en esta corrida (${moved.operation}): no se devuelven intentos sobre algo que ya ocurrió`, `el estado queda igual. Sacá la corrida con '${restartInvocation(session)}', que archiva el registro dentro de la sesión, re-adopta su flow y lo deja en la traza; o seguí la recuperación de la fila — ${moved.kind === "failed" ? moved.recovery : "revisá la traza de la corrida"}`);
|
|
219
414
|
}
|
|
220
415
|
function refuse(code, message, action) {
|
|
221
416
|
return { ok: false, failure: { code, message, action } };
|
|
@@ -242,35 +437,4 @@ function seed(input, session) {
|
|
|
242
437
|
}
|
|
243
438
|
return newRunState(flow, session);
|
|
244
439
|
}
|
|
245
|
-
/** Turn a readable v7–v9 state into v10 only after the caller explicitly opted in. */
|
|
246
|
-
function adoptExisting(input, state) {
|
|
247
|
-
if (!input.adopt) {
|
|
248
|
-
return {
|
|
249
|
-
failure: {
|
|
250
|
-
code: "FLOW_RUN_LEGACY_ADOPTION_REQUIRED",
|
|
251
|
-
message: `la corrida v${state.version} requiere adopción explícita antes de continuar`,
|
|
252
|
-
action: `corré 'aw flow advance --code ${state.session} --flow ${state.flow} --adopt'`,
|
|
253
|
-
},
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
if (input.flow === undefined || !WORKLINE_FLOWS.includes(input.flow)) {
|
|
257
|
-
return {
|
|
258
|
-
failure: {
|
|
259
|
-
code: "FLOW_ADOPTION_FLOW_MISSING",
|
|
260
|
-
message: "adoptar una corrida existente exige confirmar su flow",
|
|
261
|
-
action: `pasá --flow ${state.flow} junto con --adopt`,
|
|
262
|
-
},
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
if (input.flow !== state.flow) {
|
|
266
|
-
return {
|
|
267
|
-
failure: {
|
|
268
|
-
code: "FLOW_ADOPTION_FLOW_MISMATCH",
|
|
269
|
-
message: `la corrida declara '${state.flow}', no '${input.flow}'`,
|
|
270
|
-
action: `adoptala con '--flow ${state.flow}' o elegí la sesión correcta`,
|
|
271
|
-
},
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
return atCurrentVersion(state);
|
|
275
|
-
}
|
|
276
440
|
//# sourceMappingURL=flow-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-service.js","sourceRoot":"","sources":["../../../src/application/flow/flow-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flow-service.js","sourceRoot":"","sources":["../../../src/application/flow/flow-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
*/
|
|
26
26
|
import { join } from "node:path";
|
|
27
27
|
import { dispositionOf } from "../../domain/flow/route.js";
|
|
28
|
-
import { withPlanExecBatch, withPlanExecBatchLoop, withSettlement, } from "../../domain/flow/run-state.js";
|
|
28
|
+
import { withPlanExecBatch, withPlanExecBatchBase, withPlanExecBatchLoop, withSettlement, } from "../../domain/flow/run-state.js";
|
|
29
29
|
import { sealProposal } from "../../domain/proposal.js";
|
|
30
30
|
import { obligationExit } from "../../domain/reconciliation.js";
|
|
31
31
|
import { runArtifactsCommand } from "../artifacts-service.js";
|
|
@@ -44,6 +44,7 @@ import { recordPublication } from "../session-custody-recorder.js";
|
|
|
44
44
|
import { runStatusCommand } from "../status-service.js";
|
|
45
45
|
import { buildWorklineIndex } from "../workline-index-service.js";
|
|
46
46
|
import { runWorktree } from "../worktree-service.js";
|
|
47
|
+
import { observeScopedFingerprints } from "./checkout-observation.js";
|
|
47
48
|
import { projectRun } from "./run-projection.js";
|
|
48
49
|
import { applyUnderLock, locateRun, readRun } from "./run-state-service.js";
|
|
49
50
|
export function internalActionExecutor(deps) {
|
|
@@ -108,6 +109,10 @@ async function ensureUnits(deps, run) {
|
|
|
108
109
|
}
|
|
109
110
|
acquired.push(result);
|
|
110
111
|
}
|
|
112
|
+
const based = await recordBatchBase(deps, run, scope.sources);
|
|
113
|
+
if (!based.ok) {
|
|
114
|
+
return refusal("worktree.ensure", `${based.failure.message} — ${based.failure.action}`, canonicalJson({ failure: based.failure, acquired }));
|
|
115
|
+
}
|
|
111
116
|
return {
|
|
112
117
|
ok: true,
|
|
113
118
|
summary: `unidades de ${run.session}: ${acquired.map((unit) => `${unit.alias} → ${unit.branch}`).join(", ")}`,
|
|
@@ -116,8 +121,60 @@ async function ensureUnits(deps, run) {
|
|
|
116
121
|
// makes of a re-entry that finds the bytes already written. Crediting nothing
|
|
117
122
|
// when `created` is false would refuse the resumption this row is idempotent for.
|
|
118
123
|
effects: ["local_additive"],
|
|
124
|
+
...(based.state === null ? {} : { state: based.state }),
|
|
119
125
|
};
|
|
120
126
|
}
|
|
127
|
+
/** The batch this iteration walks, while it still has no base. */
|
|
128
|
+
function batchAwaitingBase(state) {
|
|
129
|
+
const iteration = state.batch_loop?.iteration ?? null;
|
|
130
|
+
const batch = (state.batches ?? []).find((entry) => entry.iteration === iteration);
|
|
131
|
+
return batch?.base === undefined ? batch : undefined;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Seal, on the batch this iteration walks, what each of its sources looked like
|
|
135
|
+
* before its work — the base it will have to have changed to be credited.
|
|
136
|
+
*
|
|
137
|
+
* Taken here because this row runs once per iteration, after the previous
|
|
138
|
+
* batch's close and commit: comparing against the previous CREDIT instead would
|
|
139
|
+
* let the plan that close published, or the review's fixes, pass as the next
|
|
140
|
+
* batch's work. The first batch's base is the run's start.
|
|
141
|
+
*/
|
|
142
|
+
async function recordBatchBase(deps, run, sources) {
|
|
143
|
+
// Measuring hashes whole trees, so it happens only when a batch is waiting for
|
|
144
|
+
// its base; the lock below re-checks, and a run that moved fails its CAS.
|
|
145
|
+
const live = await readRun(deps.fs, locateRun(deps.paths, run.session));
|
|
146
|
+
if (live.ok && batchAwaitingBase(live.state) === undefined)
|
|
147
|
+
return { ok: true, state: null };
|
|
148
|
+
const observed = await observeScopedFingerprints(deps.fs, deps.git, deps.paths, run.session, sources);
|
|
149
|
+
if (!observed.ok)
|
|
150
|
+
return observed;
|
|
151
|
+
const recorded = await applyUnderLock(deps.fs, locateRun(deps.paths, run.session), (current) => {
|
|
152
|
+
if (current === null) {
|
|
153
|
+
return {
|
|
154
|
+
ok: false,
|
|
155
|
+
failure: {
|
|
156
|
+
code: "FLOW_RUN_ABSENT",
|
|
157
|
+
message: "la corrida desapareció antes de sellar la base del batch",
|
|
158
|
+
action: "reanudá la corrida con 'aw flow advance'",
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const batch = batchAwaitingBase(current);
|
|
163
|
+
// Outside plan-exec, before any batch was inferred, or with its base already
|
|
164
|
+
// sealed, there is nothing to seal.
|
|
165
|
+
if (batch === undefined)
|
|
166
|
+
return { ok: true, state: current, value: null, persist: false };
|
|
167
|
+
// A reseated run already holds the work of the batches it re-infers: their
|
|
168
|
+
// base is the one the archived run sealed before that work, not today's tree.
|
|
169
|
+
const inherited = current.inherited_bases?.find((entry) => entry.phases.length === batch.phases.length &&
|
|
170
|
+
entry.phases.every((phase, index) => phase === batch.phases[index]));
|
|
171
|
+
const next = withPlanExecBatchBase(current, batch.id, inherited?.base ?? observed.base);
|
|
172
|
+
return { ok: true, state: next, value: null, persist: next !== current };
|
|
173
|
+
}, run.state_digest === undefined ? {} : { expectDigest: run.state_digest });
|
|
174
|
+
if (!recorded.ok)
|
|
175
|
+
return recorded;
|
|
176
|
+
return { ok: true, state: recorded.state };
|
|
177
|
+
}
|
|
121
178
|
/**
|
|
122
179
|
* Write the run's approved proposal — all of it, or none of it.
|
|
123
180
|
*
|
|
@@ -581,10 +638,16 @@ async function closeBatch(deps, run) {
|
|
|
581
638
|
catch {
|
|
582
639
|
return refusal("plan-exec.batch-close", `no se puede leer '${run.scope.plan}'`, canonicalJson({ plan: run.scope.plan }));
|
|
583
640
|
}
|
|
584
|
-
const batch = (live.state
|
|
641
|
+
const batch = batchToClose(live.state);
|
|
585
642
|
if (batch === undefined) {
|
|
586
643
|
return refusal("plan-exec.batch-close", "no hay un batch inferido para cerrar: la corrida no puede acreditar tareas que no selló antes de implementarlas", canonicalJson({ code: "PLAN_EXEC_BATCH_NOT_INFERRED", plan: run.scope.plan }));
|
|
587
644
|
}
|
|
645
|
+
// A batch born with a base was meant to be credited at its phase validation.
|
|
646
|
+
// Reaching the close without that credit — an exhausted validation degraded
|
|
647
|
+
// past, a route that skipped it — would publish its tasks as done on no proof.
|
|
648
|
+
if (batch.base !== undefined && batch.credit === undefined) {
|
|
649
|
+
return refusal("plan-exec.batch-close", `el batch ${batch.id} no tiene acreditación: su validación de fase nunca aceptó una prueba propia del checkout de sus fuentes`, canonicalJson({ code: "PLAN_EXEC_BATCH_UNCREDITED", batch: batch.id, plan: run.scope.plan }));
|
|
650
|
+
}
|
|
588
651
|
const phaseUpdates = phaseUpdatesForClosedBatch(text, batch);
|
|
589
652
|
if (!phaseUpdates.ok) {
|
|
590
653
|
return refusal("plan-exec.batch-close", `${phaseUpdates.failure.message} — ${phaseUpdates.failure.action}`, canonicalJson({ failure: phaseUpdates.failure }));
|
|
@@ -623,6 +686,26 @@ async function closeBatch(deps, run) {
|
|
|
623
686
|
state,
|
|
624
687
|
};
|
|
625
688
|
}
|
|
689
|
+
/**
|
|
690
|
+
* The batch this close is about: the one still unpublished, or — on a re-entry —
|
|
691
|
+
* the one whose publication landed while the cursor never moved past its close.
|
|
692
|
+
*
|
|
693
|
+
* The second case is the write that failed AFTER the effect: the plan already
|
|
694
|
+
* carries the ticks and `validada`, the batch its after-digest, and only the run's
|
|
695
|
+
* cursor stayed on `batch-close`. It is found by counting the closes the cursor
|
|
696
|
+
* really walked, not by `batch_loop.iteration`, which after the publication
|
|
697
|
+
* already names the NEXT batch — or nothing, when it was the last one. The
|
|
698
|
+
* publisher then confirms it through its own already-applied path.
|
|
699
|
+
*/
|
|
700
|
+
function batchToClose(state) {
|
|
701
|
+
const batches = state.batches ?? [];
|
|
702
|
+
const open = batches.find((batch) => batch.published_plan_digest === undefined);
|
|
703
|
+
if (open !== undefined)
|
|
704
|
+
return open;
|
|
705
|
+
const walked = state.applied.filter((id) => id === "plan-exec.batch-close").length;
|
|
706
|
+
const published = batches.filter((batch) => batch.published_plan_digest !== undefined);
|
|
707
|
+
return published.length > walked ? published.at(-1) : undefined;
|
|
708
|
+
}
|
|
626
709
|
/**
|
|
627
710
|
* Seal what the plan owes into the run, once the batch loop has ended.
|
|
628
711
|
*
|
|
@@ -802,8 +885,8 @@ export async function planDonePrecondition(deps, path, session) {
|
|
|
802
885
|
// And the command is READ from the projection, not spelled here. The two
|
|
803
886
|
// agreed by accident: at an internal boundary the projection happens to
|
|
804
887
|
// return exactly `aw flow advance --code <NNN>`. It does not have to — a
|
|
805
|
-
//
|
|
806
|
-
// the projection knows that. Synthesizing it was the third derivation this
|
|
888
|
+
// run older than v11 refuses a bare `advance` and needs `aw flow restart`,
|
|
889
|
+
// and only the projection knows that. Synthesizing it was the third derivation this
|
|
807
890
|
// phase set out to remove.
|
|
808
891
|
const run = await projectRun(deps.fs, deps.paths, session);
|
|
809
892
|
const exit = obligationExit(plan.reconciliation, {
|