crc-refactor presents a detector progress table before the run, after each wave, and at close-out #1217

Closed
opened 2026-10-20 16:56:18 +00:00 by jared · 2 comments
Owner

Problem

During crc-refactor run 3 over os-sdlc (2026-10-19 to 2026-10-20, 18 clock hours) Jared could not tell where the run was or how close to finished it was. He started a monitor session (4c82fb72) and a retrospective session (a84e8de7) to find out. The retrospective session built a progress table by hand, one row per wave-0 detector: the detector, the problem it signals, the fix the run applied, and the count before and after. That table gave the overview the run itself never gave. It must become a permanent part of every run.

Observed

The hand-built table from session a84e8de7 (counts at c30c374c):

Detector Problem it signals Count
cycle-edges two concepts depend on each other 43 to 2
holders a constant lives under a parent most callers do not use 27 promote to 15
reach-through callers walk through a holder to its child 98 to 74
error-lineage exceptions inherit from bare StandardError 37 to 20
name_collision one name means two types 50 to 18
model_does_io a value object reads files or shells out 38 to 11
data_clump the same parameter group recurs in 3+ classes 266 to 192
copied_entry duplicate code across files of one role 16 to 29
data_bag_builds a Data object built from several layers 9 to 12

No crc presenter or progress class exists today. Reporting is JSON and TSV output (crc-census, crc-score, wave0/*.tsv, collaborator measures) plus HANDOFF sections written by agents.

Reproduce

n/a: feature ticket. The gap is visible in the run 3 transcript 2e167079 and the monitor session 4c82fb72.

Approach

Required work:

  1. A presenter under plugins/os-sdlc/lib/os_sdlc/crc/ that renders the detector progress table (detector, problem it signals, count at baseline, count now, delta) from wave0/*.tsv, score.tsv, the collaborator measure findings (findings.yml in the newest collaborator-runs/<stamp>/ directory, one row per shape: value), and the ledger verdict counts (keep, move, rename, split).
  2. A wave-progress record under the run directory that the run updates after each completed wave, so the presenter can show position: wave N of M, tickets done of total for the current wave.
  3. The presenter output includes a position line and the detector table in one markdown block the orchestrator can paste to the user.

Orchestrator work: plugins/os-sdlc/skills/crc-refactor/SKILL.md tells the orchestrator to present the table before wave 0 (with prior-round counts when they exist), after each completed wave, and at close-out. The close-out table falls out of the last wave; no separate step.

Rejected: a Metz verdict column — it belongs to tuning rounds only, not to every run.
Rejected: hand-written HANDOFF "Where you are" prose as the progress signal — it is written late and by agents; PLAN.md Phase 8 already lists generating it from the ledger as open work.

Acceptance criteria

  1. Given a run directory with wave0 TSVs and a score file, when the presenter runs before wave 0, then it prints the detector table with baseline counts and a position line reading wave 0 of M.
  2. Given a completed wave, when the orchestrator records it, then the presenter prints the updated table with current counts, deltas, and tickets done of total.
  3. Given a second round over the same codebase, when the presenter runs before wave 0, then the table shows the prior round's final counts next to the new baseline.
  4. Given a collaborator run directory whose findings.yml holds findings of several shape: values, when the presenter runs, then the table has one row per shape with its finding count.
  5. Given a ledger whose rows carry verdicts keep, move, rename, and split, when the presenter runs, then the output shows the count of each verdict.

Owner sketch

class OsSdlc::Crc::ProgressTable
  def initialize(run_dir:, ledger:)
  def render -> String
end

class OsSdlc::Crc::WaveProgress
  def record(wave:, tickets_done:, tickets_total:)
  def position -> String
end

Non-goals

The Metz verdict column. Token or wall-clock cost per wave (that is the Phase 8 retrospective measurement).

Origin

  • Trigger: crc-refactor run 3 (session 2e167079); retrospective session a84e8de7 built the table by hand on 2026-10-20
  • Improvised this session: none
  • Chain: no visible run position ← no progress artifact in crc-refactor ← DESIGN (plugins/os-sdlc/skills/crc-refactor/SKILL.md phases 0 to 7 emit TSV and JSON only; docs/crc/PLAN.md Phase 8 open item "generate the Where you are block from the ledger")
  • Root candidate: none found; searched progress, presenter, "where you are", wave table, crc status, detector table

VERDICT: CREATE

  • Where: plugins/os-sdlc/skills/crc-refactor/SKILL.md; plugins/os-sdlc/lib/os_sdlc/crc/
  • Session: 86f833b9-4ecf-435e-b24d-0644ff554982
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/86f833b9-4ecf-435e-b24d-0644ff554982.jsonl
## Problem During crc-refactor run 3 over os-sdlc (2026-10-19 to 2026-10-20, 18 clock hours) Jared could not tell where the run was or how close to finished it was. He started a monitor session (4c82fb72) and a retrospective session (a84e8de7) to find out. The retrospective session built a progress table by hand, one row per wave-0 detector: the detector, the problem it signals, the fix the run applied, and the count before and after. That table gave the overview the run itself never gave. It must become a permanent part of every run. ## Observed The hand-built table from session a84e8de7 (counts at c30c374c): | Detector | Problem it signals | Count | |---|---|---| | cycle-edges | two concepts depend on each other | 43 to 2 | | holders | a constant lives under a parent most callers do not use | 27 promote to 15 | | reach-through | callers walk through a holder to its child | 98 to 74 | | error-lineage | exceptions inherit from bare StandardError | 37 to 20 | | name_collision | one name means two types | 50 to 18 | | model_does_io | a value object reads files or shells out | 38 to 11 | | data_clump | the same parameter group recurs in 3+ classes | 266 to 192 | | copied_entry | duplicate code across files of one role | 16 to 29 | | data_bag_builds | a Data object built from several layers | 9 to 12 | No crc presenter or progress class exists today. Reporting is JSON and TSV output (`crc-census`, `crc-score`, `wave0/*.tsv`, collaborator measures) plus HANDOFF sections written by agents. ## Reproduce n/a: feature ticket. The gap is visible in the run 3 transcript 2e167079 and the monitor session 4c82fb72. ## Approach Required work: 1. A presenter under `plugins/os-sdlc/lib/os_sdlc/crc/` that renders the detector progress table (detector, problem it signals, count at baseline, count now, delta) from `wave0/*.tsv`, `score.tsv`, the collaborator measure findings (`findings.yml` in the newest `collaborator-runs/<stamp>/` directory, one row per `shape:` value), and the ledger verdict counts (keep, move, rename, split). 2. A wave-progress record under the run directory that the run updates after each completed wave, so the presenter can show position: wave N of M, tickets done of total for the current wave. 3. The presenter output includes a position line and the detector table in one markdown block the orchestrator can paste to the user. Orchestrator work: `plugins/os-sdlc/skills/crc-refactor/SKILL.md` tells the orchestrator to present the table before wave 0 (with prior-round counts when they exist), after each completed wave, and at close-out. The close-out table falls out of the last wave; no separate step. Rejected: a Metz verdict column — it belongs to tuning rounds only, not to every run. Rejected: hand-written HANDOFF "Where you are" prose as the progress signal — it is written late and by agents; PLAN.md Phase 8 already lists generating it from the ledger as open work. ## Acceptance criteria 1. Given a run directory with wave0 TSVs and a score file, when the presenter runs before wave 0, then it prints the detector table with baseline counts and a position line reading wave 0 of M. 2. Given a completed wave, when the orchestrator records it, then the presenter prints the updated table with current counts, deltas, and tickets done of total. 3. Given a second round over the same codebase, when the presenter runs before wave 0, then the table shows the prior round's final counts next to the new baseline. 4. Given a collaborator run directory whose `findings.yml` holds findings of several `shape:` values, when the presenter runs, then the table has one row per shape with its finding count. 5. Given a ledger whose rows carry verdicts keep, move, rename, and split, when the presenter runs, then the output shows the count of each verdict. ## Owner sketch ```ruby class OsSdlc::Crc::ProgressTable def initialize(run_dir:, ledger:) def render -> String end class OsSdlc::Crc::WaveProgress def record(wave:, tickets_done:, tickets_total:) def position -> String end ``` ## Non-goals The Metz verdict column. Token or wall-clock cost per wave (that is the Phase 8 retrospective measurement). ## Origin - Trigger: crc-refactor run 3 (session 2e167079); retrospective session a84e8de7 built the table by hand on 2026-10-20 - Improvised this session: none - Chain: no visible run position ← no progress artifact in crc-refactor ← DESIGN (`plugins/os-sdlc/skills/crc-refactor/SKILL.md` phases 0 to 7 emit TSV and JSON only; `docs/crc/PLAN.md` Phase 8 open item "generate the Where you are block from the ledger") - Root candidate: none found; searched progress, presenter, "where you are", wave table, crc status, detector table VERDICT: CREATE - Where: plugins/os-sdlc/skills/crc-refactor/SKILL.md; plugins/os-sdlc/lib/os_sdlc/crc/ - Session: 86f833b9-4ecf-435e-b24d-0644ff554982 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/86f833b9-4ecf-435e-b24d-0644ff554982.jsonl
Author
Owner

Work started: /os-sdlc:implement on branch ticket-1217 (worktree .claude/worktrees/ticket-1217), AFK run.

Work started: /os-sdlc:implement on branch ticket-1217 (worktree .claude/worktrees/ticket-1217), AFK run.
Author
Owner

Resolution

Done: Crc::ProgressTable renders one markdown block: position line, detector table (wave0 TSVs, findings.yml shape counts, ledger verdict counts) with Baseline, Now, Delta and Prior final columns. Crc::WaveProgress records each wave. crc-refactor SKILL.md shows the table before wave 0 and after each wave; close-out uses the last wave's table.

Evidence: Implementation 111 complete (27 dispatches, 34 min); commits 4dbc9563 (code+tests), aeffea27 (SKILL.md), e17ef585 (A12 lens signal); suite 2358 runs, 0 failures, 0 errors. Escalation 61 (ticket defect: ACs narrower than Required work) fixed by adding AC4 and AC5 on the tracker and rerouting.

Follow-ups: bin/crc-progress CLI to replace the two SKILL.md one-liners: dropped (one-liners work; capture if they cause friction). Verifier vs test-reviewer scope mismatch (AC only vs AC plus Required work): dropped here, carried in the session handoff for capture. Missing test_changes in briefs: already #1227.

## Resolution **Done:** Crc::ProgressTable renders one markdown block: position line, detector table (wave0 TSVs, findings.yml shape counts, ledger verdict counts) with Baseline, Now, Delta and Prior final columns. Crc::WaveProgress records each wave. crc-refactor SKILL.md shows the table before wave 0 and after each wave; close-out uses the last wave's table. **Evidence:** Implementation 111 complete (27 dispatches, 34 min); commits 4dbc9563 (code+tests), aeffea27 (SKILL.md), e17ef585 (A12 lens signal); suite 2358 runs, 0 failures, 0 errors. Escalation 61 (ticket defect: ACs narrower than Required work) fixed by adding AC4 and AC5 on the tracker and rerouting. **Follow-ups:** bin/crc-progress CLI to replace the two SKILL.md one-liners: dropped (one-liners work; capture if they cause friction). Verifier vs test-reviewer scope mismatch (AC only vs AC plus Required work): dropped here, carried in the session handoff for capture. Missing test_changes in briefs: already #1227.
jared closed this issue 2026-10-21 22:20:39 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#1217
No description provided.