codex-workflow-v2 2.0.0-alpha.7 → 2.0.0-alpha.7.2

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.
@@ -0,0 +1,593 @@
1
+ import { closeSync, existsSync, openSync, readFileSync, unlinkSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { hashDelegationPolicy } from '../delegation.js';
4
+ import { WorkflowError } from '../errors.js';
5
+ import { hashKnowledgeMap } from '../memory.js';
6
+ import { createUlid } from '../ulid.js';
7
+ import { readTaskC1Posture, readTaskHandoffEvents } from '../alpha6/handoff.js';
8
+ import { readCurrentPlanRiskAudit, readPlanRiskAuditEvents } from '../alpha6/plan-risk.js';
9
+ import { readMilestoneAutonomyEvents } from './autonomy.js';
10
+ import { assertCorrectiveAuditorIndependence, readCorrectiveDecisionEvents, readRemediationEvents, } from '../alpha6/remediation.js';
11
+ import { assertHash64, canonicalJsonStringify, sha256Hex } from '../alpha6/store-sidecars.js';
12
+ export const CORRECTIVE_DECISION_RECOVERIES_SIDECAR = 'corrective-decision-recoveries.jsonl';
13
+ const RECOVERY_LOCK = '.corrective-decision-recovery.lock';
14
+ const KNOWLEDGE_LINE = /^- Knowledge map: revision ([1-9]\d*), hash ([a-f0-9]{64})$/gm;
15
+ const KNOWLEDGE_SENTINEL = '- Knowledge map: revision <context>, hash <context>';
16
+ const REFRESH_REASONS = new Set([
17
+ 'Delegated content-only context refresh.',
18
+ 'Delegated Plan-bounded supporting-source context refresh.',
19
+ ]);
20
+ export function readCorrectiveDecisionRecoveryEvents(store, task) {
21
+ return store.readSidecarEvents(store.taskRoot(task.projectId, task.id), CORRECTIVE_DECISION_RECOVERIES_SIDECAR, { validateEvent: (event, context) => validateRecoveryEvent(event, task, context.file, context.line) });
22
+ }
23
+ export function assessCorrectiveDecisionRecovery(store, task, stepId, actor, writerToken) {
24
+ const normalizedActor = actor.trim();
25
+ if (!normalizedActor)
26
+ throw new WorkflowError('INVALID_ARGUMENT', 'Corrective recovery actor is required.');
27
+ if (!task.planHash || task.knowledgeMapRevision === null || !task.knowledgeMapHash) {
28
+ throw new WorkflowError('STATE_CORRUPT', `Task ${task.id} is missing current Plan or Knowledge bindings.`);
29
+ }
30
+ const step = task.steps.find((candidate) => candidate.id === stepId);
31
+ if (!step)
32
+ throw new WorkflowError('NOT_FOUND', `Step not found: ${stepId}`);
33
+ if (!['planned', 'failed'].includes(step.status)) {
34
+ throw new WorkflowError('TRANSITION_BLOCKED', `Corrective recovery is unavailable while ${stepId} is ${step.status}.`);
35
+ }
36
+ const remediationEvents = readRemediationEvents(store, task);
37
+ const stepRemediations = remediationEvents.filter((event) => event.stepId === stepId);
38
+ if (stepRemediations.length !== 2) {
39
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Corrective recovery requires exactly two failed remediation attempts.', {
40
+ taskId: task.id,
41
+ stepId,
42
+ attemptCount: stepRemediations.length,
43
+ });
44
+ }
45
+ const correctiveDecisions = readCorrectiveDecisionEvents(store, task);
46
+ const matchingDecisions = correctiveDecisions.filter((event) => event.stepId === stepId && event.triggeringAttemptCount === 3);
47
+ if (matchingDecisions.length !== 1) {
48
+ throw new WorkflowError('STATE_CORRUPT', 'Corrective recovery requires one decision for the exact Step/ordinal.', {
49
+ taskId: task.id,
50
+ stepId,
51
+ matchingDecisionIds: matchingDecisions.map((event) => event.eventId),
52
+ });
53
+ }
54
+ const decision = matchingDecisions[0];
55
+ if (decision.decision !== 'continue-fix') {
56
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Only continue-fix may be recovered after context refresh.', {
57
+ taskId: task.id,
58
+ stepId,
59
+ decision: decision.decision,
60
+ });
61
+ }
62
+ if (decision.planHash === task.planHash) {
63
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Corrective decision already binds the current Plan; recovery is unnecessary.');
64
+ }
65
+ assertCorrectiveAuditorIndependence(store, task, stepId, decision.auditor);
66
+ const taskRoot = store.taskRoot(task.projectId, task.id);
67
+ const planEvidence = comparePlanArtifacts(taskRoot, decision.planHash, task.planHash);
68
+ const currentAudit = readCurrentPlanRiskAudit(store, task);
69
+ if (!currentAudit || !currentAudit.reviewRequiredStepIds.includes(stepId)) {
70
+ throw new WorkflowError('TRANSITION_BLOCKED', `Step ${stepId} is not guarded by the current Plan Risk Audit.`);
71
+ }
72
+ const planRiskAudits = readPlanRiskAuditEvents(store, task);
73
+ const { sourceAudit, reboundAudit } = requireMechanicalAuditRebound(task, decision, planRiskAudits);
74
+ const directRebind = requireDirectRebind(task, decision, sourceAudit);
75
+ assertRebindMatchesPlans(directRebind, planEvidence);
76
+ if (sourceAudit.knowledgeMapRevision !== directRebind.fromKnowledgeMapRevision
77
+ || sourceAudit.knowledgeMapHash !== directRebind.fromKnowledgeMapHash
78
+ || reboundAudit.knowledgeMapRevision !== directRebind.toKnowledgeMapRevision
79
+ || reboundAudit.knowledgeMapHash !== directRebind.toKnowledgeMapHash) {
80
+ throw new WorkflowError('STATE_CORRUPT', 'Plan Risk Audit pair does not bind the direct Knowledge rebind endpoints.');
81
+ }
82
+ const knowledgeMap = store.readKnowledgeMap(task.projectId);
83
+ const authorization = requireRefreshAuthorization(task);
84
+ const { grant, autonomyContract } = requireRefreshAuthority(store, task, knowledgeMap, authorization, directRebind);
85
+ const c1 = requireC1Evidence(store, task, normalizedActor, writerToken);
86
+ assertRefreshChronology(knowledgeMap, authorization, directRebind, reboundAudit);
87
+ const knowledgeMapApprovalFingerprint = hashEvidence(knowledgeMap.approval);
88
+ const taskAuthorizationFingerprint = hashEvidence(authorization);
89
+ const delegationGrantFingerprint = hashEvidence(grant);
90
+ const c1EvidenceFingerprint = hashEvidence(c1);
91
+ const evidenceFingerprint = hashEvidence({
92
+ task,
93
+ decisionPlanHash: decision.planHash,
94
+ reboundPlanHash: task.planHash,
95
+ semanticPlanHash: planEvidence.semanticPlanHash,
96
+ remediationEvents,
97
+ correctiveDecisions,
98
+ planRiskAudits,
99
+ knowledgeMap,
100
+ grant,
101
+ autonomyContract,
102
+ handoffs: readTaskHandoffEvents(store, task),
103
+ c1,
104
+ });
105
+ return {
106
+ task,
107
+ decision,
108
+ directRebind,
109
+ semanticPlanHash: planEvidence.semanticPlanHash,
110
+ sourceAudit,
111
+ reboundAudit,
112
+ knowledgeMapApprovalFingerprint,
113
+ taskAuthorizationFingerprint,
114
+ delegationGrantFingerprint,
115
+ c1EvidenceFingerprint,
116
+ evidenceFingerprint,
117
+ };
118
+ }
119
+ export function appendCorrectiveDecisionRecovery(store, task, stepId, expectedRevision, actor, writerToken, now) {
120
+ if (task.revision !== expectedRevision) {
121
+ throw new WorkflowError('STATE_CONFLICT', `State revision conflict for ${task.id}`, {
122
+ expectedRevision,
123
+ actualRevision: task.revision,
124
+ });
125
+ }
126
+ const preflight = assessCorrectiveDecisionRecovery(store, task, stepId, actor, writerToken);
127
+ const preflightRecoveryChain = snapshotRecoveryChain(store, task, preflight, actor.trim());
128
+ const taskRoot = store.taskRoot(task.projectId, task.id);
129
+ const lockFile = path.join(taskRoot, RECOVERY_LOCK);
130
+ let descriptor;
131
+ try {
132
+ descriptor = openSync(lockFile, 'wx', 0o600);
133
+ closeSync(descriptor);
134
+ }
135
+ catch (error) {
136
+ if (existsSync(lockFile)) {
137
+ throw new WorkflowError('LOCKED', `Corrective recovery for ${task.id} is already being serialized.`, {
138
+ taskId: task.id,
139
+ stepId,
140
+ });
141
+ }
142
+ throw error;
143
+ }
144
+ try {
145
+ const currentTask = store.readTask(task.projectId, task.id);
146
+ if (currentTask.revision !== expectedRevision) {
147
+ throw new WorkflowError('STATE_CONFLICT', `State revision conflict for ${task.id}`, {
148
+ expectedRevision,
149
+ actualRevision: currentTask.revision,
150
+ });
151
+ }
152
+ let underLock;
153
+ try {
154
+ underLock = assessCorrectiveDecisionRecovery(store, currentTask, stepId, actor, writerToken);
155
+ }
156
+ catch (error) {
157
+ throw new WorkflowError('STATE_CONFLICT', 'Corrective recovery evidence changed after preflight.', {
158
+ taskId: task.id,
159
+ stepId,
160
+ cause: error instanceof Error ? error.message : String(error),
161
+ });
162
+ }
163
+ if (underLock.evidenceFingerprint !== preflight.evidenceFingerprint) {
164
+ throw new WorkflowError('STATE_CONFLICT', 'Corrective recovery evidence changed after preflight.', {
165
+ taskId: task.id,
166
+ stepId,
167
+ preflightEvidenceFingerprint: preflight.evidenceFingerprint,
168
+ currentEvidenceFingerprint: underLock.evidenceFingerprint,
169
+ });
170
+ }
171
+ const underLockRecoveryChain = snapshotRecoveryChain(store, currentTask, underLock, actor.trim());
172
+ if (underLockRecoveryChain.matchingEvent) {
173
+ return underLockRecoveryChain.matchingEvent;
174
+ }
175
+ if (underLockRecoveryChain.fingerprint !== preflightRecoveryChain.fingerprint) {
176
+ throw new WorkflowError('STATE_CONFLICT', 'Corrective recovery chain changed after preflight.', {
177
+ taskId: task.id,
178
+ stepId,
179
+ preflightRecoveryChainFingerprint: preflightRecoveryChain.fingerprint,
180
+ currentRecoveryChainFingerprint: underLockRecoveryChain.fingerprint,
181
+ });
182
+ }
183
+ return store.appendSidecarEvent(taskRoot, CORRECTIVE_DECISION_RECOVERIES_SIDECAR, recoveryPayload(underLock, actor.trim(), now), { validateEvent: (event, context) => validateRecoveryEvent(event, currentTask, context.file, context.line) });
184
+ }
185
+ finally {
186
+ if (existsSync(lockFile))
187
+ unlinkSync(lockFile);
188
+ }
189
+ }
190
+ function snapshotRecoveryChain(store, task, assessment, actor) {
191
+ const events = readCorrectiveDecisionRecoveryEvents(store, task);
192
+ const sameBinding = events.filter((event) => event.correctiveDecisionEventId === assessment.decision.eventId
193
+ && event.stepId === assessment.decision.stepId
194
+ && event.triggeringAttemptCount === assessment.decision.triggeringAttemptCount);
195
+ if (sameBinding.length > 1) {
196
+ throw new WorkflowError('STATE_CORRUPT', 'Multiple recoveries exist for one corrective decision binding.', {
197
+ taskId: task.id,
198
+ stepId: assessment.decision.stepId,
199
+ eventIds: sameBinding.map((event) => event.eventId),
200
+ });
201
+ }
202
+ const matchingEvent = sameBinding[0] ?? null;
203
+ if (matchingEvent)
204
+ assertRecoveryMatchesAssessment(matchingEvent, assessment, actor);
205
+ return { fingerprint: hashEvidence(events), matchingEvent };
206
+ }
207
+ export function requireCorrectiveDecisionRecoveryForRun(store, task, stepId, actor, writerToken) {
208
+ const assessment = assessCorrectiveDecisionRecovery(store, task, stepId, actor, writerToken);
209
+ const events = readCorrectiveDecisionRecoveryEvents(store, task);
210
+ const matches = events.filter((event) => event.correctiveDecisionEventId === assessment.decision.eventId
211
+ && event.stepId === stepId
212
+ && event.triggeringAttemptCount === assessment.decision.triggeringAttemptCount);
213
+ if (matches.length !== 1) {
214
+ throw new WorkflowError('TRANSITION_BLOCKED', 'A validated corrective recovery is required before this run.', {
215
+ taskId: task.id,
216
+ stepId,
217
+ correctiveDecisionEventId: assessment.decision.eventId,
218
+ recoveryCount: matches.length,
219
+ });
220
+ }
221
+ const recovery = matches[0];
222
+ assertRecoveryMatchesAssessment(recovery, assessment, actor.trim());
223
+ return recovery;
224
+ }
225
+ export function assessCorrectiveDecisionRecoveryForNavigation(store, task, stepId) {
226
+ const posture = readTaskC1Posture(store, task);
227
+ const lease = readWriterLease(store, task);
228
+ const actor = posture.state === 'claimed' ? posture.claimant : lease?.owner ?? 'worker';
229
+ return assessCorrectiveDecisionRecovery(store, task, stepId, actor, lease?.token ?? null);
230
+ }
231
+ function recoveryPayload(assessment, actor, now) {
232
+ const { task, decision, directRebind, sourceAudit, reboundAudit } = assessment;
233
+ return {
234
+ eventId: `CDR-${createUlid(now.getTime())}`,
235
+ recordedAt: now.toISOString(),
236
+ taskId: task.id,
237
+ stepId: decision.stepId,
238
+ triggeringAttemptCount: decision.triggeringAttemptCount,
239
+ correctiveDecisionEventId: decision.eventId,
240
+ correctiveDecisionEventHash: decision.eventHash,
241
+ decisionPlanHash: decision.planHash,
242
+ reboundPlanHash: task.planHash,
243
+ semanticPlanHash: assessment.semanticPlanHash,
244
+ fromKnowledgeMapRevision: directRebind.fromKnowledgeMapRevision,
245
+ fromKnowledgeMapHash: directRebind.fromKnowledgeMapHash,
246
+ toKnowledgeMapRevision: directRebind.toKnowledgeMapRevision,
247
+ toKnowledgeMapHash: directRebind.toKnowledgeMapHash,
248
+ rebindRecordedAt: directRebind.recordedAt,
249
+ sourcePlanRiskAuditEventId: sourceAudit.eventId,
250
+ sourcePlanRiskAuditEventHash: sourceAudit.eventHash,
251
+ reboundPlanRiskAuditEventId: reboundAudit.eventId,
252
+ reboundPlanRiskAuditEventHash: reboundAudit.eventHash,
253
+ knowledgeMapApprovalFingerprint: assessment.knowledgeMapApprovalFingerprint,
254
+ taskAuthorizationFingerprint: assessment.taskAuthorizationFingerprint,
255
+ delegationGrantFingerprint: assessment.delegationGrantFingerprint,
256
+ c1EvidenceFingerprint: assessment.c1EvidenceFingerprint,
257
+ evidenceFingerprint: assessment.evidenceFingerprint,
258
+ actor,
259
+ };
260
+ }
261
+ function hashEvidence(value) {
262
+ return sha256Hex(canonicalJsonStringify(value));
263
+ }
264
+ function comparePlanArtifacts(taskRoot, decisionPlanHash, reboundPlanHash) {
265
+ assertHash64(decisionPlanHash, 'Corrective decision Plan hash');
266
+ assertHash64(reboundPlanHash, 'Current Plan hash');
267
+ const historicalFile = path.join(taskRoot, '.versions', `plan.md.${decisionPlanHash}`);
268
+ if (!existsSync(historicalFile)) {
269
+ throw new WorkflowError('STATE_CORRUPT', 'Historical corrective-decision Plan artifact is missing.', {
270
+ decisionPlanHash,
271
+ historicalFile,
272
+ });
273
+ }
274
+ const historical = readFileSync(historicalFile, 'utf8');
275
+ const current = readFileSync(path.join(taskRoot, 'plan.md'), 'utf8');
276
+ if (sha256Hex(historical) !== decisionPlanHash || sha256Hex(current) !== reboundPlanHash) {
277
+ throw new WorkflowError('STATE_CORRUPT', 'Plan artifact content does not match its recorded hash.');
278
+ }
279
+ const semanticPlanHash = assertKnowledgeBindingOnlyPlanChange(historical, current);
280
+ const decision = normalizePlanKnowledgeBinding(historical, 'historical');
281
+ const rebound = normalizePlanKnowledgeBinding(current, 'current');
282
+ return {
283
+ semanticPlanHash,
284
+ decisionBinding: decision.binding,
285
+ reboundBinding: rebound.binding,
286
+ };
287
+ }
288
+ function normalizePlanKnowledgeBinding(content, label) {
289
+ const matches = [...content.matchAll(KNOWLEDGE_LINE)];
290
+ if (matches.length !== 1) {
291
+ throw new WorkflowError('STATE_CORRUPT', `${label} Plan must contain exactly one canonical Knowledge Map binding line.`, {
292
+ matchCount: matches.length,
293
+ });
294
+ }
295
+ const match = matches[0];
296
+ return {
297
+ normalized: content.slice(0, match.index) + KNOWLEDGE_SENTINEL + content.slice(match.index + match[0].length),
298
+ binding: { revision: Number(match[1]), hash: match[2] },
299
+ };
300
+ }
301
+ function requireMechanicalAuditRebound(task, decision, events) {
302
+ const sources = events.filter((event) => event.planHash === decision.planHash);
303
+ const rebounds = events.filter((event) => event.planHash === task.planHash);
304
+ if (sources.length !== 1 || rebounds.length !== 1) {
305
+ throw new WorkflowError('STATE_CORRUPT', 'Recovery requires one source and one rebound Plan Risk Audit.', {
306
+ sourceAuditIds: sources.map((event) => event.eventId),
307
+ reboundAuditIds: rebounds.map((event) => event.eventId),
308
+ });
309
+ }
310
+ const sourceAudit = sources[0];
311
+ const reboundAudit = rebounds[0];
312
+ const sourceIndex = events.indexOf(sourceAudit);
313
+ const reboundIndex = events.indexOf(reboundAudit);
314
+ if (reboundIndex !== sourceIndex + 1 || reboundAudit.previousEventHash !== sourceAudit.eventHash || reboundIndex !== events.length - 1) {
315
+ throw new WorkflowError('STATE_CORRUPT', 'Plan Risk Audit rebound is not the immediate append-only successor of the source audit.');
316
+ }
317
+ const expectedSummary = `${sourceAudit.summary} Rebound automatically after content-only Task context refresh.`;
318
+ if (reboundAudit.taskId !== sourceAudit.taskId
319
+ || reboundAudit.briefHash !== sourceAudit.briefHash
320
+ || reboundAudit.planner !== sourceAudit.planner
321
+ || reboundAudit.auditor !== sourceAudit.auditor
322
+ || reboundAudit.decision !== sourceAudit.decision
323
+ || reboundAudit.splitRationale !== sourceAudit.splitRationale
324
+ || reboundAudit.summary !== expectedSummary
325
+ || canonicalJsonStringify(reboundAudit.stepClassifications) !== canonicalJsonStringify(sourceAudit.stepClassifications)) {
326
+ throw new WorkflowError('STATE_CORRUPT', 'Current Plan Risk Audit is not a mechanical content-refresh rebound.');
327
+ }
328
+ if (sourceAudit.briefHash !== task.briefHash || reboundAudit.briefHash !== task.briefHash) {
329
+ throw new WorkflowError('STATE_CORRUPT', 'Plan Risk Audit rebound does not preserve the current Brief binding.');
330
+ }
331
+ if (reboundAudit.taskRevision + 1 !== task.revision) {
332
+ throw new WorkflowError('STATE_CORRUPT', 'Mechanical rebound audit must be exactly one Task revision before current authorization.', {
333
+ reboundAuditTaskRevision: reboundAudit.taskRevision,
334
+ currentTaskRevision: task.revision,
335
+ });
336
+ }
337
+ return { sourceAudit, reboundAudit };
338
+ }
339
+ function requireDirectRebind(task, decision, sourceAudit) {
340
+ for (let index = 1; index < task.knowledgeRebinds.length; index += 1) {
341
+ if (Date.parse(task.knowledgeRebinds[index].recordedAt) <= Date.parse(task.knowledgeRebinds[index - 1].recordedAt)) {
342
+ throw new WorkflowError('STATE_CORRUPT', 'Task Knowledge rebind timestamps must be strictly increasing.');
343
+ }
344
+ }
345
+ const boundary = Math.max(Date.parse(decision.recordedAt), Date.parse(sourceAudit.recordedAt));
346
+ const afterBoundary = task.knowledgeRebinds.filter((record) => Date.parse(record.recordedAt) > boundary);
347
+ if (afterBoundary.length !== 1) {
348
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Legacy recovery requires exactly one Knowledge rebind after the decision/source-audit binding.', {
349
+ rebindCount: afterBoundary.length,
350
+ });
351
+ }
352
+ const selected = afterBoundary[0];
353
+ if (task.knowledgeRebinds.at(-1) !== selected || selected.previousPlanHash !== decision.planHash || selected.reboundPlanHash !== task.planHash) {
354
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Knowledge rebind provenance is not one direct decision-Plan to current-Plan hop.');
355
+ }
356
+ return selected;
357
+ }
358
+ function assertRebindMatchesPlans(rebind, plans) {
359
+ if (rebind.fromKnowledgeMapRevision !== plans.decisionBinding.revision
360
+ || rebind.fromKnowledgeMapHash !== plans.decisionBinding.hash
361
+ || rebind.toKnowledgeMapRevision !== plans.reboundBinding.revision
362
+ || rebind.toKnowledgeMapHash !== plans.reboundBinding.hash) {
363
+ throw new WorkflowError('STATE_CORRUPT', 'Direct Knowledge rebind does not match the two verified Plan artifacts.');
364
+ }
365
+ }
366
+ function requireRefreshAuthorization(task) {
367
+ const matches = task.authorizations.filter((authorization) => authorization.kind === 'execution'
368
+ && authorization.decision === 'approved'
369
+ && authorization.planHash === task.planHash
370
+ && authorization.briefHash === task.briefHash);
371
+ if (matches.length !== 1) {
372
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Recovery requires one exact current execution authorization.', {
373
+ taskId: task.id,
374
+ authorizationCount: matches.length,
375
+ });
376
+ }
377
+ const authorization = matches[0];
378
+ if (authorization.authorizationMode !== 'delegated'
379
+ || !authorization.delegation
380
+ || authorization.delegation.transition !== 'task.execution_authorize'
381
+ || !REFRESH_REASONS.has(authorization.reason)) {
382
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Current execution authorization is not confirmed delegated context-refresh evidence.');
383
+ }
384
+ return authorization;
385
+ }
386
+ function requireRefreshAuthority(store, task, map, authorization, rebind) {
387
+ const approval = map.approval;
388
+ const taskDelegation = authorization.delegation;
389
+ if (map.status !== 'active'
390
+ || !approval
391
+ || map.revision !== task.knowledgeMapRevision
392
+ || hashKnowledgeMap(map) !== task.knowledgeMapHash
393
+ || approval.mapHash !== task.knowledgeMapHash
394
+ || approval.authorizationMode !== 'delegated'
395
+ || !approval.delegation
396
+ || approval.delegation.transition !== 'project_memory.approve') {
397
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Current Knowledge Map is not the delegated approved direct-rebind target.');
398
+ }
399
+ const mapDelegation = approval.delegation;
400
+ if (approval.actor !== authorization.actor
401
+ || mapDelegation.grantId !== taskDelegation.grantId
402
+ || mapDelegation.policyHash !== taskDelegation.policyHash
403
+ || mapDelegation.principal !== taskDelegation.principal
404
+ || mapDelegation.delegate !== taskDelegation.delegate) {
405
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Knowledge Map and Task authorization do not share one delegated identity.');
406
+ }
407
+ const grant = store.readDelegation(task.projectId, taskDelegation.grantId);
408
+ const expectedPolicyHash = hashDelegationPolicy(grant.projectId, {
409
+ principal: grant.principal,
410
+ delegate: grant.delegate,
411
+ scope: grant.scope,
412
+ transitions: grant.transitions,
413
+ expiresAt: grant.expiresAt,
414
+ });
415
+ const autonomyContract = requireRefreshGrantScope(store, task, grant);
416
+ if (grant.policyHash !== expectedPolicyHash
417
+ || grant.policyHash !== taskDelegation.policyHash
418
+ || grant.principal !== taskDelegation.principal
419
+ || grant.delegate !== taskDelegation.delegate
420
+ || approval.actor !== grant.delegate
421
+ || authorization.actor !== grant.delegate
422
+ || grant.status !== 'active'
423
+ || grant.revokedAt !== null
424
+ || !grant.transitions.includes('project_memory.approve')
425
+ || !grant.transitions.includes('task.execution_authorize')) {
426
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Delegation evidence is revoked, corrupt, mismatched, or insufficient for recovery.');
427
+ }
428
+ const createdAt = Date.parse(grant.createdAt);
429
+ const expiresAt = Date.parse(grant.expiresAt);
430
+ const approvalAt = Date.parse(approval.approvedAt);
431
+ const authorizationAt = Date.parse(authorization.recordedAt);
432
+ if (![createdAt, expiresAt, approvalAt, authorizationAt].every(Number.isFinite)
433
+ || approvalAt < createdAt
434
+ || authorizationAt < createdAt
435
+ || approvalAt >= expiresAt
436
+ || authorizationAt >= expiresAt) {
437
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Delegated context-refresh approvals were not recorded inside the historical grant validity window.');
438
+ }
439
+ if (rebind.toKnowledgeMapRevision !== map.revision
440
+ || rebind.toKnowledgeMapHash !== approval.mapHash) {
441
+ throw new WorkflowError('STATE_CORRUPT', 'Knowledge Map approval does not bind the direct rebind target.');
442
+ }
443
+ return { grant, autonomyContract };
444
+ }
445
+ function requireRefreshGrantScope(store, task, grant) {
446
+ if (grant.scope.kind === 'project')
447
+ return null;
448
+ if (grant.scope.kind !== 'milestone' || grant.scope.id !== task.milestoneId) {
449
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Delegation scope cannot authorize the Knowledge Map refresh target.');
450
+ }
451
+ const contracts = readMilestoneAutonomyEvents(store, task.projectId, grant.scope.id);
452
+ const matches = contracts.filter((contract) => contract.delegationGrantId === grant.id
453
+ && contract.delegationPolicyHash === grant.policyHash
454
+ && contract.principal === grant.principal
455
+ && contract.delegate === grant.delegate
456
+ && contract.expiresAt === grant.expiresAt);
457
+ if (matches.length !== 1) {
458
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Milestone-scoped context-refresh authority requires one exact alpha7 autonomy contract.', { grantId: grant.id, contractCount: matches.length });
459
+ }
460
+ return matches[0];
461
+ }
462
+ function requireC1Evidence(store, task, actor, writerToken) {
463
+ const posture = readTaskC1Posture(store, task);
464
+ const lease = readWriterLease(store, task);
465
+ if (posture.state === 'pending') {
466
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Pending C1 handoff must be claimed before corrective recovery.');
467
+ }
468
+ if (posture.state === 'claimed') {
469
+ const tokenHash = writerToken ? sha256Hex(writerToken) : null;
470
+ if (!lease
471
+ || actor !== posture.claimant
472
+ || lease.owner !== posture.claimant
473
+ || !writerToken
474
+ || lease.token !== writerToken
475
+ || tokenHash !== posture.writerLeaseTokenHash) {
476
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Corrective recovery requires the claimed C1 actor and exact bound writer lease token.', {
477
+ taskId: task.id,
478
+ claimant: posture.claimant,
479
+ leaseOwner: lease?.owner ?? null,
480
+ });
481
+ }
482
+ return { posture: 'claimed', claimEventHash: posture.latestEvent.eventHash, owner: lease.owner, tokenHash };
483
+ }
484
+ if (lease && (lease.owner !== actor || !writerToken || lease.token !== writerToken)) {
485
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Existing writer lease is not owned by the recovering actor/token.');
486
+ }
487
+ return {
488
+ posture: 'none',
489
+ claimEventHash: posture.latestEvent?.eventHash ?? null,
490
+ owner: lease?.owner ?? null,
491
+ tokenHash: lease ? sha256Hex(lease.token) : null,
492
+ };
493
+ }
494
+ function readWriterLease(store, task) {
495
+ const file = path.join(store.lockRoot(task.projectId), `${task.id}.json`);
496
+ if (!existsSync(file))
497
+ return null;
498
+ let lease;
499
+ try {
500
+ lease = JSON.parse(readFileSync(file, 'utf8'));
501
+ }
502
+ catch {
503
+ throw new WorkflowError('STATE_CORRUPT', `Writer lease is unreadable: ${file}`);
504
+ }
505
+ if (lease.entityId !== task.id || typeof lease.owner !== 'string' || typeof lease.token !== 'string') {
506
+ throw new WorkflowError('STATE_CORRUPT', `Writer lease does not match Task ${task.id}.`);
507
+ }
508
+ return lease;
509
+ }
510
+ function assertRefreshChronology(map, authorization, rebind, reboundAudit) {
511
+ const values = [
512
+ Date.parse(map.approval.approvedAt),
513
+ Date.parse(rebind.recordedAt),
514
+ Date.parse(reboundAudit.recordedAt),
515
+ Date.parse(authorization.recordedAt),
516
+ ];
517
+ if (values.some((value) => !Number.isFinite(value)) || values.some((value, index) => index > 0 && value < values[index - 1])) {
518
+ throw new WorkflowError('STATE_CORRUPT', 'Context-refresh evidence chronology is invalid.');
519
+ }
520
+ }
521
+ function assertRecoveryMatchesAssessment(event, assessment, actor) {
522
+ const expected = recoveryPayload(assessment, actor, new Date(event.recordedAt));
523
+ const ignored = new Set(['eventId', 'recordedAt']);
524
+ const mismatches = Object.entries(expected)
525
+ .filter(([key, value]) => !ignored.has(key) && event[key] !== value)
526
+ .map(([key]) => key);
527
+ if (mismatches.length > 0) {
528
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Corrective recovery event is stale or conflicts with current evidence.', {
529
+ taskId: event.taskId,
530
+ stepId: event.stepId,
531
+ eventId: event.eventId,
532
+ mismatches,
533
+ });
534
+ }
535
+ }
536
+ function validateRecoveryEvent(event, task, file, line) {
537
+ if (!/^CDR-[0-9A-HJKMNP-TV-Z]{26}$/.test(event.eventId) || event.taskId !== task.id) {
538
+ throw new WorkflowError('STATE_CORRUPT', 'Corrective recovery event identity is invalid.', { file, line });
539
+ }
540
+ if (typeof event.stepId !== 'string' || !event.stepId || event.triggeringAttemptCount !== 3) {
541
+ throw new WorkflowError('STATE_CORRUPT', 'Corrective recovery Step/ordinal binding is invalid.', { file, line });
542
+ }
543
+ const hashes = [
544
+ event.correctiveDecisionEventHash,
545
+ event.decisionPlanHash,
546
+ event.reboundPlanHash,
547
+ event.semanticPlanHash,
548
+ event.fromKnowledgeMapHash,
549
+ event.toKnowledgeMapHash,
550
+ event.sourcePlanRiskAuditEventHash,
551
+ event.reboundPlanRiskAuditEventHash,
552
+ event.knowledgeMapApprovalFingerprint,
553
+ event.taskAuthorizationFingerprint,
554
+ event.delegationGrantFingerprint,
555
+ event.c1EvidenceFingerprint,
556
+ event.evidenceFingerprint,
557
+ ];
558
+ for (const hash of hashes)
559
+ assertHash64(hash, `Corrective recovery hash at ${file}:${line}`);
560
+ if (!Number.isInteger(event.fromKnowledgeMapRevision)
561
+ || event.fromKnowledgeMapRevision < 1
562
+ || !Number.isInteger(event.toKnowledgeMapRevision)
563
+ || event.toKnowledgeMapRevision < 1
564
+ || typeof event.actor !== 'string'
565
+ || !event.actor.trim()) {
566
+ throw new WorkflowError('STATE_CORRUPT', 'Corrective recovery payload is malformed.', { file, line });
567
+ }
568
+ }
569
+ export function readValidatedCorrectiveDecisionRecoveryForNavigation(store, task, stepId) {
570
+ const posture = readTaskC1Posture(store, task);
571
+ const lease = readWriterLease(store, task);
572
+ const actor = posture.state === 'claimed' ? posture.claimant : lease?.owner ?? 'worker';
573
+ const assessment = assessCorrectiveDecisionRecovery(store, task, stepId, actor, lease?.token ?? null);
574
+ const matches = readCorrectiveDecisionRecoveryEvents(store, task).filter((event) => event.correctiveDecisionEventId === assessment.decision.eventId
575
+ && event.stepId === stepId
576
+ && event.triggeringAttemptCount === assessment.decision.triggeringAttemptCount);
577
+ if (matches.length > 1) {
578
+ throw new WorkflowError('STATE_CORRUPT', 'Multiple recoveries exist for one corrective decision binding.');
579
+ }
580
+ const recovery = matches[0] ?? null;
581
+ if (recovery)
582
+ assertRecoveryMatchesAssessment(recovery, assessment, actor);
583
+ return { assessment, recovery };
584
+ }
585
+ export function assertKnowledgeBindingOnlyPlanChange(historical, current) {
586
+ const decision = normalizePlanKnowledgeBinding(historical, 'historical');
587
+ const rebound = normalizePlanKnowledgeBinding(current, 'current');
588
+ if (decision.normalized !== rebound.normalized) {
589
+ throw new WorkflowError('TRANSITION_BLOCKED', 'Corrective recovery permits only the Knowledge Map binding line to change.');
590
+ }
591
+ return sha256Hex(decision.normalized);
592
+ }
593
+ //# sourceMappingURL=corrective-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corrective-recovery.js","sourceRoot":"","sources":["../../../src/alpha7/corrective-recovery.ts"],"names":[],"mappings":"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"}