Work Packages: mission-status-contract-1-1-01M42XJC
_Generated by finalize-tasks from wps.yaml. Do not edit directly._
Work Package WP01: Baseline and campsite (tidy-first)
Dependencies: None Requirement Refs: NFR-006, C-004 Plan Concerns: IC-01 Owned Files: tests/contract/_mission_status_payloads.py, tests/contract/test_mission_status_reality.py Subtasks: T001, T002, T003, T004 Prompt: tasks/WP01-baseline-campsite.md
Work Package WP02: Tool extension: strict names, artifact-path class, 25 planted kinds
Dependencies: None Requirement Refs: FR-015, FR-023, NFR-004, C-004, C-005 Plan Concerns: IC-02 Owned Files: contracts/tools/fixture_builder.py, contracts/tools/leak_scan.py, contracts/tools/negative_cases.json, tests/contract/test_leak_scan.py, tests/contract/test_fixture_builder.py, tests/contract/test_run_negative_cases.py Subtasks: T005, T006, T007, T008, T009, T010 Prompt: tasks/WP02-tool-extension.md
Work Package WP03: Contract slice A: listArtifacts and getArtifactContent
Dependencies: WP02 Requirement Refs: FR-009, FR-010, FR-011, FR-012, FR-013, FR-017, FR-018, FR-019, C-001, C-002, C-004, SC-001 Plan Concerns: IC-03 Owned Files: contracts/mission-status/openapi.yaml, contracts/mission-status/CHANGELOG.md, contracts/mission-status/schemas/_index.yaml, contracts/mission-status/parameters/_index.yaml, contracts/mission-status/responses/_index.yaml, contracts/mission-status/examples/_index.yaml, contracts/tools/enum_pins.json, tests/contract/test_mission_status_examples.py, tests/contract/test_enum_pin_check.py, contracts/mission-status/paths/missions_missionId_artifacts.yaml, contracts/mission-status/paths/missions_missionId_artifacts_content.yaml, contracts/mission-status/parameters/ArtifactPath.yaml, contracts/mission-status/schemas/ArtifactKind.yaml, contracts/mission-status/schemas/ArtifactEntry.yaml, contracts/mission-status/schemas/ArtifactListing.yaml, contracts/mission-status/schemas/ArtifactContent.yaml, contracts/mission-status/schemas/ArtifactRefusalCode.yaml, contracts/mission-status/schemas/ArtifactRefusal.yaml, contracts/mission-status/schemas/ArtifactPath.yaml, contracts/mission-status/responses/ArtifactPathRefused.yaml, contracts/mission-status/responses/ArtifactNotFound.yaml, contracts/mission-status/responses/ArtifactTooLarge.yaml, contracts/mission-status/responses/ArtifactNotText.yaml, contracts/mission-status/responses/ArtifactSecretRefused.yaml, contracts/mission-status/responses/ArtifactUnreadable.yaml, contracts/mission-status/responses/ArtifactListingUnreadable.yaml, contracts/mission-status/examples/ArtifactListing.populated.yaml, contracts/mission-status/examples/ArtifactListing.truncated.yaml, contracts/mission-status/examples/ArtifactContent.markdown.yaml, contracts/mission-status/examples/ArtifactContent.redacted.yaml, contracts/mission-status/examples/ArtifactContent.json.yaml, contracts/mission-status/examples/ArtifactContent.empty.yaml, contracts/mission-status/examples/ArtifactRefusal.invalid-artifact-path.yaml, contracts/mission-status/examples/ArtifactRefusal.not-found.yaml, contracts/mission-status/examples/ArtifactRefusal.artifact-too-large.yaml, contracts/mission-status/examples/ArtifactRefusal.artifact-not-text.yaml, contracts/mission-status/examples/ArtifactRefusal.artifact-secret.yaml, contracts/mission-status/examples/ArtifactRefusal.artifact-unreadable.yaml, contracts/mission-status/examples/ArtifactRefusal.artifact-listing-unreadable.yaml Subtasks: T011, T012, T013, T014, T015, T016 Prompt: tasks/WP03-contract-slice-a-artifacts.md
Work Package WP04: Contract slice B: getWorkPackageDetail
Dependencies: WP03 Requirement Refs: FR-001, FR-002, FR-003, FR-004, FR-005, FR-006, FR-007, FR-008, FR-013, FR-015, FR-018, FR-019, C-001, C-002, C-004, SC-001 Plan Concerns: IC-04 Owned Files: contracts/mission-status/openapi.yaml, contracts/mission-status/CHANGELOG.md, contracts/mission-status/schemas/_index.yaml, contracts/mission-status/parameters/_index.yaml, contracts/mission-status/responses/_index.yaml, contracts/mission-status/examples/_index.yaml, contracts/tools/enum_pins.json, tests/contract/test_mission_status_examples.py, tests/contract/test_enum_pin_check.py, contracts/mission-status/paths/missions_missionId_work-packages_wpId_detail.yaml, contracts/mission-status/schemas/WorkPackageDetail.yaml, contracts/mission-status/schemas/Subtask.yaml, contracts/mission-status/schemas/DependencyRef.yaml, contracts/mission-status/schemas/ReviewCycle.yaml, contracts/mission-status/schemas/Workspace.yaml, contracts/mission-status/schemas/OwnedFile.yaml, contracts/mission-status/schemas/ChangeState.yaml, contracts/mission-status/schemas/ArtifactReferences.yaml, contracts/mission-status/schemas/ArtifactReference.yaml, contracts/mission-status/schemas/WorkPackageDetailRefusal.yaml, contracts/mission-status/schemas/WorkPackageDetailRefusalCode.yaml, contracts/mission-status/responses/WorkPackageDetailNotFound.yaml, contracts/mission-status/responses/WorkPackageDetailUnreadable.yaml, contracts/mission-status/examples/WorkPackageDetail.populated.yaml, contracts/mission-status/examples/WorkPackageDetail.no-cycles.yaml, contracts/mission-status/examples/WorkPackageDetail.unknown-change-state.yaml, contracts/mission-status/examples/WorkPackageDetail.null-workspace.yaml, contracts/mission-status/examples/WorkPackageDetail.planning-lane.yaml, contracts/mission-status/examples/WorkPackageDetail.unparseable-cycle.yaml, contracts/mission-status/examples/WorkPackageDetailRefusal.not-found.yaml, contracts/mission-status/examples/WorkPackageDetailRefusal.source-unreadable.yaml Subtasks: T017, T018, T019, T020, T021, T022 Prompt: tasks/WP04-contract-slice-b-detail.md
Work Package WP05: Reader foundation and the artifact reader
Dependencies: WP01, WP02, WP03 Requirement Refs: FR-009, FR-010, FR-011, FR-012, FR-013, FR-014, FR-015, FR-016, FR-020, FR-022, NFR-002, NFR-003, NFR-005, NFR-006, C-003, C-004, C-005 Plan Concerns: IC-06 Owned Files: tests/contract/_mission_status_payloads.py, tests/contract/_mission_status_artifacts.py, tests/contract/test_mission_status_artifacts.py, tests/contract/test_mission_status_payloads.py, tests/contract/test_mission_status_reality.py, .github/workflows/packs.yml, tests/architectural/test_ci_corpus_trigger_completeness.py Subtasks: T023, T024, T025, T026, T027, T028, T029 Prompt: tasks/WP05-artifact-reader-foundation.md
Work Package WP06: Detail reader, matcher parity and the git change-state matrix
Dependencies: WP04, WP05 Requirement Refs: FR-001, FR-002, FR-003, FR-004, FR-005, FR-006, FR-007, FR-008, FR-016, FR-020, FR-022, NFR-002, NFR-005, NFR-006, NFR-007, C-004, C-005 Plan Concerns: IC-07 Owned Files: tests/contract/_mission_status_detail.py, tests/contract/test_mission_status_detail.py, tests/contract/test_mission_status_reality.py, .github/workflows/packs.yml, tests/architectural/test_ci_corpus_trigger_completeness.py Subtasks: T030, T031, T032, T033, T034, T035, T036, T037 Prompt: tasks/WP06-detail-reader.md
Work Package WP07: Version, CHANGELOG and the pure 1.1 proof module
Dependencies: WP04, WP06 Requirement Refs: FR-017, FR-018, FR-019, FR-020, FR-024, NFR-005, NFR-006, NFR-007, C-001, C-002, C-004, SC-001, SC-002, SC-007, SC-008 Plan Concerns: IC-05 Owned Files: contracts/mission-status/CHANGELOG.md, tests/contract/test_mission_status_contract_1_1.py, .github/workflows/packs.yml, tests/architectural/test_ci_corpus_trigger_completeness.py Subtasks: T038, T039, T040, T041, T042, T043 Prompt: tasks/WP07-version-changelog-proof.md
Work Package WP08: Reality-check extension: floors, oracle, controls, fixture
Dependencies: WP05, WP06 Requirement Refs: FR-016, FR-021, FR-023, NFR-001, NFR-003, NFR-004, NFR-006, C-004, SC-003, SC-004, SC-005, SC-006 Plan Concerns: IC-08 Owned Files: tests/contract/test_mission_status_reality.py, tests/contract/_mission_status_payloads.py, tests/contract/fixtures/mission_status_artifacts_expected.json Subtasks: T044, T045, T046, T047, T048, T049 Prompt: tasks/WP08-reality-check-extension.md
Work Package WP09: Close-out evidence (pre-tag) and tracer assessment
Dependencies: WP07, WP08 Requirement Refs: SC-001, SC-002, SC-003, SC-004, SC-005, SC-006, SC-007, SC-008, C-003, C-004 Plan Concerns: IC-09 Owned Files: kitty-specs/mission-status-contract-1-1-01M42XJC/tracer-approach.md, kitty-specs/mission-status-contract-1-1-01M42XJC/tracer-design-decisions.md, kitty-specs/mission-status-contract-1-1-01M42XJC/tracer-tooling-friction.md Subtasks: T050, T051, T052 Prompt: tasks/WP09-closeout-evidence-pre-tag.md
<!-- BEGIN AUTHORED SECTIONS: everything below is hand-authored; finalize-tasks regenerates the part above from wps.yaml and would drop this block (re-append it from the commit that added it if you re-finalise). -->
Task Plan: Mission Status contract 1.1 (#5625)
Mission mission-status-contract-1-1-01M42XJC; planning base and merge target issue-5625-mission-status-contract-1-1; topology lanes. This section carries what the generated part cannot: phases, parallel markers, lane picture, chokepoints, file references, gates and the coverage tables. Source: the plan's Implementation Concern Map (IC-01 to IC-09), its Lanes section and Wrap-up checklist (W-1 to W-7) and its traceability tables; nothing here re-derives or contradicts them. Operator decisions in force (2026-10-04): OD-1 = X-pure (three new pure test modules, six registrations, no committed live baseline test, ACK-1 void), OD-2 = Y (the example-required guard lives in-test), OD-3 (a work package id held by two files is served by the first regular file in byte order), OD-4 (the leak scan's text pass is scoped).
Shape of the delivery
- One pull request per Mission (repository default). Work packages commit locally on lane branches and never push or open a pull request; the orchestrator runs the wrap-up (below), then opens the draft pull request, which needs the
contract-mission-status-v1.0.0release tag. - Size: the plan estimates about 7,900 added lines, of which about 3,100 are mechanical (52 new contract files, the 25-case negative block); about 4,800 are authored logic. These are planning estimates, not measures; the real figure is taken with
git diff --shortstatper group at W-5. If the measured total exceeds 10,000 added lines the orchestrator raises it with the operator before the pull request. The diff stays readable by commit-per-concern compaction (plan, "The one pull request"): WP01 campsite, WP02 tooling, WP03 contract A, WP04 contract B, WP07 proof module, WP05 artifact reader, WP06 detail reader, WP08 corpus extension, WP09 records. - Largest work packages, and the decision not to split them (decided at the tasks phase, round 1 of the squad fix). Sizes are the sums of the per-subtask figures in the prompts, not the earlier rounded figures: WP05 is about 2,260 added lines (helper and helper tests 400, reader 800, reader tests 1,000, smoke 60; moving the
FLOORSfields to WP08 lowers it slightly) in 7 subtasks, and WP06 is about 1,900 to 2,000 (detail module about 900, test module about 1,000, plus the smoke and the two registration lines) in 8 subtasks. Neither is split. Reasons: a split needs a re-finalisation, which regenerates this file and rewrites the lane and status records (churn that buys nothing here); the Mission is one pull request and all code work packages run in one sequential lane (lane-a), so a split gains no parallelism; and the review slices already exist as one commit per subtask, red-first commit first, which the WP05 and WP06 prompts require, so a reviewer reads each work package commit by commit, not as one 2,000-line diff. The seams, named so the reviewer reads along them: WP05: T024 (shared payload-helper foundation and its tests) versus T025 to T029 (the artifact reader, its tests and the smoke); WP06: T030 to T033 (pure file reading: universe, titles, dependencies, review cycles, workspace, artifact references) versus T034 to T037 (the matcher and its parity test, the real-git change-state derivation, the assembled outcome and the git fault-injection matrix; the part that needs real git, the host capability rule and the D-P3/D-P4 environment risks). The orchestrator's review brief points each reviewer to these seams; a reviewer who still finds a work package too large for one sitting raises it to the orchestrator rather than rejecting on size. - Decisions recorded at the tasks phase (round 1 of the squad fix). (1) Registration timing: the registration pair of WP05, WP06 and WP07 is committed with the module-creating red-first commit (T023, T031, T038); the red-first test content is still first, the registry gates are green on that commit and only the new reader or proof tests are the intended red, and the pair's subtasks (T029, T037, T042) define the edits and record the gate results. (2) Red-first through a skeleton: T023 and T031 create a skeleton module (functions raising
NotImplementedErroror returning empty results) in the red-first commit, so each test fails on its own assertion and not as one collection error. (3) FLOORS fields: added by WP08 (T048), where the reality check consumes them; WP05 keeps the one planted fingerprint control and WP08 references it. (4) Success criteria and constraints:requirement_refsare frontmatter and are not changed by this round; the notes under the coverage tables say which work package builds a proof and which only records it. (5) Both architectural battery parts are run by the implementer of WP05, WP06 and WP07 and re-run or verified by the reviewer (operator requirement, see Gates per work package).
Work package index
[P] marks the only genuinely parallel pair of the Mission. Numbering follows execution order; the plan's IC number is in the second column.
| WP | Plan concern | Title | Phase | Depends on | Lane (computed) | Mode | Subtasks | Parallel |
|---|---|---|---|---|---|---|---|---|
| WP01 | IC-01 | Baseline and campsite (tidy-first) | Phase 1 - Foundation | none | lane-a | code_change | T001 to T004 (4) | [P] with WP02 |
| WP02 | IC-02 | Tool extension: strict names, artifact-path class, 25 planted kinds | Phase 1 - Foundation | none | lane-b | code_change | T005 to T010 (6) | [P] with WP01 |
| WP03 | IC-03 | Contract slice A: listArtifacts and getArtifactContent | Phase 2 - Contract | WP02 | lane-a | code_change | T011 to T016 (6) | |
| WP04 | IC-04 | Contract slice B: getWorkPackageDetail | Phase 2 - Contract | WP03 | lane-a | code_change | T017 to T022 (6) | |
| WP05 | IC-06 | Reader foundation and the artifact reader | Phase 3 - Readers | WP01, WP02, WP03 | lane-a | code_change | T023 to T029 (7) | |
| WP06 | IC-07 | Detail reader, matcher parity and the git change-state matrix | Phase 3 - Readers | WP04, WP05 | lane-a | code_change | T030 to T037 (8) | |
| WP07 | IC-05 | Version, CHANGELOG and the pure 1.1 proof module | Phase 4 - Proof and corpus | WP04, WP06 | lane-a | code_change | T038 to T043 (6) | |
| WP08 | IC-08 | Reality-check extension: floors, oracle, controls, fixture | Phase 4 - Proof and corpus | WP05, WP06 | lane-a | code_change | T044 to T049 (6) | |
| WP09 | IC-09 | Close-out evidence (pre-tag) and tracer assessment | Phase 5 - Close-out | WP07, WP08 | lane-planning | planning_artifact | T050 to T052 (3) |
Phases
- Phase 1 - Foundation: WP01, WP02
- Phase 2 - Contract: WP03, WP04
- Phase 3 - Readers: WP05, WP06
- Phase 4 - Proof and corpus: WP07, WP08
- Phase 5 - Close-out: WP09
Dispatch order (critical path)
1. D-0 (orchestrator, before any dispatch): request the release tag from the operator, assign #5625 to the Human-in-Charge and post the claim comment (plan, Charter Check, Standing Order 8). No work package does this. 2. WP01 [P] WP02 (the one parallel window). The orchestrator appends WP01's baseline table to tracer-approach.md before dispatching WP03 (WP02 records its own pre-change counts; every later work package compares against that table). 3. WP03, then WP04. Step J-1 (orchestrator, after WP04 is approved and before WP05 is dispatched): the contract tree is final (no work package after WP04 touches contracts/ except the CHANGELOG.md entry of WP07), so replay the contracts.yml JVM job steps (plan W-2, mechanism a) on the WP04 lane tip, once, now: the complete mechanism (a) list of plan W-2 (pinned Gradle install, bundle, JVM validation, Java view, TypeScript client smoke, resolver parity, lint, and negative-tests without the skip tags, i.e. the cases tagged jvm, vacuum or oasdiff in the manifest at J-1 time; the count is measured then, because WP02 adds cases), and the tag-less release dry run (release-dry-run needs only validate-bundle and passes no --tag; WP03's skeleton CHANGELOG heading for 1.1.0-SNAPSHOT is already present). Only one step legitimately waits: breaking-change with --baseline-root needs the tag or the final CHANGELOG.md, so it runs at W-2 (wrap-up), where the whole list is re-run for the CHANGELOG-only delta. That list is kept in plan W-2 alone; this step, the quickstart row and plan P-10 refer to it. A defect found there is fixed in a WP03 or WP04 follow-up before any reader is built on the schemas. Route for that follow-up: WP03 and WP04 are already approved, so the orchestrator reopens the affected work package through the tooling (a rejection transition of that work package carrying a review-feedback file that names the defect, then re-review and re-approval), never by relaying the change informally, which nulls review_result and blocks approval. WP05 is not dispatched until J-1 has run clean (or the operator has accepted its absence below): wps.yaml lists WP05 after WP01 to WP03 only, so nothing but this step and the WP05 prompt's dispatch precondition holds it back. W-2 at wrap-up is then re-run for the CHANGELOG-only delta. If no JVM machine is available, say so to the operator; W-2 stays the only run (plan risk P-10 stays open and a second compaction is budgeted). 4. WP05, then WP06 (never concurrent with each other: shared helper, reality module and the registration files). 5. WP08, then WP07 (recommended). WP08 carries the larger unknowns (the runtime budget NFR-001 / P-2, the independent byte-level oracle, the floor measurements; any can force a re-plan), so dispatching it first finds a budget overrun early; WP07 is mostly CHANGELOG text and a pure proof module. They share no owned file and WP08 does not depend on the WP07 CHANGELOG, so both orders are legal under wps.yaml; the plan's critical path (IC-05 first) rests on no dependency. 6. WP09. Subtasks inside a work package run in order; the red-first commit is always the first commit of the work package.
Lane picture: expected (plan) versus computed (finalisation)
| Lane | Work packages | Depends on lane | Source |
|---|---|---|---|
| lane-b | WP02 | none | computed by finalize-tasks into lanes.json |
| lane-a | WP01, WP03, WP04, WP05, WP06, WP07, WP08 | lane-b | computed by finalize-tasks into lanes.json |
| lane-planning | WP09 | lane-a | computed by finalize-tasks into lanes.json |
Plan expectation (OD-1 X-pure, IC-09 planning_artifact): one lane holding IC-02 alone; one lane holding IC-01, IC-03, IC-04, IC-05, IC-06, IC-07, IC-08 in dependency order, depending on the IC-02 lane; lane-planning holding IC-09. The computed manifest equals the plan's picture (WP02 alone; WP01, WP03, WP04, WP05, WP06, WP07, WP08 in one lane; WP09 on lane-planning), with no LaneDependencyCycleError. The collapse report lists the six overlap merges that bind the big lane (shared helper and reality module; shared contract files; CHANGELOG; the two registration files). Two things the plan said finalisation must keep true hold: no work package owns a directory-wide glob under tests/contract/ or contracts/ (every path is a file; new files are listed explicitly and declared in create_intent), and WP09 carries execution_mode: planning_artifact explicitly.
The lane graph says lane-a depends on lane-b, while WP01 (in lane-a) has no work package dependency. Verified rule (read from the tooling, not assumed): claiming a work package merges only the tips of dependency lanes whose work packages are all approved or done (_approved_dependency_lane_refs in src/specify_cli/lanes/implement_support.py: an unapproved dependency lane is omitted, not waited on), and the claim-ancestry check (check_claim_ancestry in the same module) requires only the planning commit and those approved dependency lanes' branches. So the lane-level edge does not gate claiming WP01: WP01 and WP02 have disjoint write scopes and no work package dependency, and start side by side. The edge only causes lane-b's tip to be merged into lane-a when a later lane-a work package is claimed after WP02 is approved (WP03 onward); the real condition, WP02 approved before WP03 is claimed, is already the WP03 dependency in wps.yaml. Until consolidation creates the integration branch kitty/mission-<slug>, the lane branches parent off the target branch. The first dispatch is observed as a confirmation only; a deviation goes to tracer-tooling-friction.md.
Chokepoints (the plan's declared shared-file exceptions, each a dependency chain)
| Shared file(s) | Writers in order | Why one chain |
|---|---|---|
contracts/mission-status/openapi.yaml, the four _index.yaml files, contracts/tools/enum_pins.json, tests/contract/test_mission_status_examples.py, tests/contract/test_enum_pin_check.py | WP03, then WP04 | version, path keys and index entries serialise |
contracts/mission-status/CHANGELOG.md | WP03 (entry skeleton), WP04 (detail lines), WP07 (Provisional and Deferred, final) | the entry is final only once the provisional list is |
.github/workflows/packs.yml (the built-in-corpus-suite command is ONE physical line) and tests/architectural/test_ci_corpus_trigger_completeness.py (_CORPUS_MARKED_MODULES) | WP05, then WP06, then WP07 | single-writer chain; each appends its own --deselect entry and registry row in the module-creating red-first commit (T023, T031, T038), so no commit leaves the registry gates red; the WP07 to WP06 edge also keeps the lane graph acyclic |
tests/contract/_mission_status_payloads.py | WP01, WP05, WP08 | campsite helpers, then foundation (WP05; the one fingerprint control), then the FLOORS fields and values (WP08, where they are consumed) |
tests/contract/test_mission_status_reality.py | WP01, WP05, WP06, WP08 | campsite, then two thin smokes, then the full extension |
Other chokepoint classes (the tasks phase asks for them to be called out): the migration chain, the runtime-state schema and the event contract are not touched (no src/ change, plan NFR-007); the shared CI gate is touched only through the two registration files above, and either edit selects the CI architectural-heavy battery on the pull request (CI-owned; plan OD-1, risk P-11).
File references
Existing files edited (verified to exist at the planning base): contracts/tools/fixture_builder.py, contracts/tools/leak_scan.py, contracts/tools/negative_cases.json, contracts/tools/enum_pins.json, contracts/mission-status/openapi.yaml, contracts/mission-status/CHANGELOG.md, the four contracts/mission-status/{schemas,parameters,responses,examples}/_index.yaml, tests/contract/_mission_status_payloads.py, tests/contract/test_mission_status_reality.py, tests/contract/test_mission_status_payloads.py, tests/contract/test_mission_status_examples.py, tests/contract/test_leak_scan.py, tests/contract/test_fixture_builder.py, tests/contract/test_enum_pin_check.py, tests/contract/test_run_negative_cases.py, .github/workflows/packs.yml, tests/architectural/test_ci_corpus_trigger_completeness.py, and the three tracer files of this directory.
New files, by work package (declared in each work package's frontmatter create_intent):
- WP03: 30 new files. 2 path files, 1 parameter, 7 schemas, 7 responses, 13 examples (names in the work package's
owned_files; the totals match the plan: 3 path files, 1 parameter, 18 schemas, 9 responses, 21 examples across the two) - WP04: 22 new files. 1 path file, 0 parameters, 11 schemas, 2 responses, 8 examples (names in the work package's
owned_files) - WP05: 2 new files.
tests/contract/_mission_status_artifacts.py(a skeleton in the red-first commit);tests/contract/test_mission_status_artifacts.py - WP06: 2 new files.
tests/contract/_mission_status_detail.py(a skeleton in the red-first commit);tests/contract/test_mission_status_detail.py - WP07: 1 new file.
tests/contract/test_mission_status_contract_1_1.py - WP08: 1 new file.
tests/contract/fixtures/mission_status_artifacts_expected.json
Reference material for every work package (read, not edited): plan.md, spec.md, data-model.md, research.md, quickstart.md, contracts/operations-and-schemas.md, contracts/tool-extension-and-reader.md, and the three tracer files.
Gates per work package
Every work package prompt carries its own validation section; the common set is: ruff check . and ruff format --check ., ruff check --select TID251 ., the nine router and registry gate files, the eight architectural-fast files that census tests/, the two layer-rules files and spec-kitty cutover-guard. Registry- and workflow-touching work packages (WP05, WP06, WP07) additionally carry, verbatim from .github/workflows/ci-router.yml, both architectural battery parts (architectural-fast, and architectural-heavy shards 1/2 and 2/2). Operator requirement (2026-10-04, recorded add-only in tracer-design-decisions.md): these work packages must pass both parts as CI runs them (the four files the battery deselects are covered by the named gate lists or, for test_archive_root_byte_identical.py, only by the CI archive-freeze job, never locally). The charter (NO_FULL_HEAVY_SUITES_IN_MISSION) forbids a local architectural sweep except on an explicit operator request; the operator's brief for this Mission is that request, for these two parts and these three work packages only. The implementer runs the three legs (fast, heavy 1/2, heavy 2/2) before requesting approval and records command, counts, exit status and junit path in the hand-off report; the reviewer re-runs them or verifies the recorded output; CI keeps the final word. The prompts carry the verbatim CI blocks (unparaphrased, so each line can be confirmed against the workflow) and the three runnable invocations that resolve the matrix placeholders (shard, label) and replace uv run --frozen python by the checkout's .venv/bin/python with identical pytest arguments (the "never a bare uv run" rule bans a bare uv run; the CI form is the reference). Every code work package (WP01 to WP08) also runs and records the tool-job selection (the router job tests (contract tools)), the one directory-scoped contract run that executes the new modules and every neighbour of the changed contract files; its command is in each prompt and its counts are compared with the WP01 baseline.
| WP | Red-first commit | Extra gates beyond the common set |
|---|---|---|
| WP01 | none (behaviour-preserving campsite; declared exception; drop rule) | identical test counts before and after (reality 577, payloads 157 at plan time) |
| WP02 | test_fixture_builder.py and test_leak_scan.py (33 kinds, predicate, mask); the three content/title kinds are regression controls | leak_scan.py over the existing tree exits 0; run_negative_cases.py (jvm/vacuum/oasdiff tags excluded) |
| WP03 | examples, path-map and enum-pin tests (enums=5 values=38) | the ten Python checks over the tree |
| WP04 | examples (eight paths) and enum-pin tests (enums=7 values=43) | the ten Python checks; WP02 x WP03/04 integration acceptance |
| WP05 | failing artifact-reader tests (against a skeleton module, each failing on its own assertion) plus the corpus smoke, with the registration pair in the same commit | collect check with the router marker expression; registry and same-tier gates green on the first commit; both architectural battery parts (three legs); tool-job selection |
| WP06 | failing work package identity tests (against a skeleton module) plus the corpus smoke, with the registration pair in the same commit | parity table in the tool-job environment; fast or unit collects nothing for the detail module (expect exit code 5); both architectural battery parts (three legs); tool-job selection |
| WP07 | failing entry-scoped CHANGELOG assertions (red on the planning base for every assertion; at the WP07 lane start (the tip of the preceding approved work package in lane-a: the WP06 tip, or the WP08 tip when WP08 is dispatched first), after WP03, only the CHANGELOG assertions are red and the slice-scoped version assertion is a named green regression control), with the registration pair in the same commit | --baseline-root recipe (pre-tag); shallow-clone run of the pure modules; per-rule revert check of the pure functions; both architectural battery parts (three legs); tool-job selection |
| WP08 | failing corpus floors and pinned-fixture assertions | runtime budget (8 minutes limit, 6 minutes re-plan) |
| WP09 | none (planning artifacts; append-only) | add-only diff; hygiene scan zero hits |
Coverage: every identifier of the spec maps to at least one work package
The identifier lists below were extracted from spec.md mechanically (regular expressions over the whole file) and diffed against this table by script; the work package column for FR, NFR, C and SC is each work package's requirement_refs (the CLI validates those against the spec), for CL and AD it is derived from the spec's own Traceability table joined with the requirement mapping, and for AC and OQ it follows the plan's test strategy and decision register. Counts extracted: FR 24, NFR 7, C 5, SC 8, CL 5, AD 22, AC 4, OQ 6. Identifiers with no work package: none (OQ-3 is withdrawn in the spec and is listed as such).
Functional requirements
| ID | Work package(s) |
|---|---|
| FR-001 | WP04, WP06 |
| FR-002 | WP04, WP06 |
| FR-003 | WP04, WP06 |
| FR-004 | WP04, WP06 |
| FR-005 | WP04, WP06 |
| FR-006 | WP04, WP06 |
| FR-007 | WP04, WP06 |
| FR-008 | WP04, WP06 |
| FR-009 | WP03, WP05 |
| FR-010 | WP03, WP05 |
| FR-011 | WP03, WP05 |
| FR-012 | WP03, WP05 |
| FR-013 | WP03, WP04, WP05 |
| FR-014 | WP05 |
| FR-015 | WP02, WP04, WP05 |
| FR-016 | WP05, WP06, WP08 |
| FR-017 | WP03, WP07 |
| FR-018 | WP03, WP04, WP07 |
| FR-019 | WP03, WP04, WP07 |
| FR-020 | WP05, WP06, WP07 |
| FR-021 | WP08 |
| FR-022 | WP05, WP06 |
| FR-023 | WP02, WP08 |
| FR-024 | WP07 |
The column is each work package's requirement_refs. The plan maps two requirements to one more work package than the column shows, and the frontmatter is not changed by this round: FR-008 (artifact references) also depends on the eligibility function that WP05 builds (plan IC-06 names eligibility for FR-008; WP06 T033 step 3 uses it), and FR-020 (checks that cannot do their job fail) is also built by WP08 (plan IC-08: floors, controls, examined equals discovered, with the zero guards).
Non-functional requirements
| ID | Work package(s) |
|---|---|
| NFR-001 | WP08 |
| NFR-002 | WP05, WP06 |
| NFR-003 | WP05, WP08 |
| NFR-004 | WP02, WP08 |
| NFR-005 | WP05, WP06, WP07 |
| NFR-006 | WP01, WP05, WP06, WP07, WP08 |
| NFR-007 | WP06, WP07 |
Constraints
| ID | Work package(s) |
|---|---|
| C-001 | WP03, WP04, WP07 |
| C-002 | WP03, WP04, WP07 |
| C-003 | WP05, WP09 |
| C-004 | WP01, WP02, WP03, WP04, WP05, WP06, WP07, WP08, WP09 |
| C-005 | WP02, WP05, WP06 |
C-001 and C-002 are proven by the WP07 minor-version proof and honoured additively by WP03 and WP04; C-003 (add-only kitty-specs/) is checked by the WP07 scope data and the wrap-up add-only check, and held by WP09 (WP05 carries C-003 in its requirement_refs through the common hygiene rule only: it writes nothing under kitty-specs/, and the frontmatter is not changed by this round); C-004 binds every work package through the hygiene rules in each prompt; C-005 (no new dependency, Node-free tooling) binds WP02, WP05, WP06.
Success criteria
| ID | Work package(s) |
|---|---|
| SC-001 | WP03, WP04, WP07, WP09 |
| SC-002 | WP07, WP09 |
| SC-003 | WP08, WP09 |
| SC-004 | WP08, WP09 |
| SC-005 | WP08, WP09 |
| SC-006 | WP08, WP09 |
| SC-007 | WP07, WP09 |
| SC-008 | WP07, WP09 |
SC-002 and SC-008 also need wrap-up evidence (W-1, W-7: the comparison against the released tag and the scope check over the real diff). The work package column is each work package's requirement_refs, which are frontmatter and are not changed by this round. Read the rows as follows: WP03, WP04, WP07 and WP08 build the proofs, and WP02 and WP06 build two more that the column does not show: SC-005 (a planted negative that fails and a clean control for each endpoint) is built by WP02's 25 planted kinds and their controls, and SC-004 (changed, unchanged and unknown each produced by the constructed cause in synthetic repositories, listed mutations killed) is built by WP06 T034 to T036. WP09 is listed under SC-001 to SC-008 in its frontmatter (not changed by this round); its rows are recorded by, not built by: it appends pre-tag figures to the tracer files and builds no proof. The WP02 and WP06 prompts name SC-005 and SC-004 in their reviewer guidance.
Clarifications and decisions
| ID | Work package(s) | Basis |
|---|---|---|
| CL-1 | WP02, WP03, WP04, WP05, WP06, WP07 | spec Traceability table |
| CL-2 | WP02, WP03, WP04, WP05, WP06, WP07, WP08 | spec Traceability table |
| CL-3 | WP02, WP03, WP04, WP05 | spec Traceability table |
| CL-4 | WP02, WP04, WP05, WP06, WP08 | spec Traceability table |
| CL-5 | WP02, WP03, WP04, WP06 | operator acknowledgement of AD-5 to AD-22 and the FR-015 tool extension: built as written in WP02, WP04, WP06; WP03 as well, because CL-5 (3) says all three new operations carry a refusal code on their 404 and WP03 owns ArtifactRefusal (consistent with the OQ-5 row). The acknowledgement of AD-5 to AD-22 is carried by their own rows below. |
| AD-1 | WP03, WP04, WP05, WP06 | spec Traceability table (requirements that cite it) |
| AD-2 | WP03, WP04, WP05, WP06 | spec Traceability table (requirements that cite it) |
| AD-3 | WP04, WP06 | spec Traceability table (requirements that cite it) |
| AD-4 | WP03, WP04, WP05, WP06, WP07 | spec Traceability table (requirements that cite it) |
| AD-5 | WP03, WP04, WP05 | spec Traceability table (requirements that cite it) |
| AD-6 | WP03, WP04, WP05, WP08 | spec Traceability table (requirements that cite it) |
| AD-7 | WP03, WP04, WP05, WP06, WP07, WP08 | spec Traceability table (requirements that cite it) |
| AD-8 | WP03, WP04, WP05, WP06 | spec Traceability table (requirements that cite it) |
| AD-9 | WP03, WP04, WP05 | spec Traceability table (requirements that cite it) |
| AD-10 | WP02, WP03, WP04, WP05 | spec Traceability table (requirements that cite it) |
| AD-11 | WP03, WP05 | spec Traceability table (requirements that cite it) |
| AD-12 | WP04, WP05, WP06, WP08 | spec Traceability table (requirements that cite it) |
| AD-13 | WP04, WP06 | spec Traceability table (requirements that cite it) |
| AD-14 | WP03, WP04, WP05, WP06, WP07 | spec Traceability table (requirements that cite it) |
| AD-15 | WP02, WP05, WP06, WP08 | spec Traceability table (requirements that cite it) |
| AD-16 | WP03, WP04, WP07 | spec Traceability table (requirements that cite it) |
| AD-17 | WP02, WP03, WP04, WP05, WP06, WP07, WP08 | spec Traceability table (requirements that cite it) |
| AD-18 | WP02, WP04, WP05, WP06, WP07, WP08 | spec Traceability table (requirements that cite it) |
| AD-19 | WP02, WP03, WP04, WP05, WP08 | spec Traceability table (requirements that cite it) |
| AD-20 | WP04, WP06, WP07 | spec Traceability table (requirements that cite it) |
| AD-21 | WP03, WP04, WP05, WP06, WP07 | spec Traceability table (requirements that cite it) |
| AD-22 | WP03, WP05, WP06, WP07, WP08 | spec Traceability table (requirements that cite it) |
The plan states that CL-1 to CL-5 and AD-1 to AD-22 are "built as written"; the plan's own decisions D-P1 to D-P13 are the only added choices and sit in the work packages as follows: D-P1 WP03/WP07; D-P2 WP05; D-P3 WP06; D-P4 WP06; D-P5 WP05/WP06/WP07 (placement and registrations) and WP08 (budget); D-P6 WP06/WP08; D-P7 WP02; D-P8 WP05/WP08; D-P9 WP05/WP06; D-P10 WP07; D-P11 WP07; D-P12 WP05/WP08; D-P13 WP08.
Acceptance criteria groups, open questions and operator decisions
| ID | Work package(s) | Basis |
|---|---|---|
| AC-LIST | WP03, WP05, WP08 | plan "Test strategy per acceptance criterion" |
| AC-DETAIL | WP04, WP06, WP08 | plan "Test strategy per acceptance criterion" |
| AC-CONTENT | WP03, WP05, WP08 | plan "Test strategy per acceptance criterion" |
| AC-VERSION | WP03, WP04, WP07 | plan "Test strategy per acceptance criterion" |
| OQ-1 | WP03, WP07 | plan decision register |
| OQ-2 | WP06 | plan decision register |
| OQ-3 | none (withdrawn in the spec) | plan decision register |
| OQ-4 | WP05 | plan decision register |
| OQ-5 | WP03, WP04 | plan decision register |
| OQ-6 | WP04 | plan decision register |
| OD-1 (X-pure) | WP05, WP06, WP07 | three modules, six registrations (each committed with its module-creating red-first commit), no live test |
| OD-2 (Y) | WP03, WP04, WP07 | in-test required-example guard |
| OD-3 (first in byte order) | WP04, WP06, WP08 | duplicate work package ids; WP04 writes the rule into the published contract text (path description of getWorkPackageDetail, T019 step 4), WP06 and WP08 test the behaviour |
| OD-4 (scoped text pass) | WP02, WP03, WP04 | masked raw-text pass in leak_scan.py (WP02); no committed contract example holds an at-sign path (WP03, WP04): the scan's acceptance of one is proved by run-time-built tests in WP02 and the reader tests |
Orchestrator-owned steps (not work packages)
| Step | What | Where it is described |
|---|---|---|
| D-0 | request the release tag; assign #5625; claim comment. Fallback: if the tag is still missing when W-4 ends, the draft pull request is held (plan, W-7 notes) until the operator supplies it; nothing is pushed before | plan, Operator decisions (dispatch point D-0) |
| J-1 | JVM replay of the contract tree, after WP04 is approved and before WP05 is dispatched (see Dispatch order); defects fixed in WP03/WP04 follow-ups | plan W-2 and risk P-10 |
| W-1 | accept (only after real acceptance criteria and a verdict per criterion were authored with spec-kitty agent mission acceptance-verdict, never by hand-editing acceptance-matrix.json); lane consolidation (spec-kitty consolidate, --strategy rebase, --keep-branch); registration and wiring check; scope check over the real diff; move the #5625 issue-matrix row to a terminal verdict (fixed) with spec-kitty agent issue-verdict (all six rows were already set before the first approval, because the approval gate refuses unknown rows) | plan, Wrap-up checklist; quickstart |
| W-2 | JVM shake-out of the Contracts workflow jobs (the workflow runs only on pull requests and pushes to main); first run is J-1, this is the re-run for the CHANGELOG-only delta | plan W-2, risk P-10 |
| W-3 | dev-assist cleanup | plan W-3 |
| W-4 | aggregate adversarial squad, report-only, on the pre-rebase tree | plan W-4 |
| W-5 | history compaction, one commit per concern, preceded by the leading planning-artifacts and status-log commit (by path; status.events.jsonl compared byte for byte before and after) | plan W-5 |
| W-6 | rebase onto upstream including the 1.0.0 release commit (needs the tag) | plan W-6 |
| W-7 | final evidence, the only evidence cited as final; then the draft pull request | plan W-7 |
The aggregate order is: accept, consolidate, checks, aggregate squad, compaction, rebase, then the draft pull request. Evidence recorded before W-6 is pre-tag or pre-rebase.
<!-- END AUTHORED SECTIONS -->