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.
- package/README.md +3 -3
- package/dist/reviewer-runtime-build.json +24 -20
- package/dist/src/alpha6/adoption.d.ts +1 -1
- package/dist/src/alpha6/adoption.js +26 -8
- package/dist/src/alpha6/adoption.js.map +1 -1
- package/dist/src/alpha6/corrective-decision-boundary.js +9 -3
- package/dist/src/alpha6/corrective-decision-boundary.js.map +1 -1
- package/dist/src/alpha6/remediation.d.ts +2 -0
- package/dist/src/alpha6/remediation.js +68 -2
- package/dist/src/alpha6/remediation.js.map +1 -1
- package/dist/src/alpha7/autonomy.d.ts +9 -0
- package/dist/src/alpha7/autonomy.js +40 -1
- package/dist/src/alpha7/autonomy.js.map +1 -1
- package/dist/src/beta1/project-transaction.js +14 -4
- package/dist/src/beta1/project-transaction.js.map +1 -1
- package/dist/src/cli-actions.d.ts +3 -3
- package/dist/src/cli-actions.js +5 -0
- package/dist/src/cli-actions.js.map +1 -1
- package/dist/src/cli.js +31 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/contracts.d.ts +19 -2
- package/dist/src/delegation.d.ts +5 -1
- package/dist/src/delegation.js +4 -0
- package/dist/src/delegation.js.map +1 -1
- package/dist/src/failed-checkpoint-update.d.ts +69 -0
- package/dist/src/failed-checkpoint-update.js +171 -0
- package/dist/src/failed-checkpoint-update.js.map +1 -0
- package/dist/src/lifecycle/corrective-replan-credential-core.d.ts +2 -0
- package/dist/src/lifecycle/corrective-replan-credential-core.js +45 -9
- package/dist/src/lifecycle/corrective-replan-credential-core.js.map +1 -1
- package/dist/src/lifecycle/corrective-replan.js +12 -8
- package/dist/src/lifecycle/corrective-replan.js.map +1 -1
- package/dist/src/lifecycle/semantic-registry.js +4 -2
- package/dist/src/lifecycle/semantic-registry.js.map +1 -1
- package/dist/src/observed-routes.js +5 -0
- package/dist/src/observed-routes.js.map +1 -1
- package/dist/src/state/corrective-replan-executor.js +1 -0
- package/dist/src/state/corrective-replan-executor.js.map +1 -1
- package/dist/src/state/corrective-replan-public.d.ts +9 -1
- package/dist/src/state/corrective-replan-public.js +49 -7
- package/dist/src/state/corrective-replan-public.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/src/workflow-blocker-route.js +1 -1
- package/dist/src/workflow-blocker-route.js.map +1 -1
- package/dist/src/workflow.d.ts +40 -1
- package/dist/src/workflow.js +203 -33
- package/dist/src/workflow.js.map +1 -1
- package/docs/autonomy-guardrails.md +4 -4
- package/docs/development-flow.md +8 -6
- package/docs/project-memory.md +2 -2
- package/docs/release.md +7 -1
- package/docs/updating-existing-project.md +37 -0
- package/package.json +1 -1
- package/plugins/codex-workflow-gateway/.codex-plugin/plugin.json +1 -1
- package/plugins/codex-workflow-gateway/references/chat-dispatch.md +17 -5
- package/plugins/codex-workflow-gateway/references/protocol.md +39 -43
- package/plugins/codex-workflow-gateway/scripts/chat-dispatch.mjs +13 -3
- package/plugins/codex-workflow-gateway/scripts/chat-model-policy.mjs +18 -33
- package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +15 -10
- package/references/state-machine.md +3 -1
- package/roles/delivery-coordinator.md +31 -11
- package/roles/scope-lead.md +1 -1
- package/roles/technical-planner.md +4 -1
- package/schemas/adoption-posture-event.schema.json +11 -0
- package/schemas/authorization-event.schema.json +1 -1
- package/schemas/corrective-decision-event.schema.json +23 -3
- package/schemas/corrective-replan-credentials.private.schema.json +8 -5
- package/schemas/corrective-replan-execution-event.private.schema.json +9 -0
- package/schemas/corrective-replan-public.schema.json +2 -1
- package/schemas/delegation-grant.schema.json +1 -1
- package/schemas/task.schema.json +18 -0
- package/schemas/transition-definition.schema.json +4 -0
- package/src/alpha6/adoption.ts +30 -7
- package/src/alpha6/corrective-decision-boundary.ts +9 -3
- package/src/alpha6/remediation.ts +69 -2
- package/src/alpha7/autonomy.ts +39 -1
- package/src/beta1/project-transaction.ts +13 -4
- package/src/cli-actions.ts +5 -0
- package/src/cli.ts +33 -0
- package/src/contracts.ts +19 -1
- package/src/delegation.ts +5 -1
- package/src/failed-checkpoint-update.ts +203 -0
- package/src/lifecycle/corrective-replan-credential-core.ts +39 -10
- package/src/lifecycle/corrective-replan.ts +12 -8
- package/src/lifecycle/semantic-registry.ts +4 -2
- package/src/observed-routes.ts +5 -0
- package/src/state/corrective-replan-executor.ts +1 -0
- package/src/state/corrective-replan-public.ts +50 -6
- package/src/version.ts +1 -1
- package/src/workflow-blocker-route.ts +1 -1
- package/src/workflow.ts +192 -22
package/dist/src/delegation.d.ts
CHANGED
|
@@ -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;
|
package/dist/src/delegation.js
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
258
|
-
|
|
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);
|