Task: Health review 2 — sprint 22 mid-sprint analysis

Table of Contents

This page documents a task in the Open sprint 22 story. It captures the goal, current status, acceptance, and any notes or results.

Goal

System 2 health review of sprint 22 at day 4, triggered by an observed drift symptom: several worktrees show STARTED task activity on stories whose sprint.org=/=story.org state is still BACKLOG. Assess whether that symptom is isolated or systemic, alongside the sprint's other four health dimensions.

Status

Field Value
State DONE
Parent story Open sprint 22
Now Complete.
Waiting on Nothing.
Next Fix the state-drift stories flagged below; consider a sprint scope cut.
Last touched 2026-07-05

Acceptance

Plan

(Implementation strategy. Written when work starts; key decisions are distilled into the parent story's * Decisions at close, but the plan itself stays — it is the historical record of what we did.)

Notes

PRs

PR Title
#1444 [agile] Sprint 22 health review 2 + ccache support + state-drift fixes

Review

# Comment summary File Decision Notes
1 Stale Now/Next narrative text on 3 stories flipped to STARTED fix_orphan_docs_and_tag_taxonomy, codegen-unification-blockers, qt-upgrade-6.9 story.org Accepted Fixed in c005d5a98; also fixed commission_party_status which had the same issue
2 Commit message claims stories "flagged by health review 2" but fixes a different set; 3/5 flagged stories remain drifted task_health_review_2.org Accepted Added follow-up note in c005d5a98 clarifying scope: only party_status overlaps; book/purpose_type/composite-hierarchy-widgets need fixing from their own worktrees
3 ccache wrapper change is comment-only; PR summary phrasing overstates it build/scripts/compiler_cache_wrapper.sh Declined Minor nit, not worth a follow-up commit

Result

Review on 2026-07-05 (day 4 of 7)

Goal alignment

Mission: "Continue commissioning the ores.refdata entity library and correcting codegen C++ generation drift, carrying postponed sprint 21 stories." Two goals in practice: (1) entity commissioning (Qt/shell/CLI/manual per entity), (2) codegen drift correction.

Most active work maps cleanly to goal (1): currency, counterparty, party_status, book, purpose_type are all commission-epic stories. Goal (2) has one active story (composite hierarchy Qt widgets) but its large backlog (refactor_codegen_cpp, codegen-unification-blockers, codegen_ci_zero_diff, codegen_safety_guardrails — none STARTED) is untouched this sprint despite being called out explicitly in the mission. The market-data epic (synthetic data collections) is large and active but only tangentially related to either stated goal — it is carried sprint-20/21 momentum, not new-to-sprint-22 scope.

The most serious finding here isn't miscoverage of a goal, it's invisible coverage: Commission: business_day_convention_type (bright_faraday worktree, task_state=DONE per fleet) has no story or task document reachable from main — compass show fails to resolve both its story and task UUIDs even after a fresh index rebuild. This work legitimately serves goal (1) but is entirely unaccounted for in sprint tracking; if that worktree is lost or its branch abandoned, the work and the decision trail behind it disappear with it.

Goal Coverage Notable stories Verdict
Entity commissioning Broad but shallow currency (STARTED, 16/18), counterparty (STARTED, 3/7), party_status/book/purpose_type (drifted STARTED, see below), business_day_convention_type (untracked) AMBER
Codegen drift correction Named in mission, not worked refactor_codegen_cpp (19 tasks, 6 done, BACKLOG all sprint), codegen-unification-blockers (15 tasks, 8 done, BACKLOG all sprint) RED

Sprint load

Metric Value Target Status
Commits so far 218 ≤300
Elapsed days 4 (day 4 of 7, partial)
Commits/day (full days 2026-07-02..04) 69.3 (34, 114, 60)
Commits/day (today, partial) 10 so far
Projected close (3 remaining days × full-day avg) ~425 ≤300 GREEN / ≤400 AMBER RED
Projected close (3 remaining days × overall avg 54.5/day) ~381 ≤300 GREEN / ≤400 AMBER AMBER

Day 3 (114 commits) was a clear outlier — more than 3x day 1's rate. Whichever projection is used, the sprint is trending over its 300-commit target; the only question is by how much. This is not a one-off spike: it lines up with the same period the drifted stories below started accumulating undocumented WIP, consistent with a sprint that took on more concurrent work than its own paperwork could keep up with.

PR velocity

45 PRs merged since sprint start (2026-07-02) — 12 on day 1, 15 on day 2, 14 on day 3, 4 so far on day 4. That is a strong raw throughput, comfortably above the ≥1/day floor.

But raw merge count hides a WIP problem: of the 10 fleet worktrees, 7 have no open PR at all, and several are carrying large unmerged/ unsynced deltas — clever_dijkstra (2 ahead, 29 behind), jolly_knuth (0 ahead, 27 behind), solid_dirac (17 ahead, 16 behind), eager_maxwell (10 ahead, 16 behind). A branch 27-29 commits behind main with no PR in flight is not "about to merge" — it is stale WIP that will cost a non-trivial rebase whenever it does surface.

Metric Value Notes
PRs merged since sprint start 45 ~13/day average
Worktrees with no open PR 7 / 10 High — most in-flight work has no PR yet
Worktrees >15 commits behind main 4 / 10 clever_dijkstra, jolly_knuth, solid_dirac, eager_maxwell
Verdict   AMBER — good throughput, but WIP is piling up behind it

Story and task balance

Story-level DONE ratio across all 51 stories in sprint 22: 14 DONE / 51 total = 0.27 — below the 0.3 RED threshold.

Five stories with real, active branch work show a STARTED task but a story-level state of BACKLOG and "Now: Not yet started" — the exact symptom that triggered this review:

Story Story state (file) Task state (fleet) Tasks (done/total) Notes
Commission: party_status BACKLOG STARTED (Sync Qt codegen) 4/11 Task file itself still says BACKLOG — even the task doc disagrees with the active worktree
Commission: book BACKLOG STARTED (Sync C++ core codegen) 0/0 (no task docs at all) Story undecomposed; task UUID unresolvable from main — exists only in clever_dijkstra's local branch
Commission: purpose_type BACKLOG STARTED (Verify Qt UI) 0/0 (no task docs at all) Same pattern as book — undecomposed, task invisible from main
Composite child-entity/hierarchy Qt widgets BACKLOG STARTED (Design child-entity facet) 0/3 Task doc exists and is itself still BACKLOG
Commission: business_day_convention_type not in sprint.org at all DONE (per fleet) unknown Entire story/task pair unresolvable from main; only trace is the fleet's live read of bright_faraday's local branch

Separately, one story drifted the other direction: codegen-sql- variability-marketdata's own story.org says State=DONE, "All four tasks complete; PR pending", but sprint.org still lists it BACKLOG — completed work not yet reflected upward.

Follow-up (PR #1444): only Commission: party_status from the five above was fixed in this checkout, plus five unrelated stories this review didn't flag (book_status, refactor_codegen_cpp, codegen-unification-blockers, fix_orphan_docs_and_tag_taxonomy, qt-upgrade-6.9) that turned out to share the same BACKLOG-with-DONE- tasks symptom on a broader sweep. Commission: book, Commission: purpose_type, and Composite child-entity/hierarchy Qt widgets remain exactly as drifted as described above — their task docs are either absent or themselves still BACKLOG in this checkout, so they need fixing from the worktree that actually holds the work (clever_ dijkstra, eager_maxwell, solid_dirac respectively), not from here. Commission: business_day_convention_type remains entirely untracked.

Metric Value Target Status
Stories DONE / total 14/51 (0.27) ≥0.5 GREEN / 0.3–0.5 AMBER RED
Stories with STARTED work but BACKLOG bookkeeping 5 0 RED
Stories undecomposed (no task docs) despite active work 2 (book, purpose_type) 0 RED

Focus signal

Nominal STARTED count in sprint.org is 5 (Open sprint 22, Commission: currency, Commission: counterparty, Compass GitHub Actions support, Synthetic data collections). But fleet shows 9 distinct stories with live branch activity right now once the drifted ones and the untracked business_day_convention_type are counted — nearly double the visible number, spanning agile tooling, currency, counterparty, party_status, book, purpose_type, composite Qt widgets, synthetic data, and an entirely separate commissioning story invisible from sprint.org.

This task itself is one more data point: the counterparty Qt verification task is now BLOCKED because the composite-hierarchy- widgets work (solid_dirac) and the Commission: party work are touching the same Qt entity-detail code the counterparty task needs to verify — a direct collision between two of those nine concurrent threads.

Metric Value Verdict
STARTED per sprint.org 5
STARTED/active per fleet (incl. drifted + untracked) 9
Cross-theme spread agile, currency, counterparty, party_status, book, purpose_type, codegen/Qt widgets, synthetic data, untracked business_day_convention_type RED
Direct collision observed counterparty task BLOCKED by composite-widgets + party work touching same code RED

Velocity

Stories closed this sprint so far: 14 (party_type, compass QoL, client start/stop, market_series enum fix, NATS port fix, market.txt duplicate-key fix, FX status badge, GMM improvements, sub-registrars, SQL variability marketdata (bookkeeping pending), synthetic librarian FX, shell market-data import, canary CTest cancellation, macOS relevance-guard hotfix). That is a healthy closure rate for 3.5 elapsed days, but it is concentrated in small, well-scoped stories; none of the larger commission-epic stories (currency, counterparty) have closed, and the two codegen-epic goal stories named in the mission haven't been touched at all.

Metric Value Notes
Stories closed 14 Mostly small/well-scoped
Large commission stories closed 0 currency and counterparty both still open
Codegen-epic stories touched 0 of ~8 BACKLOG Mission-named goal untouched

Overall verdict

Dimension Verdict
Goal alignment AMBER
Sprint load RED (trending toward ~380-425 commits vs 300 target)
PR velocity AMBER (good throughput, growing WIP)
Story and task balance RED (0.27 DONE ratio; 5 stories with undocumented active work)
Focus signal RED (9 concurrent story threads vs 5 visible; direct code collision blocking this task)

Overall: RED. Two RED dimensions alone would trigger this, and here there are three, plus two AMBER. The single most important concern is that sprint bookkeeping has stopped reflecting reality: five stories are being actively worked without their state reflecting it, two of those have no task documents at all, and one entire story (business_day_convention_type) is invisible from main. This isn't just a paperwork nuisance — it is the direct cause of the collision blocking the counterparty task right now, since nothing in sprint.org would have surfaced that composite-hierarchy-widgets and Commission: party were both actively touching the same Qt code before the collision was hit. The one fix that would most improve sprint health: stop starting new stories and spend a cycle reconciling every worktree's actual state back into its story/task docs — starting with the five drifted stories and the untracked business_day_convention_type story — before picking up anything else.

Emacs 29.3 (Org mode 9.6.15)