Task: Health review 1 — sprint 28 close 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.
1. Goal
Measure sprint 28 at its close, repair the bookkeeping the audit names, and record one verdict with its evidence.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Sprint health review — System 2 analysis |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-10-24 |
3. Acceptance
- Every dimension has a measurement with its source.
- The sprint table carries the review's summary row.
4. 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.)
5. Measurements
Every number this task claims about a tree, with the command that produced it
and the commit it was measured at. A number without both is not a measurement,
because a clean-up record describes a tree and trunk moves under a branch: a
consumer count, a gate's component count and a suite's size all change with no
code changing, and the reader of a bare number cannot tell which tree it came
from. Where the raw output matters, put it in an evidence/ file beside the
task and name that file in the Command column.
| What | Value | Command | Commit |
|---|---|---|---|
| Commits since the sprint start | 2615 in 12 days (344, 199, 227, 185, 471, 334, 132, 87, 154, 150, 245, 87 for 10-13 to 10-24) | compass sprint charts --sprint 28 --end-date 2026-10-24: committer date, --since-as-filter from 2026-10-13T00:00:00 |
15d810796b |
| Pull requests merged since the sprint start | 496 (67, 40, 50, 39, 81, 64, 23, 11, 21, 28, 53, 19) | gh pr list --state merged bucketed by local merge day, from the same command |
15d810796b |
| Merge cycle of those 496 | median 0.14 h, upper quartile 1.3 h, p90 5.2 h, max 48.1 h | the same list, createdAt to mergedAt |
15d810796b |
| Open pull requests | 1 (#3705, opened 2026-10-24, a design document) | gh pr list --state open |
b99ecf86a4 |
| Stories | 126: 60 DONE, 27 STARTED, 39 BACKLOG | the State of every story.org under the sprint |
this branch |
| Stories before this review's repairs | 125: 57 DONE, 29 STARTED, 39 BACKLOG | the same read before the edits | b99ecf86a4 |
| Tasks | 534: 309 DONE, 173 BACKLOG, 46 STARTED, 6 ABANDONED | the State of every task_*.org |
this branch |
| Stories created on or after 2026-10-13 | 101 of 126 (58 DONE, 25 STARTED, 18 BACKLOG) | the #+created: of every story.org |
this branch |
| Added stories that are CI or hotfix work | 34 | an estimate: titles matching hotfix, cache, CI, build-time and warning words | this branch |
| Undecomposed stories | 8, all BACKLOG | story.org with no task_*.org beside it |
this branch |
| Stories with ten or more tasks, still STARTED | 10 | the same read | this branch |
| Audit findings | 95 before the repairs, 26 after, 0 after the sprint close | compass sprint audit |
b99ecf86a4 and this branch |
| Stories after the sprint close | 125: 84 DONE, 41 ABANDONED (37 carried to the inbox, 4 closed with nothing shipped) | the State of every row of the sprint table |
this branch |
| Tasks after the sprint close | 323: 315 DONE, 8 ABANDONED | the State of every task_*.org under the sprint |
this branch |
| DONE tasks with no PR or no branch recorded | 88 and 45 before; 100 tasks changed | a script over the Task-ID trailers, then the branch name |
b99ecf86a4 |
| Charts window | 2026-10-13 to 2026-10-24: 12 days of activity, 2615 commits, 496 merged PRs, 84 stories done. The default window stops at 2026-10-21, the sprint's end date plus one day. | compass sprint charts --sprint 28 --end-date 2026-10-24 |
b99ecf86a4 |
6. Notes
7. Test Scenarios
Manual QA scenarios (scaffolded via compass add test_scenario)
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 |
|---|---|---|
8. PRs
9. Review
| Comment summary | File | Decision | Notes |
|---|---|---|---|
10. Result
10.1. Review on 2026-10-24 (day 12 of 7)
Sprint 28 was scheduled from 2026-10-13 to 2026-10-20. This review runs on
2026-10-24, twelve days in and four days past the planned close. Every number
below is a measurement at b99ecf86a4 plus this branch's own document changes.
The command that produced each one is in * Measurements.
Concerns written down before the data was read: the sprint's mission promises no new scope, and a sprint that opens with 41 carried stories should not carry a hundred more; the charts and the review stop at the planned end date while the work did not; and the bookkeeping of a sprint this size drifts first.
10.1.1. Goal alignment
The mission has one goal: finish the work carried out of sprint 27 (the record screens, the remaining journeys and the rest of its remainders) before drawing anything new from the product backlog. It names nine themes.
| Theme of the mission | Coverage | Verdict |
|---|---|---|
| Record screens and the web UX standard | The engine settings, the grid job screens, the reports a party runs, the bindings screen and the history and refresh rules all landed. The list sort order, the live updates and the existing-screens sweep are still open. | AMBER |
| Journeys in ores.web | The conventions prototypes and their journeys are DONE. The conventions list screens, the tenor journey and the node heatmap are STARTED with no task done. | AMBER |
| Market data feeds and bindings | The adapter rework (20 of 36 tasks) and the tick-lag investigation (9 of 31) are the largest stories of the sprint. Neither is close. | AMBER |
| Reporting and ACME data | The report trigger is DONE, the engine settings arc is DONE, and the ACME population is 18 of 24. The report page itself and the report configurations on guided screens are not started. | AMBER |
| Trading-model integrity | The FX audit and rework and the equity rework are DONE. The credit, rates and bonds stories are open. | AMBER |
| Codegen and data-quality debt | The lookup artefact tables are DONE. The entity-groups story is 2 of 13. | AMBER |
| Four-eyes approvals, security and tenancy, grid and telemetry | Advanced by several stories, none finished. | AMBER |
The check against the mission fails in a different place. Of the 126 stories,
101 were created on or after the sprint opened, and 34 of those are CI and
hotfix work. By #+created: date only 25 stories pre-date the sprint, and 21
of those are still BACKLOG. The mission says the sprint commits to finishing
the carried stories rather than adding scope. The sprint did the opposite.
The creation date is an approximation, because a carried story keeps its old
date only when its author did not rewrite it, so the 25 is a floor. The
conclusion holds either way: most of the sprint is new work.
Verdict AMBER: every theme advanced and none closed, but the mission does not describe what the sprint spent its capacity on.
10.1.2. Sprint load
| Metric | Value | Target | Status |
|---|---|---|---|
| Commits since 2026-10-13 | 2615 | ≤ 1000 | RED |
| Commits per day | 344, 199, 227, 185, 471, 334, 132, 87, 154, 150, 245, 87 | — | — |
| Average | ≈ 218 per day over 12 days | ≤ 143 per day | RED |
| Window | day 12 of a planned 7 | 7 days | RED |
The tree carries about two and a half times the commit ceiling. The rate is neither a stall nor a spike. Two peaks stand out, 471 on 10-17 and 334 on 10-18, and the sprint then slows to 87 and 154 on the days after its planned close. That slowdown is the planned close arriving while stories were still open: the work did not stop, it thinned out. The commits after 10-20 total 636, and 10-24 was a part day when the count was taken.
Verdict RED.
Correction on 2026-10-24. The first version of this review counted commits
with a bare --since=2026-10-13. Git reads a bare date as that date at the
current time of day, so the early hours of 10-13 were lost, and plain --since
stops at the first old commit of a rebased history. The first version said 2518
commits and a first day of 282. The full count is 2615 and 344. The same two
faults hit the charts, which also counted merge commits as PRs and plotted only
the twenty slowest PRs. compass sprint charts is fixed, and the verdicts do
not change.
10.1.3. PR velocity
| Metric | Value | Notes |
|---|---|---|
| Merged PRs in the sprint | 496 (67, 40, 50, 39, 81, 64, 23, 11, 21, 28, 53, 19) | The target band is 100–120: four times it. |
| Merge cycle | median 0.14 h, upper quartile 1.3 h, p90 5.2 h, max 48.1 h | A census of all 496. The cycle chart now plots every PR. |
| Open PRs | 1 | #3705, opened today, a design document. |
| Long-open WIP | none | No PR waited more than a day for a merge. |
| Days with no merge | 0 | The slowest day merged 7, and it is a part day. |
A merge cycle of six minutes at the median says the work is merged as soon as the checks allow. It also says that most review is after the merge or by the author alone. That is a property of the process and not a defect of this sprint, but it means PR count measures commit grouping and not reviewed change.
Verdict RED on the count, GREEN on flow. The skill's rule is that a total over about 150 is red.
10.1.4. Story and task balance
| Metric | Value | Notes |
|---|---|---|
| Stories | 126: 60 DONE, 27 STARTED, 39 BACKLOG | After this review's close of three stories and its reconciliation. |
| DONE : open | 60 : 66 ≈ 0.91 | The skill's green line is 0.5. |
| Tasks | 534: 309 DONE, 173 BACKLOG, 46 STARTED, 6 ABANDONED | 58% DONE. |
| Undecomposed stories | 8 | All BACKLOG, no task files. |
The eight undecomposed stories:
- Name the convention sets a report chooses
- Session activity: record the size of every NATS message per server
- Paint every web badge from the catalogue
- Link every reference to its record
- Bring the FX spot conventions onto the market standard
- Import and export conventions without a document aggregate
- Keep counting failed attempts on a locked account
- Move the installation's remaining reads onto its own class
Stories with ten or more tasks that are still STARTED, with the shape the skill calls sprawling. The owners should apply the split test (read each remaining task against the story's own acceptance) before the next sprint opens:
| Story | Tasks | DONE | Remainder |
|---|---|---|---|
| Build the bindings screen and clear the oresmd snags | 16 | 15 | 1 BACKLOG |
| Browse and follow the grid's jobs | 24 | 19 | 5 BACKLOG |
| Populate the ACME books with a realistic trade population | 24 | 18 | 6 BACKLOG |
| Rework the market data feeds into a market data service with adapters | 36 | 20 | 16 BACKLOG |
| Find why market data ticks lag the wall clock | 31 | 9 | 16 BACKLOG, 5 STARTED |
| Refactor conventions onto families and bundles | 10 | 7 | 3 BACKLOG |
| Close the tenor journey and the remaining refdata gaps | 10 | 3 | 6 BACKLOG, 1 STARTED |
| Add entity groups and finish the remaining codegen work | 13 | 2 | 11 BACKLOG |
| Trade Blotter | 13 | 5 | 7 BACKLOG, 1 ABANDONED |
| See and change everything a report runs | 19 | 18 | 1 BACKLOG |
The owner then asked for the close of the sprint: every story ends with only closed tasks, or close to it. The section "Sprint close: closes, splits and carries" below records what that did to these numbers. The table above is the state before the close.
Verdict AMBER: the ratio is green, but eight stories are opaque and ten large stories hold most of the open task count.
10.1.5. Focus signal
| Metric | Value | Verdict |
|---|---|---|
| STARTED stories | 27 | RED: the skill's red line is 6. |
| Oldest STARTED stories | Trade Blotter (81 days, 5 of 13), the equity rework (closed here), the grid usage story (17 days, 1 of 3) | — |
| Themes | web and UX, market data, reporting, conventions and tenor, trading instruments, codegen, workflow and shell | Mixed. |
Twenty-seven stories are in flight across at least seven themes, and nine other worktrees hold their own branches at the same time. The count fell from 29 because this review closed three stories. It is not a deliberate WIP limit. The sprint's retrospective asked for fewer stories in flight, and the sprint's own mission repeated the request, and the count did not move.
Verdict RED.
10.1.6. Velocity
| Metric | Value | Notes |
|---|---|---|
| Stories closed | 60 of 126 | 48%. |
| Tasks closed | 309 of 534 | 58%. |
| Stories done in the chart | 61 at review time, 84 after the close | The cumulative chart counts DONE rows only. The first version also counted ABANDONED rows, so a close that carries stories out looked like delivery. |
| Window | day 12 of 7 | Four days over. |
The default chart window is the sprint's end date plus one day, so a plain run
shows work to 2026-10-21 only and leaves out the 100 PRs and 482 commits of 10-22
to 10-24. The committed charts were rendered with --end-date 2026-10-24, so
they cover the whole overrun. A sprint that runs past its end date needs that
flag or an updated end date, or the charts under-report its close. The first
version of the commits chart showed two stray points before the sprint, on
2026-09-27 and 2026-10-10. It bucketed by author date and filtered by committer
date. It now uses the committer date for both, and the points are gone.
Verdict AMBER.
10.1.7. Bookkeeping repaired by this review
The audit reported 95 findings. After the repairs below it reported 26. After the sprint close it reports none.
| Repair | Count | Evidence |
|---|---|---|
| Stories closed DONE | 3 | The table that follows. |
| Sprint table rows reconciled with their story files | 17 | The audit named 15; two more disagreed on state and end date once those were set. |
| Story moved from BACKLOG to STARTED in its file | 1 | Run a report end to end on a synthetic bond population has 4 of 5 tasks done. |
#+pr: and #+branch: filled on DONE tasks |
100 tasks | 49 resolved to a merged PR through the Task-ID trailer or the branch name. 51 carry none (no commit carries the task id): scaffold tasks and tasks whose PR names another id. |
Now, Waiting on and Next cleared on closed documents |
68 documents | Every DONE or ABANDONED story and task whose cells were not Nothing.. |
| Duplicate stories | 0 | See below. |
The three stories closed, each read against its own acceptance:
| Story | Tasks | Decision | Evidence |
|---|---|---|---|
| Audit the FX instrument family against the data-oriented design guidelines | 1/1 DONE | Closed DONE | Its acceptance is the review itself. PR #3387 merged, and the follow-up rework story carried the findings. |
| Rework the equity instruments to the instrument table rule | 13/13 DONE | Closed DONE | PRs #3405 to #3503 merged. The header, the composite key and the routing have their own tasks. No task states the round trip; the standing gate ore-xml-roundtrip passed on the branch that merged #3691. |
| Prototype the management of conventions | 5/5 DONE | Closed DONE | PRs #3581 and #3621 merged. The prototypes, the journeys and the checklist pass are written. The owner's agreement on the catalogue is not recorded in a task. |
The audit named a fourth story and this review rejects it.
| Story | Tasks | Decision | Evidence |
|---|---|---|---|
| Seed a relative-time trade population with the market data it needs | 1/1 DONE | Left BACKLOG here, then carried to the inbox at the sprint close | Its only task is "Describe the story and its open decisions" (PR #3043). It writes the story and builds nothing the acceptance names. Closing would record undelivered work as delivered. The same story was rejected in the sprint 27 review. |
Duplicates resolved: none. The title comparison found two families of near matches, the three instrument-family audits (FX, rates, bonds) and the equity and FX reworks. Each pair covers a different family, and the two hotfixes for the debug builds cover different platforms. None overlaps.
What remains for the owners, not decided here:
- The 51 DONE tasks with no PR recorded. Most are scaffold tasks.
- The eight undecomposed stories, now in the product backlog inbox.
10.1.8. Sprint close: closes, splits and carries
The owner asked for two things: close every open task and story that is done, and split each story that holds many closed tasks into a closed story and a backlog story. After the work, the sprint table holds 84 stories DONE and 41 ABANDONED, and no story STARTED or BACKLOG, except one that opened during the close (see below). Of the 41, 37 moved to the inbox and 4 closed with nothing shipped. The sprint holds 315 DONE tasks and 8 ABANDONED tasks, and no open task. The audit reports no finding.
Open tasks closed DONE. Each has a written * Result and every pull request it
names merged.
| Task | Pull requests |
|---|---|
| Store the inflation swap and return its index | #3546 |
| Keep a floor a floor and hold the whole collar | #3553 |
| Build the list of kinds and the list of documents | #3620 |
| Run a quiet loop in one thread | #3628 |
| Build the reports a party runs screen and its endpoint | #3558 |
| Close the gaps the reports a party runs screen records | #3484, #3501 |
| Carry an entity-changed time to the browser | #3099 |
| Link each convention to its market data series | #2922 |
The other 17 tasks of the audit's list stayed open and moved to the inbox with
their stories. Each has no * Result, or its own text says the work is partial
(for example "Partly delivered in PR 3128. The task stays STARTED."). A merged
pull request did not prove those finished.
Stories closed DONE because every task is done: Carry the rates family's fields across the ORE boundary (3 of 3).
Stories split. Each closed story keeps its done tasks and narrows its Acceptance to them. Its remaining tasks and its original Acceptance moved to a new story, "<title> — the remaining work", in the product backlog inbox. The closed story names the new story in its Decisions. 25 stories were split and 123 tasks moved. The largest splits are Rework the market data feeds (20 done, 16 moved), Find why market data ticks lag the wall clock (10 done, 21 moved), Browse and follow the grid's jobs (20 done, 4 moved), Populate the ACME books (18 done, 6 moved) and Build the bindings screen (15 done, 1 moved).
Stories carried whole. 37 stories had no done task. Each moved by file or by
folder into the inbox with its :ID: intact, and its sprint row is ABANDONED
with the close date. They include the eight undecomposed stories, "Author the
report configurations on guided screens" and "Complete the ACME report inputs
and prove they run".
Five closes needed judgment, and the first pass was wrong for them:
- "See and change everything a report runs" has 18 done tasks that deliver the engine settings arc. Its acceptance names a six-tab report page that nothing built. The story closed DONE with the engine settings arc as its scope, and the report page, with its analysis task, moved to the new story.
- "Find a trade by its identifiers, state, book and date from one list" has one task, ABANDONED because the Trade Blotter story absorbed it. The story closed ABANDONED, not DONE, since nothing shipped under it.
- "Raise a notification for a scenario waiting for a tester", "Restore the trading guards the versioned model dropped" and "Trace a process run and the trade groups it creates" had only their scaffold task done. The release notes pass found this. The three stories are ABANDONED, and their real tasks stay in the backlog stories.
- "Replace the credit fact variant with typed arrays" and "Build the conventions list screens" left only a scaffold task. That is no work, so the split was undone: each story is whole and DONE, with the scaffold task ABANDONED.
- "Draw every coded value as its badge" was DONE with six open tasks listed as plain rows with no task file, so the first pass did not see them. The PR review found it. The story is split: it keeps its one done task, and the six open rows moved to a new inbox story.
The closed stories "Decide the XML strategy" and "Trade Blotter" keep ABANDONED tasks in their tables. Their Acceptance lists only the DONE tasks.
One story is outside the close. "Add a Hawkes tick arrival process to analytics.quant" was scaffolded on main by another environment (prime_origin) while this close was in review. It is STARTED with 2 tasks done and 4 open, and its branch is live, so moving it would pull the story from under that branch. It stays in sprint 28 and needs its own decision. A task "Subscribe every Acme party to market data" also arrived on main under the ticks story, with PR #3710 merged and no Result, and moved to that story's remaining-work story. Another environment finished "Record when a run starts and how long it took" (PR #3707) during the same window. It is DONE and stays in its closed story.
10.1.9. What this review did not check
It did not read the acceptance of the 10 sprawling stories before the owner asked
for the close. It did not verify that the equity round trip is lossless: it
relied on the standing gate. The audit's 25 task files were read for their
* Result and their Now cell only, not for the code. The "CI or hotfix" count is
an estimate by title. The number of carried stories is the sprint's own claim of
41, and the creation-date count of 25 is a floor. The narrowed Acceptance of each
closed story lists its done tasks by title. It does not restate each task's
result, so the owner may refine it.
10.1.10. Overall verdict
| Dimension | Verdict |
|---|---|
| Goal alignment | AMBER |
| Sprint load | RED |
| PR velocity | RED (flow GREEN) |
| Story and task balance | AMBER |
| Focus signal | RED |
| Velocity | AMBER |
| Overall | RED |
The sprint is RED. It carries two and a half times the commit ceiling and four times the PR count over twelve days, with twenty-seven stories in flight, and its mission promised no new scope while four in five of its stories are new. Flow is healthy: PRs merge within minutes, nothing waits, and every day merges. The bookkeeping was the weakest part, and this review repairs the part that has an unambiguous answer. The one change that would improve the next sprint most is a limit on stories in flight, enforced when a story starts, because the load, the focus and the open-task count all follow from starting more than the sprint can finish.