Skip to content

Census — TFW-60 / Phase A, corrective pass

Purpose: the measured baseline the owner's overrun ruling stands on, and the reference the acceptance criteria are read against. Regenerated at the start of the corrective pass, before any further edit, per TS §6 step 1. Measured: 2026-08-26, at c5e447a Baseline for every delta: 80a1680d6a16, the commit before execution opened Host: Windows 11 Pro 26200, Git Bash, Python 3.13.5, pytest 9.0.2, NTFS Supersedes: the first-pass census, whose figures are stale and whose budget position was reported before the rejection.


1. ⚠️ The budget tripwire has fired. This returns to the coordinator.

Configured Ruled (S42 / S44) Measured now Δ vs ruling
Modified files 30 45 46 +1
New files 15 23 29 +6
Files total 30 68 75 +7
LOC 3000 3,985 added · 303 removed

TS §7 sets the condition: "The census exceeding roughly 75 files total, or a new group appearing, without returning to the coordinator — the owner's overrun ruling was given against 45 / 23 / 68, and delegation is never authority to accept a further overrun."

The count is 75 before AC-12 has been executed at all, and AC-12 requires one more new file (phase-a/status.md), taking it to 76. I am raising it rather than absorbing it, and rather than trimming to reach 68 — S44 forbids the second and DoF forbids the first.

Every file of the +7, named

# File Why it exists In the ruled 23/45?
1–6 tasks/[TFW-60](../../HL-TFW-60__conflict_resistant_shared_workspace.md)…/journal/*.md — six events The phase ships a journal as a named deliverable and its own task had none. A model unused on the task that introduces it is a gap a reviewer should not have to find no — the TS create list did not include it
7 .tfw/quickstart.md AC-10 requires Quick Start to describe the shipped model; §4 did not list the file no

Nothing else exceeds the ruling. The 23 new files the TS named are all present and are exactly the 23 it named. The modified set is the ruled 45 plus quickstart.md.

What AC-12 adds on top

Item Files Note
phase-a/status.md for TFW-60 +1 measured below: it is the only phase state file the whole corpus needs
Second precision, phase state, the new lifecycle id 0 every affected file — config, templates, conventions, scripts, workflows, adapter originals — is already inside the modified 46

Projected total on completion: 76.

Two classes that are not counted, and why

Class Ruling Members here
Byte-identical adapter copies S32 38 files under .claude/, .agent/, .agents/ — regenerated by adapter sync
Artifacts of the work itself S46 this file, migration_accounting.md, fixture_transcript.txt, ceiling_measurement.txt, the ONB, RF, EV, REVIEW and review/ stage files

Also outside my count: two journal events written by other roles — the reviewer's 20260826-220659__transition.md and the coordinator's 20260826-230051__transition__saubakirov.md. Including them the tree shows 77; they are not executor product.

S46 is the ruling that matters most for this file: because evidence sits outside the count, there is no budget argument for producing less of it.

2. The trace that was destroyed, and its restoration

The rejected pass shipped tasks/BOARD-SNAPSHOT.md reading Rows captured | 0 against a 61-row board, containing the string TFW- zero times. Eight identifiers reached neither the snapshot nor the index. The review recorded it as verified.

Root cause, stated plainly: after the board was removed from README.md, the migration was re-run to regenerate the snapshot. parse_board() read the live README, found no table, and returned zero rows. The script wrote an empty snapshot over the correct one and reported success. Nothing in the run said the input had vanished.

The fix is structural, not a re-run. The board source is now an explicit argument (--board-rev), and a run yielding zero rows is refused unless --allow-empty-board is passed:

$ python docs/scripts/migrate_board.py --apply
board source: README.md (working tree) -> 0 data rows
REFUSING: the board source yielded zero rows.
  A snapshot of an empty board is not a snapshot, it is a deleted trace.
  If the board has already been removed, name the commit that still had it:
      --board-rev <commit-before-removal>

Restored and verified by count, side by side:

$ git show b094943:README.md | awk '/^## Task Board/,0' | grep -c '^|'
63                          ← 61 data rows + header + separator

$ grep "Rows captured" tasks/BOARD-SNAPSHOT.md
| Rows captured | 61 |

$ grep -c 'TFW-' tasks/BOARD-SNAPSHOT.md
122

61 = 61. TS §6 step 6 is a gate, and it passes.

The eight identifiers that reached nothing in the rejected pass, named individually: TFW-16, TFW-20, TFW-28, TFW-33, TFW-34, TFW-35, TFW-37, TFW-39. All eight were board-only rows — six backlog ideas with no directory, two struck-through absorptions — so the snapshot was their only carrier and emptying it erased them completely. All eight now resolve; the accounting names all 61 by name and reports Unaccounted: 0.

3. Corpus baseline

Relations, not targets. AC-6 and AC-7 close against these, never against a fixed total.

Quantity Command At 80d6a16 Now
Board data rows git show b094943:README.md \| awk '/^## Task Board/,0' \| grep -c '^\|' − 2 61 61 (historical, frozen)
Task directories ls -d tasks/*/ \| wc -l 53 53
TFW-N occurrences git grep -oE 'TFW-[0-9]+' \| wc -l 7,505 8,126
Files carrying one git grep -lE 'TFW-[0-9]+' \| wc -l 666 695
Commit subjects naming a task git log --format='%s' \| grep -cE 'TFW-[0-9]+' 271 286
Task state files tracked git ls-files 'tasks/*/status.md' \| wc -l 0 11

The reference count rose by 621 during the phase — the ONB, the REVIEW, the review stage files and this census all name tasks. This is the evidence behind ONB Q6 and the reason a fixed-count acceptance criterion was replaced by a relation.

Tracked state is now 11, not 10. The rejected pass shipped ten: [TFW-36](../../../TFW-36__content_marketing_blog_series/)'s task folder carries a .gitignore containing *, so its state file existed on disk and never reached Git. It is now force-added — one file, not the folder — so a clean clone has all eleven. The underlying condition is recorded as TD-183 and is not fixed here.

4. AC-12 phase state, confirmed by measurement rather than assumed

The TS asks for this to be confirmed in the census. Measured across all 53 task directories:

Task Phase directories Receives task state? Phase state files needed
TFW-42 a, b, c no — terminal 0
TFW-46 a, b, c no — terminal 0
TFW-47 a, b no — terminal 0
TFW-52 a, b no — terminal 0
TFW-53 a, b, c, d, e no — terminal 0
TFW-55 a, b no — terminal 0
TFW-60 a yes 1
total 1

Seven multi-phase task directories exist; six are terminal and receive no task state, so they receive no phase state. Migration creates phase state for no legacy task. The budget impact is 1 file, confirming the TS's "one or two" and refuting the seventeen a per-phase sweep of the corpus would have cost.

5. File census against TS §4

Group Ruled Measured Note
Canonical rules 4 4 conventions, glossary, .tfw/README, compilable_contract
Configuration 2 2 live + template project_config.yaml
Lifecycle workflows 8 8 update.md now genuinely changes — the initial_seq residue (F10)
Templates 13 13
Adapter originals 10 10 8 SKILL.md, not 7: tfw-release phrases it without the README.md prefix and the first sweep's pattern missed it
Documentation generator 2 2 gen_docs.py, test_integration.py
Release surface 3 3 VERSION, CHANGELOG, README
Root entry points 3 3 AGENTS, CLAUDE, RELEASE
Quick Start 0 1 .tfw/quickstart.md — required by AC-10, absent from §4
45 46

6. Verification at this baseline

Gate Command Result
Tests python -m pytest docs/scripts/ 171 passed, 1 skipped (was 68 at baseline; 104 added)
Task-local schema python docs/scripts/gen_index.py --validate 53 tasks validate
Snapshot count side by side, §2 above 61 = 61
Accounting migration_accounting.md 61 named, Unaccounted: 0

7. Return-to-coordinator condition

Recorded, not absorbed:

  • Total 75 now, 76 on completion, against a ruling of 68. Every file of the excess is named in §1.
  • No new group has appeared. The +7 is six journal events — journal/ is a named Phase A deliverable in the TS scope, the HL and AC-3 — plus one Quick Start file that AC-10 requires and §4 omitted.
  • The overrun was not created by scope creep. It is a deliverable the TS specified and forgot to count, and a file AC-10 requires and §4 forgot to list.

The owner ruled 45 / 23 / 68 with the condition that quality must not suffer. Meeting 68 would now mean deleting TFW-60's own journal or leaving Quick Start describing a removed mechanism. Both invert the ruling, so neither is done. The counts above are what a revised ruling would be given against.


Census — TFW-60 / Phase A, corrective pass | 2026-08-26