@osovv/vv-opencode 1.4.3-rc.0 → 1.4.3

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +15 -6
  3. package/dist/lib/orchestration.js +9 -5
  4. package/dist/lib/orchestration.js.map +1 -1
  5. package/dist/lib/spec-lint.d.ts +2 -64
  6. package/dist/lib/spec-lint.js +47 -45
  7. package/dist/lib/spec-lint.js.map +1 -1
  8. package/dist/lib/vvoc-preset-registry.d.ts +13 -1
  9. package/dist/lib/vvoc-preset-registry.js +11 -1
  10. package/dist/lib/vvoc-preset-registry.js.map +1 -1
  11. package/dist/lib/workflow-contract.d.ts +277 -0
  12. package/dist/lib/workflow-contract.js +636 -0
  13. package/dist/lib/workflow-contract.js.map +1 -0
  14. package/dist/plugins/system-context-injection/index.js +8 -0
  15. package/dist/plugins/system-context-injection/index.js.map +1 -1
  16. package/dist/plugins/workflow/authority.d.ts +99 -0
  17. package/dist/plugins/workflow/authority.js +435 -0
  18. package/dist/plugins/workflow/authority.js.map +1 -0
  19. package/dist/plugins/workflow/checkpoint-io.d.ts +10 -1
  20. package/dist/plugins/workflow/checkpoint-io.js +22 -3
  21. package/dist/plugins/workflow/checkpoint-io.js.map +1 -1
  22. package/dist/plugins/workflow/checkpoints.d.ts +5 -0
  23. package/dist/plugins/workflow/checkpoints.js +15 -4
  24. package/dist/plugins/workflow/checkpoints.js.map +1 -1
  25. package/dist/plugins/workflow/delegated.d.ts +7 -1
  26. package/dist/plugins/workflow/delegated.js +12 -6
  27. package/dist/plugins/workflow/delegated.js.map +1 -1
  28. package/dist/plugins/workflow/execution.d.ts +361 -0
  29. package/dist/plugins/workflow/execution.js +1807 -0
  30. package/dist/plugins/workflow/execution.js.map +1 -0
  31. package/dist/plugins/workflow/index.js +317 -104
  32. package/dist/plugins/workflow/index.js.map +1 -1
  33. package/dist/plugins/workflow/persistence.d.ts +15 -3
  34. package/dist/plugins/workflow/persistence.js +270 -34
  35. package/dist/plugins/workflow/persistence.js.map +1 -1
  36. package/dist/plugins/workflow/snapshots.js +3 -3
  37. package/dist/plugins/workflow/snapshots.js.map +1 -1
  38. package/dist/plugins/workflow/state.d.ts +13 -0
  39. package/dist/plugins/workflow/state.js +22 -5
  40. package/dist/plugins/workflow/state.js.map +1 -1
  41. package/dist/plugins/workflow/system-instruction.md +15 -1
  42. package/dist/plugins/workflow/tooling.d.ts +46 -1
  43. package/dist/plugins/workflow/tooling.js +822 -6
  44. package/dist/plugins/workflow/tooling.js.map +1 -1
  45. package/dist/plugins/workflow/transactions.d.ts +54 -0
  46. package/dist/plugins/workflow/transactions.js +147 -0
  47. package/dist/plugins/workflow/transactions.js.map +1 -0
  48. package/package.json +1 -1
  49. package/schemas/vvoc/v3.json +1 -1
  50. package/templates/agents/vv-controller.md +12 -7
  51. package/templates/skills/vv-execute/SKILL.md +4 -4
  52. package/templates/skills/vv-plan/SKILL.md +1 -1
  53. package/templates/skills/vv-spec/SKILL.md +2 -2
@@ -47,6 +47,14 @@ const UNIVERSAL_PRIMARY_SYSTEM_CONTEXTS = [
47
47
  "Report honest residual uncertainty: an unverified material condition is named as unverified, never presented as a passed check.",
48
48
  "</assumption_discipline>",
49
49
  ].join("\n"),
50
+ [
51
+ "<execution_source_and_authority>",
52
+ "Execution ownership, requirement source, and authority are distinct: a native spec/plan package, a provided plan, and the current conversation are all valid sources, and none of them by itself implies a different ownership model.",
53
+ "Required reviews are exactly those declared by the selected source, explicitly requested by the user, or explicitly registered by the controller; do not invent a universal final-review pair.",
54
+ "When the user explicitly authorizes autonomous completion, record it as a bounded advance authority with a finite shared reserve. Use it only after ordinary allowances are exhausted, disclose material decisions without turning each into a blocking question, and still respect reserved stops, host permissions, and destructive, publication, or credential operations.",
55
+ "Report completion honestly as controller-accepted when no independent review was assigned, and as independently reviewed only when every registered obligation actually passed for the current result.",
56
+ "</execution_source_and_authority>",
57
+ ].join("\n"),
50
58
  [
51
59
  "<correctness_obligations>",
52
60
  "For behavior changes, run a compact correctness cycle before reporting done: state the target effect, derive the material properties that must be preserved from the request and established contracts, identify the directly affected consumers, challenge at least one material assumption with a diagnostic counterexample, choose verification proportionate to the risk, report the observed result, and name the remaining uncertainty.",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/system-context-injection/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/system-context-injection/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { type WorkflowAuthorityExtension, type WorkflowAuthorityProvenance, type WorkflowAuthorityRecord, type WorkflowAuthorityRevocation, type WorkflowAuthorityScope, type WorkflowAuthorityStage, type WorkflowMessageClaim, type WorkflowReserveDebit, type WorkflowStageApproval } from "../../lib/workflow-contract.js";
2
+ /** Initial and per-extension advance recovery units shared by one authorized execution. */
3
+ export declare const ADVANCE_RECOVERY_RESERVE = 3;
4
+ export type AuthorityValidationErrorCode = "MISSING_IDENTITY" | "FOREIGN_SESSION" | "ASSISTANT_MESSAGE" | "SYNTHETIC_ONLY" | "IGNORED_MESSAGE" | "EMPTY_MESSAGE" | "MESSAGE_REPLAY" | "DUPLICATE_GRANT" | "AUTHORITY_NOT_FOUND" | "AUTHORITY_REVOKED" | "STALE_EXTENSION" | "RESERVE_EXHAUSTED" | "DUPLICATE_DEBIT" | "STAGE_NOT_DELEGATED" | "STAGE_RESERVED" | "INVALID_INPUT";
5
+ export type AuthorityOperationResult<T> = {
6
+ ok: true;
7
+ value: T;
8
+ } | {
9
+ ok: false;
10
+ code: AuthorityValidationErrorCode;
11
+ message: string;
12
+ };
13
+ /** Observable identity, timing, and eligibility metadata of one candidate root-user message. */
14
+ export interface AuthorityMessageSnapshot {
15
+ messageId: string;
16
+ sessionId: string;
17
+ /** Message author role as reported by the pinned SDK response. */
18
+ role: "user" | "assistant";
19
+ createdMs: number;
20
+ ignored: boolean;
21
+ /** True when the message contains only synthetic/placeholder user text. */
22
+ syntheticOnly: boolean;
23
+ textParts: string[];
24
+ }
25
+ /** Pure eligibility check for one candidate root-user instruction. */
26
+ export declare function validateAuthorityMessage(message: AuthorityMessageSnapshot, sessionId: string): AuthorityOperationResult<true>;
27
+ /**
28
+ * Initial grant recording the finite shared reserve. Creating the same
29
+ * authority again is idempotent only for an identical claim; a different
30
+ * authority for the same execution, or a replayed message under another
31
+ * execution, is rejected without manufacturing a new reserve.
32
+ */
33
+ export declare function grantAdvanceAuthority(input: {
34
+ authorityId: string;
35
+ runId: string;
36
+ sessionId: string;
37
+ message: AuthorityMessageSnapshot;
38
+ scope: WorkflowAuthorityScope;
39
+ existingAuthorities: readonly WorkflowAuthorityRecord[];
40
+ messageClaims: Map<string, WorkflowMessageClaim>;
41
+ nowMs?: number;
42
+ }): AuthorityOperationResult<{
43
+ record: WorkflowAuthorityRecord;
44
+ claim: WorkflowMessageClaim;
45
+ }>;
46
+ /** Total granted units across the initial reserve and extensions. */
47
+ export declare function advanceUnitsGranted(authority: WorkflowAuthorityRecord): number;
48
+ /** Debits consumed against one authority. */
49
+ export declare function advanceUnitsConsumed(authority: WorkflowAuthorityRecord, debits: readonly WorkflowReserveDebit[]): number;
50
+ /** Remaining usable units after debits; a full revocation disables all future use. */
51
+ export declare function advanceUnitsAvailable(authority: WorkflowAuthorityRecord, debits: readonly WorkflowReserveDebit[]): number;
52
+ /** Surviving delegatable stages after applying every narrowing revocation. */
53
+ export declare function effectiveAuthorityStages(authority: WorkflowAuthorityRecord): WorkflowAuthorityStage[];
54
+ /** Explicit finite extension bound to a new eligible instruction after the extended authority event. */
55
+ export declare function extendAdvanceAuthority(input: {
56
+ authority: WorkflowAuthorityRecord;
57
+ extensionId: string;
58
+ sessionId: string;
59
+ message: AuthorityMessageSnapshot;
60
+ messageClaims: Map<string, WorkflowMessageClaim>;
61
+ nowMs?: number;
62
+ }): AuthorityOperationResult<WorkflowAuthorityExtension>;
63
+ /** Propose one immutable one-unit reserve consumption for an exact target. */
64
+ export declare function proposeReserveDebit(input: {
65
+ authority: WorkflowAuthorityRecord;
66
+ debits: readonly WorkflowReserveDebit[];
67
+ recoveryId: string;
68
+ targetKind: "task" | "checkpoint";
69
+ targetId: string;
70
+ stage?: WorkflowAuthorityStage;
71
+ nowMs?: number;
72
+ }): AuthorityOperationResult<WorkflowReserveDebit>;
73
+ /** Fail-safe narrowing that cannot restore consumed units or broaden the scope. */
74
+ export declare function narrowAdvanceAuthority(input: {
75
+ authority: WorkflowAuthorityRecord;
76
+ revocationId: string;
77
+ reason: string;
78
+ narrowedStages?: WorkflowAuthorityStage[];
79
+ nowMs?: number;
80
+ }): AuthorityOperationResult<WorkflowAuthorityRevocation>;
81
+ /** Revoke future and unlaunched credits without erasing history. */
82
+ export declare function revokeAdvanceAuthority(input: {
83
+ authority: WorkflowAuthorityRecord;
84
+ revocationId: string;
85
+ reason: string;
86
+ nowMs?: number;
87
+ }): AuthorityOperationResult<WorkflowAuthorityRevocation>;
88
+ /** Whether a stage remains reserved for explicit user action. */
89
+ export declare function isStageReserved(scope: WorkflowAuthorityScope, stage: WorkflowAuthorityStage): boolean;
90
+ /** Record a truthful controller_delegated stage approval when authority covers the stage. */
91
+ export declare function proposeStageApproval(input: {
92
+ authority: WorkflowAuthorityRecord;
93
+ approvalId: string;
94
+ stage: WorkflowAuthorityStage;
95
+ artifactPath: string;
96
+ artifactSha256: string;
97
+ provenance: WorkflowAuthorityProvenance;
98
+ nowMs?: number;
99
+ }): AuthorityOperationResult<WorkflowStageApproval>;
@@ -0,0 +1,435 @@
1
+ // FILE: src/plugins/workflow/authority.ts
2
+ // VERSION: 1.0.0
3
+ // START_MODULE_CONTRACT
4
+ // PURPOSE: Bounded advance-execution authority and truthful stage-approval provenance: root-user message eligibility, one finite shared recovery reserve, explicit extension, fail-safe narrowing/revocation, replay/duplicate protection, one-unit reserve consumption, and controller-delegated versus user-observed stage records.
5
+ // SCOPE: Pure validation outcomes and proposed ledger transitions over authority records, session-wide message claims, and reserve debits. No native XML parsing, SDK transport, task dispatch, filesystem writes, or persistence. Runtime integration belongs to the plugin transaction layer.
6
+ // DEPENDS: [src/lib/workflow-contract.ts]
7
+ // LINKS: [M-WORKFLOW-AUTHORITY, M-WORKFLOW-CONTRACT, M-WORKFLOW-EXECUTION, V-M-WORKFLOW-AUTHORITY]
8
+ // ROLE: RUNTIME
9
+ // MAP_MODE: EXPORTS
10
+ // END_MODULE_CONTRACT
11
+ //
12
+ // START_MODULE_MAP
13
+ // ADVANCE_RECOVERY_RESERVE - Initial and per-extension advance recovery units shared by one authorized execution.
14
+ // AuthorityMessageSnapshot - Observable identity, timing, and eligibility metadata of one candidate root-user message.
15
+ // AuthorityValidationErrorCode - Coded reasons an authority operation is rejected.
16
+ // AuthorityOperationResult - Success value or a coded rejection.
17
+ // validateAuthorityMessage - Pure eligibility check for one candidate root-user instruction.
18
+ // grantAdvanceAuthority - Initial grant recording the finite reserve and its message claim.
19
+ // extendAdvanceAuthority - Explicit finite extension from a new eligible instruction.
20
+ // advanceUnitsGranted - Total granted units across the initial reserve and extensions.
21
+ // advanceUnitsConsumed - Debits consumed against one authority.
22
+ // advanceUnitsAvailable - Remaining usable units after debits and full revocation.
23
+ // effectiveAuthorityStages - Surviving delegatable stages after narrowing revocations.
24
+ // proposeReserveDebit - Propose one immutable one-unit reserve consumption for an exact target.
25
+ // narrowAdvanceAuthority - Fail-safe scope reduction that cannot restore consumed units.
26
+ // revokeAdvanceAuthority - Revoke future and unlaunched credits without erasing history.
27
+ // proposeStageApproval - Record a truthful controller_delegated stage approval when authority covers the stage.
28
+ // isStageReserved - Whether a stage remains reserved for explicit user action.
29
+ // END_MODULE_MAP
30
+ //
31
+ // START_CHANGE_SUMMARY
32
+ // LAST_CHANGE: [C-WORKFLOW-PLAN-INDEPENDENCE - Initial bounded advance-authority domain with a shared three-unit reserve, replay protection, and truthful stage provenance.]
33
+ // END_CHANGE_SUMMARY
34
+ import { isBoundedWorkflowId, WORKFLOW_TEXT_MAX_CHARS, } from "../../lib/workflow-contract.js";
35
+ // START_BLOCK_AUTHORITY_CONSTANTS
36
+ /** Initial and per-extension advance recovery units shared by one authorized execution. */
37
+ export const ADVANCE_RECOVERY_RESERVE = 3;
38
+ const AUTHORITY_STAGES = new Set([
39
+ "specification",
40
+ "planning",
41
+ "implementation",
42
+ "verification",
43
+ ]);
44
+ /** Pure eligibility check for one candidate root-user instruction. */
45
+ export function validateAuthorityMessage(message, sessionId) {
46
+ if (message === null || typeof message !== "object" || !isBoundedWorkflowId(message.messageId)) {
47
+ return {
48
+ ok: false,
49
+ code: "MISSING_IDENTITY",
50
+ message: "authorization message identity is missing",
51
+ };
52
+ }
53
+ if (message.sessionId !== sessionId) {
54
+ return {
55
+ ok: false,
56
+ code: "FOREIGN_SESSION",
57
+ message: "authorization message belongs to another session",
58
+ };
59
+ }
60
+ if (message.role !== "user") {
61
+ return {
62
+ ok: false,
63
+ code: "ASSISTANT_MESSAGE",
64
+ message: "only a root-user instruction can grant authority",
65
+ };
66
+ }
67
+ if (message.ignored) {
68
+ return {
69
+ ok: false,
70
+ code: "IGNORED_MESSAGE",
71
+ message: "ignored messages cannot grant authority",
72
+ };
73
+ }
74
+ if (message.syntheticOnly) {
75
+ return {
76
+ ok: false,
77
+ code: "SYNTHETIC_ONLY",
78
+ message: "synthetic-only messages cannot grant authority",
79
+ };
80
+ }
81
+ if (!Number.isFinite(message.createdMs) || message.createdMs <= 0) {
82
+ return {
83
+ ok: false,
84
+ code: "MISSING_IDENTITY",
85
+ message: "authorization message has no finite creation time",
86
+ };
87
+ }
88
+ const hasText = Array.isArray(message.textParts)
89
+ ? message.textParts.some((part) => typeof part === "string" && part.trim() !== "")
90
+ : false;
91
+ if (!hasText) {
92
+ return {
93
+ ok: false,
94
+ code: "EMPTY_MESSAGE",
95
+ message: "authorization message has no usable user text",
96
+ };
97
+ }
98
+ return { ok: true, value: true };
99
+ }
100
+ function validScope(scope, problems) {
101
+ if (!Array.isArray(scope.stages) || scope.stages.some((stage) => !AUTHORITY_STAGES.has(stage))) {
102
+ problems.push("scope.stages must be a subset of specification/planning/implementation/verification");
103
+ }
104
+ if (typeof scope.decisionScope !== "string" ||
105
+ scope.decisionScope.trim().length > WORKFLOW_TEXT_MAX_CHARS) {
106
+ problems.push("scope.decisionScope must be a bounded text description");
107
+ }
108
+ if (!Array.isArray(scope.fileBoundary)) {
109
+ problems.push("scope.fileBoundary must be an array");
110
+ }
111
+ if (!Array.isArray(scope.reservedStops) ||
112
+ scope.reservedStops.some((stage) => !AUTHORITY_STAGES.has(stage))) {
113
+ problems.push("scope.reservedStops must be a subset of the delegatable stages");
114
+ }
115
+ }
116
+ function claimMessage(message, runId, authorityId, claims, nowMs) {
117
+ const existing = claims.get(message.messageId);
118
+ if (existing) {
119
+ // Idempotent reuse for the same execution authority, replay rejection else.
120
+ if (existing.runId === runId && existing.authorityId === authorityId) {
121
+ return { ok: true, value: existing };
122
+ }
123
+ return {
124
+ ok: false,
125
+ code: "MESSAGE_REPLAY",
126
+ message: `message ${message.messageId} already funded authority for another operation`,
127
+ };
128
+ }
129
+ const claim = {
130
+ messageId: message.messageId,
131
+ runId,
132
+ authorityId,
133
+ claimedAt: new Date(nowMs).toISOString(),
134
+ };
135
+ claims.set(message.messageId, claim);
136
+ return { ok: true, value: claim };
137
+ }
138
+ /**
139
+ * Initial grant recording the finite shared reserve. Creating the same
140
+ * authority again is idempotent only for an identical claim; a different
141
+ * authority for the same execution, or a replayed message under another
142
+ * execution, is rejected without manufacturing a new reserve.
143
+ */
144
+ export function grantAdvanceAuthority(input) {
145
+ if (!isBoundedWorkflowId(input.authorityId) || !isBoundedWorkflowId(input.runId)) {
146
+ return {
147
+ ok: false,
148
+ code: "INVALID_INPUT",
149
+ message: "authorityId and runId must be bounded identities",
150
+ };
151
+ }
152
+ const eligibility = validateAuthorityMessage(input.message, input.sessionId);
153
+ if (!eligibility.ok)
154
+ return eligibility;
155
+ const problems = [];
156
+ validScope(input.scope, problems);
157
+ if (problems.length > 0) {
158
+ return { ok: false, code: "INVALID_INPUT", message: problems.join("; ") };
159
+ }
160
+ const existingForId = input.existingAuthorities.filter((authority) => authority.authorityId === input.authorityId);
161
+ if (existingForId.length > 0) {
162
+ const existing = existingForId[0];
163
+ if (existing.grantedByMessageId === input.message.messageId &&
164
+ existing.rootSessionId === input.sessionId &&
165
+ existing.runId === input.runId) {
166
+ const claim = input.messageClaims.get(input.message.messageId);
167
+ if (claim)
168
+ return { ok: true, value: { record: existing, claim } };
169
+ }
170
+ return {
171
+ ok: false,
172
+ code: "DUPLICATE_GRANT",
173
+ message: `authority ${input.authorityId} is already registered`,
174
+ };
175
+ }
176
+ // A second initial grant for the same execution — even under a new
177
+ // authorityId or a different message — must not mint another reserve.
178
+ if (input.existingAuthorities.some((authority) => authority.runId === input.runId)) {
179
+ return {
180
+ ok: false,
181
+ code: "DUPLICATE_GRANT",
182
+ message: `execution ${input.runId} already has a recorded advance authority`,
183
+ };
184
+ }
185
+ const nowMs = input.nowMs ?? input.message.createdMs;
186
+ const claimResult = claimMessage(input.message, input.runId, input.authorityId, input.messageClaims, nowMs);
187
+ if (!claimResult.ok)
188
+ return claimResult;
189
+ const record = {
190
+ authorityId: input.authorityId,
191
+ runId: input.runId,
192
+ rootSessionId: input.sessionId,
193
+ grantedByMessageId: input.message.messageId,
194
+ messageCreatedMs: input.message.createdMs,
195
+ scope: normalizeScope(input.scope),
196
+ initialUnits: ADVANCE_RECOVERY_RESERVE,
197
+ extensions: [],
198
+ revocations: [],
199
+ createdAt: new Date(nowMs).toISOString(),
200
+ };
201
+ return { ok: true, value: { record, claim: claimResult.value } };
202
+ }
203
+ function normalizeScope(scope) {
204
+ return {
205
+ stages: [...scope.stages],
206
+ decisionScope: scope.decisionScope.trim(),
207
+ fileBoundary: [...scope.fileBoundary],
208
+ reservedStops: [...scope.reservedStops],
209
+ };
210
+ }
211
+ /** Total granted units across the initial reserve and extensions. */
212
+ export function advanceUnitsGranted(authority) {
213
+ return (authority.initialUnits +
214
+ authority.extensions.reduce((sum, extension) => sum + extension.units, 0));
215
+ }
216
+ /** Debits consumed against one authority. */
217
+ export function advanceUnitsConsumed(authority, debits) {
218
+ return debits
219
+ .filter((debit) => debit.authorityId === authority.authorityId)
220
+ .reduce((sum, debit) => sum + debit.units, 0);
221
+ }
222
+ /** Remaining usable units after debits; a full revocation disables all future use. */
223
+ export function advanceUnitsAvailable(authority, debits) {
224
+ if (authority.revocations.some((revocation) => revocation.kind === "revoke"))
225
+ return 0;
226
+ return Math.max(0, advanceUnitsGranted(authority) - advanceUnitsConsumed(authority, debits));
227
+ }
228
+ /** Surviving delegatable stages after applying every narrowing revocation. */
229
+ export function effectiveAuthorityStages(authority) {
230
+ let stages = [...authority.scope.stages];
231
+ for (const revocation of authority.revocations) {
232
+ if (revocation.kind === "narrow" && revocation.narrowedStages) {
233
+ const surviving = revocation.narrowedStages;
234
+ stages = stages.filter((stage) => surviving.includes(stage));
235
+ }
236
+ }
237
+ return stages;
238
+ }
239
+ /** Explicit finite extension bound to a new eligible instruction after the extended authority event. */
240
+ export function extendAdvanceAuthority(input) {
241
+ const { authority } = input;
242
+ if (!isBoundedWorkflowId(input.extensionId)) {
243
+ return { ok: false, code: "INVALID_INPUT", message: "extensionId must be a bounded identity" };
244
+ }
245
+ const eligibility = validateAuthorityMessage(input.message, input.sessionId);
246
+ if (!eligibility.ok)
247
+ return eligibility;
248
+ const latestEventMs = Math.max(authority.messageCreatedMs, ...authority.extensions.map((extension) => extension.messageCreatedMs));
249
+ if (input.message.createdMs <= latestEventMs) {
250
+ return {
251
+ ok: false,
252
+ code: "STALE_EXTENSION",
253
+ message: "extension requires a new eligible instruction newer than the authority event it extends",
254
+ };
255
+ }
256
+ if (authority.revocations.some((revocation) => revocation.kind === "revoke")) {
257
+ return {
258
+ ok: false,
259
+ code: "AUTHORITY_REVOKED",
260
+ message: `authority ${authority.authorityId} is revoked`,
261
+ };
262
+ }
263
+ const nowMs = input.nowMs ?? input.message.createdMs;
264
+ const claim = claimMessage(input.message, authority.runId, authority.authorityId, input.messageClaims, nowMs);
265
+ if (!claim.ok)
266
+ return claim;
267
+ return {
268
+ ok: true,
269
+ value: {
270
+ extensionId: input.extensionId,
271
+ messageId: input.message.messageId,
272
+ messageCreatedMs: input.message.createdMs,
273
+ units: ADVANCE_RECOVERY_RESERVE,
274
+ createdAt: new Date(nowMs).toISOString(),
275
+ },
276
+ };
277
+ }
278
+ /** Propose one immutable one-unit reserve consumption for an exact target. */
279
+ export function proposeReserveDebit(input) {
280
+ if (!isBoundedWorkflowId(input.recoveryId) || !isBoundedWorkflowId(input.targetId)) {
281
+ return {
282
+ ok: false,
283
+ code: "INVALID_INPUT",
284
+ message: "recoveryId and targetId must be bounded identities",
285
+ };
286
+ }
287
+ if (input.debits.some((debit) => debit.recoveryId === input.recoveryId)) {
288
+ return {
289
+ ok: false,
290
+ code: "DUPLICATE_DEBIT",
291
+ message: `recovery ${input.recoveryId} already consumed a reserve unit`,
292
+ };
293
+ }
294
+ if (input.authority.revocations.some((revocation) => revocation.kind === "revoke")) {
295
+ return {
296
+ ok: false,
297
+ code: "AUTHORITY_REVOKED",
298
+ message: `authority ${input.authority.authorityId} is revoked`,
299
+ };
300
+ }
301
+ if (input.stage !== undefined &&
302
+ !effectiveAuthorityStages(input.authority).includes(input.stage)) {
303
+ return {
304
+ ok: false,
305
+ code: "STAGE_NOT_DELEGATED",
306
+ message: `${input.stage} is outside the surviving authority scope`,
307
+ };
308
+ }
309
+ if (advanceUnitsAvailable(input.authority, input.debits) < 1) {
310
+ return {
311
+ ok: false,
312
+ code: "RESERVE_EXHAUSTED",
313
+ message: `authority ${input.authority.authorityId} has no remaining reserve units`,
314
+ };
315
+ }
316
+ return {
317
+ ok: true,
318
+ value: {
319
+ recoveryId: input.recoveryId,
320
+ authorityId: input.authority.authorityId,
321
+ targetKind: input.targetKind,
322
+ targetId: input.targetId,
323
+ units: 1,
324
+ debitedAt: new Date(input.nowMs ?? Date.now()).toISOString(),
325
+ },
326
+ };
327
+ }
328
+ /** Fail-safe narrowing that cannot restore consumed units or broaden the scope. */
329
+ export function narrowAdvanceAuthority(input) {
330
+ if (!isBoundedWorkflowId(input.revocationId)) {
331
+ return { ok: false, code: "INVALID_INPUT", message: "revocationId must be a bounded identity" };
332
+ }
333
+ if (input.authority.revocations.length > 0) {
334
+ return {
335
+ ok: false,
336
+ code: "AUTHORITY_REVOKED",
337
+ message: "authority is already revoked or narrowed",
338
+ };
339
+ }
340
+ const surviving = input.narrowedStages ?? input.authority.scope.stages;
341
+ const subset = surviving.every((stage) => input.authority.scope.stages.includes(stage));
342
+ if (!subset) {
343
+ return {
344
+ ok: false,
345
+ code: "INVALID_INPUT",
346
+ message: "narrowing may only remove stages already covered by the authority",
347
+ };
348
+ }
349
+ return {
350
+ ok: true,
351
+ value: {
352
+ revocationId: input.revocationId,
353
+ kind: "narrow",
354
+ reason: input.reason.trim() || "narrowed",
355
+ narrowedStages: [...surviving],
356
+ revokedAt: new Date(input.nowMs ?? Date.now()).toISOString(),
357
+ },
358
+ };
359
+ }
360
+ /** Revoke future and unlaunched credits without erasing history. */
361
+ export function revokeAdvanceAuthority(input) {
362
+ if (!isBoundedWorkflowId(input.revocationId)) {
363
+ return { ok: false, code: "INVALID_INPUT", message: "revocationId must be a bounded identity" };
364
+ }
365
+ if (input.authority.revocations.some((revocation) => revocation.kind === "revoke")) {
366
+ return {
367
+ ok: false,
368
+ code: "AUTHORITY_REVOKED",
369
+ message: "authority is already revoked",
370
+ };
371
+ }
372
+ return {
373
+ ok: true,
374
+ value: {
375
+ revocationId: input.revocationId,
376
+ kind: "revoke",
377
+ reason: input.reason.trim() || "revoked",
378
+ revokedAt: new Date(input.nowMs ?? Date.now()).toISOString(),
379
+ },
380
+ };
381
+ }
382
+ /** Whether a stage remains reserved for explicit user action. */
383
+ export function isStageReserved(scope, stage) {
384
+ return scope.reservedStops.includes(stage);
385
+ }
386
+ /** Record a truthful controller_delegated stage approval when authority covers the stage. */
387
+ export function proposeStageApproval(input) {
388
+ if (!isBoundedWorkflowId(input.approvalId)) {
389
+ return { ok: false, code: "INVALID_INPUT", message: "approvalId must be a bounded identity" };
390
+ }
391
+ if (input.authority.revocations.some((revocation) => revocation.kind === "revoke")) {
392
+ return {
393
+ ok: false,
394
+ code: "AUTHORITY_REVOKED",
395
+ message: `authority ${input.authority.authorityId} is revoked`,
396
+ };
397
+ }
398
+ if (!effectiveAuthorityStages(input.authority).includes(input.stage)) {
399
+ return {
400
+ ok: false,
401
+ code: "STAGE_NOT_DELEGATED",
402
+ message: `authority does not cover the ${input.stage} stage`,
403
+ };
404
+ }
405
+ if (isStageReserved(input.authority.scope, input.stage)) {
406
+ return {
407
+ ok: false,
408
+ code: "STAGE_RESERVED",
409
+ message: `${input.stage} remains reserved for explicit user action`,
410
+ };
411
+ }
412
+ if (typeof input.artifactPath !== "string" ||
413
+ input.artifactPath.trim() === "" ||
414
+ typeof input.artifactSha256 !== "string" ||
415
+ input.artifactSha256.trim() === "") {
416
+ return {
417
+ ok: false,
418
+ code: "INVALID_INPUT",
419
+ message: "stage approval requires the approved artifact path and hash",
420
+ };
421
+ }
422
+ return {
423
+ ok: true,
424
+ value: {
425
+ approvalId: input.approvalId,
426
+ authorityId: input.authority.authorityId,
427
+ stage: input.stage,
428
+ artifactPath: input.artifactPath,
429
+ artifactSha256: input.artifactSha256,
430
+ provenance: input.provenance,
431
+ recordedAt: new Date(input.nowMs ?? Date.now()).toISOString(),
432
+ },
433
+ };
434
+ }
435
+ //# sourceMappingURL=authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authority.js","sourceRoot":"","sources":["../../../src/plugins/workflow/authority.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type DelegatedPlanDefinition } from "../../lib/spec-lint.js";
1
+ import type { DelegatedPlanDefinition, WorkflowExecutionSource } from "../../lib/workflow-contract.js";
2
2
  export interface LoadedDelegatedPlan {
3
3
  /** Canonical absolute plan.xml path. */
4
4
  planPath: string;
@@ -30,4 +30,13 @@ export interface LoadApprovedDelegatedPlanInput {
30
30
  }
31
31
  /** Deterministic SHA-256 hex digest over provided text. */
32
32
  export declare function contentSha256(text: string): string;
33
+ /**
34
+ * Convert a fully validated native package into the common immutable source
35
+ * identity. This is deliberately a pure mapping: native validation, lifecycle
36
+ * checks, and hash binding have already happened during loading, and no generic
37
+ * caller may invoke this to bypass them.
38
+ */
39
+ export declare function nativeExecutionSource(plan: LoadedDelegatedPlan): Extract<WorkflowExecutionSource, {
40
+ kind: "native-package";
41
+ }>;
33
42
  export declare function loadApprovedDelegatedPlan(input: LoadApprovedDelegatedPlanInput): Promise<LoadApprovedDelegatedPlanResult>;