codex-orchestrator 2.0.11 → 2.0.12
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/CHANGELOG.md +15 -0
- package/README.md +25 -51
- package/dist/src/index.d.ts +2 -8
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/v2/acceptance-proof.d.ts +46 -31
- package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
- package/dist/src/v2/acceptance-proof.js +157 -195
- package/dist/src/v2/acceptance-proof.js.map +1 -1
- package/dist/src/v2/active-attempt.d.ts +94 -0
- package/dist/src/v2/active-attempt.d.ts.map +1 -0
- package/dist/src/v2/active-attempt.js +200 -0
- package/dist/src/v2/active-attempt.js.map +1 -0
- package/dist/src/v2/adapters/command.d.ts +6 -0
- package/dist/src/v2/adapters/command.d.ts.map +1 -1
- package/dist/src/v2/adapters/command.js +43 -2
- package/dist/src/v2/adapters/command.js.map +1 -1
- package/dist/src/v2/candidate.d.ts +15 -31
- package/dist/src/v2/candidate.d.ts.map +1 -1
- package/dist/src/v2/candidate.js +7 -29
- package/dist/src/v2/candidate.js.map +1 -1
- package/dist/src/v2/checked-change.d.ts +3 -2
- package/dist/src/v2/checked-change.d.ts.map +1 -1
- package/dist/src/v2/checked-change.js +4 -3
- package/dist/src/v2/checked-change.js.map +1 -1
- package/dist/src/v2/cli-contract.d.ts +1 -1
- package/dist/src/v2/cli-contract.d.ts.map +1 -1
- package/dist/src/v2/cli-contract.js +4 -6
- package/dist/src/v2/cli-contract.js.map +1 -1
- package/dist/src/v2/cli.d.ts +8 -0
- package/dist/src/v2/cli.d.ts.map +1 -1
- package/dist/src/v2/cli.js +13 -0
- package/dist/src/v2/cli.js.map +1 -1
- package/dist/src/v2/code-review-report.d.ts +10 -18
- package/dist/src/v2/code-review-report.d.ts.map +1 -1
- package/dist/src/v2/code-review-report.js +63 -60
- package/dist/src/v2/code-review-report.js.map +1 -1
- package/dist/src/v2/codex-process.d.ts +6 -2
- package/dist/src/v2/codex-process.d.ts.map +1 -1
- package/dist/src/v2/codex-process.js +25 -9
- package/dist/src/v2/codex-process.js.map +1 -1
- package/dist/src/v2/config.d.ts +0 -2
- package/dist/src/v2/config.d.ts.map +1 -1
- package/dist/src/v2/config.js +3 -6
- package/dist/src/v2/config.js.map +1 -1
- package/dist/src/v2/contained-report-operation.d.ts +41 -196
- package/dist/src/v2/contained-report-operation.d.ts.map +1 -1
- package/dist/src/v2/contained-report-operation.js +139 -466
- package/dist/src/v2/contained-report-operation.js.map +1 -1
- package/dist/src/v2/containment.d.ts +1 -0
- package/dist/src/v2/containment.d.ts.map +1 -1
- package/dist/src/v2/containment.js +12 -2
- package/dist/src/v2/containment.js.map +1 -1
- package/dist/src/v2/delivery-authority.d.ts +26 -0
- package/dist/src/v2/delivery-authority.d.ts.map +1 -0
- package/dist/src/v2/delivery-authority.js +44 -0
- package/dist/src/v2/delivery-authority.js.map +1 -0
- package/dist/src/v2/direct-delivery.d.ts +16 -36
- package/dist/src/v2/direct-delivery.d.ts.map +1 -1
- package/dist/src/v2/direct-delivery.js +135 -122
- package/dist/src/v2/direct-delivery.js.map +1 -1
- package/dist/src/v2/immutable-workflow-publisher.d.ts.map +1 -1
- package/dist/src/v2/immutable-workflow-publisher.js +3 -1
- package/dist/src/v2/immutable-workflow-publisher.js.map +1 -1
- package/dist/src/v2/implementation-report.d.ts +3 -1
- package/dist/src/v2/implementation-report.d.ts.map +1 -1
- package/dist/src/v2/implementation-report.js +17 -4
- package/dist/src/v2/implementation-report.js.map +1 -1
- package/dist/src/v2/implementation-reviewer.d.ts +41 -12
- package/dist/src/v2/implementation-reviewer.d.ts.map +1 -1
- package/dist/src/v2/implementation-reviewer.js +114 -42
- package/dist/src/v2/implementation-reviewer.js.map +1 -1
- package/dist/src/v2/pending-effect-settlement.d.ts +44 -0
- package/dist/src/v2/pending-effect-settlement.d.ts.map +1 -0
- package/dist/src/v2/pending-effect-settlement.js +69 -0
- package/dist/src/v2/pending-effect-settlement.js.map +1 -0
- package/dist/src/v2/process-identity.d.ts +45 -0
- package/dist/src/v2/process-identity.d.ts.map +1 -0
- package/dist/src/v2/process-identity.js +118 -0
- package/dist/src/v2/process-identity.js.map +1 -0
- package/dist/src/v2/proof-report.d.ts +2 -1
- package/dist/src/v2/proof-report.d.ts.map +1 -1
- package/dist/src/v2/proof-report.js +10 -4
- package/dist/src/v2/proof-report.js.map +1 -1
- package/dist/src/v2/review-feedback-coordinator.d.ts +1 -1
- package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -1
- package/dist/src/v2/review-feedback-coordinator.js +1 -1
- package/dist/src/v2/review-feedback-coordinator.js.map +1 -1
- package/dist/src/v2/review-feedback.d.ts +14 -20
- package/dist/src/v2/review-feedback.d.ts.map +1 -1
- package/dist/src/v2/review-feedback.js +45 -87
- package/dist/src/v2/review-feedback.js.map +1 -1
- package/dist/src/v2/run-issue.d.ts +129 -88
- package/dist/src/v2/run-issue.d.ts.map +1 -1
- package/dist/src/v2/run-issue.js +1965 -2381
- package/dist/src/v2/run-issue.js.map +1 -1
- package/dist/src/v2/run-state-projections.d.ts +84 -0
- package/dist/src/v2/run-state-projections.d.ts.map +1 -0
- package/dist/src/v2/run-state-projections.js +142 -0
- package/dist/src/v2/run-state-projections.js.map +1 -0
- package/dist/src/v2/run-store.d.ts +99 -81
- package/dist/src/v2/run-store.d.ts.map +1 -1
- package/dist/src/v2/run-store.js +245 -542
- package/dist/src/v2/run-store.js.map +1 -1
- package/dist/src/v2/runtime-assets.d.ts +3 -0
- package/dist/src/v2/runtime-assets.d.ts.map +1 -1
- package/dist/src/v2/runtime-assets.js +104 -0
- package/dist/src/v2/runtime-assets.js.map +1 -1
- package/dist/src/v2/runtime.d.ts +56 -44
- package/dist/src/v2/runtime.d.ts.map +1 -1
- package/dist/src/v2/runtime.js +383 -503
- package/dist/src/v2/runtime.js.map +1 -1
- package/dist/src/v2/setup.js +0 -2
- package/dist/src/v2/setup.js.map +1 -1
- package/dist/src/v2/validation-progression.d.ts +70 -0
- package/dist/src/v2/validation-progression.d.ts.map +1 -0
- package/dist/src/v2/validation-progression.js +247 -0
- package/dist/src/v2/validation-progression.js.map +1 -0
- package/dist/src/v2/workflow-assets.d.ts +9 -3
- package/dist/src/v2/workflow-assets.d.ts.map +1 -1
- package/dist/src/v2/workflow-assets.js +256 -43
- package/dist/src/v2/workflow-assets.js.map +1 -1
- package/internal-workflow/docs/agents/bug-workflow-routing.md +9 -7
- package/internal-workflow/docs/agents/coding-skill-routing.md +170 -120
- package/internal-workflow/docs/agents/tool-usage.md +23 -12
- package/internal-workflow/manifest.json +1 -1
- package/internal-workflow/operations/code-review/SKILL.md +34 -15
- package/internal-workflow/operations/implementation/SKILL.md +21 -16
- package/internal-workflow/profiles/implementer.toml +9 -0
- package/internal-workflow/profiles/review_coordinator.toml +9 -0
- package/internal-workflow/profiles/spec_reviewer.toml +9 -0
- package/internal-workflow/profiles/standards_reviewer.toml +9 -0
- package/internal-workflow/schemas/code-review-v1.json +1 -1
- package/internal-workflow/schemas/implementation-report-v1.json +1 -1
- package/internal-workflow/schemas/proof-report-v1.json +1 -1
- package/internal-workflow/skills/bug-root-cause-explainer/SKILL.md +114 -0
- package/internal-workflow/skills/bug-root-cause-explainer/agents/openai.yaml +7 -0
- package/internal-workflow/skills/bug-root-cause-explainer/evals/evals.json +18 -0
- package/internal-workflow/skills/code-review/SKILL.md +84 -306
- package/internal-workflow/skills/code-review/agents/openai.yaml +5 -3
- package/internal-workflow/skills/code-review/evals/evals.json +83 -0
- package/internal-workflow/skills/code-review/references/standards-smells.md +41 -0
- package/internal-workflow/skills/diagnosing-bugs/SKILL.md +69 -32
- package/internal-workflow/skills/diagnosing-bugs/agents/openai.yaml +2 -2
- package/internal-workflow/skills/diagnosing-bugs/evals/evals.json +63 -0
- package/internal-workflow/skills/grilling/SKILL.md +51 -0
- package/internal-workflow/skills/grilling/agents/openai.yaml +6 -0
- package/internal-workflow/skills/grilling/evals/evals.json +47 -0
- package/internal-workflow/skills/implement/SKILL.md +135 -0
- package/internal-workflow/skills/implement/agents/openai.yaml +6 -0
- package/internal-workflow/skills/implement/evals/evals.json +150 -0
- package/internal-workflow/skills/plan/SKILL.md +59 -0
- package/internal-workflow/skills/plan/agents/openai.yaml +6 -0
- package/internal-workflow/skills/plan/evals/evals.json +36 -0
- package/internal-workflow/skills/prototype/LOGIC.md +130 -0
- package/internal-workflow/skills/prototype/SKILL.md +69 -0
- package/internal-workflow/skills/prototype/UI.md +157 -0
- package/internal-workflow/skills/prototype/agents/openai.yaml +6 -0
- package/internal-workflow/skills/prototype/evals/evals.json +67 -0
- package/internal-workflow/skills/research/SKILL.md +110 -0
- package/internal-workflow/skills/research/agents/openai.yaml +6 -0
- package/internal-workflow/skills/research/evals/evals.json +49 -0
- package/internal-workflow/skills/tdd/SKILL.md +72 -67
- package/internal-workflow/skills/tdd/agents/openai.yaml +2 -2
- package/internal-workflow/skills/tdd/evals/evals.json +12 -0
- package/internal-workflow/skills/tdd/mocking.md +48 -1
- package/internal-workflow/skills/tdd/refactoring.md +3 -3
- package/internal-workflow/skills/tickets-orchestrator/SKILL.md +199 -0
- package/internal-workflow/skills/tickets-orchestrator/agents/openai.yaml +6 -0
- package/internal-workflow/skills/tickets-orchestrator/evals/evals.json +126 -0
- package/internal-workflow/skills/tickets-orchestrator/references/delegate-integrate.md +83 -0
- package/internal-workflow/skills/tickets-orchestrator/references/finish-delivery.md +69 -0
- package/internal-workflow/skills/tickets-orchestrator/references/stop-completion.md +63 -0
- package/internal-workflow/skills/to-spec/SKILL.md +133 -0
- package/internal-workflow/skills/to-spec/agents/openai.yaml +6 -0
- package/internal-workflow/skills/to-spec/evals/evals.json +24 -0
- package/internal-workflow/skills/to-tickets/SKILL.md +189 -0
- package/internal-workflow/skills/to-tickets/agents/openai.yaml +6 -0
- package/internal-workflow/skills/to-tickets/evals/evals.json +79 -0
- package/internal-workflow/skills/to-tickets/references/publishing-details.md +117 -0
- package/package.json +1 -1
- package/dist/src/v2/proof-store.d.ts +0 -54
- package/dist/src/v2/proof-store.d.ts.map +0 -1
- package/dist/src/v2/proof-store.js +0 -301
- package/dist/src/v2/proof-store.js.map +0 -1
- package/dist/src/v2/route-continuations.d.ts +0 -32
- package/dist/src/v2/route-continuations.d.ts.map +0 -1
- package/dist/src/v2/route-continuations.js +0 -2
- package/dist/src/v2/route-continuations.js.map +0 -1
- package/dist/src/v2/route-coordinator.d.ts +0 -72
- package/dist/src/v2/route-coordinator.d.ts.map +0 -1
- package/dist/src/v2/route-coordinator.js +0 -275
- package/dist/src/v2/route-coordinator.js.map +0 -1
- package/dist/src/v2/route-decision.d.ts +0 -120
- package/dist/src/v2/route-decision.d.ts.map +0 -1
- package/dist/src/v2/route-decision.js +0 -380
- package/dist/src/v2/route-decision.js.map +0 -1
- package/dist/src/v2/spec-coordinator.d.ts +0 -73
- package/dist/src/v2/spec-coordinator.d.ts.map +0 -1
- package/dist/src/v2/spec-coordinator.js +0 -126
- package/dist/src/v2/spec-coordinator.js.map +0 -1
- package/dist/src/v2/spec-delivery.d.ts +0 -112
- package/dist/src/v2/spec-delivery.d.ts.map +0 -1
- package/dist/src/v2/spec-delivery.js +0 -336
- package/dist/src/v2/spec-delivery.js.map +0 -1
- package/dist/src/v2/triage-route.d.ts +0 -68
- package/dist/src/v2/triage-route.d.ts.map +0 -1
- package/dist/src/v2/triage-route.js +0 -223
- package/dist/src/v2/triage-route.js.map +0 -1
- package/dist/src/v2/waiting-human-coordinator.d.ts +0 -49
- package/dist/src/v2/waiting-human-coordinator.d.ts.map +0 -1
- package/dist/src/v2/waiting-human-coordinator.js +0 -509
- package/dist/src/v2/waiting-human-coordinator.js.map +0 -1
- package/dist/src/v2/waiting-human.d.ts +0 -143
- package/dist/src/v2/waiting-human.d.ts.map +0 -1
- package/dist/src/v2/waiting-human.js +0 -408
- package/dist/src/v2/waiting-human.js.map +0 -1
- package/internal-workflow/docs/agents/contract-test-ledger.md +0 -71
- package/internal-workflow/docs/agents/review-gates.md +0 -42
- package/internal-workflow/docs/agents/review-protocol.md +0 -98
- package/internal-workflow/evals/coding-skill-evals.json +0 -373
- package/internal-workflow/operations/ambiguity-review/SKILL.md +0 -5
- package/internal-workflow/operations/qualification-repair/SKILL.md +0 -17
- package/internal-workflow/operations/spec-author/SKILL.md +0 -12
- package/internal-workflow/operations/spec-review/SKILL.md +0 -12
- package/internal-workflow/operations/triage/SKILL.md +0 -12
- package/internal-workflow/profiles/analyst_deep.toml +0 -9
- package/internal-workflow/profiles/implementer_standard.toml +0 -9
- package/internal-workflow/profiles/proof_agent.toml +0 -8
- package/internal-workflow/profiles/reviewer_deep.toml +0 -9
- package/internal-workflow/profiles/reviewer_standard.toml +0 -9
- package/internal-workflow/schemas/ambiguity-review-v1.json +0 -1
- package/internal-workflow/schemas/spec-author-v1.json +0 -1
- package/internal-workflow/schemas/spec-review-v1.json +0 -30
- package/internal-workflow/schemas/triage-route-v1.json +0 -1
- package/internal-workflow/skills/agent-auto/SKILL.md +0 -19
- package/internal-workflow/skills/agent-auto/agents/openai.yaml +0 -6
- package/internal-workflow/skills/code-debugger/SKILL.md +0 -122
- package/internal-workflow/skills/code-debugger/agents/openai.yaml +0 -7
- package/internal-workflow/skills/code-review/references/bug-classes.md +0 -56
- package/internal-workflow/skills/code-review/references/cleanup-lens.md +0 -52
- package/internal-workflow/skills/code-review/references/framework-lenses.md +0 -34
- package/internal-workflow/skills/code-review/references/targeted-recipes.md +0 -49
- package/internal-workflow/skills/implementation-spec-maker/SKILL.md +0 -107
- package/internal-workflow/skills/implementation-spec-maker/agents/openai.yaml +0 -6
- package/internal-workflow/skills/implementation-spec-maker/references/source-modes.md +0 -32
- package/internal-workflow/skills/implementation-spec-maker/references/spec-template.md +0 -146
- package/internal-workflow/skills/implementation-spec-review/SKILL.md +0 -131
- package/internal-workflow/skills/implementation-spec-review/agents/openai.yaml +0 -6
- package/internal-workflow/skills/implementation-spec-review/evals/evals.json +0 -78
- package/internal-workflow/skills/implementation-spec-review/references/review-loop.md +0 -121
- package/internal-workflow/skills/small-task-implementer/SKILL.md +0 -112
- package/internal-workflow/skills/small-task-implementer/agents/openai.yaml +0 -6
- package/internal-workflow/skills/spec-implementer/SKILL.md +0 -133
- package/internal-workflow/skills/spec-implementer/agents/openai.yaml +0 -6
- package/internal-workflow/skills/spec-implementer/evals/evals.json +0 -30
- package/internal-workflow/skills/spec-implementer/references/review-loop.md +0 -100
- package/internal-workflow/skills/triage/AGENT-BRIEF.md +0 -192
- package/internal-workflow/skills/triage/OUT-OF-SCOPE.md +0 -101
- package/internal-workflow/skills/triage/SKILL.md +0 -134
- package/internal-workflow/skills/triage/agents/openai.yaml +0 -6
|
@@ -1,380 +0,0 @@
|
|
|
1
|
-
import { canonicalJson, sha256 } from './containment.js';
|
|
2
|
-
import { validateTriageRoute } from './triage-route.js';
|
|
3
|
-
const SHA256_PATTERN = /^[0-9a-f]{64}$/;
|
|
4
|
-
const MAX_STRING_LENGTH = 16 * 1024;
|
|
5
|
-
const MAX_ARRAY_LENGTH = 256;
|
|
6
|
-
const TRIAGE_ARTIFACT_DOMAIN = 'codex-orchestrator-triage-artifact-v1';
|
|
7
|
-
const AMBIGUITY_REVIEW_DOMAIN = 'codex-orchestrator-ambiguity-review-v1';
|
|
8
|
-
const ROUTE_DECISION_DOMAIN = 'codex-orchestrator-route-decision-v1';
|
|
9
|
-
export function hashTriageArtifact(value) {
|
|
10
|
-
return hashDomain(TRIAGE_ARTIFACT_DOMAIN, validateTriageRoute(value));
|
|
11
|
-
}
|
|
12
|
-
export function hashAmbiguityReviewArtifact(value) {
|
|
13
|
-
return hashDomain(AMBIGUITY_REVIEW_DOMAIN, validateAmbiguityReviewArtifact(value));
|
|
14
|
-
}
|
|
15
|
-
export function hashRouteDecision(value) {
|
|
16
|
-
const receipt = validateRouteReceiptCore(value, undefined, false);
|
|
17
|
-
return hashDomain(ROUTE_DECISION_DOMAIN, { ...receipt, decisionSha256: '' });
|
|
18
|
-
}
|
|
19
|
-
export function validateAmbiguityReviewArtifact(value) {
|
|
20
|
-
assertExactObject(value, [
|
|
21
|
-
'version', 'candidateSha256', 'verdict', 'evidenceReviewed', 'findings', 'recommendation',
|
|
22
|
-
], 'ambiguity review artifact');
|
|
23
|
-
if (value.version !== 1)
|
|
24
|
-
throw new Error('ambiguity review artifact.version must be 1');
|
|
25
|
-
assertSha256(value.candidateSha256, 'ambiguity review artifact.candidateSha256');
|
|
26
|
-
if (!['approved', 'rejected', 'blocked'].includes(value.verdict)) {
|
|
27
|
-
throw new Error('ambiguity review artifact.verdict is invalid');
|
|
28
|
-
}
|
|
29
|
-
assertStringArray(value.evidenceReviewed, 'ambiguity review artifact.evidenceReviewed', 0);
|
|
30
|
-
assertUnique(value.evidenceReviewed, 'ambiguity review artifact.evidenceReviewed');
|
|
31
|
-
assertStringArray(value.findings, 'ambiguity review artifact.findings', 0);
|
|
32
|
-
assertUnique(value.findings, 'ambiguity review artifact.findings');
|
|
33
|
-
assertString(value.recommendation, 'ambiguity review artifact.recommendation');
|
|
34
|
-
return value;
|
|
35
|
-
}
|
|
36
|
-
export function validateRouteArtifactRef(value, expectedGenerationHash) {
|
|
37
|
-
assertExactObject(value, ['operation', 'attemptId', 'artifactSha256', 'generationHash'], 'route triage ref');
|
|
38
|
-
if (value.operation !== 'triage')
|
|
39
|
-
throw new Error('route triage ref.operation must be triage');
|
|
40
|
-
assertString(value.attemptId, 'route triage ref.attemptId');
|
|
41
|
-
assertSha256(value.artifactSha256, 'route triage ref.artifactSha256');
|
|
42
|
-
assertGeneration(value.generationHash, expectedGenerationHash, 'route triage ref.generationHash');
|
|
43
|
-
return value;
|
|
44
|
-
}
|
|
45
|
-
export function validateAmbiguityReviewRef(value, expectedGenerationHash) {
|
|
46
|
-
assertExactObject(value, [
|
|
47
|
-
'operation', 'attemptId', 'candidateSha256', 'artifactSha256', 'verdict', 'generationHash',
|
|
48
|
-
], 'ambiguity review ref');
|
|
49
|
-
if (value.operation !== 'ambiguity-review')
|
|
50
|
-
throw new Error('ambiguity review ref.operation must be ambiguity-review');
|
|
51
|
-
assertString(value.attemptId, 'ambiguity review ref.attemptId');
|
|
52
|
-
assertSha256(value.candidateSha256, 'ambiguity review ref.candidateSha256');
|
|
53
|
-
assertSha256(value.artifactSha256, 'ambiguity review ref.artifactSha256');
|
|
54
|
-
if (value.verdict !== 'approved' && value.verdict !== 'rejected')
|
|
55
|
-
throw new Error('ambiguity review ref.verdict is invalid');
|
|
56
|
-
assertGeneration(value.generationHash, expectedGenerationHash, 'ambiguity review ref.generationHash');
|
|
57
|
-
return value;
|
|
58
|
-
}
|
|
59
|
-
export function validateRouteReceipt(value, expectedGenerationHash) {
|
|
60
|
-
return validateRouteReceiptCore(value, expectedGenerationHash, true);
|
|
61
|
-
}
|
|
62
|
-
function validateRouteReceiptCore(value, expectedGenerationHash, verifyDecisionHash) {
|
|
63
|
-
assertExactObject(value, [
|
|
64
|
-
'version', 'route', 'triage', 'review', 'artifact', 'decisionSha256', 'decidedAt', 'assumptions',
|
|
65
|
-
], 'route receipt');
|
|
66
|
-
if (value.version !== 1)
|
|
67
|
-
throw new Error('route receipt.version must be 1');
|
|
68
|
-
if (!['direct', 'spec-required', 'awaiting-user'].includes(value.route)) {
|
|
69
|
-
throw new Error('route receipt.route is invalid');
|
|
70
|
-
}
|
|
71
|
-
const triage = validateRouteArtifactRef(value.triage, expectedGenerationHash);
|
|
72
|
-
const artifact = validateTriageRoute(value.artifact);
|
|
73
|
-
if (artifact.status === 'blocked' || artifact.status !== value.route) {
|
|
74
|
-
throw new Error('route receipt.route does not match artifact status');
|
|
75
|
-
}
|
|
76
|
-
const artifactSha256 = hashTriageArtifact(artifact);
|
|
77
|
-
if (triage.artifactSha256 !== artifactSha256)
|
|
78
|
-
throw new Error('route receipt artifact hash mismatch');
|
|
79
|
-
let review;
|
|
80
|
-
if (value.review === null) {
|
|
81
|
-
review = null;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
review = validateAmbiguityReviewRef(value.review, expectedGenerationHash ?? triage.generationHash);
|
|
85
|
-
if (review.generationHash !== triage.generationHash)
|
|
86
|
-
throw new Error('route receipt review generation mismatch');
|
|
87
|
-
}
|
|
88
|
-
if (value.route === 'awaiting-user') {
|
|
89
|
-
if (review === null || review.verdict !== 'approved')
|
|
90
|
-
throw new Error('awaiting-user route requires an approved review');
|
|
91
|
-
if (review.candidateSha256 !== triage.artifactSha256)
|
|
92
|
-
throw new Error('awaiting-user review candidate hash mismatch');
|
|
93
|
-
if (review.attemptId === triage.attemptId)
|
|
94
|
-
throw new Error('triage and ambiguity review attempt IDs must be distinct');
|
|
95
|
-
}
|
|
96
|
-
else if (review !== null) {
|
|
97
|
-
throw new Error(`${String(value.route)} route requires review null`);
|
|
98
|
-
}
|
|
99
|
-
if (verifyDecisionHash || value.decisionSha256 !== '') {
|
|
100
|
-
assertSha256(value.decisionSha256, 'route receipt.decisionSha256');
|
|
101
|
-
}
|
|
102
|
-
assertTimestamp(value.decidedAt, 'route receipt.decidedAt');
|
|
103
|
-
assertStringArray(value.assumptions, 'route receipt.assumptions', 0);
|
|
104
|
-
assertUnique(value.assumptions, 'route receipt.assumptions');
|
|
105
|
-
if (canonicalJson(value.assumptions) !== canonicalJson(artifact.assumptions)) {
|
|
106
|
-
throw new Error('route receipt assumptions must equal artifact assumptions');
|
|
107
|
-
}
|
|
108
|
-
const receipt = value;
|
|
109
|
-
const expectedDecisionSha256 = hashDomain(ROUTE_DECISION_DOMAIN, { ...receipt, decisionSha256: '' });
|
|
110
|
-
if (verifyDecisionHash && value.decisionSha256 !== expectedDecisionSha256) {
|
|
111
|
-
throw new Error('route receipt decision hash mismatch');
|
|
112
|
-
}
|
|
113
|
-
return receipt;
|
|
114
|
-
}
|
|
115
|
-
export function validateRouteExecution(value, expectedGenerationHash) {
|
|
116
|
-
assertRecord(value, 'route execution');
|
|
117
|
-
validateBudgets(value);
|
|
118
|
-
const budgetKeys = [
|
|
119
|
-
'version', 'triageRepairs', 'candidateReviews',
|
|
120
|
-
];
|
|
121
|
-
if (value.phase === 'triage-ready') {
|
|
122
|
-
assertExactObject(value, [...budgetKeys, 'phase'], 'route execution');
|
|
123
|
-
}
|
|
124
|
-
else if (value.phase === 'triage-in-flight') {
|
|
125
|
-
assertExactObject(value, [...budgetKeys, 'phase'], 'route execution');
|
|
126
|
-
}
|
|
127
|
-
else if (value.phase === 'candidate-ready') {
|
|
128
|
-
assertExactObject(value, [...budgetKeys, 'phase', 'candidate', 'triage'], 'route execution');
|
|
129
|
-
validateWaitingCandidate(value.candidate, value.triage, expectedGenerationHash);
|
|
130
|
-
if (value.candidateReviews !== 0)
|
|
131
|
-
throw new Error('candidate-ready candidateReviews must be 0');
|
|
132
|
-
}
|
|
133
|
-
else if (value.phase === 'review-in-flight') {
|
|
134
|
-
assertExactObject(value, [...budgetKeys, 'phase', 'candidate', 'triage'], 'route execution');
|
|
135
|
-
const triage = validateWaitingCandidate(value.candidate, value.triage, expectedGenerationHash);
|
|
136
|
-
if (value.candidateReviews !== 0)
|
|
137
|
-
throw new Error('review-in-flight candidateReviews must be 0');
|
|
138
|
-
}
|
|
139
|
-
else if (value.phase === 'malformed-repair-ready') {
|
|
140
|
-
assertExactObject(value, [...budgetKeys, 'phase', 'findings'], 'route execution');
|
|
141
|
-
validateFindings(value.findings, 'route execution.findings');
|
|
142
|
-
assertRepairConsumed(value);
|
|
143
|
-
}
|
|
144
|
-
else if (value.phase === 'candidate-repair-ready') {
|
|
145
|
-
assertExactObject(value, [...budgetKeys, 'phase', 'candidate', 'triage', 'review', 'findings'], 'route execution');
|
|
146
|
-
validateRejectedCandidate(value.candidate, value.triage, value.review, value.findings, expectedGenerationHash);
|
|
147
|
-
assertRejectedRepairBudgets(value);
|
|
148
|
-
}
|
|
149
|
-
else if (value.phase === 'repair-in-flight') {
|
|
150
|
-
assertExactObject(value, [...budgetKeys, 'phase', 'repairInput'], 'route execution');
|
|
151
|
-
validateRepairInput(value.repairInput, expectedGenerationHash);
|
|
152
|
-
assertRepairConsumed(value);
|
|
153
|
-
if (value.repairInput.kind === 'rejected-candidate') {
|
|
154
|
-
if (value.candidateReviews !== 1)
|
|
155
|
-
throw new Error('rejected-candidate repair requires candidateReviews 1');
|
|
156
|
-
}
|
|
157
|
-
else if (value.candidateReviews !== 0) {
|
|
158
|
-
throw new Error('malformed repair requires candidateReviews 0');
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else if (value.phase === 'route-complete') {
|
|
162
|
-
assertExactObject(value, [...budgetKeys, 'phase', 'triage', 'review'], 'route execution');
|
|
163
|
-
const triage = validateRouteArtifactRef(value.triage, expectedGenerationHash);
|
|
164
|
-
if (value.review !== null) {
|
|
165
|
-
const review = validateAmbiguityReviewRef(value.review, expectedGenerationHash ?? triage.generationHash);
|
|
166
|
-
validateReviewBinding(triage, review);
|
|
167
|
-
if (review.verdict !== 'approved')
|
|
168
|
-
throw new Error('route-complete review must be approved');
|
|
169
|
-
if (value.candidateReviews !== 1)
|
|
170
|
-
throw new Error('reviewed route-complete requires candidateReviews 1');
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
throw new Error('route execution.phase is invalid');
|
|
175
|
-
}
|
|
176
|
-
return value;
|
|
177
|
-
}
|
|
178
|
-
export function validateRouteStateInvariant(input) {
|
|
179
|
-
assertSha256(input.generationHash, 'route state.generationHash');
|
|
180
|
-
if (!ROUTE_LIFECYCLES.includes(input.lifecycle))
|
|
181
|
-
throw new Error('route state lifecycle is invalid');
|
|
182
|
-
const hasExecution = input.routeExecution !== undefined;
|
|
183
|
-
const hasReceipt = input.routeReceipt !== undefined;
|
|
184
|
-
if (input.lifecycle === 'claimed') {
|
|
185
|
-
if (hasExecution || hasReceipt)
|
|
186
|
-
throw new Error('claimed route state requires routeExecution and routeReceipt absent');
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
if (input.lifecycle === 'triaging') {
|
|
190
|
-
if (!hasExecution || hasReceipt)
|
|
191
|
-
throw new Error('triaging route state requires routeExecution and routeReceipt absent');
|
|
192
|
-
const execution = validateRouteExecution(input.routeExecution, input.generationHash);
|
|
193
|
-
if (execution.phase === 'route-complete')
|
|
194
|
-
throw new Error('triaging route execution cannot be route-complete');
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
if (TERMINAL_LIFECYCLES.includes(input.lifecycle) && !hasExecution && !hasReceipt)
|
|
198
|
-
return;
|
|
199
|
-
if (!hasExecution || !hasReceipt)
|
|
200
|
-
throw new Error(`${input.lifecycle} route execution and receipt are required as an exact pair`);
|
|
201
|
-
const execution = validateRouteExecution(input.routeExecution, input.generationHash);
|
|
202
|
-
if (execution.phase !== 'route-complete')
|
|
203
|
-
throw new Error(`${input.lifecycle} route execution must be route-complete`);
|
|
204
|
-
const receipt = validateRouteReceipt(input.routeReceipt, input.generationHash);
|
|
205
|
-
if (canonicalJson(execution.triage) !== canonicalJson(receipt.triage)
|
|
206
|
-
|| canonicalJson(execution.review) !== canonicalJson(receipt.review)) {
|
|
207
|
-
throw new Error('route-complete refs must equal route receipt refs');
|
|
208
|
-
}
|
|
209
|
-
if (input.lifecycle === 'implementing' && receipt.route !== 'direct') {
|
|
210
|
-
throw new Error('implementing lifecycle requires direct route');
|
|
211
|
-
}
|
|
212
|
-
if (input.lifecycle === 'spec-authoring' && receipt.route !== 'spec-required') {
|
|
213
|
-
throw new Error('direct route dispatch requires implementing lifecycle');
|
|
214
|
-
}
|
|
215
|
-
if (input.lifecycle === 'waiting-human' && receipt.route !== 'awaiting-user') {
|
|
216
|
-
throw new Error('waiting-human lifecycle requires awaiting-user route');
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
export function downstreamLifecycleForRoute(receiptValue, expectedGenerationHash) {
|
|
220
|
-
const receipt = validateRouteReceipt(receiptValue, expectedGenerationHash);
|
|
221
|
-
if (receipt.route === 'direct')
|
|
222
|
-
return 'implementing';
|
|
223
|
-
if (receipt.route === 'spec-required')
|
|
224
|
-
return 'spec-authoring';
|
|
225
|
-
return 'waiting-human';
|
|
226
|
-
}
|
|
227
|
-
export function validateRouteTransition(previous, next) {
|
|
228
|
-
validateRouteStateInvariant(previous);
|
|
229
|
-
validateRouteStateInvariant(next);
|
|
230
|
-
if (previous.generationHash !== next.generationHash)
|
|
231
|
-
throw new Error('route transition generation is immutable');
|
|
232
|
-
if (previous.routeReceipt !== undefined) {
|
|
233
|
-
if (next.routeReceipt === undefined
|
|
234
|
-
|| canonicalJson(previous.routeReceipt) !== canonicalJson(next.routeReceipt)) {
|
|
235
|
-
throw new Error('route receipt is immutable after routing');
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
if (previous.lifecycle === 'routed' && next.lifecycle !== 'routed') {
|
|
239
|
-
const expected = downstreamLifecycleForRoute(previous.routeReceipt, previous.generationHash);
|
|
240
|
-
if (next.lifecycle !== expected)
|
|
241
|
-
throw new Error(`routed ${String(previous.routeReceipt.route)} must dispatch to ${expected}`);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
export function validateTrustedAnswerResumeTransition(previous, next, waitingHuman) {
|
|
245
|
-
validateRouteStateInvariant(previous);
|
|
246
|
-
validateRouteStateInvariant(next);
|
|
247
|
-
if (previous.lifecycle !== 'waiting-human' || previous.routeReceipt.route !== 'awaiting-user') {
|
|
248
|
-
throw new Error('trusted answer resume requires waiting-human awaiting-user authority');
|
|
249
|
-
}
|
|
250
|
-
if (waitingHuman.phase !== 'resume-ready')
|
|
251
|
-
throw new Error('trusted answer resume requires resume-ready evidence');
|
|
252
|
-
if (next.lifecycle !== 'triaging' || next.routeReceipt !== undefined)
|
|
253
|
-
throw new Error('trusted answer resume must restart triage without a receipt');
|
|
254
|
-
const execution = validateRouteExecution(next.routeExecution, next.generationHash);
|
|
255
|
-
if (execution.phase !== 'triage-ready' || execution.triageRepairs !== 0 || execution.candidateReviews !== 0) {
|
|
256
|
-
throw new Error('trusted answer resume requires initial route execution');
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
const ROUTE_LIFECYCLES = [
|
|
260
|
-
'claimed', 'triaging', 'routed', 'implementing', 'waiting-human', 'spec-authoring', 'reworking', 'checking',
|
|
261
|
-
'proving', 'publishing', 'safe-halt', 'review-ready', 'blocked', 'transport-failed', 'cancelled', 'internal-error',
|
|
262
|
-
];
|
|
263
|
-
const TERMINAL_LIFECYCLES = [
|
|
264
|
-
'review-ready', 'blocked', 'transport-failed', 'cancelled', 'internal-error',
|
|
265
|
-
];
|
|
266
|
-
function validateBudgets(value) {
|
|
267
|
-
if (value.version !== 1)
|
|
268
|
-
throw new Error('route execution.version must be 1');
|
|
269
|
-
for (const key of [
|
|
270
|
-
'triageRepairs', 'candidateReviews',
|
|
271
|
-
]) {
|
|
272
|
-
if (value[key] !== 0 && value[key] !== 1)
|
|
273
|
-
throw new Error(`route execution.${key} must be 0 or 1`);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
function validateWaitingCandidate(candidateValue, triageValue, expectedGenerationHash) {
|
|
277
|
-
const candidate = validateTriageRoute(candidateValue);
|
|
278
|
-
if (candidate.status !== 'awaiting-user')
|
|
279
|
-
throw new Error('route execution candidate must be awaiting-user');
|
|
280
|
-
const triage = validateRouteArtifactRef(triageValue, expectedGenerationHash);
|
|
281
|
-
if (triage.artifactSha256 !== hashTriageArtifact(candidate))
|
|
282
|
-
throw new Error('route execution candidate artifact hash mismatch');
|
|
283
|
-
return triage;
|
|
284
|
-
}
|
|
285
|
-
function validateRejectedCandidate(candidate, triageValue, reviewValue, findings, expectedGenerationHash) {
|
|
286
|
-
const triage = validateWaitingCandidate(candidate, triageValue, expectedGenerationHash);
|
|
287
|
-
const review = validateAmbiguityReviewRef(reviewValue, expectedGenerationHash ?? triage.generationHash);
|
|
288
|
-
validateReviewBinding(triage, review);
|
|
289
|
-
if (review.verdict !== 'rejected')
|
|
290
|
-
throw new Error('candidate repair review must be rejected');
|
|
291
|
-
validateFindings(findings, 'route execution findings');
|
|
292
|
-
}
|
|
293
|
-
function validateRepairInput(value, expectedGenerationHash) {
|
|
294
|
-
assertRecord(value, 'route execution.repairInput');
|
|
295
|
-
if (value.kind === 'malformed') {
|
|
296
|
-
assertExactObject(value, ['kind', 'findings'], 'route execution.repairInput');
|
|
297
|
-
validateFindings(value.findings, 'route execution.repairInput.findings');
|
|
298
|
-
return;
|
|
299
|
-
}
|
|
300
|
-
if (value.kind === 'rejected-candidate') {
|
|
301
|
-
assertExactObject(value, ['kind', 'candidate', 'triage', 'review', 'findings'], 'route execution.repairInput');
|
|
302
|
-
validateRejectedCandidate(value.candidate, value.triage, value.review, value.findings, expectedGenerationHash);
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
throw new Error('route execution.repairInput.kind is invalid');
|
|
306
|
-
}
|
|
307
|
-
function validateReviewBinding(triage, review) {
|
|
308
|
-
if (review.generationHash !== triage.generationHash)
|
|
309
|
-
throw new Error('ambiguity review generation mismatch');
|
|
310
|
-
if (review.candidateSha256 !== triage.artifactSha256)
|
|
311
|
-
throw new Error('ambiguity review candidate hash mismatch');
|
|
312
|
-
if (review.attemptId === triage.attemptId)
|
|
313
|
-
throw new Error('ambiguity review attempt must be distinct from triage attempt');
|
|
314
|
-
}
|
|
315
|
-
function assertRepairConsumed(value) {
|
|
316
|
-
if (value.triageRepairs !== 1)
|
|
317
|
-
throw new Error('repair phase requires triageRepairs 1');
|
|
318
|
-
}
|
|
319
|
-
function assertRejectedRepairBudgets(value) {
|
|
320
|
-
assertRepairConsumed(value);
|
|
321
|
-
if (value.candidateReviews !== 1)
|
|
322
|
-
throw new Error('rejected candidate requires candidateReviews 1');
|
|
323
|
-
}
|
|
324
|
-
function validateFindings(value, field) {
|
|
325
|
-
assertStringArray(value, field, 1);
|
|
326
|
-
assertUnique(value, field);
|
|
327
|
-
}
|
|
328
|
-
function hashDomain(domain, value) {
|
|
329
|
-
return sha256(Buffer.concat([
|
|
330
|
-
Buffer.from(domain, 'ascii'),
|
|
331
|
-
Buffer.from([0]),
|
|
332
|
-
Buffer.from(canonicalJson(value), 'utf8'),
|
|
333
|
-
]));
|
|
334
|
-
}
|
|
335
|
-
function assertGeneration(value, expected, field) {
|
|
336
|
-
assertSha256(value, field);
|
|
337
|
-
if (expected !== undefined) {
|
|
338
|
-
assertSha256(expected, 'expected generation hash');
|
|
339
|
-
if (value !== expected)
|
|
340
|
-
throw new Error(`${field} generation mismatch`);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
function assertTimestamp(value, field) {
|
|
344
|
-
if (typeof value !== 'string' || Number.isNaN(Date.parse(value)) || new Date(value).toISOString() !== value) {
|
|
345
|
-
throw new Error(`${field} must be an ISO timestamp`);
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
function assertSha256(value, field) {
|
|
349
|
-
if (typeof value !== 'string' || !SHA256_PATTERN.test(value))
|
|
350
|
-
throw new Error(`${field} must be lowercase SHA-256`);
|
|
351
|
-
}
|
|
352
|
-
function assertStringArray(value, field, minItems) {
|
|
353
|
-
if (!Array.isArray(value) || value.length < minItems || value.length > MAX_ARRAY_LENGTH) {
|
|
354
|
-
throw new Error(`${field} has invalid cardinality`);
|
|
355
|
-
}
|
|
356
|
-
for (const item of value)
|
|
357
|
-
assertString(item, `${field} entry`);
|
|
358
|
-
}
|
|
359
|
-
function assertUnique(values, field) {
|
|
360
|
-
if (new Set(values).size !== values.length)
|
|
361
|
-
throw new Error(`${field} must be unique`);
|
|
362
|
-
}
|
|
363
|
-
function assertString(value, field) {
|
|
364
|
-
if (typeof value !== 'string' || value.length === 0 || value.length > MAX_STRING_LENGTH) {
|
|
365
|
-
throw new Error(`${field} must be a bounded non-empty string`);
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
function assertRecord(value, field) {
|
|
369
|
-
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
370
|
-
throw new Error(`${field} must be an object`);
|
|
371
|
-
}
|
|
372
|
-
function assertExactObject(value, keys, field) {
|
|
373
|
-
assertRecord(value, field);
|
|
374
|
-
const actual = Object.keys(value).sort();
|
|
375
|
-
const expected = [...keys].sort();
|
|
376
|
-
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {
|
|
377
|
-
throw new Error(`${field} has unknown or missing keys`);
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
//# sourceMappingURL=route-decision.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route-decision.js","sourceRoot":"","sources":["../../../src/v2/route-decision.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { type FrozenSpecReceiptV1, type SpecDeliveryV1, type SpecReviewReportV1, type SpecRevisionV1 } from './spec-delivery.js';
|
|
2
|
-
import type { RoutedRunContext } from './route-continuations.js';
|
|
3
|
-
import type { DurableReportInvocationState } from './contained-report-operation.js';
|
|
4
|
-
export interface SpecDeliveryState {
|
|
5
|
-
read(): Promise<SpecDeliveryV1 | undefined>;
|
|
6
|
-
compareAndSwap(expected: SpecDeliveryV1 | undefined, next: SpecDeliveryV1): Promise<boolean>;
|
|
7
|
-
authorInvocation(authorSessionId: string): DurableReportInvocationState;
|
|
8
|
-
reviewInvocation(reviewerSessionId: string): DurableReportInvocationState;
|
|
9
|
-
settleAuthor(expected: SpecDeliveryV1, next: SpecDeliveryV1, attemptId: string): Promise<boolean>;
|
|
10
|
-
settleReview(expected: SpecDeliveryV1, next: SpecDeliveryV1, attemptId: string): Promise<boolean>;
|
|
11
|
-
}
|
|
12
|
-
export type SpecOperationResult<T> = {
|
|
13
|
-
status: 'completed';
|
|
14
|
-
value: T;
|
|
15
|
-
reportSha256?: string;
|
|
16
|
-
} | {
|
|
17
|
-
status: 'invalid';
|
|
18
|
-
code: string;
|
|
19
|
-
attemptId: string;
|
|
20
|
-
} | {
|
|
21
|
-
status: 'retryable';
|
|
22
|
-
code: string;
|
|
23
|
-
} | {
|
|
24
|
-
status: 'blocked';
|
|
25
|
-
kind: 'external' | 'safety' | 'exhausted';
|
|
26
|
-
code: string;
|
|
27
|
-
} | {
|
|
28
|
-
status: 'cancelled';
|
|
29
|
-
};
|
|
30
|
-
export interface SpecDeliveryOperation {
|
|
31
|
-
author(input: {
|
|
32
|
-
context: RoutedRunContext;
|
|
33
|
-
state: SpecDeliveryV1;
|
|
34
|
-
mode: 'author' | 'repair';
|
|
35
|
-
authorSessionId: string;
|
|
36
|
-
signal: AbortSignal;
|
|
37
|
-
invocationState: DurableReportInvocationState;
|
|
38
|
-
}): Promise<SpecOperationResult<SpecRevisionV1>>;
|
|
39
|
-
review(input: {
|
|
40
|
-
context: RoutedRunContext;
|
|
41
|
-
state: SpecDeliveryV1;
|
|
42
|
-
mode: 'full' | 'closure';
|
|
43
|
-
reviewerSessionId: string;
|
|
44
|
-
signal: AbortSignal;
|
|
45
|
-
invocationState: DurableReportInvocationState;
|
|
46
|
-
}): Promise<SpecOperationResult<SpecReviewReportV1>>;
|
|
47
|
-
}
|
|
48
|
-
export type SpecCoordinatorResult = {
|
|
49
|
-
status: 'completed';
|
|
50
|
-
receipt: FrozenSpecReceiptV1;
|
|
51
|
-
} | {
|
|
52
|
-
status: 'retryable';
|
|
53
|
-
code: string;
|
|
54
|
-
} | {
|
|
55
|
-
status: 'blocked';
|
|
56
|
-
kind: 'external' | 'safety' | 'exhausted';
|
|
57
|
-
code: string;
|
|
58
|
-
evidence: string[];
|
|
59
|
-
} | {
|
|
60
|
-
status: 'cancelled';
|
|
61
|
-
};
|
|
62
|
-
export declare class SpecCoordinator {
|
|
63
|
-
private readonly dependencies;
|
|
64
|
-
constructor(dependencies: {
|
|
65
|
-
state: SpecDeliveryState;
|
|
66
|
-
operation: SpecDeliveryOperation;
|
|
67
|
-
createAuthorSessionId(): string;
|
|
68
|
-
createReviewerSessionId(): string;
|
|
69
|
-
});
|
|
70
|
-
run(context: RoutedRunContext, signal: AbortSignal): Promise<SpecCoordinatorResult>;
|
|
71
|
-
private settleInvalid;
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=spec-coordinator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spec-coordinator.d.ts","sourceRoot":"","sources":["../../../src/v2/spec-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { acceptSpecReview, acceptSpecRevision, createInitialSpecDelivery, freezeApprovedSpec, recoverMalformedSpecReport, reserveSpecAuthorSession, reserveSpecReviewerSession, } from './spec-delivery.js';
|
|
2
|
-
export class SpecCoordinator {
|
|
3
|
-
dependencies;
|
|
4
|
-
constructor(dependencies) {
|
|
5
|
-
this.dependencies = dependencies;
|
|
6
|
-
}
|
|
7
|
-
async run(context, signal) {
|
|
8
|
-
const observed = await this.dependencies.state.read();
|
|
9
|
-
let current;
|
|
10
|
-
if (!observed) {
|
|
11
|
-
const initial = createInitialSpecDelivery({
|
|
12
|
-
issueNumber: context.issue.number, runId: context.runId,
|
|
13
|
-
workflowGenerationSha256: context.workflowGeneration.generationHash,
|
|
14
|
-
});
|
|
15
|
-
if (!await this.dependencies.state.compareAndSwap(undefined, initial))
|
|
16
|
-
return { status: 'retryable', code: 'spec-state-conflict' };
|
|
17
|
-
current = initial;
|
|
18
|
-
}
|
|
19
|
-
else
|
|
20
|
-
current = observed;
|
|
21
|
-
while (true) {
|
|
22
|
-
if (signal.aborted)
|
|
23
|
-
return { status: 'cancelled' };
|
|
24
|
-
if (current.stage === 'frozen')
|
|
25
|
-
return { status: 'completed', receipt: current.frozen };
|
|
26
|
-
if (current.stage === 'rejected' || current.stage === 'exhausted') {
|
|
27
|
-
return { status: 'blocked', kind: current.stage === 'rejected' ? 'safety' : 'exhausted', code: `spec-${current.stage}`, evidence: [] };
|
|
28
|
-
}
|
|
29
|
-
if (current.stage === 'approved') {
|
|
30
|
-
const frozen = freezeApprovedSpec(current);
|
|
31
|
-
if (!await this.dependencies.state.compareAndSwap(current, frozen))
|
|
32
|
-
return { status: 'retryable', code: 'spec-freeze-state-conflict' };
|
|
33
|
-
current = frozen;
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
const author = current.stage === 'authoring' || current.stage === 'author-repair';
|
|
37
|
-
const mode = author ? (current.stage === 'authoring' ? 'author' : 'repair')
|
|
38
|
-
: (current.stage === 'review-full' ? 'full' : 'closure');
|
|
39
|
-
let active = current;
|
|
40
|
-
const authorSessionId = author ? current.authorSessionId ?? this.dependencies.createAuthorSessionId() : undefined;
|
|
41
|
-
const reviewerSessionId = author ? undefined : current.review.reviewerSessionId ?? this.dependencies.createReviewerSessionId();
|
|
42
|
-
const reviewState = author ? undefined : reserveSpecReviewerSession(current, reviewerSessionId);
|
|
43
|
-
const authorState = author ? reserveSpecAuthorSession(current, authorSessionId) : undefined;
|
|
44
|
-
const result = author
|
|
45
|
-
? await this.dependencies.operation.author({ context, state: authorState, mode: mode, authorSessionId: authorSessionId,
|
|
46
|
-
signal, invocationState: this.dependencies.state.authorInvocation(authorSessionId) })
|
|
47
|
-
: await this.dependencies.operation.review({ context, state: reviewState, mode: mode, reviewerSessionId: reviewerSessionId,
|
|
48
|
-
signal, invocationState: this.dependencies.state.reviewInvocation(reviewerSessionId) });
|
|
49
|
-
if (result.status === 'retryable') {
|
|
50
|
-
return result;
|
|
51
|
-
}
|
|
52
|
-
if (result.status === 'invalid') {
|
|
53
|
-
const settlement = await this.settleInvalid(author ? 'author' : 'review', result.attemptId);
|
|
54
|
-
if (settlement.status === 'returned')
|
|
55
|
-
return settlement.result;
|
|
56
|
-
current = settlement.state;
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
if (result.status !== 'completed')
|
|
60
|
-
return result.status === 'blocked' ? { ...result, evidence: [] } : result;
|
|
61
|
-
const refreshed = await this.dependencies.state.read();
|
|
62
|
-
if (!refreshed)
|
|
63
|
-
return { status: 'retryable', code: 'spec-state-missing' };
|
|
64
|
-
active = refreshed;
|
|
65
|
-
const attemptId = author
|
|
66
|
-
? result.value.author.attemptId
|
|
67
|
-
: result.value.reviewer.attemptId;
|
|
68
|
-
let next;
|
|
69
|
-
try {
|
|
70
|
-
next = author
|
|
71
|
-
? acceptSpecRevision(active, result.value)
|
|
72
|
-
: acceptSpecReview(active, result.value, result.reportSha256 ?? '0'.repeat(64));
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
const settlement = await this.settleInvalid(author ? 'author' : 'review', attemptId);
|
|
76
|
-
if (settlement.status === 'returned')
|
|
77
|
-
return settlement.result;
|
|
78
|
-
current = settlement.state;
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
let saved;
|
|
82
|
-
try {
|
|
83
|
-
saved = author
|
|
84
|
-
? await this.dependencies.state.settleAuthor(active, next, attemptId)
|
|
85
|
-
: await this.dependencies.state.settleReview(active, next, attemptId);
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
return { status: 'retryable', code: 'spec-result-state-conflict' };
|
|
89
|
-
}
|
|
90
|
-
if (!saved)
|
|
91
|
-
return { status: 'retryable', code: 'spec-result-state-conflict' };
|
|
92
|
-
current = next;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
async settleInvalid(owner, attemptId) {
|
|
96
|
-
const active = await this.dependencies.state.read();
|
|
97
|
-
if (!active)
|
|
98
|
-
return { status: 'returned', result: { status: 'retryable', code: 'spec-state-missing' } };
|
|
99
|
-
let next;
|
|
100
|
-
let exhausted = false;
|
|
101
|
-
try {
|
|
102
|
-
next = recoverMalformedSpecReport(active, owner);
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
next = { ...structuredClone(active), stage: 'exhausted' };
|
|
106
|
-
exhausted = true;
|
|
107
|
-
}
|
|
108
|
-
let settled;
|
|
109
|
-
try {
|
|
110
|
-
settled = owner === 'author'
|
|
111
|
-
? await this.dependencies.state.settleAuthor(active, next, attemptId)
|
|
112
|
-
: await this.dependencies.state.settleReview(active, next, attemptId);
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
return { status: 'returned', result: { status: 'retryable', code: exhausted
|
|
116
|
-
? 'spec-exhaustion-state-conflict' : 'spec-recovery-state-conflict' } };
|
|
117
|
-
}
|
|
118
|
-
if (!settled)
|
|
119
|
-
return { status: 'returned', result: { status: 'retryable', code: exhausted
|
|
120
|
-
? 'spec-exhaustion-state-conflict' : 'spec-recovery-state-conflict' } };
|
|
121
|
-
return exhausted
|
|
122
|
-
? { status: 'returned', result: { status: 'blocked', kind: 'exhausted', code: 'spec-retry-budget-exhausted', evidence: [] } }
|
|
123
|
-
: { status: 'continued', state: next };
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=spec-coordinator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spec-coordinator.js","sourceRoot":"","sources":["../../../src/v2/spec-coordinator.ts"],"names":[],"mappings":"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"}
|