@tacuchi/agent-workflow-cli 21.6.0 → 21.7.1
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/application/artifacts-service.js +10 -0
- package/dist/application/artifacts-service.js.map +1 -1
- package/dist/application/capability/design-handler.js +532 -22
- package/dist/application/capability/design-handler.js.map +1 -1
- package/dist/application/capability/dispatcher.js +20 -6
- package/dist/application/capability/dispatcher.js.map +1 -1
- package/dist/application/capability/durable-effect.js +23 -157
- package/dist/application/capability/durable-effect.js.map +1 -1
- package/dist/application/checkpoint-service.js +49 -3
- package/dist/application/checkpoint-service.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +5 -0
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/design/design-content-gate-service.js +134 -0
- package/dist/application/design/design-content-gate-service.js.map +1 -0
- package/dist/application/design/design-gate-service.js +18 -0
- package/dist/application/design/design-gate-service.js.map +1 -1
- package/dist/application/design/design-index-service.js +2 -0
- package/dist/application/design/design-index-service.js.map +1 -1
- package/dist/application/design/design-publish-service.js +91 -19
- package/dist/application/design/design-publish-service.js.map +1 -1
- package/dist/application/design/design-resolver-service.js +18 -1
- package/dist/application/design/design-resolver-service.js.map +1 -1
- package/dist/application/design/design-simple-service.js +217 -0
- package/dist/application/design/design-simple-service.js.map +1 -0
- package/dist/application/flow/advance.js +96 -11
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/flow-service.js +12 -1
- package/dist/application/flow/flow-service.js.map +1 -1
- package/dist/application/flow/internal-actions.js +221 -0
- package/dist/application/flow/internal-actions.js.map +1 -0
- package/dist/application/flow/internal-drive.js +293 -0
- package/dist/application/flow/internal-drive.js.map +1 -0
- package/dist/application/flow/submit.js +242 -84
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/local-proposal.js +171 -0
- package/dist/application/local-proposal.js.map +1 -0
- package/dist/application/parsers/decisiones.js +13 -0
- package/dist/application/parsers/decisiones.js.map +1 -1
- package/dist/application/paths-service.js +11 -1
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/resume-service.js +22 -26
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/semantic-operation/protocol.js +14 -4
- package/dist/application/semantic-operation/protocol.js.map +1 -1
- package/dist/application/session-artifacts.js +53 -0
- package/dist/application/session-artifacts.js.map +1 -1
- package/dist/application/session-close-service.js +5 -0
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/application/session-narrative.js +294 -0
- package/dist/application/session-narrative.js.map +1 -0
- package/dist/application/status-service.js +1 -0
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/workline-index-service.js +2 -0
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/cli/commands/capability.js +1 -1
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/designs.js +29 -5
- package/dist/cli/commands/designs.js.map +1 -1
- package/dist/cli/commands/flow.js +14 -0
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/session-artifacts.js +55 -2
- package/dist/cli/commands/session-artifacts.js.map +1 -1
- package/dist/cli/parser.js +1 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/domain/design/capability.js +35 -4
- package/dist/domain/design/capability.js.map +1 -1
- package/dist/domain/design/direct.js.map +1 -1
- package/dist/domain/design/expansion.js +137 -0
- package/dist/domain/design/expansion.js.map +1 -0
- package/dist/domain/design/manifest.js +61 -8
- package/dist/domain/design/manifest.js.map +1 -1
- package/dist/domain/design/reference.js +57 -10
- package/dist/domain/design/reference.js.map +1 -1
- package/dist/domain/design/simple.js +164 -0
- package/dist/domain/design/simple.js.map +1 -0
- package/dist/domain/flow/answer.js +90 -12
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +266 -60
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/authorization.js +36 -15
- package/dist/domain/flow/authorization.js.map +1 -1
- package/dist/domain/flow/directive.js +10 -6
- package/dist/domain/flow/directive.js.map +1 -1
- package/dist/domain/flow/execution-result.js +72 -0
- package/dist/domain/flow/execution-result.js.map +1 -0
- package/dist/domain/flow/run-state.js +165 -13
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/host-verification.js +8 -8
- package/dist/domain/host-verification.js.map +1 -1
- package/dist/domain/proposal.js +91 -0
- package/dist/domain/proposal.js.map +1 -0
- package/dist/domain/session/narrative.js +126 -0
- package/dist/domain/session/narrative.js.map +1 -0
- package/package.json +1 -1
- package/skills/w/SKILL.md +1 -1
- package/skills/w/loops/CHASSIS.md +1 -1
- package/skills/w/loops/plan-new-loop/LOOP.md +5 -6
- package/skills/w/loops/plan-refine-loop/LOOP.md +7 -7
- package/skills/w/loops/spec-refine-loop/LOOP.md +6 -4
- package/skills/w/modules/DESIGN-REFERENCES.md +50 -56
- package/skills/w/roles/design/CONTRACT.md +73 -6
- package/skills/w/roles/design/ROLE.md +21 -3
- package/skills/w/schemas/design/design-manifest.v1.schema.json +4 -0
|
@@ -20,15 +20,23 @@
|
|
|
20
20
|
* carrying its code, message and action — with `ok: false` the host never calls
|
|
21
21
|
* `renderHuman`, and a boundary nobody can see is a boundary that did not happen.
|
|
22
22
|
*/
|
|
23
|
+
import { join } from "node:path";
|
|
24
|
+
import { authorizeEffects } from "../../domain/capability/effects.js";
|
|
23
25
|
import { AttemptLedger } from "../../domain/capability/protocol.js";
|
|
24
26
|
import { claimedSeal, parseFlowAnswer } from "../../domain/flow/answer.js";
|
|
25
|
-
import { actionOf,
|
|
27
|
+
import { actionOf, internalActionOf, journeyOfFlow, proposalContractOf, publishApprovalOf, } from "../../domain/flow/authority.js";
|
|
26
28
|
import { effectApprovalDigest } from "../../domain/flow/authorization.js";
|
|
27
29
|
import { PAUSE_LABEL, STOP_LABEL, stepOf, } from "../../domain/flow/directive.js";
|
|
28
|
-
import {
|
|
30
|
+
import { executionVerdict } from "../../domain/flow/execution-result.js";
|
|
31
|
+
import { applyTransition, checkAgainstJourney, withApproval, withAttempt, withBoundary, withObservation, withProposal, } from "../../domain/flow/run-state.js";
|
|
32
|
+
import { destinationsOf, sealProposal } from "../../domain/proposal.js";
|
|
33
|
+
import { baseDigest } from "../../domain/proposal.js";
|
|
34
|
+
import { checkSafeRelativePath } from "../../domain/safe-path.js";
|
|
35
|
+
import { resolveWorkspaceRootFrom } from "../paths-service.js";
|
|
29
36
|
import { semanticDigest } from "../semantic-operation/protocol.js";
|
|
30
37
|
import { resolveSessionTarget } from "../session-resolver.js";
|
|
31
|
-
import { actionDigest, advanceFlowRun, directiveFor, resolveBoundary, } from "./advance.js";
|
|
38
|
+
import { actionDigest, advanceFlowRun, directiveFor, effectsOfTransition, resolveBoundary, } from "./advance.js";
|
|
39
|
+
import { driveInternalActions } from "./internal-drive.js";
|
|
32
40
|
import { applyUnderLock, locateRun } from "./run-state-service.js";
|
|
33
41
|
export async function submitFlow(fs, paths, input) {
|
|
34
42
|
const resolution = await resolveSessionTarget(fs, paths, {
|
|
@@ -40,6 +48,11 @@ export async function submitFlow(fs, paths, input) {
|
|
|
40
48
|
if (resolution.outcome !== "resolved")
|
|
41
49
|
return { ok: false, session: resolution };
|
|
42
50
|
const location = locateRun(paths, resolution.session.folder);
|
|
51
|
+
// Read the destinations BEFORE taking the lock, so the decision below stays
|
|
52
|
+
// pure. What this observation buys is the honest half of the preview — whether
|
|
53
|
+
// a write creates or replaces, and what it would replace — and the race it
|
|
54
|
+
// leaves open is exactly the one the compare-and-swap closes at publish time.
|
|
55
|
+
const snapshot = await observeDestinations(fs, paths, input.raw);
|
|
43
56
|
const applied = await applyUnderLock(fs, location, (current) => {
|
|
44
57
|
if (current === null) {
|
|
45
58
|
return {
|
|
@@ -51,13 +64,82 @@ export async function submitFlow(fs, paths, input) {
|
|
|
51
64
|
},
|
|
52
65
|
};
|
|
53
66
|
}
|
|
54
|
-
return decide(current, input);
|
|
67
|
+
return decide(current, input, snapshot);
|
|
55
68
|
});
|
|
56
69
|
if (!applied.ok)
|
|
57
70
|
return { ok: false, failure: applied.failure };
|
|
58
|
-
|
|
71
|
+
// An answer that ADVANCED the run can leave it standing on an internal action —
|
|
72
|
+
// an approval of the close is exactly that — and stopping here would hand back a
|
|
73
|
+
// step this same process is about to be asked to run.
|
|
74
|
+
//
|
|
75
|
+
// A REFUSED answer never drives: the directive it produced is the refusal, and
|
|
76
|
+
// replacing it with whatever the CLI did next would tell the sender their answer
|
|
77
|
+
// was fine. The run stays where the refusal left it.
|
|
78
|
+
if (!applied.value.advanced)
|
|
79
|
+
return { ok: true, directive: applied.value.directive };
|
|
80
|
+
const driven = await driveInternalActions(fs, location, input.executor, {
|
|
81
|
+
ok: true,
|
|
82
|
+
state: applied.state,
|
|
83
|
+
value: applied.value.directive,
|
|
84
|
+
});
|
|
85
|
+
if (!driven.ok)
|
|
86
|
+
return { ok: false, failure: driven.failure };
|
|
87
|
+
return { ok: true, directive: driven.value };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Stat the destinations the payload names, without trusting anything else in it.
|
|
91
|
+
*
|
|
92
|
+
* The paths come from raw JSON and are used for nothing but deciding which files
|
|
93
|
+
* to look at; whether each one is a LEGAL destination is settled later by the
|
|
94
|
+
* boundary's own allowlist. Doing it here is what keeps the whole decision —
|
|
95
|
+
* including the seal — reproducible without a filesystem.
|
|
96
|
+
*
|
|
97
|
+
* The shape check is NOT redundant with that allowlist. Reading is an effect, and
|
|
98
|
+
* an absolute path or a `..` would have this function open a file outside the
|
|
99
|
+
* workspace before anybody decided the destination was admissible. Nothing would
|
|
100
|
+
* leak — the entry is discarded when validation rejects the path — but "read only
|
|
101
|
+
* what you were asked to read" is not a property to leave resting on what happens
|
|
102
|
+
* to the result afterwards.
|
|
103
|
+
*/
|
|
104
|
+
async function observeDestinations(fs, paths, raw) {
|
|
105
|
+
const snapshot = new Map();
|
|
106
|
+
let parsed;
|
|
107
|
+
try {
|
|
108
|
+
parsed = JSON.parse(raw);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return snapshot;
|
|
112
|
+
}
|
|
113
|
+
const artifacts = parsed?.artifacts;
|
|
114
|
+
if (!Array.isArray(artifacts) || artifacts.length === 0)
|
|
115
|
+
return snapshot;
|
|
116
|
+
const root = await resolveWorkspaceRootFrom(fs, paths);
|
|
117
|
+
for (const entry of artifacts) {
|
|
118
|
+
const path = entry?.path;
|
|
119
|
+
if (typeof path !== "string")
|
|
120
|
+
continue;
|
|
121
|
+
const relative = path.trim();
|
|
122
|
+
if (relative.length === 0 || snapshot.has(relative))
|
|
123
|
+
continue;
|
|
124
|
+
if (!checkSafeRelativePath(relative).ok)
|
|
125
|
+
continue;
|
|
126
|
+
const absolute = join(root, relative);
|
|
127
|
+
if (!(await fs.exists(absolute))) {
|
|
128
|
+
snapshot.set(relative, { exists: false, digest: "" });
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
snapshot.set(relative, { exists: true, digest: baseDigest(await fs.readText(absolute)) });
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Unreadable is not "absent": treating it as a fresh create would propose a
|
|
136
|
+
// silent overwrite of something nobody could show the person.
|
|
137
|
+
snapshot.set(relative, { exists: true, digest: "" });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return snapshot;
|
|
59
141
|
}
|
|
60
|
-
function decide(state, input) {
|
|
142
|
+
function decide(state, input, snapshot) {
|
|
61
143
|
const journey = journeyOfFlow(state.flow);
|
|
62
144
|
const incoherent = checkAgainstJourney(state, journey);
|
|
63
145
|
if (incoherent !== null)
|
|
@@ -100,8 +182,20 @@ function decide(state, input) {
|
|
|
100
182
|
const parsed = admissible;
|
|
101
183
|
// 3 · Apply: the answer is the INPUT to the CLI's decision, so what advances is
|
|
102
184
|
// the transition, never the sender's own verdict.
|
|
185
|
+
//
|
|
186
|
+
// Two things can happen here besides advancing, and both are approvals: the
|
|
187
|
+
// classic one over an effect class named by a boundary, and the one this phase
|
|
188
|
+
// added — a single `Aprobar y guardar` that grants over the exact proposal the
|
|
189
|
+
// preview showed. Neither ever applies the step by itself.
|
|
190
|
+
const sealed = sealFrom(state, resolved.stopped, parsed.answer, snapshot);
|
|
191
|
+
if ("failure" in sealed) {
|
|
192
|
+
return reject(state, resolved, sealed.failure.message, {
|
|
193
|
+
code: sealed.failure.code,
|
|
194
|
+
action: sealed.failure.action,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
103
197
|
const granted = resolved.kind === "authorization" ? (resolved.authorization?.planned ?? []) : [];
|
|
104
|
-
const approved =
|
|
198
|
+
const approved = grantOf(sealed.state, resolved, parsed.answer, granted);
|
|
105
199
|
// An approval NEVER applies a step by itself. Two reasons it must hold, and the
|
|
106
200
|
// second is the one this phase exists for: doctrine may still own the rule, or
|
|
107
201
|
// the step may be delegated — and an approval that applied a delegated
|
|
@@ -113,6 +207,122 @@ function decide(state, input) {
|
|
|
113
207
|
? holdAfterApproval(approved, journey, identity)
|
|
114
208
|
: applyAndAdvance(approved, journey, resolved.stopped, identity, parsed.answer);
|
|
115
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Seat the proposal an authoring answer just handed over — sealed, not believed.
|
|
212
|
+
*
|
|
213
|
+
* Three things are DERIVED here and none of them is taken from the sender: whether
|
|
214
|
+
* each destination already exists (so the preview says "replaces" only when it
|
|
215
|
+
* does), the compare-and-swap base of every destination that does, and the effect
|
|
216
|
+
* classes the write really exercises. The row's declared effects are the ceiling,
|
|
217
|
+
* and a proposal that would reach past it is refused rather than quietly widened —
|
|
218
|
+
* a save row that never declared `mutate_overwrite` may not overwrite because the
|
|
219
|
+
* bytes happened to land on an existing file.
|
|
220
|
+
*/
|
|
221
|
+
function sealFrom(state, stopped, answer, snapshot) {
|
|
222
|
+
const contract = proposalContractOf(stopped);
|
|
223
|
+
if (contract === null || answer.artifacts.length === 0)
|
|
224
|
+
return { state };
|
|
225
|
+
// A destination nobody looked at cannot be previewed. Defaulting it to "creates"
|
|
226
|
+
// would be the one line of the preview a person most needs to trust, guessed —
|
|
227
|
+
// so an unobserved path is a refusal, not a default.
|
|
228
|
+
const unseen = answer.artifacts.filter((artifact) => !snapshot.has(artifact.path));
|
|
229
|
+
if (unseen.length > 0) {
|
|
230
|
+
return {
|
|
231
|
+
failure: {
|
|
232
|
+
code: "FLOW_PROPOSAL_DESTINATION_UNOBSERVED",
|
|
233
|
+
message: `no se pudo mirar el estado vigente de ${unseen.map((a) => a.path).join(", ")}`,
|
|
234
|
+
action: "volvé a enviar la propuesta con destinos relativos dentro del workspace",
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
const artifacts = answer.artifacts.map((artifact) => ({
|
|
239
|
+
path: artifact.path,
|
|
240
|
+
content: artifact.content,
|
|
241
|
+
overwrite: snapshot.get(artifact.path)?.exists === true,
|
|
242
|
+
}));
|
|
243
|
+
const effects = [];
|
|
244
|
+
if (artifacts.some((a) => !a.overwrite))
|
|
245
|
+
effects.push("local_additive");
|
|
246
|
+
if (artifacts.some((a) => a.overwrite))
|
|
247
|
+
effects.push("mutate_overwrite");
|
|
248
|
+
const beyond = effects.filter((effect) => !contract.effects.includes(effect));
|
|
249
|
+
if (beyond.length > 0) {
|
|
250
|
+
return {
|
|
251
|
+
failure: {
|
|
252
|
+
code: "FLOW_PROPOSAL_BEYOND_CONTRACT",
|
|
253
|
+
message: `la propuesta ejercería ${beyond.join(", ")} y esta frontera no lo declara`,
|
|
254
|
+
action: `proponé sólo efectos de: ${contract.effects.join(", ")}`,
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
const bases = artifacts
|
|
259
|
+
.filter((a) => a.overwrite)
|
|
260
|
+
.map((a) => ({ path: a.path, digest: snapshot.get(a.path)?.digest ?? "" }));
|
|
261
|
+
const unreadable = bases.filter((base) => base.digest.length === 0);
|
|
262
|
+
if (unreadable.length > 0) {
|
|
263
|
+
return {
|
|
264
|
+
failure: {
|
|
265
|
+
code: "FLOW_PROPOSAL_BASE_UNREADABLE",
|
|
266
|
+
message: `no se pudo leer el contenido vigente de ${unreadable.map((b) => b.path).join(", ")}`,
|
|
267
|
+
action: "no se propone sobrescribir lo que no se puede mostrar: revisá permisos",
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
const authorization = authorizeEffects(effects.map((effect) => ({
|
|
272
|
+
class: effect,
|
|
273
|
+
idempotent: true,
|
|
274
|
+
authorization: "invocation",
|
|
275
|
+
approval: "none",
|
|
276
|
+
})), { sensitiveSources: false, scopeExpanded: false });
|
|
277
|
+
return {
|
|
278
|
+
state: withProposal(state, sealProposal({
|
|
279
|
+
operation: `flow.${stopped.id}`,
|
|
280
|
+
artifacts,
|
|
281
|
+
bases,
|
|
282
|
+
// No flow row reads a sensitive source or reaches past what it shows
|
|
283
|
+
// today. The fields are sealed anyway: the day one does, the digest
|
|
284
|
+
// changes and every grant given under the old scope stops matching.
|
|
285
|
+
scope: { sensitive_sources: false, scope_expanded: false },
|
|
286
|
+
effects,
|
|
287
|
+
requiresApproval: authorization.needsPreflight,
|
|
288
|
+
})),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* The grant this answer produced, scoped to what it was given over.
|
|
293
|
+
*
|
|
294
|
+
* `Aprobar y guardar` at a publishing row is one decision that covers the whole
|
|
295
|
+
* preview, and the seal is the proposal's own: a later boundary, or the same
|
|
296
|
+
* proposal after any material edit, does not match it. Choosing anything else —
|
|
297
|
+
* `Refinar`, `Compactar`, `Cerrar` — grants nothing, which is what makes
|
|
298
|
+
* "`Refinar` produces no effects" a property rather than a promise.
|
|
299
|
+
*/
|
|
300
|
+
function grantOf(state, resolved, answer, granted) {
|
|
301
|
+
const stopped = resolved.stopped;
|
|
302
|
+
const proposal = state.proposal;
|
|
303
|
+
const approve = stopped === null ? null : publishApprovalOf(stopped);
|
|
304
|
+
if (approve !== null && proposal !== null) {
|
|
305
|
+
if (answer.choice === approve) {
|
|
306
|
+
return withApproval(state, {
|
|
307
|
+
digest: proposal.digest,
|
|
308
|
+
destinations: destinationsOf(proposal),
|
|
309
|
+
classes: [...proposal.requires_approval],
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
// Declining unseats the proposal, and that is what makes `Refinar` cost
|
|
313
|
+
// nothing: the publication downstream finds nothing to publish and is skipped
|
|
314
|
+
// saying so, instead of stopping to ask for an authorization over bytes the
|
|
315
|
+
// person just turned down.
|
|
316
|
+
return withProposal(state, null);
|
|
317
|
+
}
|
|
318
|
+
if (granted.length === 0 || resolved.authorization === null)
|
|
319
|
+
return state;
|
|
320
|
+
return withApproval(state, {
|
|
321
|
+
digest: resolved.authorization.seal,
|
|
322
|
+
destinations: [],
|
|
323
|
+
classes: [...granted],
|
|
324
|
+
});
|
|
325
|
+
}
|
|
116
326
|
/**
|
|
117
327
|
* Everything that decides whether this payload may become a transition.
|
|
118
328
|
*
|
|
@@ -134,6 +344,7 @@ function admit(state, resolved, stopped, input, spent) {
|
|
|
134
344
|
approval: input.approval,
|
|
135
345
|
expectedApproval,
|
|
136
346
|
action: resolved.action,
|
|
347
|
+
request: resolved.request,
|
|
137
348
|
});
|
|
138
349
|
if (!parsed.ok) {
|
|
139
350
|
// An answer the boundary refused IS an attempt spent: it is the exact event
|
|
@@ -170,85 +381,16 @@ function admit(state, resolved, stopped, input, spent) {
|
|
|
170
381
|
// run with its evidence and its whole effect keeps the boundary standing: the
|
|
171
382
|
// work stays pending, with the recovery the action declared.
|
|
172
383
|
if (resolved.kind === "execution") {
|
|
173
|
-
|
|
384
|
+
// The row's `effects` are the ceiling and the sealed proposal is what really
|
|
385
|
+
// happens: demanding an overwrite from a publication that only creates files
|
|
386
|
+
// would leave the transition pending for an effect nobody could produce.
|
|
387
|
+
const verdict = executionVerdict(parsed.answer.result, resolved.action, effectsOfTransition(state, stopped));
|
|
174
388
|
if (verdict !== null) {
|
|
175
389
|
return { decision: reject(state, resolved, verdict.message, verdict.detail, spent) };
|
|
176
390
|
}
|
|
177
391
|
}
|
|
178
392
|
return parsed;
|
|
179
393
|
}
|
|
180
|
-
/**
|
|
181
|
-
* Why this execution result does not apply the transition — or `null` when it does.
|
|
182
|
-
*
|
|
183
|
-
* Three verdicts, and each one is the answer to a way a run could claim work that
|
|
184
|
-
* never happened: an outcome that is not `completed` did not finish; evidence that
|
|
185
|
-
* is missing, failed or empty means nothing came back from the tool; and an effect
|
|
186
|
-
* ledger short of what the row declared means the invocation got partway. The
|
|
187
|
-
* recovery the action declared travels in every one of them, because a run stopped
|
|
188
|
-
* without a next step is the dead end this whole contract refuses.
|
|
189
|
-
*/
|
|
190
|
-
function executionVerdict(answer, action, declared) {
|
|
191
|
-
const result = answer.result;
|
|
192
|
-
if (result === null || action === null) {
|
|
193
|
-
return {
|
|
194
|
-
message: "la respuesta no trae el resultado de la invocación",
|
|
195
|
-
detail: {
|
|
196
|
-
code: "FLOW_RESULT_INVALID",
|
|
197
|
-
action: "devolvé el resultado real de la acción: outcome, invocación, validaciones y efectos",
|
|
198
|
-
},
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
if (result.outcome !== "completed") {
|
|
202
|
-
return {
|
|
203
|
-
message: `la invocación devolvió '${result.outcome}': la transición sigue pendiente`,
|
|
204
|
-
detail: {
|
|
205
|
-
code: "FLOW_EXECUTION_NOT_COMPLETED",
|
|
206
|
-
action: action.recovery,
|
|
207
|
-
outcome: result.outcome,
|
|
208
|
-
},
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
const missing = action.evidence.filter((id) => {
|
|
212
|
-
const found = result.validations.find((validation) => validation.id === id);
|
|
213
|
-
return found === undefined || !found.passed || (found.detail ?? "").trim().length === 0;
|
|
214
|
-
});
|
|
215
|
-
if (missing.length > 0) {
|
|
216
|
-
return {
|
|
217
|
-
message: `falta la evidencia real de ${missing.join(", ")}`,
|
|
218
|
-
detail: {
|
|
219
|
-
code: "FLOW_EVIDENCE_MISSING",
|
|
220
|
-
action: `devolvé cada validación exigida con 'passed' y su 'detail' — la salida de la herramienta, no una afirmación. ${action.recovery}`,
|
|
221
|
-
},
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
const applied = new Set(result.effects.applied);
|
|
225
|
-
const partial = declared.filter((effect) => !applied.has(effect));
|
|
226
|
-
if (partial.length > 0) {
|
|
227
|
-
return {
|
|
228
|
-
message: `la invocación declara completa pero no aplicó ${partial.join(", ")}`,
|
|
229
|
-
detail: {
|
|
230
|
-
code: "FLOW_EFFECT_PARTIAL",
|
|
231
|
-
action: action.recovery,
|
|
232
|
-
outcome: "needs_input",
|
|
233
|
-
},
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
// Completeness is not an outcome — it answers "does what came back cover what
|
|
237
|
-
// was asked?" — so an attempt that FINISHED can still hand back a partial
|
|
238
|
-
// output. Ignoring that here would let the run credit a search that returned
|
|
239
|
-
// half its matches as if it had returned all of them.
|
|
240
|
-
if (result.output?.completeness === "partial") {
|
|
241
|
-
return {
|
|
242
|
-
message: "la invocación terminó pero su salida declara cobertura parcial",
|
|
243
|
-
detail: {
|
|
244
|
-
code: "FLOW_EFFECT_PARTIAL",
|
|
245
|
-
action: action.recovery,
|
|
246
|
-
outcome: "needs_input",
|
|
247
|
-
},
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
394
|
/**
|
|
253
395
|
* Whether the sealed action changed underneath a run that is standing on it.
|
|
254
396
|
*
|
|
@@ -285,7 +427,7 @@ function holdAfterApproval(approved, journey, identity) {
|
|
|
285
427
|
const held = advanceFlowRun({ state: withAttempt(approved, identity), journey, applied: [] });
|
|
286
428
|
if (!held.ok)
|
|
287
429
|
return { ok: false, failure: held.failure };
|
|
288
|
-
return { ok: true, state: held.state, value: held.directive };
|
|
430
|
+
return { ok: true, state: held.state, value: { directive: held.directive, advanced: true } };
|
|
289
431
|
}
|
|
290
432
|
/** The answer survived: the transition applies and the run keeps advancing. */
|
|
291
433
|
function applyAndAdvance(approved, journey, stopped, identity, answer) {
|
|
@@ -295,7 +437,14 @@ function applyAndAdvance(approved, journey, stopped, identity, answer) {
|
|
|
295
437
|
let next = answer.signals.length > 0
|
|
296
438
|
? withObservation(approved, { transition: stopped.id, signals: answer.signals })
|
|
297
439
|
: approved;
|
|
298
|
-
next = applyTransition(next, stopped.id,
|
|
440
|
+
next = applyTransition(next, stopped.id, effectsOfTransition(next, stopped));
|
|
441
|
+
// A published proposal is spent, whoever published it. This is the degraded
|
|
442
|
+
// path — no internal executor, so the caller ran the write and returned its
|
|
443
|
+
// result — and leaving the proposal seated would keep a preview of bytes that
|
|
444
|
+
// are already on disk standing in front of the next boundary.
|
|
445
|
+
if (internalActionOf(stopped)?.operation === "proposal.publish") {
|
|
446
|
+
next = withProposal(next, null);
|
|
447
|
+
}
|
|
299
448
|
next = withAttempt(next, identity);
|
|
300
449
|
// The boundary follows the position, always: handing the engine a state whose
|
|
301
450
|
// boundary still names the transition just applied is exactly the incoherence
|
|
@@ -304,7 +453,11 @@ function applyAndAdvance(approved, journey, stopped, identity, answer) {
|
|
|
304
453
|
const advanced = advanceFlowRun({ state: next, journey, applied: [stepOf(stopped)] });
|
|
305
454
|
if (!advanced.ok)
|
|
306
455
|
return { ok: false, failure: advanced.failure };
|
|
307
|
-
return {
|
|
456
|
+
return {
|
|
457
|
+
ok: true,
|
|
458
|
+
state: advanced.state,
|
|
459
|
+
value: { directive: advanced.directive, advanced: true },
|
|
460
|
+
};
|
|
308
461
|
}
|
|
309
462
|
/**
|
|
310
463
|
* Whether this submission is a resend, judged by the ledger that already knows
|
|
@@ -392,7 +545,12 @@ function reject(state, resolved, message, detail, spent) {
|
|
|
392
545
|
...built.directive,
|
|
393
546
|
error: now.error ?? { code: detail.code, message, action: detail.action },
|
|
394
547
|
};
|
|
395
|
-
return {
|
|
548
|
+
return {
|
|
549
|
+
ok: true,
|
|
550
|
+
state: after,
|
|
551
|
+
value: { directive, advanced: false },
|
|
552
|
+
persist: spent !== undefined,
|
|
553
|
+
};
|
|
396
554
|
}
|
|
397
555
|
/**
|
|
398
556
|
* The attempt this submission is, in the terms `AttemptLedger` already validates.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/application/flow/submit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/application/flow/submit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Applying a sealed local proposal — the one path, for whoever proposed it.
|
|
3
|
+
*
|
|
4
|
+
* The capability dispatcher and the flow engine both reach here, and that is the
|
|
5
|
+
* point: two implementations of "check the approval, re-read the base, publish
|
|
6
|
+
* all-or-nothing" would be two answers to whether a publication was legitimate,
|
|
7
|
+
* and the weaker of the two would be the one that decides.
|
|
8
|
+
*
|
|
9
|
+
* What has to be true together before the first byte lands:
|
|
10
|
+
*
|
|
11
|
+
* - the approval was given over THIS proposal's seal, not a neighbouring one;
|
|
12
|
+
* - every class the taxonomy demands a preflight for was actually granted;
|
|
13
|
+
* - every base is still what the candidate output was computed from.
|
|
14
|
+
*
|
|
15
|
+
* Any of the three failing stops before `publishArtifacts` is called at all. And
|
|
16
|
+
* a base that moved is not automatically a refusal: a publication that already
|
|
17
|
+
* landed and whose confirmation never got written is the recoverable case F1
|
|
18
|
+
* introduced, so it is recognized as such instead of being reported as a
|
|
19
|
+
* conflict nobody can resolve.
|
|
20
|
+
*/
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import { baseDigest } from "../domain/proposal.js";
|
|
23
|
+
import { withCwdLock } from "./lock-service.js";
|
|
24
|
+
import { publishArtifacts } from "./semantic-operation/publish.js";
|
|
25
|
+
export async function applyLocalProposal(fs, paths, input) {
|
|
26
|
+
const gate = checkApproval(input);
|
|
27
|
+
if (gate !== null)
|
|
28
|
+
return { ok: false, failure: gate, applied: [] };
|
|
29
|
+
const applied = appliedClasses(input);
|
|
30
|
+
if (await alreadyLanded(fs, input.root, input.proposal.artifacts)) {
|
|
31
|
+
return {
|
|
32
|
+
ok: true,
|
|
33
|
+
result: { written: [], applied, already_applied: true },
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const stale = await checkBases(fs, input);
|
|
37
|
+
if (stale !== null)
|
|
38
|
+
return { ok: false, failure: stale, applied: [] };
|
|
39
|
+
const outcome = await withCwdLock(fs, paths, async () => publishArtifacts(fs, input.root, publishable(input.proposal.artifacts)));
|
|
40
|
+
if ("error" in outcome) {
|
|
41
|
+
return {
|
|
42
|
+
ok: false,
|
|
43
|
+
failure: {
|
|
44
|
+
code: "PROPOSAL_LOCKED",
|
|
45
|
+
message: outcome.error,
|
|
46
|
+
action: "esperá a que se libere el lock del workspace y volvé a aplicar",
|
|
47
|
+
},
|
|
48
|
+
applied: [],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (!outcome.ok) {
|
|
52
|
+
// `publishArtifacts` is all-or-nothing and rolls back, so nothing landed —
|
|
53
|
+
// and saying so explicitly is what makes the empty list a claim rather than
|
|
54
|
+
// an omission.
|
|
55
|
+
return {
|
|
56
|
+
ok: false,
|
|
57
|
+
failure: {
|
|
58
|
+
code: outcome.failure.code,
|
|
59
|
+
message: outcome.failure.message,
|
|
60
|
+
action: outcome.failure.action,
|
|
61
|
+
},
|
|
62
|
+
applied: [],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
ok: true,
|
|
67
|
+
result: { written: outcome.value.written, applied, already_applied: false },
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function publishable(artifacts) {
|
|
71
|
+
return artifacts.map((a) => ({ path: a.path, content: a.content, overwrite: a.overwrite }));
|
|
72
|
+
}
|
|
73
|
+
/** Only the durable classes, and only the ones somebody really authorized. */
|
|
74
|
+
function appliedClasses(input) {
|
|
75
|
+
return [...new Set([...input.selfAuthorized, ...input.approval.granted])].filter((c) => input.proposal.effects.includes(c));
|
|
76
|
+
}
|
|
77
|
+
function checkApproval(input) {
|
|
78
|
+
if (input.approval.digest !== input.proposal.digest) {
|
|
79
|
+
return {
|
|
80
|
+
code: "PROPOSAL_APPROVAL_MISMATCH",
|
|
81
|
+
message: "lo aprobado no es la propuesta que se va a escribir",
|
|
82
|
+
action: "volvé a preparar la propuesta y aprobá exactamente la vista previa que se muestra",
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const missing = input.proposal.requires_approval.filter((c) => !input.approval.granted.includes(c));
|
|
86
|
+
if (missing.length > 0) {
|
|
87
|
+
return {
|
|
88
|
+
code: "PROPOSAL_APPROVAL_MISSING",
|
|
89
|
+
message: `falta aprobación visible para: ${missing.join(", ")}`,
|
|
90
|
+
action: "mostrá datos, destino y efecto, y pedí aprobación antes de aplicar",
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Whether every destination already holds exactly these bytes.
|
|
97
|
+
*
|
|
98
|
+
* This is the re-entry case, not an optimization. A process that published and
|
|
99
|
+
* died before its confirmation was persisted comes back with the base moved — by
|
|
100
|
+
* its own write — and refusing it as stale would strand a run on a conflict that
|
|
101
|
+
* does not exist. Checked on the artifacts and never on the bases, because the
|
|
102
|
+
* question is "is the result already there", and only the exact bytes answer it:
|
|
103
|
+
* a destination holding anything else is not this publication.
|
|
104
|
+
*/
|
|
105
|
+
async function alreadyLanded(fs, root, artifacts) {
|
|
106
|
+
for (const artifact of artifacts) {
|
|
107
|
+
const absolute = join(root, artifact.path);
|
|
108
|
+
if (!(await fs.exists(absolute)))
|
|
109
|
+
return false;
|
|
110
|
+
try {
|
|
111
|
+
if ((await fs.readText(absolute)) !== artifact.content)
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return artifacts.length > 0;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Every base has to still be the base.
|
|
122
|
+
*
|
|
123
|
+
* A candidate output computed from revision N and published on top of revision
|
|
124
|
+
* N+1 is a silent overwrite of whatever happened in between — the reason the
|
|
125
|
+
* compare-and-swap exists at all. Re-read at apply, never trusted from prepare.
|
|
126
|
+
*/
|
|
127
|
+
async function checkBases(fs, input) {
|
|
128
|
+
for (const base of input.proposal.bases) {
|
|
129
|
+
const absolute = join(input.root, base.path);
|
|
130
|
+
if (!(await fs.exists(absolute))) {
|
|
131
|
+
return {
|
|
132
|
+
code: "PROPOSAL_BASE_GONE",
|
|
133
|
+
message: `la base '${base.path}' ya no existe`,
|
|
134
|
+
action: "volvé a preparar la operación sobre la base vigente",
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const current = baseDigest(await fs.readText(absolute));
|
|
138
|
+
if (current !== base.digest) {
|
|
139
|
+
return {
|
|
140
|
+
code: "PROPOSAL_BASE_STALE",
|
|
141
|
+
message: `'${base.path}' cambió después de preparar la propuesta`,
|
|
142
|
+
action: "volvé a preparar la operación sobre la base vigente y revisá el resultado",
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* What to say when something broke or was cancelled AFTER an effect landed.
|
|
150
|
+
*
|
|
151
|
+
* The failure mode this closes is the comfortable one: reporting a cancellation
|
|
152
|
+
* as if nothing had happened, because the operation "did not finish". An
|
|
153
|
+
* external step that already left the machine cannot be un-left, so the honest
|
|
154
|
+
* report enumerates it and hands back the reconciliation to run.
|
|
155
|
+
*/
|
|
156
|
+
export function reconcileAfterFailure(outcome, partial) {
|
|
157
|
+
if (partial.length === 0) {
|
|
158
|
+
return {
|
|
159
|
+
applied: [],
|
|
160
|
+
next_action: outcome === "cancelled"
|
|
161
|
+
? "no se aplicó ningún efecto: podés volver a intentar cuando quieras"
|
|
162
|
+
: "no se aplicó ningún efecto: corregí la causa del fallo y volvé a intentar",
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
const detail = partial.map((p) => `${p.class}: ${p.what}`).join("; ");
|
|
166
|
+
return {
|
|
167
|
+
applied: [...new Set(partial.map((p) => p.class))],
|
|
168
|
+
next_action: `quedaron efectos aplicados que hay que reconciliar a mano — ${detail}`,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=local-proposal.js.map
|