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.0 release 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 --shortstat per 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 FLOORS fields 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 NotImplementedError or 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_refs are 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.

WPPlan concernTitlePhaseDepends onLane (computed)ModeSubtasksParallel
WP01IC-01Baseline and campsite (tidy-first)Phase 1 - Foundationnonelane-acode_changeT001 to T004 (4)[P] with WP02
WP02IC-02Tool extension: strict names, artifact-path class, 25 planted kindsPhase 1 - Foundationnonelane-bcode_changeT005 to T010 (6)[P] with WP01
WP03IC-03Contract slice A: listArtifacts and getArtifactContentPhase 2 - ContractWP02lane-acode_changeT011 to T016 (6)
WP04IC-04Contract slice B: getWorkPackageDetailPhase 2 - ContractWP03lane-acode_changeT017 to T022 (6)
WP05IC-06Reader foundation and the artifact readerPhase 3 - ReadersWP01, WP02, WP03lane-acode_changeT023 to T029 (7)
WP06IC-07Detail reader, matcher parity and the git change-state matrixPhase 3 - ReadersWP04, WP05lane-acode_changeT030 to T037 (8)
WP07IC-05Version, CHANGELOG and the pure 1.1 proof modulePhase 4 - Proof and corpusWP04, WP06lane-acode_changeT038 to T043 (6)
WP08IC-08Reality-check extension: floors, oracle, controls, fixturePhase 4 - Proof and corpusWP05, WP06lane-acode_changeT044 to T049 (6)
WP09IC-09Close-out evidence (pre-tag) and tracer assessmentPhase 5 - Close-outWP07, WP08lane-planningplanning_artifactT050 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)

LaneWork packagesDepends on laneSource
lane-bWP02nonecomputed by finalize-tasks into lanes.json
lane-aWP01, WP03, WP04, WP05, WP06, WP07, WP08lane-bcomputed by finalize-tasks into lanes.json
lane-planningWP09lane-acomputed 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 orderWhy 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.pyWP03, then WP04version, path keys and index entries serialise
contracts/mission-status/CHANGELOG.mdWP03 (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 WP07single-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.pyWP01, WP05, WP08campsite 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.pyWP01, WP05, WP06, WP08campsite, 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.

WPRed-first commitExtra gates beyond the common set
WP01none (behaviour-preserving campsite; declared exception; drop rule)identical test counts before and after (reality 577, payloads 157 at plan time)
WP02test_fixture_builder.py and test_leak_scan.py (33 kinds, predicate, mask); the three content/title kinds are regression controlsleak_scan.py over the existing tree exits 0; run_negative_cases.py (jvm/vacuum/oasdiff tags excluded)
WP03examples, path-map and enum-pin tests (enums=5 values=38)the ten Python checks over the tree
WP04examples (eight paths) and enum-pin tests (enums=7 values=43)the ten Python checks; WP02 x WP03/04 integration acceptance
WP05failing artifact-reader tests (against a skeleton module, each failing on its own assertion) plus the corpus smoke, with the registration pair in the same commitcollect 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
WP06failing work package identity tests (against a skeleton module) plus the corpus smoke, with the registration pair in the same commitparity 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
WP07failing 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
WP08failing corpus floors and pinned-fixture assertionsruntime budget (8 minutes limit, 6 minutes re-plan)
WP09none (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

IDWork package(s)
FR-001WP04, WP06
FR-002WP04, WP06
FR-003WP04, WP06
FR-004WP04, WP06
FR-005WP04, WP06
FR-006WP04, WP06
FR-007WP04, WP06
FR-008WP04, WP06
FR-009WP03, WP05
FR-010WP03, WP05
FR-011WP03, WP05
FR-012WP03, WP05
FR-013WP03, WP04, WP05
FR-014WP05
FR-015WP02, WP04, WP05
FR-016WP05, WP06, WP08
FR-017WP03, WP07
FR-018WP03, WP04, WP07
FR-019WP03, WP04, WP07
FR-020WP05, WP06, WP07
FR-021WP08
FR-022WP05, WP06
FR-023WP02, WP08
FR-024WP07

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

IDWork package(s)
NFR-001WP08
NFR-002WP05, WP06
NFR-003WP05, WP08
NFR-004WP02, WP08
NFR-005WP05, WP06, WP07
NFR-006WP01, WP05, WP06, WP07, WP08
NFR-007WP06, WP07

Constraints

IDWork package(s)
C-001WP03, WP04, WP07
C-002WP03, WP04, WP07
C-003WP05, WP09
C-004WP01, WP02, WP03, WP04, WP05, WP06, WP07, WP08, WP09
C-005WP02, 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

IDWork package(s)
SC-001WP03, WP04, WP07, WP09
SC-002WP07, WP09
SC-003WP08, WP09
SC-004WP08, WP09
SC-005WP08, WP09
SC-006WP08, WP09
SC-007WP07, WP09
SC-008WP07, 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

IDWork package(s)Basis
CL-1WP02, WP03, WP04, WP05, WP06, WP07spec Traceability table
CL-2WP02, WP03, WP04, WP05, WP06, WP07, WP08spec Traceability table
CL-3WP02, WP03, WP04, WP05spec Traceability table
CL-4WP02, WP04, WP05, WP06, WP08spec Traceability table
CL-5WP02, WP03, WP04, WP06operator 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-1WP03, WP04, WP05, WP06spec Traceability table (requirements that cite it)
AD-2WP03, WP04, WP05, WP06spec Traceability table (requirements that cite it)
AD-3WP04, WP06spec Traceability table (requirements that cite it)
AD-4WP03, WP04, WP05, WP06, WP07spec Traceability table (requirements that cite it)
AD-5WP03, WP04, WP05spec Traceability table (requirements that cite it)
AD-6WP03, WP04, WP05, WP08spec Traceability table (requirements that cite it)
AD-7WP03, WP04, WP05, WP06, WP07, WP08spec Traceability table (requirements that cite it)
AD-8WP03, WP04, WP05, WP06spec Traceability table (requirements that cite it)
AD-9WP03, WP04, WP05spec Traceability table (requirements that cite it)
AD-10WP02, WP03, WP04, WP05spec Traceability table (requirements that cite it)
AD-11WP03, WP05spec Traceability table (requirements that cite it)
AD-12WP04, WP05, WP06, WP08spec Traceability table (requirements that cite it)
AD-13WP04, WP06spec Traceability table (requirements that cite it)
AD-14WP03, WP04, WP05, WP06, WP07spec Traceability table (requirements that cite it)
AD-15WP02, WP05, WP06, WP08spec Traceability table (requirements that cite it)
AD-16WP03, WP04, WP07spec Traceability table (requirements that cite it)
AD-17WP02, WP03, WP04, WP05, WP06, WP07, WP08spec Traceability table (requirements that cite it)
AD-18WP02, WP04, WP05, WP06, WP07, WP08spec Traceability table (requirements that cite it)
AD-19WP02, WP03, WP04, WP05, WP08spec Traceability table (requirements that cite it)
AD-20WP04, WP06, WP07spec Traceability table (requirements that cite it)
AD-21WP03, WP04, WP05, WP06, WP07spec Traceability table (requirements that cite it)
AD-22WP03, WP05, WP06, WP07, WP08spec 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

IDWork package(s)Basis
AC-LISTWP03, WP05, WP08plan "Test strategy per acceptance criterion"
AC-DETAILWP04, WP06, WP08plan "Test strategy per acceptance criterion"
AC-CONTENTWP03, WP05, WP08plan "Test strategy per acceptance criterion"
AC-VERSIONWP03, WP04, WP07plan "Test strategy per acceptance criterion"
OQ-1WP03, WP07plan decision register
OQ-2WP06plan decision register
OQ-3none (withdrawn in the spec)plan decision register
OQ-4WP05plan decision register
OQ-5WP03, WP04plan decision register
OQ-6WP04plan decision register
OD-1 (X-pure)WP05, WP06, WP07three modules, six registrations (each committed with its module-creating red-first commit), no live test
OD-2 (Y)WP03, WP04, WP07in-test required-example guard
OD-3 (first in byte order)WP04, WP06, WP08duplicate 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, WP04masked 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)

StepWhatWhere it is described
D-0request 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 beforeplan, Operator decisions (dispatch point D-0)
J-1JVM replay of the contract tree, after WP04 is approved and before WP05 is dispatched (see Dispatch order); defects fixed in WP03/WP04 follow-upsplan W-2 and risk P-10
W-1accept (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-2JVM 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 deltaplan W-2, risk P-10
W-3dev-assist cleanupplan W-3
W-4aggregate adversarial squad, report-only, on the pre-rebase treeplan W-4
W-5history 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-6rebase onto upstream including the 1.0.0 release commit (needs the tag)plan W-6
W-7final evidence, the only evidence cited as final; then the draft pull requestplan 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 -->