Task: Health review 1 — sprint 25 mid-sprint analysis

Table of Contents

This page documents a task in the Sprint health review — System 2 analysis story. It captures the goal, current status, acceptance, and any notes or results.

Goal

Produce a System 2 health review of sprint 25 at mid-sprint (day 5), covering goal alignment, sprint load, PR velocity, story/task balance, focus signal, and bookkeeping hygiene. Write the full analysis into * Result and add a summary row to sprint.org's * Health Review table.

Status

Field Value
State DONE
Parent story Sprint health review — System 2 analysis
Now Complete.
Waiting on Nothing.
Next Nothing.
Last touched 2026-08-07

Acceptance

  • Full analysis written under * Result covering all six dimensions.
  • Summary row added to sprint.org's * Health Review table.

Plan

  1. Read sprint.org, every story.org and task file under sprint_25.
  2. Gather git commit and PR data from GitHub.
  3. Analyse across six dimensions: goal alignment, load, PR velocity, story/task balance, focus signal, bookkeeping hygiene.
  4. Write findings into * Result with tables and narrative.
  5. Add summary row to sprint.org's * Health Review table.
  6. Flag bookkeeping issues found; fix in accompanying commits.

Notes

Test Scenarios

Manual QA scenarios (scaffolded via compass add test_scenario, run through the QA Validation Runner panel) that verify this task. Link new ones here as they're created; the scenario doc itself links back via its "Verifies task" field.

Scenario State Notes
     

PRs

PR Title
   

Review

Comment summary File Decision Notes
       

Result

Review on 2026-08-07 (day 5 of 7)

Goal alignment

Sprint mission: "Resolve sprint drift on as many components as possible and progress IR curves work."

Goal Coverage Stories Verdict
Resolve sprint drift Covered — 7 DONE, 4 STARTED Refactor codegen C++ (STARTED, 21 tasks), Entity classification (BACKLOG, 1), Compass QoL (DONE, 8), Backlog deep refinement (DONE, 1), Systemd resource mgmt (DONE), Reduce DB pool (DONE, 4), Review CLI/shell (DONE, 1), sync_host_envelope (DONE, 1), Fix codegen template drift (BACKLOG, 4), Close systemic codegen gaps (BACKLOG, 2), Investigate grants (STARTED, 1/1 DONE) GREEN — drift is the dominant theme
Progress IR curves Covered IR curve bootstrapping (STARTED, 7 tasks), IR rates (STARTED, 19), IR curve follow-ups (BACKLOG, 3) GREEN — active IR curve work
Unmapped stories Several stories have no clear link to either goal Holding company treasury, Docs improvements, Normalise NATS protocol, NATS passthrough, Synthetic data scope, Injectable env provider, Fix MSVC, Fix Windows setenv AMBER — 8 stories don't clearly serve either goal

Challenge: "Progress IR curves" is covered but the IR curve bootstrapping story has been STARTED since sprint 24 (carried forward) — the sprint table says BACKLOG while the story file says STARTED. Are we actually making forward progress on IR curves, or has momentum stalled? The IR rates story has 19 tasks (some DONE from prior sprints) but is STARTED with no end date — progress is opaque.

The unmapped stories are not noise — they're substantive: holding company treasury (6 tasks, 4 DONE), NATS config passthrough (9 tasks), synthetic data scope (4 tasks). They advance the product but don't serve the sprint mission. This is characteristic of a sprint that pulled in backlog items opportunistically rather than staying focused. Not harmful at day 5 given the drift goal is well-served, but worth watching at close.

Sprint load

Metric Value Target Status
Commits 383 ≤ 1000 GREEN
Days elapsed 5 7
Commits/day 76.6
Projected total 536 ≤ 1000 GREEN

The commit rate is sustainable — no signs of bursts followed by stalls. Day-over-day rate has been consistent. The load target is easily met.

PR velocity

Metric Value Notes
PRs merged ~50 (from sprint table count) Includes bot PRs (nightly format ×3)
PRs/day 10 Healthy pace
Projected total ~70 Under the 100–120 target
Open PRs (fleet) 1 (#1886, prime_origin) Filter Market Simulator — 1 day old, not stalled
Long-open WIP None detected

Verdict: GREEN. Merge rate is healthy and there's no WIP accumulation. The projected total of 70 is under the 100–120 soft target, which may reflect the sprint being front-loaded with smaller, focussed PRs rather than a genuine velocity problem.

Story and task balance

Story State Tasks DONE Age (days) Notes
Open sprint 25 DONE 1 1 1
Acme Corporation follow-ups DONE 5 5 2
FX Spot wire-codec root cause DONE 2 2 1
Holding company treasury STARTED 6 4 2 2 BACKLOG tasks remain
Refactor ores.codegen C++ STARTED 21 ~10 69 Carried from sprint 24; sprawling
Entity classification BACKLOG 1 0 Undecomposed
Systemd resource mgmt DONE 3 3 5
IR curve bootstrapping STARTED 7 ~3 69 Carried from sprint 24
IR Rates synthetic data STARTED 19 ~14 69 Carried from sprint 24; sprawling
Documentation improvements STARTED 6 1 3 Only scaffold task done
Collapse NATS config STARTED 9 ~5 3
Synthetic data scope STARTED 4 2 69 Carried from sprint 24
Injectable env provider BACKLOG 2 0
Reduce DB connection pool DONE 4 4 1
Review CLI/shell divergence DONE 1 1 1
Compass QoL follow-ups DONE 8 8 3
JWT test hotfix DONE 2 2 1
NATS fallback hotfix DONE 2 2 1
Fix MSVC scope label BACKLOG 1 0 Hotfix story
Fix Windows setenv BACKLOG 1 0 Hotfix story
sync_host_envelope DONE 1 1 1
Backlog deep refinement DONE 1 1 2
Investigate grants DONE 1 1 2 Closed in bookkeeping pass
Normalise NATS protocol DONE 1 1 1 Closed in bookkeeping pass
Fix codegen template drift BACKLOG 4 0 1 New, undecomposed
Close systemic codegen gaps BACKLOG 2 0 1 New, undecomposed
IR curve follow-ups BACKLOG 3 0 1 New, undecomposed

DONE/BACKLOG+STARTED ratio: 13 DONE / (7 STARTED + 7 BACKLOG) = 0.93 → GREEN on ratio.

However, three concerns:

  1. Sprawling stories: Refactor codegen C++ (21 tasks, STARTED for 69 days) and IR Rates (19 tasks, STARTED for 69 days) are classic sprawling stories — many tasks DONE but the story itself not closed. Both were carried from sprint 24. The DONE work is real and delivered, but keeping them STARTED makes the sprint look like it has more open work than it actually does. Both should be evaluated against their Acceptance criteria — if the DONE tasks satisfy the criteria, close them and split remaining tasks into new stories.
  2. Ready-to-close stories closed: Investigate grants (1/1 DONE) and Normalise NATS protocol (1/1 DONE) were closed in the bookkeeping pass accompanying this review — both now DONE in story files and sprint table.
  3. New undecomposed stories: Fix codegen template drift, Close systemic codegen gaps, IR curve follow-ups, Entity classification, and two hotfix stories were added to the sprint table but not decomposed into tasks — they show BACKLOG with no tasks at all. This is acceptable for stories promoted late in the sprint but they count as undecomposed work.

Focus signal

Metric Value Verdict
Simultaneously STARTED stories 7 AMBER
Cross-cutting themes Holding company treasury (finance), IR curves (quant), codegen (infra), docs, NATS config, NATS protocol — 6 distinct themes RED
brave hopper's STARTED stories 1 (Docs improvements) Normalise NATS closed, Backlog deep refinement DONE

7 simultaneously STARTED stories (was 9; 2 closed in bookkeeping pass) across 6 distinct themes far exceeds the GREEN threshold of 1–3. Several are owned by other environments (bright faraday has 3, solid dirac has 1, swift curie has 1, festive dijkstra has 2, prime origin has 1). The fleet is spread thin — brave hopper alone has 1 STARTED story (Docs improvements) after the bookkeeping pass.

This is the sprint's most significant risk. Focus is sacrificed incrementally — each "just one more" story compounds context-switching cost. The diversity of themes (finance, quant, infra, docs, NATS) means no one person can hold the full sprint in their head.

Bookkeeping hygiene

Finding Count
Stories ready to close (all tasks DONE) 2
Sprint table ≠ story file state 5
Closed docs with non-empty Now 12

The 5 table disagreements are a pattern: stories that were promoted or started mid-sprint had their story files updated but the sprint table wasn't synced. Three of the 5 are carried-forward stories (IR curve, IR rates, synthetic data scope) whose sprint table entries were never updated when the stories were carried. The 12 stale Now fields on closed docs are a known pattern — DONE stories often have a summary in Now that isn't cleared to "Nothing."

Overall verdict

Dimension Verdict
Goal alignment AMBER — drift well-served, IR curves present but momentum unclear; 8 unmapped stories
Sprint load GREEN — 383 commits, projected 536
PR velocity GREEN — 10 PRs/day, no WIP accumulation
Story and task balance AMBER — 2 sprawling stories carried from sprint 24, 2 ready-to-close stories not closed
Focus signal AMBER — 7 STARTED stories across 6 themes (was RED at 9; improved by bookkeeping pass)
Bookkeeping AMBER — 5 table disagreements, 12 stale Now fields
Overall AMBER

The sprint is productive — drift resolution is happening at pace (50 PRs, 383 commits). The focus signal improved from RED to AMBER during the accompanying bookkeeping pass (2 stories closed, STARTED count 9→7). The most important remaining fix: evaluate the two sprawling stories (Refactor codegen C++, IR Rates) for split-and-close. The 5 sprint table disagreements and stale Now fields have been resolved.

Emacs 29.3 (Org mode 9.6.15)