Work Packages: mission-status-health-drift-ops-01M464D3
_Generated by finalize-tasks from wps.yaml. Do not edit directly._
ORCHESTRATOR STEPS (NOT WORK PACKAGES)
The sections below are orchestrator-owned and are not work packages: none has a WPxx id, none is dispatched to an implementer, none appears in wps.yaml or in the lane computation. They are carried here by hand because tasks.md is generated from wps.yaml, whose schema has no slot for them; a later finalize-tasks run regenerates this file and drops them (re-add them from the plan, sections "Baseline", "Implementation Concern Map (j)" and "Wrap-up checklist", and from the operator rulings of kitty-specs/mission-status-health-drift-ops-01M464D3/reviews/tasks.ruling.md). No mutating finalize-tasks is run once this block is in the file; finalize-tasks --validate-only is allowed. Numbering of the rulings cited here and in every prompt: the operator rulings of this phase are rulings 12, 13 and 14 (items 1, 2 and 3 of reviews/tasks.ruling.md; numbered 12 to 14 in tracer-design-decisions.md) and its orchestrator notes are notes 15, 16, 17 and 18; "ruling 1/2/3" never appears without this mapping, and a bare "plan-round ruling N" belongs to reviews/plan.ruling.md.
ORCHESTRATOR STEP 0: before any dispatch (plan, Baseline section, steps 1 to 4)
No work package is dispatched before the record of this step exists in tracer-approach.md (IC-02 beside IC-01 included), so every red a work package meets can be binned against a measured base.
1. D-0 sync. Fetch, bring the planning branch (issue-5776-mission-status-contract-health-drift-ops, the target_branch of lanes.json; not the mission-lane branch kitty/mission-<slug> of Step PD) level with the new origin/main tip by a merge (history is compacted and rebased at W-5 and W-6), re-run the symbol check of the quickstart (it needs only the standard library, so it is the one command that may run with either interpreter before the synced environment of item 2 exists; the hygiene counts of Step PD item 6 are not covered by that allowance and need <synced-python>), classify the upstream delta on the files of research R-1, and record git rev-parse HEAD. 2. Synced environment. Obtain ruff and the test extras with UV_PROJECT_ENVIRONMENT=<scratch>/venv uv sync --frozen --all-extras into a scratch environment (or by the operator); never uv run in the hand-built checkout .venv. <synced-python> is defined here, once: the interpreter <scratch>/venv/bin/python of this environment (and <synced-ruff> is <scratch>/venv/bin/ruff). Substitution rule, repeated in the Environment note of every code work package prompt, WP01 to WP09 (WP10 carries its own "Interpreter and floor" paragraph and runs no cutover-guard), and in quickstart.md: every .venv/bin/python and .venv/bin/ruff written in a command of a work package prompt, of quickstart.md or of a Step below reads <synced-python> and <synced-ruff> (and, for the CLI, <synced-spec-kitty> as defined next); the hand-built .venv/bin/python, which lacks respx, ruff and mypy, is used for no gate command (and <synced-spec-kitty> is <scratch>/venv/bin/spec-kitty, the CLI of the same environment; its first line names <synced-python>, so the import check below is its resolves-into-the-workspace check and the PYTHONPATH rule applies to it unchanged). Orchestrator note 18: every .venv/bin/spec-kitty written in a gate command that runs from a lane workspace, which is the cutover-guard command of the code work packages and of quickstart.md, reads <synced-spec-kitty>, because a lane workspace does not carry the checkout .venv (it is ignored by git); the orchestrator's own commands in this file run from the repository root and use the CLI as the orchestrator has it, and the bare spec-kitty of the Implementation command sections is the dispatch command, unchanged. Record its path (written with the <scratch> placeholder) in the Step 0 record, so a work package leg and the Step 0 baseline leg use the same interpreter. Import check before the first leg (here from the checkout root; a worker repeats it from its lane workspace root): <synced-python> -c "import specify_cli; print(specify_cli.__file__)" must print a path inside the src/ of the workspace under test; if it prints another tree (the editable install points at the checkout where the environment was synced), run every command with PYTHONPATH=<workspace>/src in front and repeat the check, and bin a red met before that fix as stale install. Run the plan-time baseline commands again in it, plus <synced-ruff> check ., <synced-ruff> format --check ., <synced-ruff> check --select TID251 ., the named census files (roster-derived list and heavy files, as single named files), the layer-rules files (tests/architectural/test_layer_rules.py, tests/architectural/test_pyproject_shape.py) and the archive-freeze file (tests/architectural/test_archive_root_byte_identical.py). The 17 plan-time errors must be gone; if any survives, report it in a tracker issue first (Pre-existing Failure Reporting Rule). Then run the three architectural battery legs on the unchanged D-0 tip with <synced-python> (operator ruling 14 makes the full battery a binding local gate of WP03, WP07 and WP08, an override of the charter rule NO_FULL_HEAVY_SUITES_IN_MISSION for exactly those runs; orchestrator note 17 of reviews/tasks.ruling.md, extending ruling 14, applies the same gate and the same override to this orchestrator baseline run of the same three legs on the unchanged D-0 tip, which the ruling's own text does not name): the three commands are written out in the battery section of tasks/WP03-project-vertical.md (leg architectural-fast, and architectural-heavy shards 1/2 and 2/2, all from the repository root, each a background command with an exit-code file, awaited with the harness's permitted wait primitive, an until-loop monitor on the exit-code file, never a foreground sleep loop). Record per leg the command, passed, failed and skipped counts, exit status and wall time; every red is binned here (pre-existing, environment, stale install or venv) so that a work package can tell a base red from an introduced one. Wait-primitive probe (orchestrator note 16 of reviews/tasks.ruling.md, once): start a trivial background command (nohup sh -c 'sleep 5; echo $? > <scratch>/probe.exit' > <scratch>/probe.log 2>&1 &) and await it with the until-loop monitor primitive of the harness (the one the legs will use, from the same kind of seat a work package worker has); record in the Step 0 record one line, wait-primitive: permitted or wait-primitive: not permitted. If it is not permitted, or a worker reports a denied wait, the orchestrator runs the three legs for WP03, WP07 or WP08 itself on the lane tip after the worker's hand-off (same commands, same interpreter, binned the same way, the result appended to the hand-off record), which is the note 16 fallback and falls under the same charter override by note 17 extending ruling 14. 3. Main CI record, per leg. For EACH battery leg, the latest main run conclusion and duration of its own job: architectural fast gates (ratchet/census, always-on) (timeout 10 minutes), architectural battery (heavy, code-scoped) 1/2 and architectural battery (heavy, code-scoped) 2/2 (timeout 30 minutes each), read per matrix leg, never as one architectural-heavy figure; the same for the four files the legs deselect, in their own jobs (terminology guard (fast, always-on), layer rules / import direction (fast, always-on), archive freeze (fast, always-on)); and the median duration of the last five successful main runs of tests (corpus-blocking) (10-minute timeout) and tests (contract tools) (15-minute timeout): the baseline of the NFR-001 gain bound. Comparison rule (orchestrator note 15 of reviews/tasks.ruling.md, within ruling 14): the battery legs a work package runs locally are compared with the local run of the same legs on the unchanged D-0 tip (item 2: same commands, same interpreter, no CI collect_universe_prestep), and that comparison is what bins a red. The per-leg main-CI durations of this item are recorded for information and for sizing the local run only; they carry no pass rule, and no local wall time is judged against them. 4. Record. Append all of it to tracer-approach.md (add-only) under the heading line ## Record: Step 0 (exactly this heading; the grep gate of Step PD item 4 searches for it), commit it add-only on the planning branch with spec-kitty safe-commit, and reach the lanes by Step PD below (a record that exists only on the planning branch is not yet readable by a worker). Also at D-0: assign #5776 to the Human-in-Charge and post the claim comment naming the Mission slug and mid8. 5. Issue-matrix rows (analyze finding P1). The eight rows of issue-matrix.json were unknown placeholders; in the tasks phase they are set with spec-kitty agent issue-verdict: #5776 in-mission, and the seven cited issues (#5528, #5531, #5533, #5558, #5578, #5581, #5625) not-applicable, each with an evidence reference. Verify this before the first approval with a read of issue-matrix.json (jq or python, read-only): no row is unknown. The terminal #5776 verdict is set only at W-4 (c), after the squad lands. Never hand-edit the matrix; a wrong row is corrected with agent issue-verdict again.
ORCHESTRATOR STEP PD: before EVERY dispatch (operator ruling 13; plan Chokepoint sequencing)
The records of Step 0, of J-1 and of every hand-off are appended by the orchestrator on the planning branch (issue-5776-mission-status-contract-health-drift-ops), while code workers run in lane workspaces that read them. Nothing else moves those commits into a lane, so the orchestrator does it, in this order, for each dispatch of spec-kitty agent action implement WPxx --agent claude (the command named in the Implementation command section of every prompt; it creates the lane workspace if needed and moves the work package to in progress, and is the only implement command this block names: spec-kitty implement is the internal workspace allocator it calls, spec-kitty implement --help says it is not the user-facing path) that starts or resumes a work package (steps 1 and 2 before the command; steps 3 and 4 against the workspace it creates or resumes, before the worker is started; see the timing note of step 3):
1. Commit the record add-only on the planning branch (spec-kitty safe-commit; never an edit of an existing line, never status.events.jsonl, meta.json, status.json or lanes.json). Fixed record headings (one heading line per record, appended by the orchestrator, so that every gate below is a mechanical grep; a re-hand-off after a rejection or a repeated J-1 replay appends a NEW heading, add-only, so a record may carry several headings, and every gate below reads the LAST matching heading, for example grep -n "^## Record: Hand-off WP03 (" tracer-approach.md | tail -n 1, whose hash must equal the work package tip dispatched from): in tracer-approach.md, ## Record: Step 0, ## Record: Hand-off WPxx (<commit hash>) (one per hand-off of a work package, normally one, more after a rework; the hash being the work package tip that hand-off describes) and ## Record: Hygiene counts (item 6); in tracer-design-decisions.md, ## Record: J-1 (<commit hash>) (the commit of the final contracts/ change). The hand-off of WP06 and the J-1 record each carry a line contracts-commit: <hash>, and the line under the last heading of each must carry the same hash (T033; Step J-1). 2. Fast-forward the mission-lane branch kitty/mission-<slug> (here kitty/mission-mission-status-health-drift-ops-01M464D3, the mission_branch of lanes.json; a different branch from the planning branch) to the planning branch tip, creating it from the planning branch tip if it does not yet exist. Lanes are parented off the mission-lane branch, so a stale one hands a new lane a base without the record. A fast-forward only: git fetch . <planning branch>:<mission-lane branch> refuses anything else; a refusal is reported, not forced. 3. Merge the planning branch into the lane workspace the dispatch will use (a merge, not a rebase, not a cherry-pick), resolved in the workspace. Timing: the workspace of a lane is created by spec-kitty agent action implement WPxx --agent claude, so on the FIRST dispatch of a lane (WP01 for lane-a, WP02 for lane-b) steps 3 and 4 run right after that command has created the workspace and before the worker is started (step 2 comes before the command; the grep of step 4 still gates the worker; the worker's own run of the same command resumes the workspace); step 3 as a merge applies only when the workspace already exists, and a workspace freshly created from the fast-forwarded mission-lane branch already holds the record, so the merge is then a no-op; code lanes never write under kitty-specs/, so the merge cannot conflict on a record. The merge commits are history noise that W-5 compacts. 4. Grep the record inside the lane workspace before the worker is started, for the exact heading lines of item 1 (for example grep -n "^## Record: Step 0" tracer-approach.md and grep -n "^## Record: Hand-off WP03 (" tracer-approach.md): the heading ## Record: Step 0 for every work package, and additionally, as the pointer in each work package prompt lists: WP03 ## Record: Hand-off WP01 ( and ## Record: Hand-off WP02 (; WP04 ## Record: Hand-off WP03 (; WP05 ## Record: Hand-off WP04 (; WP06 ## Record: Hand-off WP05 (; WP07 ## Record: J-1 ( in tracer-design-decisions.md and ## Record: Hand-off WP06 (, with the same contracts-commit: <hash> in both, tested on the value: a=$(grep "^contracts-commit: " tracer-approach.md | tail -n 1); b=$(grep "^contracts-commit: " tracer-design-decisions.md | tail -n 1); [ -n "$a" ] && [ "$a" = "$b" ] && echo OK prints OK, run from the mission directory kitty-specs/<mission-slug>/ of the lane workspace (both last lines non-empty and equal) (the last such line of each file is the one under its last heading, because records are appended add-only; no OK means a stale record or a missing line, and the work package is not dispatched); WP08 ## Record: Hand-off WP07 (; WP09 ## Record: Hand-off WP03 (, ... WP07 ( and ... WP08 (; WP10 (in the planning checkout) ## Record: J-1 (, ## Record: Hygiene counts and ## Record: Hand-off WP01 ( to ... WP09 (. Where a heading occurs more than once, the last one counts (see item 1). A missing heading means do not start the worker (the existence of the record on the planning branch is not the test). 5. WP10 (lane-planning) works in the planning branch itself (a planning_artifact package in the repository root checkout, no lane worktree): nothing is merged for it, and the grep of step 4 runs in that checkout. It appends to the files the orchestrator appended on the same branch, so there is no append-versus-append conflict, provided the orchestrator appends nothing while it is in progress (already the rule). 6. Before dispatching WP10, record the two hygiene counts under the heading ## Record: Hygiene counts in tracer-approach.md (add-only, committed on the planning branch): exempt-count: <n>, the files= value of the script of the section "Hygiene scan of the Mission directory" in tasks/WP10-closeout-evidence.md run unmodified from the repository root with <synced-python>, and whole-directory-count: <m>, the files= value of the same script with the W-5 variant (the exemption removed; m is larger than n, it counts reviews/ and the status log; both runs print their problems= value, which is read, not required to be zero for the W-5 variant). W-5 and W-7 use m as their floor, WP10 uses n as its floor.
finalize-tasks --refresh-planning-commit is NOT used, at D-0, after J-1 or before WP10: it advances planning_commit_sha by regenerating tasks.md (which would drop this block). The D-0 merge of origin/main into the planning branch makes the planning_commit_sha pinned in lanes.json (4572d1df710561f61ebcaf9c9791749a1cd965ee at tasks time) stale, and so does every record commit; that staleness is handled by the merges of steps 2 and 3, not by finalize. The worker prompts carry a one-line pointer to this step naming every record that work package reads.
ORCHESTRATOR STEP J-1: between WP06 and WP07 (FR-028)
Once WP06 is approved, on the lane tip: replay on a JVM-capable machine every job of .github/workflows/contracts.yml (verify-pins, python-checks, validate-bundle, resolver-parity, lint, breaking-change, release-dry-run, negative-tests, contracts-gate) over the final shapes, with TMPDIR outside any directory whose ancestors hold a .git; add the camel-case enum plant on a scratch copy and the two breaking_check.py runs with their scratch baselines. Record in tracer-design-decisions.md, under the heading line ## Record: J-1 (<commit hash>) (the commit of the final contracts/ change), the line contracts-commit: <hash> (the same hash as the one in the last WP06 hand-off record, compared by the value test of Step PD item 4) and one line per job (nine lines) with its conclusion. WP07 is not dispatched before that record exists in the WP07 lane workspace (commit it add-only, then Step PD: the grep runs inside the lane workspace, not on the planning branch), or the operator accepts the open risk P-9. A defect in an approved work package returns by a rejection transition; the replay repeats for any later change to contracts/mission-status/, and each repeat appends a new ## Record: J-1 (<commit hash>) heading, add-only, whose contracts-commit line is the one compared. Reader work packages WP07 and WP08 may report a contract defect the same way.
ORCHESTRATOR STEPS W-1 to W-7: wrap-up summary (after every work package is approved; plan "Wrap-up checklist")
- W-1 accept (after the acceptance verdicts are authored with
spec-kitty agent mission acceptance-verdict), then local lane consolidation (--strategy rebase, dry run first), then the registration and wiring check and the scope and add-only checks over the real diff. Expected: the verdict-terminality merge gate prints a warning for the#5776row (the ruled order; not a defect). - W-2 J-1 confirmation:
git diff --exit-code <J-1 commit> HEAD -- contracts/mission-statusis clean. - W-3 dev-assist cleanup (behaviour-preserving, own commit).
- W-4 issue-verdict evidence, then the aggregate adversarial squad (report-only, pre-rebase tree), then the terminal
#5776verdict after the squad lands. - W-5 hygiene scan (before compaction):
<synced-python> -I -over the script of the section "Hygiene scan of the Mission directory" intasks/WP10-closeout-evidence.md, run from the repository root with ONE change: the exemptionrel.startswith("reviews/") or rel in ("status.events.jsonl", "status.json")is removed from the skip condition (leavef.is_dir()), soreviews/and the status log are scanned too, andFLOORis thewhole-directory-countof the## Record: Hygiene countsrecord (Step PD item 6), never the smallerexempt-count(thefiles >= FLOORassertion is the files>0 guard against a vacuous pass from a wrong directory, and it must be as tight as the scan it guards). Its output is read by a person: a hit quoting a leak pattern as an example (a review file) or the no-reply attribution address of the status log is allowed and noted; any other hit is handled by where it lies, before the step is closed: in a file that is new on this branch relative to the merge base (the tracer files, the other Mission planning files, the work package prompts) the line is fixed in the file at W-5, before compaction (the add-only rule is measured over the diff against the merge base at W-7, where the compacted history shows the corrected text only); in a file already on the merge base, instatus.events.jsonl(byte-identical, never edited) and instatus.jsonthe hit is recorded in the W-5 note and ruled by the person reading it, never edited. Then history compaction: first commit the Mission planning artifacts and status log built by path (worded without the word feature;status.events.jsonlbyte-identical), then one commit per code concern. - W-6 rebase onto upstream
main(fetch first; keep both sides of a CHANGELOG conflict; re-cite the J-1 commit). - W-7 final evidence (the only evidence cited as final): the FR-022 baseline record, the J-1 record, the quickstart symbol check, floors against their re-measures, the named gate files, ruff, TID251,
cutover-guard, scope and add-only checks on the rebased tree, the hygiene scan (the whole-directory scan defined at W-5, with the same floor, rerun on the rebased tree, same reading and fixing rule), the NFR-001 pass rule and the measured minima and margins of every timed bound; then the draft PR targetingmainand the closing tracker comment.
Chokepoint sequencing statement. Shared files are serialised by construction, never concurrent: (1) openapi.yaml, the four _index.yaml, enum_pins.json, test_mission_status_examples.py, test_enum_pin_check.py: WP03, WP04, WP05; (2) CHANGELOG.md: WP03 to WP06; (3) the built-in-corpus-suite command in packs.yml, _CORPUS_MARKED_MODULES and the contract_tools list of ci-router.yml: WP03, WP07, WP08, each appending its own entries in sorted position, and WP09 for the one ci-router.yml entry **/specify_cli/audit/classifiers/status_json.py (the oracle module is the first importer of that file; orchestrator note 19 of reviews/tasks.ruling.md, analyze finding C1; WP09 touches neither packs.yml nor _CORPUS_MARKED_MODULES) (the registration pair in the commit that creates the module; the router globs in the commit that first imports the src/ file, which is the module-creating commit only if its stub or test module imports src/); (4) the 1.1 proof module: WP01, WP03, WP06; (5) the payload helper and the reality module: WP03, then WP09. One work package at a time touches any of them. Code work packages never write under kitty-specs/; the orchestrator appends their hand-off records to the tracer files add-only between dispatches (never while WP10 is in progress) and moves them into the next lane workspace by Step PD.
C-001 (operator rulings bind) is governance-only: it is carried by the orchestrator, which applies every ruling file under reviews/ (spec.ruling.md, plan.ruling.md, tasks.ruling.md) and cites the one that governs a step, and it is listed in WP10's Requirement Refs beside C-004 and C-005 for traceability. SC-009 (the J-1 record and the W-2 diff command) is realised by Step J-1, by W-2 and by WP06's hand-off of the exact commit of the final contracts/ change (T033), and is listed in WP06's Requirement Refs.
ORCHESTRATOR EXPECTATION: lanes and the parallel window
Lanes are computed, not chosen. Expected, and as computed by finalize-tasks: lane-b holds WP02 alone; lane-a holds WP01, WP03, WP04, WP05, WP06, WP07, WP08, WP09 in dependency order and depends on lane-b; lane-planning holds WP10 (planning_artifact) and depends on lane-a. The one parallel window of the Mission is WP01 beside WP02 (they share no file); everything else is sequential, one work package at a time in the lane-a workspace; the tooling merges WP02's approved tip into lane-a when WP03 starts.
Work Package WP01: Re-measurement and campsite (tidy-first)
Dependencies: None Requirement Refs: FR-012, FR-013, FR-015, NFR-001, NFR-002, NFR-006, NFR-009, SC-003 Plan Concerns: IC-01 Owned Files: tests/contract/test_mission_status_contract_1_1.py Subtasks: T001, T002, T003, T004, T005 Prompt: tasks/WP01-resync-remeasure-campsite.md
Work Package WP02: Tool extension: six strict names and plants (FR-027)
Dependencies: None Requirement Refs: FR-027, NFR-004, NFR-006, C-003, SC-005 Plan Concerns: IC-02 Owned Files: contracts/tools/fixture_builder.py, contracts/tools/negative_cases.json, tests/contract/test_fixture_builder.py, tests/contract/test_leak_scan.py, tests/contract/test_run_negative_cases.py Subtasks: T006, T007, T008, T009 Prompt: tasks/WP02-tool-extension.md
Work Package WP03: Project vertical: contract, memo, builder and ratchet edits
Dependencies: WP01, WP02 Requirement Refs: FR-001, FR-002, FR-003, FR-004, FR-005, FR-006, FR-007, FR-015, FR-023, FR-024, FR-025, FR-029, NFR-006, NFR-009, SC-001 Plan Concerns: IC-03 Owned Files: contracts/mission-status/schemas/Project.yaml, contracts/mission-status/schemas/ProjectHealth.yaml, contracts/mission-status/examples/Project.example.yaml, contracts/mission-status/examples/Project.all-null.yaml, contracts/mission-status/examples/Project.schema-drift.yaml, contracts/mission-status/paths/project.yaml, contracts/mission-status/schemas/_index.yaml, contracts/mission-status/examples/_index.yaml, contracts/mission-status/CHANGELOG.md, contracts/tools/enum_pins.json, tests/contract/_mission_status_memo.py, tests/contract/_mission_status_project.py, tests/contract/test_mission_status_project.py, tests/contract/_mission_status_payloads.py, tests/contract/test_mission_status_payloads.py, tests/contract/test_mission_status_reality.py, tests/contract/test_mission_status_examples.py, tests/contract/test_enum_pin_check.py, tests/contract/test_mission_status_contract_1_1.py, .github/workflows/packs.yml, tests/architectural/test_ci_corpus_trigger_completeness.py, .github/workflows/ci-router.yml Subtasks: T010, T011, T012, T013, T014, T015, T016, T017 Prompt: tasks/WP03-project-vertical.md
Work Package WP04: Contract slice D: the drift read
Dependencies: WP03 Requirement Refs: FR-008, FR-009, FR-010, FR-011, FR-012, FR-013, FR-014, FR-015, FR-023, NFR-006, SC-003 Plan Concerns: IC-04 Owned Files: contracts/mission-status/paths/drift.yaml, contracts/mission-status/parameters/DriftMissionId.yaml, contracts/mission-status/schemas/DriftReport.yaml, contracts/mission-status/schemas/DriftFinding.yaml, contracts/mission-status/schemas/LaneComparison.yaml, contracts/mission-status/schemas/DriftKind.yaml, contracts/mission-status/schemas/DriftSeverity.yaml, contracts/mission-status/schemas/DriftAuthority.yaml, contracts/mission-status/schemas/DriftSide.yaml, contracts/mission-status/schemas/DriftRemedy.yaml, contracts/mission-status/schemas/DriftRefusalCode.yaml, contracts/mission-status/schemas/DriftRefusal.yaml, contracts/mission-status/responses/DriftMissionNotFound.yaml, contracts/mission-status/responses/DriftScanUnreadable.yaml, contracts/mission-status/examples/DriftReport.clean.yaml, contracts/mission-status/examples/DriftReport.populated.yaml, contracts/mission-status/examples/DriftReport.corrupt-json.yaml, contracts/mission-status/examples/DriftReport.truncated.yaml, contracts/mission-status/examples/DriftRefusal.mission-not-found.yaml, contracts/mission-status/examples/DriftRefusal.scan-unreadable.yaml, contracts/mission-status/openapi.yaml, contracts/mission-status/schemas/_index.yaml, contracts/mission-status/examples/_index.yaml, contracts/mission-status/parameters/_index.yaml, contracts/mission-status/responses/_index.yaml, contracts/mission-status/CHANGELOG.md, contracts/tools/enum_pins.json, tests/contract/test_mission_status_examples.py, tests/contract/test_enum_pin_check.py Subtasks: T018, T019, T020, T021, T022 Prompt: tasks/WP04-contract-slice-drift.md
Work Package WP05: Contract slice O: the Ops read
Dependencies: WP04 Requirement Refs: FR-016, FR-017, FR-018, FR-019, FR-020, FR-021, FR-023, NFR-006, SC-004 Plan Concerns: IC-05 Owned Files: contracts/mission-status/paths/ops_invocations.yaml, contracts/mission-status/parameters/OpsProfile.yaml, contracts/mission-status/schemas/OpsInvocationPage.yaml, contracts/mission-status/schemas/OpsInvocation.yaml, contracts/mission-status/schemas/OpsModeOfWork.yaml, contracts/mission-status/schemas/OpsInvocationStatus.yaml, contracts/mission-status/schemas/OpsOutcome.yaml, contracts/mission-status/schemas/OpsClosedBy.yaml, contracts/mission-status/schemas/OpsEvidence.yaml, contracts/mission-status/schemas/OpsEvidenceKind.yaml, contracts/mission-status/schemas/OpsRefusalCode.yaml, contracts/mission-status/schemas/OpsRefusal.yaml, contracts/mission-status/responses/OpsUnreadable.yaml, contracts/mission-status/examples/OpsInvocationPage.first.yaml, contracts/mission-status/examples/OpsInvocationPage.last.yaml, contracts/mission-status/examples/OpsInvocationPage.empty.yaml, contracts/mission-status/examples/OpsInvocation.open.yaml, contracts/mission-status/examples/OpsInvocation.closed-by-agent.yaml, contracts/mission-status/examples/OpsInvocation.closed-by-doctor-sweep.yaml, contracts/mission-status/examples/OpsInvocation.evidence-repo-path.yaml, contracts/mission-status/examples/OpsInvocation.evidence-url.yaml, contracts/mission-status/examples/OpsInvocation.evidence-url-redacted.yaml, contracts/mission-status/examples/OpsInvocation.evidence-text.yaml, contracts/mission-status/examples/OpsInvocation.evidence-text-redacted.yaml, contracts/mission-status/examples/OpsInvocation.evidence-null.yaml, contracts/mission-status/examples/OpsRefusal.ops-unreadable.yaml, contracts/mission-status/openapi.yaml, contracts/mission-status/schemas/_index.yaml, contracts/mission-status/examples/_index.yaml, contracts/mission-status/parameters/_index.yaml, contracts/mission-status/responses/_index.yaml, contracts/mission-status/CHANGELOG.md, contracts/tools/enum_pins.json, tests/contract/test_mission_status_examples.py, tests/contract/test_enum_pin_check.py Subtasks: T023, T024, T025, T026, T027 Prompt: tasks/WP05-contract-slice-ops.md
Work Package WP06: Contract proof edits (frozen copies, qualified names, scope data)
Dependencies: WP05 Requirement Refs: FR-022, FR-023, FR-027, FR-028, FR-029, NFR-006, NFR-007, C-002, C-003, C-006, C-007, C-008, SC-006, SC-008, SC-009 Plan Concerns: IC-06 Owned Files: tests/contract/test_mission_status_contract_1_1.py, contracts/mission-status/CHANGELOG.md, tests/contract/fixtures/mission_status_pre_slice/schemas/Project.yaml, tests/contract/fixtures/mission_status_pre_slice/examples/Project.example.yaml, tests/contract/fixtures/mission_status_pre_slice/paths/project.yaml Subtasks: T028, T029, T030, T031, T032, T033 Prompt: tasks/WP06-contract-proof-edits.md
Work Package WP07: Drift reader and its tests
Dependencies: WP06 Requirement Refs: FR-008, FR-009, FR-010, FR-011, FR-012, FR-013, FR-014, FR-015, FR-024, FR-026, NFR-002, NFR-003, NFR-005, NFR-006, NFR-007, C-009, SC-003, SC-010 Plan Concerns: IC-07 Owned Files: tests/contract/_mission_status_drift.py, tests/contract/test_mission_status_drift.py, .github/workflows/packs.yml, tests/architectural/test_ci_corpus_trigger_completeness.py, .github/workflows/ci-router.yml Subtasks: T034, T035, T036, T037, T038, T039, T040, T056 Prompt: tasks/WP07-drift-reader.md
Work Package WP08: Ops reader and its tests
Dependencies: WP07 Requirement Refs: FR-016, FR-017, FR-018, FR-019, FR-020, FR-021, FR-024, FR-026, NFR-002, NFR-003, NFR-004, NFR-005, NFR-006, NFR-008, C-009, SC-004, SC-010 Plan Concerns: IC-08 Owned Files: tests/contract/_mission_status_ops.py, tests/contract/test_mission_status_ops.py, .github/workflows/packs.yml, tests/architectural/test_ci_corpus_trigger_completeness.py, .github/workflows/ci-router.yml Subtasks: T041, T042, T043, T044, T045, T046 Prompt: tasks/WP08-ops-reader.md
Work Package WP09: Oracles and the reality extension
Dependencies: WP07, WP08 Requirement Refs: FR-025, FR-024, NFR-001, NFR-002, NFR-003, NFR-004, NFR-006, NFR-009, SC-002, SC-004, SC-005, SC-007 Plan Concerns: IC-09 Owned Files: tests/contract/_mission_status_oracles.py, tests/contract/test_mission_status_reality.py, tests/contract/_mission_status_payloads.py, tests/contract/fixtures/mission_status_health_drift_ops_expected.json, .github/workflows/ci-router.yml Subtasks: T047, T048, T049, T050, T051, T052 Prompt: tasks/WP09-oracles-reality.md
Work Package WP10: Close-out evidence, pre-rebase
Dependencies: WP09 Requirement Refs: NFR-006, C-001, C-004, C-005 Plan Concerns: IC-10 Owned Files: kitty-specs/mission-status-health-drift-ops-01M464D3/tracer-approach.md, kitty-specs/mission-status-health-drift-ops-01M464D3/tracer-design-decisions.md, kitty-specs/mission-status-health-drift-ops-01M464D3/tracer-tooling-friction.md Subtasks: T053, T054, T055 Prompt: tasks/WP10-closeout-evidence.md