codex-workflow-v2 2.0.0-beta.14 → 2.0.0-beta.14.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.
Files changed (93) hide show
  1. package/README.md +3 -3
  2. package/dist/reviewer-runtime-build.json +24 -20
  3. package/dist/src/alpha6/adoption.d.ts +1 -1
  4. package/dist/src/alpha6/adoption.js +26 -8
  5. package/dist/src/alpha6/adoption.js.map +1 -1
  6. package/dist/src/alpha6/corrective-decision-boundary.js +9 -3
  7. package/dist/src/alpha6/corrective-decision-boundary.js.map +1 -1
  8. package/dist/src/alpha6/remediation.d.ts +2 -0
  9. package/dist/src/alpha6/remediation.js +68 -2
  10. package/dist/src/alpha6/remediation.js.map +1 -1
  11. package/dist/src/alpha7/autonomy.d.ts +9 -0
  12. package/dist/src/alpha7/autonomy.js +40 -1
  13. package/dist/src/alpha7/autonomy.js.map +1 -1
  14. package/dist/src/beta1/project-transaction.js +14 -4
  15. package/dist/src/beta1/project-transaction.js.map +1 -1
  16. package/dist/src/cli-actions.d.ts +3 -3
  17. package/dist/src/cli-actions.js +5 -0
  18. package/dist/src/cli-actions.js.map +1 -1
  19. package/dist/src/cli.js +31 -1
  20. package/dist/src/cli.js.map +1 -1
  21. package/dist/src/contracts.d.ts +19 -2
  22. package/dist/src/delegation.d.ts +5 -1
  23. package/dist/src/delegation.js +4 -0
  24. package/dist/src/delegation.js.map +1 -1
  25. package/dist/src/failed-checkpoint-update.d.ts +69 -0
  26. package/dist/src/failed-checkpoint-update.js +171 -0
  27. package/dist/src/failed-checkpoint-update.js.map +1 -0
  28. package/dist/src/lifecycle/corrective-replan-credential-core.d.ts +2 -0
  29. package/dist/src/lifecycle/corrective-replan-credential-core.js +45 -9
  30. package/dist/src/lifecycle/corrective-replan-credential-core.js.map +1 -1
  31. package/dist/src/lifecycle/corrective-replan.js +12 -8
  32. package/dist/src/lifecycle/corrective-replan.js.map +1 -1
  33. package/dist/src/lifecycle/semantic-registry.js +4 -2
  34. package/dist/src/lifecycle/semantic-registry.js.map +1 -1
  35. package/dist/src/observed-routes.js +5 -0
  36. package/dist/src/observed-routes.js.map +1 -1
  37. package/dist/src/state/corrective-replan-executor.js +1 -0
  38. package/dist/src/state/corrective-replan-executor.js.map +1 -1
  39. package/dist/src/state/corrective-replan-public.d.ts +9 -1
  40. package/dist/src/state/corrective-replan-public.js +49 -7
  41. package/dist/src/state/corrective-replan-public.js.map +1 -1
  42. package/dist/src/version.d.ts +1 -1
  43. package/dist/src/version.js +1 -1
  44. package/dist/src/version.js.map +1 -1
  45. package/dist/src/workflow-blocker-route.js +1 -1
  46. package/dist/src/workflow-blocker-route.js.map +1 -1
  47. package/dist/src/workflow.d.ts +40 -1
  48. package/dist/src/workflow.js +203 -33
  49. package/dist/src/workflow.js.map +1 -1
  50. package/docs/autonomy-guardrails.md +4 -4
  51. package/docs/development-flow.md +8 -6
  52. package/docs/project-memory.md +2 -2
  53. package/docs/release.md +7 -1
  54. package/docs/updating-existing-project.md +37 -0
  55. package/package.json +1 -1
  56. package/plugins/codex-workflow-gateway/.codex-plugin/plugin.json +1 -1
  57. package/plugins/codex-workflow-gateway/references/chat-dispatch.md +17 -5
  58. package/plugins/codex-workflow-gateway/references/protocol.md +39 -43
  59. package/plugins/codex-workflow-gateway/scripts/chat-dispatch.mjs +13 -3
  60. package/plugins/codex-workflow-gateway/scripts/chat-model-policy.mjs +18 -33
  61. package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +15 -10
  62. package/references/state-machine.md +3 -1
  63. package/roles/delivery-coordinator.md +31 -11
  64. package/roles/scope-lead.md +1 -1
  65. package/roles/technical-planner.md +4 -1
  66. package/schemas/adoption-posture-event.schema.json +11 -0
  67. package/schemas/authorization-event.schema.json +1 -1
  68. package/schemas/corrective-decision-event.schema.json +23 -3
  69. package/schemas/corrective-replan-credentials.private.schema.json +8 -5
  70. package/schemas/corrective-replan-execution-event.private.schema.json +9 -0
  71. package/schemas/corrective-replan-public.schema.json +2 -1
  72. package/schemas/delegation-grant.schema.json +1 -1
  73. package/schemas/task.schema.json +18 -0
  74. package/schemas/transition-definition.schema.json +4 -0
  75. package/src/alpha6/adoption.ts +30 -7
  76. package/src/alpha6/corrective-decision-boundary.ts +9 -3
  77. package/src/alpha6/remediation.ts +69 -2
  78. package/src/alpha7/autonomy.ts +39 -1
  79. package/src/beta1/project-transaction.ts +13 -4
  80. package/src/cli-actions.ts +5 -0
  81. package/src/cli.ts +33 -0
  82. package/src/contracts.ts +19 -1
  83. package/src/delegation.ts +5 -1
  84. package/src/failed-checkpoint-update.ts +203 -0
  85. package/src/lifecycle/corrective-replan-credential-core.ts +39 -10
  86. package/src/lifecycle/corrective-replan.ts +12 -8
  87. package/src/lifecycle/semantic-registry.ts +4 -2
  88. package/src/observed-routes.ts +5 -0
  89. package/src/state/corrective-replan-executor.ts +1 -0
  90. package/src/state/corrective-replan-public.ts +50 -6
  91. package/src/version.ts +1 -1
  92. package/src/workflow-blocker-route.ts +1 -1
  93. package/src/workflow.ts +192 -22
@@ -1,5 +1,9 @@
1
1
  import type { DelegatedAuthorizationEvidence, DelegationGrant, DelegationGrantGate, DelegationPolicyInput, DelegationTransition, MilestoneState, ProjectKnowledgeMap, TaskState } from './contracts.js';
2
- type DelegationTarget = TaskState | MilestoneState | ProjectKnowledgeMap;
2
+ type DelegationTarget = TaskState | MilestoneState | ProjectKnowledgeMap | {
3
+ kind: 'project';
4
+ id: string;
5
+ milestoneId?: null;
6
+ };
3
7
  export declare function prepareDelegationGrantGate(projectId: string, input: DelegationPolicyInput, now: Date): DelegationGrantGate;
4
8
  export declare function normalizeDelegationPolicy(input: DelegationPolicyInput, now: Date): DelegationPolicyInput;
5
9
  export declare function hashDelegationPolicy(projectId: string, policy: DelegationPolicyInput): string;
@@ -1,6 +1,7 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { WorkflowError } from './errors.js';
3
3
  const TRANSITIONS = [
4
+ 'project.adopt',
4
5
  'project_memory.approve',
5
6
  'task.execution_authorize',
6
7
  'task.final_accept',
@@ -42,6 +43,9 @@ export function normalizeDelegationPolicy(input, now) {
42
43
  });
43
44
  }
44
45
  transitions.sort();
46
+ if (transitions.includes('project.adopt') && scope.kind !== 'project') {
47
+ throw new WorkflowError('INVALID_ARGUMENT', 'project.adopt requires project scope.');
48
+ }
45
49
  if (transitions.includes('project_memory.approve') && scope.kind !== 'project') {
46
50
  throw new WorkflowError('INVALID_ARGUMENT', 'project_memory.approve requires project scope.');
47
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delegation.js","sourceRoot":"","sources":["../../src/delegation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delegation.js","sourceRoot":"","sources":["../../src/delegation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { TaskState } from './contracts.js';
2
+ import type { FileStateStore } from './state/store.js';
3
+ export declare const FAILED_CHECKPOINT_SOURCE = "2.0.0-beta.14";
4
+ export declare const FAILED_CHECKPOINT_TARGET = "2.0.0-beta.14.1";
5
+ export interface FailedCheckpointUpdateReceipt {
6
+ protocol: 'failed-checkpoint-update-source-v1';
7
+ projectId: string;
8
+ taskId: string;
9
+ revision: number;
10
+ issuedAt: string;
11
+ taskHash: string;
12
+ artifactsHash: string;
13
+ knowledgeHash: string;
14
+ milestoneHash: string | null;
15
+ sourceHead: string;
16
+ sourceBaseHead: string;
17
+ taskBranch: string;
18
+ baseBranch: string;
19
+ sourceVersion: string;
20
+ targetVersion: string;
21
+ actor: string;
22
+ stepId: string;
23
+ dirtyFiles: string[];
24
+ sourceDirtyHash: string;
25
+ remediationEventId: string;
26
+ remediationEventHash: string;
27
+ artifact: {
28
+ sha256: string;
29
+ runtimeHash: string;
30
+ };
31
+ }
32
+ export interface FailedCheckpointUpdateBinding {
33
+ protocol: 'failed-checkpoint-update-v1';
34
+ sourceHead: string;
35
+ sourcePlanHash: string;
36
+ stepId: string;
37
+ sourceDirtyHash: string;
38
+ targetDirtyHash: string;
39
+ dirtyFiles: string[];
40
+ remediationEventId: string;
41
+ remediationEventHash: string;
42
+ sourceReceiptHash: string;
43
+ artifactHash: string;
44
+ }
45
+ /** Same byte framing as native failure evidence; no normalization of product content. */
46
+ export declare function failedCheckpointDirtyHash(repository: string, files: readonly string[], transported?: boolean): string;
47
+ export declare function assertFailedCheckpointInstalled(repository: string, task: TaskState, version: string): void;
48
+ export declare function failedCheckpointUpdateSource(repository: string, store: FileStateStore, task: TaskState, artifact: FailedCheckpointUpdateReceipt['artifact'], sourceHead?: string, sourceBaseHead?: string, transported?: boolean): FailedCheckpointUpdateReceipt;
49
+ export declare function inspectFailedCheckpointTransport(repository: string, store: FileStateStore, task: TaskState, receipt: FailedCheckpointUpdateReceipt, artifact: FailedCheckpointUpdateReceipt['artifact']): {
50
+ receipt: FailedCheckpointUpdateReceipt;
51
+ target: {
52
+ commitSha: string;
53
+ parentCommitSha: string;
54
+ packageVersion: string;
55
+ };
56
+ baseTransport: string;
57
+ targetHead: string;
58
+ binding: FailedCheckpointUpdateBinding;
59
+ };
60
+ /** Revalidate the registered byte-preserving transport when a later corrective gate reads native failure evidence.
61
+ * Returns no authority and never changes the original failure record or its hash. */
62
+ export declare function readFailedCheckpointDirtyTransport(store: FileStateStore, repository: string, task: TaskState, stepId: string, sourceHead: string, sourceDirtyHash: string): {
63
+ sourceHead: string;
64
+ sourceDirtyHash: string;
65
+ targetHead: string;
66
+ targetDirtyHash: string;
67
+ dirtyFiles: string[];
68
+ sourceReceiptHash: string;
69
+ } | null;
@@ -0,0 +1,171 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, lstatSync, readFileSync, readdirSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { canonicalJsonStringify, sha256Hex } from './alpha6/store-sidecars.js';
5
+ import { readCorrectiveDecisionEvents, readRemediationEvents } from './alpha6/remediation.js';
6
+ import { readTaskC1Posture, readTaskHandoffEvents } from './alpha6/handoff.js';
7
+ import { readPlanRiskAuditEvents } from './alpha6/plan-risk.js';
8
+ import { verifiedHistoricalStepReviewBindings } from './alpha6/review.js';
9
+ import { readVerifiedPlanArtifact } from './domain/plan-semantics.js';
10
+ import { pathAllowed } from './domain/validation.js';
11
+ import { validateTaskHistory } from './git.js';
12
+ import { inspectBoundedWorkflowDependencyCommit, workflowDependencyVersionAt } from './dependency-provenance.js';
13
+ import { inspectWorkflowVersions } from './diagnostics.js';
14
+ import { changedFiles, currentBranch, headCommit, runGit } from './repository.js';
15
+ import { PACKAGE_VERSION } from './version.js';
16
+ export const FAILED_CHECKPOINT_SOURCE = '2.0.0-beta.14';
17
+ export const FAILED_CHECKPOINT_TARGET = '2.0.0-beta.14.1';
18
+ const hash = (value) => sha256Hex(canonicalJsonStringify(value));
19
+ function require(condition, message) {
20
+ if (!condition)
21
+ throw new Error(`FAILED_CHECKPOINT_UPDATE_BLOCKED: ${message}`);
22
+ }
23
+ function filesHash(root) {
24
+ if (!existsSync(root))
25
+ return hash([]);
26
+ const visit = (directory) => readdirSync(directory).sort().flatMap(name => {
27
+ const file = path.join(directory, name);
28
+ const info = lstatSync(file);
29
+ require(!info.isSymbolicLink() && (info.isFile() || info.isDirectory()), 'State artifacts must be regular files.');
30
+ return info.isDirectory() ? visit(file) : [[path.relative(root, file), sha256Hex(readFileSync(file))]];
31
+ });
32
+ return hash(visit(root));
33
+ }
34
+ /** Reverse only the dependency string, retaining every other byte (including whitespace and product scripts). */
35
+ function sourceManifestBytes(content) {
36
+ const text = content.toString('utf8');
37
+ const manifest = JSON.parse(text);
38
+ require(manifest.devDependencies?.['codex-workflow-v2'] === FAILED_CHECKPOINT_TARGET
39
+ && !manifest.dependencies?.['codex-workflow-v2'], 'Target working manifest must have one exact dev dependency.');
40
+ const key = /("codex-workflow-v2"\s*:\s*)"2\.0\.0-beta\.14\.1"/g;
41
+ require([...text.matchAll(key)].length === 1, 'Working manifest must have one unambiguous literal target pin.');
42
+ return Buffer.from(text.replace(key, `$1"${FAILED_CHECKPOINT_SOURCE}"`));
43
+ }
44
+ /** Same byte framing as native failure evidence; no normalization of product content. */
45
+ export function failedCheckpointDirtyHash(repository, files, transported = false) {
46
+ const digest = createHash('sha256');
47
+ for (const file of [...files].sort()) {
48
+ const absolute = path.resolve(repository, file);
49
+ const relative = path.relative(repository, absolute);
50
+ require(relative && !relative.startsWith('..') && !path.isAbsolute(relative), 'Dirty path escapes checkout.');
51
+ require(existsSync(absolute) && lstatSync(absolute).isFile() && !lstatSync(absolute).isSymbolicLink(), 'This checkpoint supports retained regular files only.');
52
+ let bytes = readFileSync(absolute);
53
+ if (transported && file === 'package.json')
54
+ bytes = sourceManifestBytes(bytes);
55
+ digest.update(`path\0${file}\0file\0`);
56
+ digest.update(bytes);
57
+ digest.update('\0');
58
+ }
59
+ return digest.digest('hex');
60
+ }
61
+ function assertPins(repository, commit, version) {
62
+ const manifest = JSON.parse(runGit(repository, ['show', `${commit}:package.json`]));
63
+ const lock = JSON.parse(runGit(repository, ['show', `${commit}:package-lock.json`]));
64
+ require(manifest.devDependencies?.['codex-workflow-v2'] === version && !manifest.dependencies?.['codex-workflow-v2']
65
+ && workflowDependencyVersionAt(repository, commit) === version
66
+ && lock.packages?.['']?.devDependencies?.['codex-workflow-v2'] === version
67
+ && !lock.packages?.['']?.dependencies?.['codex-workflow-v2']
68
+ && lock.packages?.['node_modules/codex-workflow-v2']?.version === version, 'Exact source manifest and lock bindings are required.');
69
+ }
70
+ export function assertFailedCheckpointInstalled(repository, task, version) {
71
+ const versions = inspectWorkflowVersions(repository, [task.baseBranch]);
72
+ require([versions.declared, versions.locked, versions.installed, versions.currentBranch,
73
+ ...versions.milestoneBases.map(item => item.version)].every(value => value === version), `Every installed and Git version surface must equal ${version}.`);
74
+ }
75
+ export function failedCheckpointUpdateSource(repository, store, task, artifact, sourceHead = headCommit(repository), sourceBaseHead = runGit(repository, ['rev-parse', task.baseBranch]), transported = false) {
76
+ require(PACKAGE_VERSION === FAILED_CHECKPOINT_TARGET, 'Only the beta.14 to beta.14.1 repair is supported.');
77
+ require(task.status === 'awaiting_execution_authorization' && task.workspaceOwner === 'external', 'Expected an external failed Task awaiting its new Plan audit.');
78
+ require(readCorrectiveDecisionEvents(store, task).length === 0, 'A checkpoint with corrective decision history requires its own supported boundary.');
79
+ require(task.taskBranch && currentBranch(repository) === task.taskBranch, 'Expected the recorded Task branch.');
80
+ const failed = task.steps.filter(step => step.status === 'failed');
81
+ require(failed.length === 1 && !task.steps.some(step => step.status === 'in_progress'), 'Exactly one paused failed Step is required.');
82
+ const step = failed[0];
83
+ require(step.failurePause && step.evidence === null, 'Native failed-check evidence is required.');
84
+ require(task.planHash && task.briefHash, 'Current Brief and Plan are required.');
85
+ const taskRoot = store.taskRoot(task.projectId, task.id);
86
+ require(store.hashArtifact(taskRoot, 'brief.md') === task.briefHash && store.hashArtifact(taskRoot, 'plan.md') === task.planHash, 'Brief and Plan artifacts must match state.');
87
+ readVerifiedPlanArtifact(taskRoot, task.planHash, task.planHash);
88
+ const currentAudit = readPlanRiskAuditEvents(store, task).at(-1);
89
+ require(!currentAudit || currentAudit.planHash !== task.planHash
90
+ || currentAudit.decision === 'stop-escalate', 'The checkpoint must await its audit or retain a planning obstruction.');
91
+ assertPins(repository, sourceHead, FAILED_CHECKPOINT_SOURCE);
92
+ assertPins(repository, sourceBaseHead, FAILED_CHECKPOINT_SOURCE);
93
+ validateTaskHistory(repository, task, sourceHead);
94
+ const completed = task.steps.filter(item => item.status === 'completed');
95
+ const reviews = verifiedHistoricalStepReviewBindings(store, task);
96
+ require(completed.length > 0 && completed.every(item => item.evidence
97
+ && reviews.some(review => review.stepId === item.id && review.commitSha === item.evidence.commitSha)), 'Every retained completed Step must have immutable execution and independent review evidence.');
98
+ require(step.dependencies.every(id => completed.some(item => item.id === id)), 'Failed Step dependencies must be complete.');
99
+ const events = readRemediationEvents(store, task).filter(event => event.stepId === step.id && event.failureKind === 'checks-failed');
100
+ require(events.length === 1, 'This checkpoint supports exactly the first native check failure.');
101
+ const terminal = events.at(-1);
102
+ require(terminal && terminal.failureEvidence.completionCommit === sourceHead
103
+ && terminal.failureEvidence.dirtyWorktreeHash === step.failurePause.dirtyWorktreeHash, 'Native terminal failure must bind source HEAD and retained dirty bytes.');
104
+ const dirtyFiles = changedFiles(repository).sort();
105
+ require(dirtyFiles.length > 0 && !dirtyFiles.includes('package-lock.json')
106
+ && JSON.stringify(dirtyFiles) === JSON.stringify([...step.failurePause.dirtyFiles].sort()), 'Dirty paths must equal the native failure; dirty lockfile transport is unsupported.');
107
+ require(dirtyFiles.every(file => pathAllowed(file, step.allowedWrites) && !pathAllowed(file, step.forbiddenScope)), 'Retained dirty files must be inside the failed Step scope.');
108
+ const sourceDirtyHash = failedCheckpointDirtyHash(repository, dirtyFiles, transported);
109
+ require(sourceDirtyHash === terminal.failureEvidence.dirtyWorktreeHash, 'Product bytes changed since native failure.');
110
+ const posture = readTaskC1Posture(store, task);
111
+ const claim = readTaskHandoffEvents(store, task).filter(event => event.eventType === 'claim').at(-1);
112
+ require(posture.state === 'claimed' && claim && posture.claimant === claim.actor && claim.briefHash === task.briefHash, 'Original immutable Worker claim is required.');
113
+ return { protocol: 'failed-checkpoint-update-source-v1', projectId: task.projectId, taskId: task.id,
114
+ revision: task.revision, issuedAt: task.updatedAt, taskHash: hash(task), artifactsHash: filesHash(taskRoot),
115
+ knowledgeHash: hash(store.readKnowledgeMap(task.projectId)),
116
+ milestoneHash: task.milestoneId ? hash(store.readMilestone(task.projectId, task.milestoneId)) : null,
117
+ sourceHead, sourceBaseHead, taskBranch: task.taskBranch, baseBranch: task.baseBranch,
118
+ sourceVersion: FAILED_CHECKPOINT_SOURCE, targetVersion: FAILED_CHECKPOINT_TARGET, actor: claim.actor,
119
+ stepId: step.id, dirtyFiles, sourceDirtyHash, remediationEventId: terminal.eventId,
120
+ remediationEventHash: terminal.eventHash, artifact };
121
+ }
122
+ export function inspectFailedCheckpointTransport(repository, store, task, receipt, artifact) {
123
+ require(receipt?.protocol === 'failed-checkpoint-update-source-v1', 'Missing or foreign source receipt.');
124
+ const targetHead = headCommit(repository);
125
+ const base = runGit(repository, ['rev-parse', task.baseBranch]);
126
+ const target = inspectBoundedWorkflowDependencyCommit(repository, targetHead);
127
+ const baseTransport = inspectBoundedWorkflowDependencyCommit(repository, base);
128
+ require([targetHead, base].every(commit => runGit(repository, ['rev-list', '--parents', '-n', '1', commit]).split(' ').length === 2), 'Transport commits must have exactly one parent.');
129
+ require(target?.parentCommitSha === receipt.sourceHead && target.packageVersion === FAILED_CHECKPOINT_TARGET
130
+ && baseTransport?.parentCommitSha === receipt.sourceBaseHead && baseTransport.packageVersion === FAILED_CHECKPOINT_TARGET, 'Exactly one dependency-only transport is required on each bound branch.');
131
+ const reconstructed = failedCheckpointUpdateSource(repository, store, task, artifact, target.parentCommitSha, baseTransport.parentCommitSha, true);
132
+ require(canonicalJsonStringify(receipt) === canonicalJsonStringify(reconstructed), 'Source receipt no longer matches state, artifacts, product bytes, history or tarball.');
133
+ assertFailedCheckpointInstalled(repository, task, FAILED_CHECKPOINT_TARGET);
134
+ const binding = { protocol: 'failed-checkpoint-update-v1',
135
+ sourceHead: receipt.sourceHead, sourcePlanHash: task.planHash, stepId: receipt.stepId,
136
+ sourceDirtyHash: receipt.sourceDirtyHash, targetDirtyHash: failedCheckpointDirtyHash(repository, receipt.dirtyFiles),
137
+ dirtyFiles: receipt.dirtyFiles, remediationEventId: receipt.remediationEventId,
138
+ remediationEventHash: receipt.remediationEventHash, sourceReceiptHash: hash(receipt), artifactHash: artifact.sha256 };
139
+ return { receipt: reconstructed, target, baseTransport: base, targetHead, binding };
140
+ }
141
+ /** Revalidate the registered byte-preserving transport when a later corrective gate reads native failure evidence.
142
+ * Returns no authority and never changes the original failure record or its hash. */
143
+ export function readFailedCheckpointDirtyTransport(store, repository, task, stepId, sourceHead, sourceDirtyHash) {
144
+ const records = (task.dependencyProvenanceRecoveries ?? []).filter(record => {
145
+ const binding = record.failedCheckpoint;
146
+ return binding?.stepId === stepId && binding.sourceHead === sourceHead && binding.sourceDirtyHash === sourceDirtyHash;
147
+ });
148
+ if (records.length === 0)
149
+ return null;
150
+ require(records.length === 1, 'Registered failed checkpoint is ambiguous.');
151
+ const record = records[0];
152
+ const binding = record.failedCheckpoint;
153
+ require(task.planHash, 'Current Plan is required to validate the historical checkpoint.');
154
+ readVerifiedPlanArtifact(store.taskRoot(task.projectId, task.id), binding.sourcePlanHash, task.planHash);
155
+ require(binding.protocol === 'failed-checkpoint-update-v1' && task.systemCommits.includes(record.commitSha)
156
+ && record.packageVersion === FAILED_CHECKPOINT_TARGET && record.packageName === 'codex-workflow-v2'
157
+ && record.parentCommitSha === sourceHead && JSON.stringify(record.files) === JSON.stringify(['package-lock.json', 'package.json']), 'Registered failed checkpoint dependency record is invalid.');
158
+ const inspected = inspectBoundedWorkflowDependencyCommit(repository, record.commitSha);
159
+ require(inspected?.parentCommitSha === sourceHead && inspected.packageVersion === FAILED_CHECKPOINT_TARGET, 'Registered failed checkpoint no longer identifies a dependency-only commit.');
160
+ require(headCommit(repository) === record.commitSha, 'Dirty checkpoint requires its exact transported HEAD.');
161
+ const terminal = readRemediationEvents(store, task).filter(event => event.stepId === stepId && event.failureKind === 'checks-failed').at(-1);
162
+ require(terminal?.eventId === binding.remediationEventId && terminal.eventHash === binding.remediationEventHash
163
+ && terminal.failureEvidence.completionCommit === sourceHead && terminal.failureEvidence.dirtyWorktreeHash === sourceDirtyHash, 'Registered failed checkpoint does not bind the terminal native failure.');
164
+ const dirty = changedFiles(repository).sort();
165
+ require(JSON.stringify(dirty) === JSON.stringify(binding.dirtyFiles)
166
+ && failedCheckpointDirtyHash(repository, dirty, true) === sourceDirtyHash
167
+ && failedCheckpointDirtyHash(repository, dirty) === binding.targetDirtyHash, 'Retained product bytes changed after the registered dependency transport.');
168
+ return { sourceHead, sourceDirtyHash, targetHead: record.commitSha, targetDirtyHash: binding.targetDirtyHash,
169
+ dirtyFiles: [...dirty], sourceReceiptHash: binding.sourceReceiptHash };
170
+ }
171
+ //# sourceMappingURL=failed-checkpoint-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failed-checkpoint-update.js","sourceRoot":"","sources":["../../src/failed-checkpoint-update.ts"],"names":[],"mappings":"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"}
@@ -66,7 +66,9 @@ export interface CorrectiveReplanCredentialCorePorts {
66
66
  export interface CorrectiveReplanCredentialKernel {
67
67
  issuePlanValidation(input: unknown): Result<JsonRecord>;
68
68
  issueHumanChallenge(input: unknown): Result<JsonRecord>;
69
+ issueDelegatedChallenge(input: unknown): Result<JsonRecord>;
69
70
  confirmHuman(input: unknown): Result<JsonRecord>;
71
+ confirmDelegated(input: unknown): Result<JsonRecord>;
70
72
  issueReceipt(input: unknown): Result<JsonRecord>;
71
73
  verifyReceipt(input: unknown): Verification<JsonRecord>;
72
74
  materializeStoredEvent(input: unknown): Result<JsonRecord>;
@@ -27,6 +27,8 @@ export function createCorrectiveReplanCredentialKernel(ports) {
27
27
  return deepFreeze({
28
28
  issuePlanValidation: (input) => totalResult(() => issuePlanValidation(issuer, input)),
29
29
  issueHumanChallenge: (input) => totalResult(() => issueHumanChallenge(issuer, input)),
30
+ issueDelegatedChallenge: (input) => totalResult(() => issueDelegatedChallenge(issuer, input)),
31
+ confirmDelegated: (input) => totalResult(() => confirmDelegated(issuer, input)),
30
32
  confirmHuman: (input) => totalResult(() => confirmHuman(issuer, input)),
31
33
  issueReceipt: (input) => totalResult(() => issueReceipt(issuer, input)),
32
34
  verifyReceipt: (input) => totalVerification(() => verifyReceipt(issuer, input)),
@@ -95,10 +97,11 @@ const issuePlanValidation = (issuer, input) => {
95
97
  const values = { ...clone(base), planValidationHash };
96
98
  if (!canonicalManifestValues(values, true))
97
99
  return rejected('credential.binding.values-invalid', '/binding/values', 'binding');
100
+ const delegated = snapshot.delegatedAuthority;
98
101
  const capability = { id: 'capability.task.corrective-replan', version: 1,
99
- issuer: { kind: 'human', identityHash: values.humanPrincipalIdentityHash }, source: 'human-confirmation',
102
+ issuer: { kind: delegated ? 'delegate' : 'human', identityHash: delegated ? values.actorIdentityHash : values.humanPrincipalIdentityHash }, source: delegated ? 'delegation-grant' : 'human-confirmation',
100
103
  scope: { transitionId: values.transitionId, taskId: values.taskId, candidatePlanHash: values.candidatePlanHash,
101
- manifestSha256: correctiveReplanBindingManifest.manifestSha256 }, delegation: 'forbidden' };
104
+ manifestSha256: correctiveReplanBindingManifest.manifestSha256 }, delegation: delegated ?? 'forbidden' };
102
105
  const bindingBase = { schemaVersion: 1, manifestRef: { id: correctiveReplanBindingManifest.id, version: 1 },
103
106
  manifestSha256: correctiveReplanBindingManifest.manifestSha256, values, capability };
104
107
  const binding = { ...bindingBase, bindingSha256: hashCanonical(bindingBase) };
@@ -127,7 +130,7 @@ const issuePlanValidation = (issuer, input) => {
127
130
  kernel.preparations.delete(preparationKey);
128
131
  }
129
132
  };
130
- const issueHumanChallenge = (issuer, input) => {
133
+ const issueHumanChallenge = (issuer, input, delegated = false) => {
131
134
  const kernel = kernels.get(object(issuer));
132
135
  if (!kernel)
133
136
  return rejected('credential.provenance.invalid', '/', 'provenance');
@@ -137,6 +140,8 @@ const issueHumanChallenge = (issuer, input) => {
137
140
  const plan = kernel.plans.get(handle);
138
141
  if (!plan)
139
142
  return rejected('credential.provenance.invalid', '/planValidation', 'provenance');
143
+ if (Boolean(plan.snapshot.delegatedAuthority) !== delegated)
144
+ return rejected('credential.authority.mode-mismatch', '/planValidation', 'authority');
140
145
  if (!activePreparation(kernel, plan))
141
146
  return rejected('credential.preparation.superseded', '/planValidation', 'provenance');
142
147
  if (kernel.challenged.has(handle))
@@ -162,8 +167,11 @@ const issueHumanChallenge = (issuer, input) => {
162
167
  kernel.challenges.set(challengeHandle, deepFreeze({ plan, challenge }));
163
168
  kernel.challenged.add(handle);
164
169
  return accepted({ handle: challengeHandle,
165
- delivery: { kind: 'corrective-replan-human-challenge-delivery', version: 1, challengeId, confirmationCode: code, expiresAtMs } });
170
+ delivery: delegated
171
+ ? { kind: 'corrective-replan-delegation-binding', version: 1, challengeId, expiresAtMs }
172
+ : { kind: 'corrective-replan-human-challenge-delivery', version: 1, challengeId, confirmationCode: code, expiresAtMs } });
166
173
  };
174
+ const issueDelegatedChallenge = (issuer, input) => issueHumanChallenge(issuer, input, true);
167
175
  const confirmHuman = (issuer, input) => {
168
176
  const kernel = kernels.get(object(issuer));
169
177
  if (!kernel)
@@ -181,6 +189,8 @@ const confirmHuman = (issuer, input) => {
181
189
  return rejected('credential.preparation.superseded', '/challenge', 'provenance');
182
190
  if (kernel.confirmed.has(challengeHandle))
183
191
  return rejected('credential.provenance.invalid', '/challenge', 'provenance');
192
+ if (challenge.plan.snapshot.delegatedAuthority)
193
+ return rejected('credential.authority.mode-mismatch', '/challenge', 'authority');
184
194
  const candidate = confirmation;
185
195
  const now = safeTime(kernel.ports.now());
186
196
  if (now === null)
@@ -202,6 +212,29 @@ const confirmHuman = (issuer, input) => {
202
212
  kernel.confirmed.add(challengeHandle);
203
213
  return accepted({ handle: handle, projection });
204
214
  };
215
+ // The authority comes exclusively from the Core snapshot, never from caller assertions.
216
+ const confirmDelegated = (issuer, input) => {
217
+ const kernel = kernels.get(object(issuer));
218
+ if (!kernel || !exactKeys(input, ['challenge']))
219
+ return rejected('credential.provenance.invalid', '/', 'provenance');
220
+ const handle = object(input.challenge);
221
+ const challenge = kernel.challenges.get(handle);
222
+ if (!challenge || !challenge.plan.snapshot.delegatedAuthority || kernel.confirmed.has(handle))
223
+ return rejected('credential.authority.mode-mismatch', '/challenge', 'authority');
224
+ const freshness = receiptFreshnessIssue(kernel, challenge.plan);
225
+ if (freshness)
226
+ return rejected(freshness.issueId, freshness.path, freshness.reasonClass);
227
+ const now = safeTime(kernel.ports.now());
228
+ if (now === null || now < number(challenge.challenge.issuedAtMs) || now >= number(challenge.challenge.expiresAtMs))
229
+ return rejected('credential.delegation.expired', '/challenge', 'time');
230
+ const projection = { challengeId: challenge.challenge.challengeId, challengeHash: challenge.challenge.challengeHash,
231
+ bindingSha256: challenge.plan.binding.bindingSha256, delegatedAuthority: challenge.plan.snapshot.delegatedAuthority,
232
+ confirmedAtMs: now };
233
+ const confirmation = opaque();
234
+ kernel.confirmations.set(confirmation, deepFreeze({ challenge, projection }));
235
+ kernel.confirmed.add(handle);
236
+ return accepted({ handle: confirmation, projection });
237
+ };
205
238
  const issueReceipt = (issuer, input) => {
206
239
  const kernel = kernels.get(object(issuer));
207
240
  if (!kernel)
@@ -254,8 +287,10 @@ const issueReceipt = (issuer, input) => {
254
287
  expiresAtMs: plan.attestation.expiresAtMs };
255
288
  const base = { schemaVersion: 1, receiptId, domain: 'codex-workflow/corrective-replan-receipt/v1',
256
289
  binding: plan.binding, validation, audit: { riskAuditHash: values.riskAuditHash, riskAuditorIdentityHash: values.riskAuditorIdentityHash },
257
- human: { challengeId: confirmation.projection.challengeId, challengeHash: confirmation.projection.challengeHash,
258
- humanPrincipalIdentityHash: confirmation.projection.humanPrincipalIdentityHash, confirmedAtMs: confirmation.projection.confirmedAtMs },
290
+ ...(plan.snapshot.delegatedAuthority
291
+ ? { delegated: { authority: plan.snapshot.delegatedAuthority, authorizedAtMs: confirmation.projection.confirmedAtMs } }
292
+ : { human: { challengeId: confirmation.projection.challengeId, challengeHash: confirmation.projection.challengeHash,
293
+ humanPrincipalIdentityHash: confirmation.projection.humanPrincipalIdentityHash, confirmedAtMs: confirmation.projection.confirmedAtMs } }),
259
294
  supersession: { priorGrantHash: snapshotGrant.grantHash, disposition: 'superseded' },
260
295
  issuedAtMs: now, expiresAtMs };
261
296
  const withDomain = { ...base, domainHash: hashCanonical(base) };
@@ -348,11 +383,12 @@ const verifyStoredEvent = (issuer, input) => {
348
383
  return verificationRejected('credential.event.mismatch', '/candidate', 'integrity');
349
384
  return verified(recordValue.event);
350
385
  };
351
- const functions = [issuePlanValidation, issueHumanChallenge, confirmHuman, issueReceipt, verifyReceipt, materializeStoredEvent, verifyStoredEvent];
386
+ const functions = [issuePlanValidation, issueHumanChallenge, confirmHuman, issueReceipt, verifyReceipt, materializeStoredEvent, verifyStoredEvent, issueDelegatedChallenge, confirmDelegated];
352
387
  const ids = ['credential-materializer.corrective-replan.plan-validation-attestation', 'credential-materializer.corrective-replan.expected-human-challenge',
353
388
  'credential-verifier.corrective-replan.human-confirmation', 'credential-materializer.corrective-replan.receipt',
354
389
  'credential-verifier.corrective-replan.receipt', 'credential-materializer.corrective-replan.stored-plan-validation-event',
355
- 'credential-verifier.corrective-replan.stored-plan-validation-event'];
390
+ 'credential-verifier.corrective-replan.stored-plan-validation-event',
391
+ 'credential-materializer.corrective-replan.delegated-binding', 'credential-verifier.corrective-replan.delegated-authorization'];
356
392
  export const correctiveReplanCredentialFunctionBindings = deepFreeze(ids.map((id, index) => ({ id, version: 1,
357
393
  kind: id.includes('materializer') ? 'materializer' : 'verifier', implementationId: `implementation.${id}`,
358
394
  implementationVersion: 1, wiring: 'invoked', callable: functions[index] })));
@@ -377,7 +413,7 @@ function receiptFreshnessIssue(kernel, plan) {
377
413
  return loaded.snapshotBindingHash === plan.snapshotBindingHash ? null : issue('credential.receipt.snapshot-stale', '/snapshotBindingHash', 'binding');
378
414
  }
379
415
  function snapshotIssue(snapshot, taskId) {
380
- if (!exactKeys(snapshot, ['snapshotVersion', 'bindingManifest', 'worktree', 'baseValues', 'validationExpectation', 'priorPlanAuthorization']) || snapshot.snapshotVersion !== 2)
416
+ if (!exactKeys(snapshot, ['snapshotVersion', 'bindingManifest', 'worktree', 'baseValues', 'validationExpectation', 'priorPlanAuthorization', ...(snapshot.delegatedAuthority ? ['delegatedAuthority'] : [])]) || snapshot.snapshotVersion !== 2)
381
417
  return issue('credential.snapshot.invalid', '/snapshot', 'schema');
382
418
  const base = record(snapshot.baseValues);
383
419
  const expected = record(snapshot.validationExpectation);