codex-orchestrator 2.0.11 → 2.0.13
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 +22 -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 +28 -10
- 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
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: to-spec
|
|
3
|
+
description: Turn the current conversation and codebase context into a proportionate, human-readable product spec or PRD in the user's language without another interview. In Plan combined mode, return the draft in context without intermediate publication; in standalone use, publish durable planning context only when requested. Planning output never authorizes implementation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Synthesize what is already known; do not interview the user. Produce a product
|
|
7
|
+
spec or PRD in the user's conversation language and preserve exact domain or
|
|
8
|
+
technical identifiers. The result is planning authority, never executable
|
|
9
|
+
delivery authority by itself.
|
|
10
|
+
|
|
11
|
+
## Modes
|
|
12
|
+
|
|
13
|
+
- **Combined flow:** Combined mode is invoked by Plan. Return the draft to Plan
|
|
14
|
+
in the current context so it can pass the draft directly to `$to-tickets`.
|
|
15
|
+
Do not review or publish an intermediate PRD. `$to-tickets` owns every
|
|
16
|
+
remaining packet step. The approved ticket packet is the last planning
|
|
17
|
+
artifact before separately authorized delivery.
|
|
18
|
+
- **Standalone:** publish one durable planning-context issue only when
|
|
19
|
+
requested. Mark it `Artifact: planning-context`. Do not apply a triage state
|
|
20
|
+
or imply implementation authority.
|
|
21
|
+
|
|
22
|
+
If synthesis exposes a new product decision, keep the PRD unapproved and return
|
|
23
|
+
the decision to the user. Publication alone is never approval.
|
|
24
|
+
|
|
25
|
+
Before standalone publication, read the repository's issue-tracker policy. If
|
|
26
|
+
no authoritative tracker or publication procedure exists, stop and ask where
|
|
27
|
+
to publish; do not invent one. Combined mode does not need a tracker until
|
|
28
|
+
`$to-tickets` prepares publication.
|
|
29
|
+
|
|
30
|
+
## Artifact Shape
|
|
31
|
+
|
|
32
|
+
Choose the smallest content that preserves product intent and proof. A narrow
|
|
33
|
+
bug, incident, data repair, or understood implementation correction may use a
|
|
34
|
+
**Fix Brief** with one to three observable stories. Otherwise use the same
|
|
35
|
+
template and include only sections that carry a real decision, consequence,
|
|
36
|
+
scope boundary, or proof obligation.
|
|
37
|
+
|
|
38
|
+
`$to-spec` does not determine implementation-ticket count. PRD length, section
|
|
39
|
+
count, file count, and risk do not size a later ticket packet; Plan and
|
|
40
|
+
`$to-tickets` retain composition and slicing ownership. Material risk
|
|
41
|
+
strengthens `Risk / Proof Notes`; it does not make the PRD or solution broader.
|
|
42
|
+
Omit that section when no material risk exists.
|
|
43
|
+
|
|
44
|
+
## Process
|
|
45
|
+
|
|
46
|
+
1. Explore the repo if needed. Use project domain language, respect relevant
|
|
47
|
+
ADRs, and reuse cited `$research` artifacts. Keep unsupported external facts
|
|
48
|
+
open instead of converting them into product scope.
|
|
49
|
+
|
|
50
|
+
2. Sketch the seams at which the outcome will be proved. Existing seams should
|
|
51
|
+
be preferred to new ones. Use the highest seam possible. If new seams are
|
|
52
|
+
needed, propose them at the highest point you can. The fewer seams across the
|
|
53
|
+
codebase, the better; the ideal number is one. Record only seams that
|
|
54
|
+
materially define behavior, proof, or ownership, and ask the user only when
|
|
55
|
+
a seam choice changes scope, risk, or ownership.
|
|
56
|
+
|
|
57
|
+
3. Write the template below, then follow the requested mode. A standalone
|
|
58
|
+
planning-context issue is marked `Artifact: planning-context`; it is not an
|
|
59
|
+
implementation ticket and receives no triage state.
|
|
60
|
+
|
|
61
|
+
<spec-template>
|
|
62
|
+
|
|
63
|
+
## Problem Statement
|
|
64
|
+
|
|
65
|
+
The problem that the user is facing, from the user's perspective.
|
|
66
|
+
|
|
67
|
+
## Solution
|
|
68
|
+
|
|
69
|
+
The solution to the problem, from the user's perspective.
|
|
70
|
+
|
|
71
|
+
## Decisions For Approval
|
|
72
|
+
|
|
73
|
+
The product, behavior, scope, ownership, rollout, and risky trade-off decisions
|
|
74
|
+
the user is being asked to approve. Separate confirmed decisions from open
|
|
75
|
+
decisions. If implementation discovery later changes one of these decisions,
|
|
76
|
+
the delivery workflow must return a decision delta instead of guessing.
|
|
77
|
+
|
|
78
|
+
## Non-Obvious Consequences
|
|
79
|
+
|
|
80
|
+
Important hidden state, background behavior, failure behavior, limitations, or
|
|
81
|
+
trade-offs that the user would not infer from the happy-path solution. Write
|
|
82
|
+
`None` only when there genuinely are no material consequences.
|
|
83
|
+
|
|
84
|
+
## User Stories
|
|
85
|
+
|
|
86
|
+
A numbered list of distinct, observable user stories in the format:
|
|
87
|
+
|
|
88
|
+
1. As an <actor>, I want a <feature>, so that <benefit>
|
|
89
|
+
|
|
90
|
+
Include only stories that change scope, acceptance, or proof; do not create
|
|
91
|
+
variants to make the list look complete. For a Fix Brief spec, use 1-3 stories
|
|
92
|
+
or operational scenarios that directly explain the bug, repair, or regression
|
|
93
|
+
risk.
|
|
94
|
+
|
|
95
|
+
## Implementation Decisions
|
|
96
|
+
|
|
97
|
+
A list of already approved implementation constraints or technical decisions
|
|
98
|
+
that materially protect product behavior. Omit architecture vocabulary when
|
|
99
|
+
ownership and public seams do not change.
|
|
100
|
+
|
|
101
|
+
Do NOT include specific file paths or code snippets. They may end up being
|
|
102
|
+
outdated very quickly.
|
|
103
|
+
|
|
104
|
+
Exception: if a prototype produced a snippet that encodes a decision more
|
|
105
|
+
precisely than prose can, inline it within the relevant decision and note
|
|
106
|
+
briefly that it came from a prototype. Trim to the decision-rich parts — not a
|
|
107
|
+
working demo, just the important bits.
|
|
108
|
+
|
|
109
|
+
## Testing Decisions
|
|
110
|
+
|
|
111
|
+
A list of testing decisions that were made. Describe what makes a good
|
|
112
|
+
behavior-level test, which modules will be tested, and relevant test prior art
|
|
113
|
+
in the codebase.
|
|
114
|
+
|
|
115
|
+
## Out of Scope
|
|
116
|
+
|
|
117
|
+
A description of the things that are out of scope for this spec.
|
|
118
|
+
|
|
119
|
+
## Risk / Proof Notes
|
|
120
|
+
|
|
121
|
+
Required only when material risk exists:
|
|
122
|
+
|
|
123
|
+
- Primary risk:
|
|
124
|
+
- Key invariants:
|
|
125
|
+
- Expected proof:
|
|
126
|
+
- Review focus:
|
|
127
|
+
- Out-of-scope risk:
|
|
128
|
+
|
|
129
|
+
## Further Notes
|
|
130
|
+
|
|
131
|
+
Any further notes about the feature.
|
|
132
|
+
|
|
133
|
+
</spec-template>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "To Spec"
|
|
3
|
+
short_description: "Turn context into product authority"
|
|
4
|
+
default_prompt: "Use $to-spec to synthesize product authority; in Plan combined mode, return the contextual draft so Plan can pass it to $to-tickets."
|
|
5
|
+
policy:
|
|
6
|
+
allow_implicit_invocation: false
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"skill": "to-spec",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"id": "combined-prd-stays-contextual",
|
|
7
|
+
"prompt": "Plan invoked to-spec in combined mode for a spec-and-tickets outcome.",
|
|
8
|
+
"expected": ["synthesize the PRD from known context", "return the draft to Plan without review or publication"],
|
|
9
|
+
"forbidden": ["publish an intermediate PRD", "run the packet review"]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "standalone-planning-context",
|
|
13
|
+
"prompt": "Publish this synthesized PRD as standalone durable planning context.",
|
|
14
|
+
"expected": ["publish one Artifact: planning-context issue", "apply no triage state", "preserve planning as non-executable authority"],
|
|
15
|
+
"forbidden": ["create implementation tickets", "imply implementation authorization"]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "proportional-prd-does-not-size-tickets",
|
|
19
|
+
"prompt": "Write a proportional PRD for this risky cross-module outcome without deciding its implementation breakdown.",
|
|
20
|
+
"expected": ["preserve Decisions For Approval and Non-Obvious Consequences", "include Risk / Proof Notes because risk is material", "leave ticket count and slicing to Plan and to-tickets"],
|
|
21
|
+
"forbidden": ["make user stories extremely extensive", "determine ticket count from modules, files, or risk"]
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: to-tickets
|
|
3
|
+
description: Compile Plan's contextual PRD draft or approved product authority into the smallest executable ticket packet, run one fresh semantic packet review, obtain one approval, publish serially, verify authoritative tracker read-back, and stop before implementation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# To Tickets
|
|
7
|
+
|
|
8
|
+
Compile product authority into the smallest number of independently verifiable
|
|
9
|
+
vertical tickets. Keep one coherent outcome as one ticket. Each generated AFK
|
|
10
|
+
ticket must be executable from its body plus the Parent PRD and current
|
|
11
|
+
repository evidence without another planning artifact.
|
|
12
|
+
|
|
13
|
+
The Parent PRD remains the sole product and final-acceptance authority. Each
|
|
14
|
+
ticket contains only its local observable outcome, scope, blockers, proof, and
|
|
15
|
+
Parent link. The approved ticket body plus Parent PRD is the final execution
|
|
16
|
+
authority; no later planning pass is inserted.
|
|
17
|
+
|
|
18
|
+
`$to-tickets` owns one fresh semantic reviewer, one explicit user approval,
|
|
19
|
+
serialized publication, deterministic reconciliation, and authoritative
|
|
20
|
+
tracker read-back for the complete packet.
|
|
21
|
+
|
|
22
|
+
The primary route remains `planning-only` while compiling or publishing these
|
|
23
|
+
artifacts. `ticket-graph` begins only after separate delivery authorization;
|
|
24
|
+
never report it merely because the planning output is a graph.
|
|
25
|
+
|
|
26
|
+
Read the repository's issue-tracker policy and triage vocabulary before
|
|
27
|
+
preparing publication. If either required authority is missing, stop before
|
|
28
|
+
tracker effects and ask the user; do not invent a tracker, schema, or labels.
|
|
29
|
+
|
|
30
|
+
## Progressive Reference
|
|
31
|
+
|
|
32
|
+
Read [publishing-details.md](references/publishing-details.md) before preparing
|
|
33
|
+
the complete publish-ready packet, requesting approval, or publishing any
|
|
34
|
+
tracker effect.
|
|
35
|
+
|
|
36
|
+
## Shape
|
|
37
|
+
|
|
38
|
+
Split only for an independent outcome, owner, release, real blocker, safe
|
|
39
|
+
parallel boundary, or human/live gate. Do not split by technical layer.
|
|
40
|
+
|
|
41
|
+
Each ticket is a tracer-bullet vertical slice: it cuts a narrow but COMPLETE
|
|
42
|
+
path through every relevant layer, is demoable or verifiable on its own, and is
|
|
43
|
+
sized to fit in a single fresh context window. Keep one coherent outcome as one
|
|
44
|
+
ticket. Add discovery, integration, or HITL tickets only when each has its own
|
|
45
|
+
outcome and blocking relationship. Risk strengthens proof and review focus; it
|
|
46
|
+
does not create tickets. Merge steps that share one owner, release, and
|
|
47
|
+
validation path.
|
|
48
|
+
|
|
49
|
+
Where repository evidence proves a small prefactor is required, "Make the
|
|
50
|
+
change easy, then make the easy change." Keep it inside the same vertical
|
|
51
|
+
outcome unless it is independently verifiable and genuinely blocks later work.
|
|
52
|
+
|
|
53
|
+
## Process
|
|
54
|
+
|
|
55
|
+
### 1. Gather authority
|
|
56
|
+
|
|
57
|
+
Read the complete source and its decision-changing comments. Reuse cited
|
|
58
|
+
`$research` artifacts. If a material external contract remains unresolved,
|
|
59
|
+
create a blocking discovery ticket.
|
|
60
|
+
|
|
61
|
+
Explore only enough repository code, tests, ADRs, and domain docs to identify
|
|
62
|
+
the real owner/public seam and a compatible proof. Never invent paths, symbols,
|
|
63
|
+
commands, fixtures, ownership, or behavior.
|
|
64
|
+
|
|
65
|
+
When an applicable owner/public seam is honestly unknown, create a blocking
|
|
66
|
+
discovery ticket whose observable outcome is the missing owner, seam, and proof
|
|
67
|
+
evidence. Do not publish the dependent implementation ticket as AFK-ready until
|
|
68
|
+
that discovery resolves it.
|
|
69
|
+
|
|
70
|
+
### 2. Draft executable vertical tickets
|
|
71
|
+
|
|
72
|
+
Each ticket must:
|
|
73
|
+
|
|
74
|
+
- deliver one observable end-to-end outcome;
|
|
75
|
+
- link directly to its Parent PRD;
|
|
76
|
+
- bound local scope and out-of-scope work;
|
|
77
|
+
- name the owner/public seam when repository evidence confirms it;
|
|
78
|
+
- state observable acceptance criteria and a compatible behavior proof or exact
|
|
79
|
+
non-TDD proof;
|
|
80
|
+
- explain why the proof cannot pass while the approved claim is false;
|
|
81
|
+
- declare real blockers and dependency edges.
|
|
82
|
+
|
|
83
|
+
Keep unresolved product decisions with the user and unresolved external or
|
|
84
|
+
technical discovery in a blocking AFK/HITL ticket. If the generated ticket
|
|
85
|
+
would need a later planning artifact, it is not ready to publish.
|
|
86
|
+
|
|
87
|
+
For user-facing work, include an end-to-end walkthrough criterion and use
|
|
88
|
+
`$ui-evidence-proof` as the proof standard. For a wide mechanical refactor, use
|
|
89
|
+
expand-contract and keep each migration batch independently green.
|
|
90
|
+
|
|
91
|
+
If repository evidence proves an **indivisible migration** whose intermediate
|
|
92
|
+
batches cannot be independently green, do not publish those batches as child
|
|
93
|
+
tickets and do not create a shared red integration branch. Compile one
|
|
94
|
+
executable migration ticket with one owner, one isolated execution scope, and
|
|
95
|
+
one final green acceptance boundary over the complete migrated state. In this
|
|
96
|
+
fallback, intermediate batches are not child checkpoints and release no successor. If
|
|
97
|
+
that complete outcome cannot fit one fresh implementation context or lacks a
|
|
98
|
+
credible final proof, return a Decision Delta instead of publishing an
|
|
99
|
+
unexecutable graph.
|
|
100
|
+
|
|
101
|
+
### 3. Freeze the complete publish-ready packet
|
|
102
|
+
|
|
103
|
+
Keep one contextual packet containing the complete Parent PRD and every exact
|
|
104
|
+
ticket body, plus:
|
|
105
|
+
|
|
106
|
+
- source solution, scope, exclusions, decisions, and consequences;
|
|
107
|
+
- ordered graph and blocking edges;
|
|
108
|
+
- material risks and open questions.
|
|
109
|
+
|
|
110
|
+
This packet is contextual planning data, not a separately published artifact or
|
|
111
|
+
workflow owner. Do not publish any intermediate PRD.
|
|
112
|
+
|
|
113
|
+
### 4. Run one fresh semantic packet review
|
|
114
|
+
|
|
115
|
+
For the settled packet, launch exactly one fresh `standards_reviewer` without a
|
|
116
|
+
history fork (`fork_context=false` on V1; `fork_turns="none"` on V2). Begin its
|
|
117
|
+
brief with `Assigned role: standards_reviewer`, provide the full source authority
|
|
118
|
+
and complete publish-ready packet, and require both internal lenses in the same
|
|
119
|
+
review activation: source fidelity and ticket executability.
|
|
120
|
+
|
|
121
|
+
- **Source fidelity:** every product claim, decision, scope boundary,
|
|
122
|
+
consequence, and blocker is grounded in the source; no behavior or ownership
|
|
123
|
+
is invented or lost.
|
|
124
|
+
- **Ticket executability:** every ticket is a cohesive vertical outcome that a
|
|
125
|
+
fresh implementation context can execute and prove from its body plus the
|
|
126
|
+
Parent PRD; dependencies are real, proof observes the claim, and no later
|
|
127
|
+
planning artifact is required.
|
|
128
|
+
|
|
129
|
+
The reviewer is read-only and returns `APPROVE` or `NEEDS_WORK` with exact
|
|
130
|
+
source/artifact evidence. Capture a non-empty fresh child identity and wait for
|
|
131
|
+
that same child. Do not split the lenses across children and do not launch the
|
|
132
|
+
delivery Standards review. A missing, failed, or non-approving review
|
|
133
|
+
blocks approval and publication. If repairs change a product decision, return
|
|
134
|
+
that decision to the user rather than resolving it in review.
|
|
135
|
+
|
|
136
|
+
### 5. Get one explicit approval
|
|
137
|
+
|
|
138
|
+
After the semantic review approves, show the complete publish-ready packet and
|
|
139
|
+
obtain one explicit user approval of the exact Parent and ticket bodies, product
|
|
140
|
+
decisions, scope, exclusions, ticket boundaries, blockers/dependencies,
|
|
141
|
+
ownership, HITL/live gates, and proof obligations. Tracker identifiers, native
|
|
142
|
+
links, and final state are the only fields publication may fill afterward.
|
|
143
|
+
|
|
144
|
+
The single exact-packet approval also answers Matt's useful breakdown checks:
|
|
145
|
+
|
|
146
|
+
- Does the granularity feel right?
|
|
147
|
+
- Are the blocking edges correct — does each ticket only depend on tickets that
|
|
148
|
+
genuinely gate it?
|
|
149
|
+
- Should any tickets be merged or split further?
|
|
150
|
+
|
|
151
|
+
These are not separate quizzes or approvals. Any requested change rebuilds the
|
|
152
|
+
complete packet under the Decision Delta rule below.
|
|
153
|
+
|
|
154
|
+
A change to behavior, scope, ownership, ticket boundaries, blockers, or proof
|
|
155
|
+
obligations invalidates approval and returns a Decision Delta. The changed
|
|
156
|
+
complete packet requires one new fresh semantic review and one new explicit
|
|
157
|
+
user approval before publication can continue.
|
|
158
|
+
|
|
159
|
+
### 6. Publish final artifacts
|
|
160
|
+
|
|
161
|
+
Follow [publishing-details.md](references/publishing-details.md). Publication is
|
|
162
|
+
serialized through the single current root publisher. If product context is
|
|
163
|
+
not durable, first publish one non-executable Parent marked
|
|
164
|
+
`Artifact: planning-context` and without a triage state. When a source tracker
|
|
165
|
+
issue already exists, reference it without closing or relabeling it. Publish
|
|
166
|
+
blockers first.
|
|
167
|
+
|
|
168
|
+
- **Local files:** write one file per ticket under
|
|
169
|
+
`.scratch/<feature-slug>/issues/<NN>-<slug>.md`.
|
|
170
|
+
- **Real tracker:** publish one issue per ticket in dependency order and use
|
|
171
|
+
native Parent/sub-issue and blocking links.
|
|
172
|
+
|
|
173
|
+
Record the future frontier — tickets whose blockers are all done — in the
|
|
174
|
+
approved graph, but do not work it. Delivery starts only under separate
|
|
175
|
+
authorization after this planning flow stops.
|
|
176
|
+
|
|
177
|
+
The issue body plus Parent PRD is the durable execution authority. Apply
|
|
178
|
+
`ready-for-agent` to AFK and `ready-for-human` to HITL tickets directly; do not
|
|
179
|
+
invoke `$triage` or add a duplicate brief comment. Publish the approved terms
|
|
180
|
+
unchanged except for tracker identifiers, native links, and final state.
|
|
181
|
+
|
|
182
|
+
Reject AFK publication when criteria require later interpretation, proof can
|
|
183
|
+
pass while the claim is false, an applicable owner/seam is unknown, or a future
|
|
184
|
+
planning artifact is required. After all publication effects, perform the
|
|
185
|
+
authoritative tracker read-back and deterministic reconciliation defined in the
|
|
186
|
+
reference.
|
|
187
|
+
|
|
188
|
+
Successful read-back stops planning before implementation. Publication, links,
|
|
189
|
+
and labels do not authorize delivery.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "To Tickets"
|
|
3
|
+
short_description: "Review and publish executable ticket packets"
|
|
4
|
+
default_prompt: "Use $to-tickets to compile the complete executable packet, run one fresh semantic review, obtain one approval, publish serially, verify tracker read-back, and stop before implementation."
|
|
5
|
+
policy:
|
|
6
|
+
allow_implicit_invocation: false
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"skill": "to-tickets",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"id": "coherent-outcome-stays-one-ticket",
|
|
7
|
+
"prompt": "Break down one coherent outcome with one owner, release, and validation path.",
|
|
8
|
+
"expected": ["create one ticket"],
|
|
9
|
+
"forbidden": ["split from size, file count, statefulness, or generic risk"]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "ordinary-one-ticket-stays-direct",
|
|
13
|
+
"prompt": "Compile the approved one-ticket PRD into its final executable ticket and stop before delivery.",
|
|
14
|
+
"expected": ["publish one ticket containing its local outcome, scope, blockers, proof, and Parent link", "keep the Parent PRD as sole product and final authority"],
|
|
15
|
+
"forbidden": ["create duplicate durable planning state", "request another execution artifact"]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "complete-packet-gets-one-semantic-review",
|
|
19
|
+
"prompt": "Prepare a publish-ready PRD and three-ticket graph after Plan passed the combined PRD draft to you.",
|
|
20
|
+
"expected": ["launch one fresh semantic reviewer over the complete packet", "apply source fidelity and ticket executability in that one review", "obtain one explicit user approval before publication"],
|
|
21
|
+
"forbidden": ["review the intermediate PRD", "launch separate workflow owners for each lens", "request multiple approvals"]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "serialized-publication-recovers-response-loss",
|
|
25
|
+
"prompt": "Publish an approved Parent and two children when responses may be lost after create, link, or label effects.",
|
|
26
|
+
"expected": ["serialize every effect", "reread authoritative tracker state before retrying", "retry only a proven-missing effect", "finish with authoritative tracker read-back"],
|
|
27
|
+
"forbidden": ["recreate an identifiable issue", "retry an unknown effect blindly", "publish concurrently"]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "readback-repairs-only-technical-mismatch",
|
|
31
|
+
"prompt": "Authoritative read-back finds one missing label while all approved bodies and relationships match.",
|
|
32
|
+
"expected": ["repair the proven technical mismatch and reread", "do not launch another semantic reviewer", "do not request another approval"],
|
|
33
|
+
"forbidden": ["treat integrity proof as semantic review", "start implementation"]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "material-change-invalidates-approval",
|
|
37
|
+
"prompt": "During reconciliation, the proposed repair changes one ticket boundary and its proof obligation.",
|
|
38
|
+
"expected": ["return a Decision Delta", "run one new fresh complete semantic review", "obtain one new user approval before publication continues"],
|
|
39
|
+
"forbidden": ["call the change technical refinement", "reuse the old approval"]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "ambiguous-partial-packet-fails-closed",
|
|
43
|
+
"prompt": "Search finds two matching Parents or publication concurrency cannot be excluded.",
|
|
44
|
+
"expected": ["perform no writes", "fail closed for reconciliation"],
|
|
45
|
+
"forbidden": ["pick one Parent by guess", "create another packet"]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "tracer-bullet-vertical-outcome",
|
|
49
|
+
"prompt": "Slice one approved outcome that crosses schema, API, UI, and behavior proof.",
|
|
50
|
+
"expected": ["create the smallest tracer-bullet ticket that completes the relevant end-to-end path", "keep the ticket demoable or verifiable in one fresh context"],
|
|
51
|
+
"forbidden": ["split by schema, API, UI, and tests", "create tickets from generic risk"]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "unknown-owner-seam-becomes-discovery",
|
|
55
|
+
"prompt": "The approved outcome is clear, but repository evidence cannot identify the applicable owner or public proof seam.",
|
|
56
|
+
"expected": ["create a blocking discovery ticket for owner, seam, and proof evidence", "block the dependent implementation ticket"],
|
|
57
|
+
"forbidden": ["guess the owner or seam", "publish the dependent ticket as AFK-ready"]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "one-exact-packet-approval",
|
|
61
|
+
"prompt": "The complete Parent and ticket bodies passed the one combined semantic review.",
|
|
62
|
+
"expected": ["show the exact complete packet", "obtain one approval covering granularity, blocking edges, boundaries, ownership, and proof", "publish only the approved terms"],
|
|
63
|
+
"forbidden": ["run separate fidelity and executability reviewers", "request multiple approvals", "change ticket boundaries during publication"]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": "indivisible-migration-one-green-ticket",
|
|
67
|
+
"prompt": "A broad migration has one owner and final proof, but its intermediate batches cannot remain green independently.",
|
|
68
|
+
"expected": [
|
|
69
|
+
"compile one executable migration ticket with one final green acceptance boundary",
|
|
70
|
+
"keep intermediate batches inside that ticket rather than child checkpoints",
|
|
71
|
+
"return a Decision Delta if the complete migration cannot fit one fresh context"
|
|
72
|
+
],
|
|
73
|
+
"forbidden": [
|
|
74
|
+
"publish red migration batches as graph children",
|
|
75
|
+
"create a shared red integration branch"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# To Tickets Publishing Details
|
|
2
|
+
|
|
3
|
+
## Executable ticket body
|
|
4
|
+
|
|
5
|
+
Every ticket is executable from its body plus the Parent PRD without another
|
|
6
|
+
planning artifact. Keep the body local and include only:
|
|
7
|
+
|
|
8
|
+
- the Parent link;
|
|
9
|
+
- the local observable outcome and acceptance criteria;
|
|
10
|
+
- in-scope and out-of-scope boundaries;
|
|
11
|
+
- confirmed owner/public seam when needed for zero-guess execution;
|
|
12
|
+
- blockers and native dependency links;
|
|
13
|
+
- behavior proof or exact non-TDD proof;
|
|
14
|
+
- AFK/HITL final state, which never authorizes implementation.
|
|
15
|
+
|
|
16
|
+
Do not copy the Parent's product authority into each ticket. Keep shared product
|
|
17
|
+
rules in the Parent, make a contract-owning ticket block its consumers, and
|
|
18
|
+
merge slices that cannot stand or be proved independently. A material execution
|
|
19
|
+
gap becomes a blocking discovery/HITL ticket or a Decision Delta; never defer it
|
|
20
|
+
to a later planning artifact.
|
|
21
|
+
|
|
22
|
+
## Publish template
|
|
23
|
+
|
|
24
|
+
For local files, prefix the body with `# <NN> — <Ticket title>`. For a real
|
|
25
|
+
tracker, use the same title as the issue title and begin the body at `## Parent`.
|
|
26
|
+
The body shape is otherwise identical:
|
|
27
|
+
|
|
28
|
+
```md
|
|
29
|
+
## Parent
|
|
30
|
+
|
|
31
|
+
<authoritative Parent link>
|
|
32
|
+
|
|
33
|
+
## Observable outcome
|
|
34
|
+
|
|
35
|
+
<one end-to-end behavior>
|
|
36
|
+
|
|
37
|
+
## Scope
|
|
38
|
+
|
|
39
|
+
- In scope: <local behavior and owner>
|
|
40
|
+
- Out of scope: <source-authorized boundary>
|
|
41
|
+
|
|
42
|
+
## Acceptance criteria
|
|
43
|
+
|
|
44
|
+
- [ ] <observable criterion>
|
|
45
|
+
- [ ] <observable criterion>
|
|
46
|
+
|
|
47
|
+
## Owner and proof seam
|
|
48
|
+
|
|
49
|
+
- Owner / public seam: <confirmed owner or bounded discovery>
|
|
50
|
+
- Proof: <behavior-level or exact non-TDD proof>
|
|
51
|
+
- Why false behavior cannot pass: <short explanation>
|
|
52
|
+
|
|
53
|
+
## Blocked by
|
|
54
|
+
|
|
55
|
+
<native ticket relationships or None>
|
|
56
|
+
|
|
57
|
+
## Final state
|
|
58
|
+
|
|
59
|
+
AFK: `ready-for-agent`; HITL: `ready-for-human`. State does not authorize
|
|
60
|
+
implementation.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Serialized publication
|
|
64
|
+
|
|
65
|
+
The single current root publisher performs every tracker effect. Do not create
|
|
66
|
+
a claim, lease, lock service, coordinator record, or other durable publication
|
|
67
|
+
state.
|
|
68
|
+
|
|
69
|
+
Before writing:
|
|
70
|
+
|
|
71
|
+
1. Search for an existing source-linked Parent and source-linked children.
|
|
72
|
+
2. Reconcile immutable source identity and any known tracker identities.
|
|
73
|
+
3. If concurrent publication cannot be excluded, multiple matching Parents
|
|
74
|
+
exist, or a partial packet cannot be identified deterministically, perform no
|
|
75
|
+
writes and fail closed.
|
|
76
|
+
|
|
77
|
+
Publish in dependency order and await each create, link, and label effect
|
|
78
|
+
separately, then reread authoritative tracker state before the next write.
|
|
79
|
+
Persist each returned identity through the Parent/source links in issue bodies.
|
|
80
|
+
Apply labels only after identity reconciliation.
|
|
81
|
+
|
|
82
|
+
Publication records the graph frontier but never works it. A ticket with no
|
|
83
|
+
unresolved blockers is merely eligible for later separately authorized
|
|
84
|
+
delivery; publication does not start that delivery.
|
|
85
|
+
|
|
86
|
+
After a timeout, transport loss, or unknown write outcome, reread the tracker
|
|
87
|
+
and retry only a proven-missing effect. Continue an identifiable partial packet
|
|
88
|
+
by filling missing issues or relationships; never recreate an identifiable
|
|
89
|
+
issue and never retry an unknown effect blindly.
|
|
90
|
+
|
|
91
|
+
## Authoritative read-back
|
|
92
|
+
|
|
93
|
+
After every publication effect, reread the tracker and compare it with the
|
|
94
|
+
approved packet. Verify:
|
|
95
|
+
|
|
96
|
+
- exact approved Parent and ticket bodies after substituting only approved
|
|
97
|
+
tracker identifiers, native links, and final state;
|
|
98
|
+
- native Parent, sub-issue, and blocker links in both directions where the
|
|
99
|
+
tracker exposes them;
|
|
100
|
+
- exact AFK/HITL labels and absence of conflicting planning or delivery state;
|
|
101
|
+
- absence of duplicate or partial packets;
|
|
102
|
+
- every ticket remains executable from its body plus the Parent PRD;
|
|
103
|
+
- the publication event trace contains one semantic review, one approval, and
|
|
104
|
+
no implementation action.
|
|
105
|
+
|
|
106
|
+
Post-publication read-back is integrity proof. It does not launch another
|
|
107
|
+
semantic reviewer and does not request another approval.
|
|
108
|
+
|
|
109
|
+
A proven technical mismatch such as a missing label or native link may be
|
|
110
|
+
repaired deterministically and reread. Ambiguous identity, concurrent writes,
|
|
111
|
+
or duplicate candidates fail closed without writes. A repair that changes
|
|
112
|
+
behavior, scope, ownership, ticket boundaries, blockers, or proof obligations
|
|
113
|
+
is a Decision Delta: invalidate approval, rebuild the complete packet, run one
|
|
114
|
+
new fresh semantic review, and obtain one new explicit user approval.
|
|
115
|
+
|
|
116
|
+
Successful read-back must stop before implementation. Publication, links, and
|
|
117
|
+
labels do not authorize delivery.
|
package/package.json
CHANGED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { ProofReceipt } from './proof-report.js';
|
|
2
|
-
import { type DurableReportInvocationV1 } from './contained-report-operation.js';
|
|
3
|
-
import { type AtomicStateFileOptions } from './atomic-store.js';
|
|
4
|
-
declare const TERMINAL_STATUSES: readonly ["passed", "needs-rework", "external-block", "transport-failed", "cancelled", "internal-error"];
|
|
5
|
-
export type ProofStatus = 'active' | typeof TERMINAL_STATUSES[number];
|
|
6
|
-
export interface ProofIosInputsV1 {
|
|
7
|
-
helperPath: string;
|
|
8
|
-
leaseRoot: string;
|
|
9
|
-
leaseArtifactPath: string;
|
|
10
|
-
proofId: string;
|
|
11
|
-
ownerPid: number;
|
|
12
|
-
xcrunPath: string;
|
|
13
|
-
runtimeId: string | null;
|
|
14
|
-
deviceTypeId: string | null;
|
|
15
|
-
}
|
|
16
|
-
export interface ProofStateV1 {
|
|
17
|
-
schema: 'codex-orchestrator.acceptance-proof-state';
|
|
18
|
-
version: 1;
|
|
19
|
-
generation: number;
|
|
20
|
-
proofId: string;
|
|
21
|
-
bindingSha256: string;
|
|
22
|
-
status: ProofStatus;
|
|
23
|
-
reportRepairs: 0 | 1;
|
|
24
|
-
repairFindings: string[];
|
|
25
|
-
repairArtifactSha256?: Record<string, string>;
|
|
26
|
-
iosProofInputs?: ProofIosInputsV1;
|
|
27
|
-
invocation?: DurableReportInvocationV1;
|
|
28
|
-
receipt?: ProofReceipt;
|
|
29
|
-
startedAt: string;
|
|
30
|
-
updatedAt: string;
|
|
31
|
-
}
|
|
32
|
-
export type ProofStateBodyV1 = Omit<ProofStateV1, 'generation'>;
|
|
33
|
-
export interface ProofRecordWriter {
|
|
34
|
-
read(proofId: string): Promise<ProofStateV1 | undefined>;
|
|
35
|
-
compareAndSwap(proofId: string, expectedBinding: string, expectedGeneration: number, next: ProofStateBodyV1): Promise<ProofStateV1>;
|
|
36
|
-
}
|
|
37
|
-
export declare class InMemoryProofRecordWriter implements ProofRecordWriter {
|
|
38
|
-
private readonly states;
|
|
39
|
-
read(proofId: string): Promise<ProofStateV1 | undefined>;
|
|
40
|
-
compareAndSwap(proofId: string, expectedBinding: string, expectedGeneration: number, next: ProofStateBodyV1): Promise<ProofStateV1>;
|
|
41
|
-
}
|
|
42
|
-
export declare class FileProofRecordWriter implements ProofRecordWriter {
|
|
43
|
-
private readonly proofsRoot;
|
|
44
|
-
private readonly options;
|
|
45
|
-
constructor(proofsRoot: string, options?: AtomicStateFileOptions);
|
|
46
|
-
read(proofId: string): Promise<ProofStateV1 | undefined>;
|
|
47
|
-
compareAndSwap(proofId: string, expectedBinding: string, expectedGeneration: number, next: ProofStateBodyV1): Promise<ProofStateV1>;
|
|
48
|
-
private file;
|
|
49
|
-
}
|
|
50
|
-
export declare function validateProofState(value: unknown): ProofStateV1;
|
|
51
|
-
export declare function validateProofIosInputs(value: unknown, proofId: string): asserts value is ProofIosInputsV1;
|
|
52
|
-
export declare function validateProofArtifactInventory(value: unknown): Record<string, string>;
|
|
53
|
-
export {};
|
|
54
|
-
//# sourceMappingURL=proof-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proof-store.d.ts","sourceRoot":"","sources":["../../../src/v2/proof-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAmC,KAAK,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAGlH,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKjF,QAAA,MAAM,iBAAiB,0GAOb,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAClF,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5F;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,2CAA2C,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IACzD,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B;AAED,qBAAa,yBAA0B,YAAW,iBAAiB;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAEpD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAKxD,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,YAAY,CAAC;CAczB;AAED,qBAAa,qBAAsB,YAAW,iBAAiB;IAE3D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,sBAA2B;IAGjD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAmBxD,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,YAAY,CAAC;IAYxB,OAAO,CAAC,IAAI;CAIb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CA2C/D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAQzG;AAwBD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWrF"}
|