HL β TFW-56: Remove the Review Mode Axis¶
Date: 2026-08-13 Author: Coordinator (Claude Code) Status: π‘ TS_DRAFT β research complete, all 7 amendments ruled and applied, contract re-frozen Research: iteration 1 β verdict SUFFICIENT; H3 refuted, Β§3 corrected by A1 Contract: π FROZEN β approved by the owner 2026-08-13 Β· re-frozen 2026-08-13 after amendments A1βA5, A7 Frozen: Β§1 Β· Β§3 Β· Β§4 Β· Β§5 Β· Β§6 Β· Β§7 β locked on owner approval Free: Β§2 Β· Β§7.2 Β· Β§8 Β· Β§9 Β· Β§10 Β· Β§11 β research updates these directly Append-only: Β§12 Amendment Log β the only channel for changing a frozen section Baseline:
git log --grep="TFW-56/freeze"Sibling scope split (owner, 2026-08-13): the same session raised three review questions. This task carries only the mode axis. The consolidator / subagent re-architecture went to TFW-45 addendum.
1. Vision π FROZEN¶
Review stops asking which kind of review this is. The code / docs / spec selection β a config
key, a π WAIT gate, three byte-identical files and four template fields β is gone, and the checks
it was gating are promoted into the universal checklist, where every review sees them instead of one
genre in three. (Β§1 amended by A7: the original clause read "the two checks inside it that ever
carried signal". All eight rows fired somewhere in a 637-row corpus; the selection is the ceremony,
not the checks.) What to verify is declared once, by the TS: acceptance criteria (D49) and
Evidence: fields (D52). Nothing declares it a second time, more weakly, behind a gate.
Impact: One fewer blocking gate per review and one fewer stale config key per project. A reviewer
opening review.md sees Session Naming as Step 0 like every other TFW workflow β the anomaly
TD-106 warned about disappears instead of being annotated. And the review surface that
TFW-53 Phase C
is about to load with goal defence gets smaller first, not larger.
"I stopped answering a question that never changed what I checked."
2. Current State (As-Is) π’ FREE¶
The rows fire β the gate does not. Measured across three repositories¶
β οΈ This section was inverted by research iteration 1 (RES D2/D3, R1). Its original claim β "the axis has never produced a finding" β was measured on this repository alone and does not replicate. It is preserved below as the local sub-sample it always was, and the frozen Β§3 coverage table that rests on it is under amendment A1.
The corpus: 203 mode-carrying REVIEW files, 637 mode-specific rows, three TFW installs β
ai-first-devices (149 reviews, VERSION 0.9.0), helpdesk (70, 0.8.7), this repository (61, 1.0.0).
Comparability was gated on a per-file drift check, not on version stamps: AFD's entire review surface
is byte-identical to 1.0.0 and helpdesk's only drift is Evidence-Layer rows (2_gather G1).
| Measure | Mode-specific rows | Universal rows, same reviews |
|---|---|---|
| Firing rate, raw non-β | 10.2% | 8.4% |
| Firing rate, hard (β οΈ carrying "acceptable / not blocking" discounted) | 7.7% | 8.3% |
| Rows that never fired anywhere | 0 of 8 | β |
| Hard non-β | 49, including 20 β | β |
| Findings that do not restate a failing universal row | 62 of 65 (lexical upper bound) | β |
The defensible statement is equal productivity, ~8% each β mode rows are indistinguishable from the universal rows they were to be folded into. The researcher's first headline claimed mode rows were more productive and was corrected mid-research once β οΈ severity was separated from β (RES D13). An independent coordinator spot-check of AFD reproduces the direction with a coarser parse (~25 non-β of ~330 parseable rows β 7.6%); absolute counts depend on parse boundaries, the conclusion does not.
What the same corpus confirms about the gate: in 0 of 203 reviews was a mode row the sole non-β driving the verdict. Every REVISE that contained a failing mode row carried a median of four failing universal rows alongside it (2_gather G4). The rows carry signal; the selection ceremony in front of them decides nothing.
The local sub-sample, kept for the record. Measured across 17 judge.md files in this repository:
| Metric | Value |
|---|---|
| REVIEW files total | 61 |
Carrying a Review Mode field (introduced TFW-38, 2026-04-14) |
18 |
| Distribution | docs 10 Β· spec 5 Β· code 3 |
| Mode-specific checklist rows filled | 38 |
| β β 33 Β· N/A 4 Β· β οΈ 1 Β· β 0 | The β οΈ is TFW-46/A Breaking changes, on RF section renumbering |
judge.md with no Mode-Specific section at all |
TFW-41/A β the mandate is not even enforced |
Why this sample said zero: the repository is markdown-only β nothing to break, no tests to miss β
and it was scored under a default_mode: code that Β§2 itself calls wrong for this project. Three of
the four N/A cells are code-genre rows on markdown. "Never fires" was a property of the sample.
The base-rate argument no longer applies to the rows β only to the gate¶
TFW-53 killed a proposed fifth review stage on this ground:
"base rate ~4 goal-based blocks in 149 reviews β a dedicated stage would report 'aligned' ~145 times and become the rubber stamp it was meant to replace" β HL TFW-53 Β§4 Phase C
Applied honestly to the measured corpus, that standard now splits:
| Component | Base rate | Verdict under TFW-53's rule |
|---|---|---|
| The mode rows | ~8% hard, all eight fired, 20 β | Not ceremony. They match the universal rows they sit beside |
| The mode selection gate | 0 verdict flips in 203 reviews | Ceremony. It reports a genre and changes nothing |
The four-row convergence β one check in three genre costumes¶
Read by what they found rather than by what they are called, four of the eight rows are the same check: the artifact carries a green signal, and the green signal does not establish the claim.
| Row | Genre | Firing | An actual finding |
|---|---|---|---|
| Test coverage | code |
23.4% (141 rows) | "suites pass, but the acceptance contract is green with a compiled forbidden production collector" |
| Analytical quality | spec |
25.0% (8) | "ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ completeness gates ΠΎΡΠΌΠ΅ΡΠ΅Π½Ρ Π·Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠΈ Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ" |
| Source attribution | spec |
22.2% (9) | "ΠΎΠ΄ΠΈΠ½ primary-source claim Π½Π΅Π²Π΅ΡΠ΅Π½, Π²ΠΎΡΠ΅ΠΌΡ source bindings ΠΎΡΡΡΡΡΡΠ²ΡΡΡ" |
| Source verification | docs |
12.5% (16) | "migration and changeset source checks fail" |
Combined: 28 non-β
in 174 rows = 16.1% β the highest-firing check in TFW review, and it exists
today only as three genre fragments behind a gate. docs and spec being synonyms is confirmed:
their rows collapse into a single residue, and that residue fires hardest inside code reviews (R3).
The three mode files barely differ¶
code.md |
docs.md |
spec.md |
|
|---|---|---|---|
| Verify action 1 | min_verify_ratio on files |
identical | identical |
| Distinctive verify action | re-run build/test Β· check test file exists | β | β |
| Checklist row A | Code quality (conventions, naming) | Content quality (clarity, accuracy) | Analytical quality (logic, methodology) |
| Checklist row B | Test coverage | Source verification | Source attribution |
| Checklist row C/D | Security Β· Breaking changes | β | β |
docs and spec are synonyms of each other. And code's two distinctive verify actions are
already universal, in the shared template and workflow, not in the mode file:
| Mode-file action | Where it already lives, unconditionally |
|---|---|
| "re-run at least 1 build/test command if possible" | templates/review/verify.md Checkpoint β "Ran at least 1 build/test command (or documented why not)?" |
| "if Tests pass claimed β check test file exists" | review.md Trust Protocol row β "Tests pass" β Verify β re-run or check test file exists |
So the axis duplicates what is already mandated in its first action β but the claim that no
verify action is orphaned is false. Three docs/spec actions have no unconditional home: spot-check
2-3 key claims/sources, check citations traceable to real artifacts, verify data claims against
primary sources. They are Verify-stage actions, so promoting a Judge row does not rescue them
(RES D7, amendment A2).
Field signals that the axis does not classify the work¶
| Signal | Where |
|---|---|
19 of 203 labels (9%) deviate from the enum β 6 multi-value (docs + code), 13 with free-text qualifiers. 8 of the 13 encode verification depth (full mode β Β§6 guardrail, abbreviated, Round 3, 89,6% LOC-budget), not genre |
2_gather G6 (R2) |
An owner override recorded in the header: "spec β owner override of the configured code default" |
REVIEW TFW-53/A |
default_mode: code is wrong for this repository and was never corrected β it was overridden per review instead |
.tfw/project_config.yaml:60 |
| The mode files are byte-identical across three installs, two framework versions and two product domains β never once used as a project extension point | 2_gather G5 (H5 β confirmed) |
Reviewers are not asking for more genres. They are repurposing the one free-text slot in the header to
declare how hard they looked β a rigour axis, not a genre axis. That signal is real and is
explicitly not this task's scope: it touches min_verify_ratio, which DoF-4 protects. Carried
forward as a sibling proposal (Β§8).
Trace integrity β a finding for any future replication¶
AFD's .tfw/VERSION reads 0.9.0 while its entire review surface is byte-identical to 1.0.0.
A version stamp does not track framework-file drift. Cross-project measurement must diff files
(2_gather G1, R10). This is why the corpus was drift-gated rather than version-filtered.
The axis is already drifting¶
config.md and both of its adapter copies still route the key to "Step 0: Select Review Mode".
It has been Step 1 since TFW-41/B. Three files carry a stale pointer to a step that never fires a
finding β the maintenance cost is real and it is being paid for nothing.
What declares "what to check" today¶
| # | Declaration | Strength |
|---|---|---|
| 1 | TS Β§5 Acceptance Criteria (D49, requirements-first) | Binding β Judge row 1 checks against it |
| 2 | TS Evidence: fields β EV file (D52/D53) |
Binding β Judge row 7, verify.md Evidence Verification |
| 3 | Review mode | 2β4 rows that have never failed, selected behind a π gate |
Three parallel declarations of the same thing. The weakest one is the only one with a gate.
Adjacent work β boundaries¶
| Task | Status | Relationship |
|---|---|---|
| TFW-53 Phase C | π΄ planned, DoD frozen | Shared files: review.md, templates/review/judge.md, templates/REVIEW.md, glossary.md, conventions.md Β§14. C adds the Purpose Check; this task removes the mode section from the same files. No frozen DoD of TFW-53 mentions mode files, so no amendment is required β but sequencing is mandatory (Β§8) |
| TFW-45 | βοΈ FROZEN | Consolidator / subagent re-architecture. Downstream of this task and of TFW-53/C. This task frees the term "review mode" for it |
TD-106 / knowledge/process.md F19 |
open | Both describe review.md's non-standard Step 0/Step 1. Deleting the step closes the debt instead of documenting it |
3. Target State (To-Be) π FROZEN¶
What changes¶
- The axis is deleted, not renamed.
.tfw/workflows/review/and its three mode files are gone. Nocode/docs/spec, noprompt, nodesign, noarchitecture, no multi-select. - The mode gate is gone.
review.mdloses its mode step and its π WAIT, and its steps renumber contiguously with Step 0 = Session Naming, like every other TFW workflow. - Substantive survivors are promoted, not dropped. The universal
judge.mdchecklist absorbs the checks that the mode rows carried and the universal set lacked. Every removed row is accounted for as promoted, already covered elsewhere, or declined with a stated reason β silence is not an option. Mode:disappears from the stage templates and the REVIEW header. What kind of work it was is already legible from the TS and the RF.tfw.review.default_modeis removed from config;min_verify_ratiois untouched.- Adapters and entry points re-sync, and the stale
config.mdstep pointer dies with the key. - History is not rewritten. Existing REVIEW files keep their
Review Modeheaders; CHANGELOG entries stay as written. The trace of a removed mechanism is part of the record.
The coverage decision β where the eight mode rows go¶
Superseded by A1, approved by the owner 2026-08-13 with one owner-approved coordinator modification: design soundness sharpens the existing U2 Philosophy aligned row instead of becoming an eleventh row. The original three-row table it replaces claimed Test coverage and Code quality were "already covered"; a 637-row measurement contradicts both.
The rows are grouped by residue β what no universal row holds β not by name. Firing rates are measured, per DoF-2 as sharpened by A6.
| Mode row | Measured firing | Disposition |
|---|---|---|
code Test coverage |
23.4% | β S1, jointly with the three below |
spec Analytical quality |
25.0% | β S1 |
spec Source attribution |
22.2% | β S1 |
docs Source verification |
12.5% | β S1 |
code Breaking changes |
8.5% | β S2 new universal row |
code Security |
4.0% | β S4 new universal row, explicit N/A permitted |
code Code quality |
4.5% (6 hard β) | β S3, folded into U2 β the six failures are contract violations, not naming or style, so U4 does not hold them |
docs Content quality |
5.9% | dropped β a true duplicate of U4 Style & standards, the only one of the eight |
The promoted set:
| # | Row | What it asks | Combined firing |
|---|---|---|---|
| S1 | Evidence sufficiency | The artifact carries a green signal β does that signal establish the claim? A passing test that tests the wrong thing, a self-declared gate marked green while unmet, a citation that does not support its sentence | 16.1% (28 of 174) |
| S2 | Backward compatibility | Does the change break existing consumers β an API, a template section number, a doc anchor, a downstream process? | 8.5% |
| S4 | Safety | Secrets, credentials, destructive operations. Low frequency, asymmetric cost β retained on consequence, not on rate | 4.0% |
| S3 | folded into U2 | Is the design itself sound against the stated principles β not "is it named well" | 4.5% |
S1 must not be named like U7. U7 Evidence completeness asks whether evidence exists; S1 asks whether it establishes the claim. Two adjacent rows with converging names collapse into one within a few reviews β so the naming is part of the deliverable, not decoration (D28).
Net: universal checklist 7 rows β 10, not 11 β inside the working band the promotion risk in Β§9 names. The selection gate, the config key, three files and four template fields go away.
3.1 Result Visualization¶
Written from the finished state. Every change carries its file; the value sits in the same picture.
Every file that changes. 3 deleted, 19 modified, 0 created β a project adopting this pays
one /tfw-update and gains a shorter review.
.tfw/
ββ workflows/
β ββ review/ β DELETED β the whole folder
β β ββ code.md β 16 lines
β β ββ docs.md β 13 lines
β β ββ spec.md β 13 lines
β ββ review.md β Step 1 "Select Review Mode" + π WAIT
β β β mode-file load in Verify
β β β» Steps 2-8 β 1-7, Step 0 = Session Naming (standard at last)
β ββ config.md β review.default_mode row Β· β» fix stale step pointer
ββ templates/
β ββ review/
β β ββ map.md β "Mode:" field
β β ββ verify.md β "Mode:" field (build/test action already here β nothing to move)
β β ββ judge.md β "Mode:" field Β· β Mode-Specific Checklist section
β β + 3 promoted rows: S1 evidence sufficiency Β· S2 compatibility
β β Β· S4 safety
β β β» U2 sharpened to hold S3 design soundness (A1, owner-modified)
β ββ REVIEW.md β "Review Mode" header Β· β mode placeholder comment
β β β» Β§3 Judge table matches judge.md row-for-row
β ββ project_config.yaml β review.default_mode (min_verify_ratio stays)
ββ project_config.yaml β review.default_mode (min_verify_ratio stays)
ββ conventions.md β» Review subfolder entry Β· + Β§14 anti-pattern: a checklist row
β that cannot produce a finding is ceremony
ββ glossary.md β» "coordinator in review mode" disambiguated β one meaning per name
ββ VERSION Β· CHANGELOG.md β» bump + entry recording [D42](../../knowledge-index.md#architecture-decisions) revoked
.claude/commands/ β» tfw-review.md Β· tfw-config.md
.agent/workflows/ β» tfw-review.md Β· tfw-config.md
.tfw/adapters/codex/skills/ β» tfw-review/SKILL.md ("review-mode WAIT gate" line)
.agents/skills/ β» tfw-review/SKILL.md
TECH_DEBT.md β» [TD-106](../../reference/tech-debt.md) closed β the anomaly is deleted, not annotated
The reviewer's first minute β before and after.
BEFORE AFTER
ββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββββββ
Step 0 name the session Step 0 name the session
Step 1 read project_config default_mode Step 1 Map β work starts here
guess the mode from task context
"Review mode: [docs]. Switch?"
π WAIT for the owner
load workflows/review/docs.md
Step 2 Map Step 2 Verify
Step 3 Verify (+ mode verify actions, Step 3 Judge
action 1 identical in all 3 modes) Step 4 Decide
Step 4 Judge (+ 2-4 rows that have β¦
never failed in 38 fills)
β¦
The Judge checklist β before and after.
BEFORE AFTER β 10 rows, every rate measured
1 DoD met? 1 DoD met?
2 Philosophy aligned 2 Philosophy aligned + DESIGN SOUNDNESS 4.5%
3 Tech debt documented β absorbs S3; the 6 hard failures here
4 Style & standards were contract violations, not style
5 Observations collected 3 Tech debt documented
6 RF completeness Β§7-9 4 Style & standards
7 Evidence completeness 5 Observations collected
6 RF completeness Β§7-9
ββ Mode-Specific, gated βββββββββ 7 Evidence completeness β does it EXIST?
loaded only after the π gate 8 EVIDENCE SUFFICIENCY β does it PROVE? 16.1%
β S1: four gated rows were one check
code: Code quality 4.5% in three genre costumes. Now asked
Test coverage 23.4% in every review, not one in three
Security 4.0% 9 Backward compatibility 8.5%
Breaking changes 8.5% 10 Safety β explicit N/A permitted 4.0%
docs: Content quality 5.9%
Source verif. 12.5% dropped: Content quality β the only true
spec: Analytical qual. 25.0% duplicate of row 4
Source attrib. 22.2%
β the strongest check in TFW review
was visible to one review in three
What the grep gate proves on the last day.
$ grep -rn "code / docs / spec\|default_mode: code\|Review Mode\|review/{code" \
.tfw/ .claude/ .agent/ .agents/ --exclude=CHANGELOG.md
(no matches)
$ ls .tfw/workflows/review/
ls: cannot access '.tfw/workflows/review/': No such file or directory
$ ls tasks/TFW-53__*/phase-a/REVIEW__*.md # history intact
> **Review Mode**: spec _(owner override β¦)_ β still there, as written
The value, stated as what stops happening. A reviewer stops answering a question that never once changed a verdict β 0 of 203 reviews had a gated row as the sole non-β . A project stops carrying a config key whose default is wrong for it, and a maintainer stops fixing stale pointers to a step that decides nothing. And the strongest check the methodology has β the green signal does not establish the claim, firing at 16.1% β stops being visible to one review in three.
3.2 Value Flow¶
TS is written
β
βββΊ Β§5 Acceptance Criteria ββββββββββββββ
βββΊ Evidence: fields ([D52](../../knowledge-index.md#architecture-decisions)) ββββββββββββββ€ what to check β declared ONCE
β
RF is delivered β
β βΌ
βΌ ββββββββββββββββββββββ
/tfw-review β Judge checklist β
β β 10 universal rows β
β β no mode read β explicit N/A β
β β no π WAIT β (F21) β
β β no mode file load ββββββββββββββββββββββ
βΌ β
Map β Verify β Judge β Decide βββββββββββββββ
β
βΌ
VERDICT
Value created:
ONE DECLARATION β the TS says what matters; nothing contradicts it more weakly
GATE REMOVED β one fewer blocking stop per review, zero coverage lost
PROMOTION β compatibility + traceability now checked in EVERY review, not one in three
NO ANOMALY β review.md Step 0 = Session Naming; [TD-106](../../reference/tech-debt.md) closed by deletion
SMALLER SURFACE β TFW-53/C loads goal defence onto a shorter file
4. Phases π FROZEN¶
Single phase. 22 files touched against a 30-file budget (max_files_per_phase: 30,
max_modified_files: 30), almost all of it deletion. Splitting core from adapters β the TFW-42/C,
TFW-46/C precedent β would open a desync window and buy a second TS/RF/REVIEW cycle for a task whose
verification is a single grep.
Phase A: Remove the axis π΄¶
Requires: Independent β but see Β§8: land after TFW-53 Phase C, or coordinate at TS time
β οΈ Shared files with TFW-53 Phase C:
review.md,templates/review/judge.md,templates/REVIEW.md,glossary.md,conventions.mdΒ§14Context for coordinator: 1.
.tfw/workflows/review.mdβ Step 1 (mode selection + WAIT), Step 3 Verify (mode-file load), Trust Protocol 2..tfw/workflows/review/{code,docs,spec}.mdβ the full content being deleted, so the coverage table in Β§3 can be verified line by line 3..tfw/templates/review/{map,verify,judge}.mdβMode:fields, Universal Checklist, Mode-Specific section, Checkpoints 4..tfw/templates/REVIEW.mdβ header field, Β§3 Judge table, mode placeholder comment 5..tfw/workflows/config.md:92-93β propagation rows, one of them stale 6. D41 (4-stage review + mode selection), D42 (mode files β revoked by this task), D46 (WAIT gate at mode selection), D49 (requirements-first TS), D52/D53 (Evidence Layer), D54 (adapter parity = behavioural), D25 (Progressive Disclosure β the original argument for mode files) 7.knowledge/philosophy.mdF13 (domain-agnostic), F20 (two workflow classes), F21 (explicit N/A), F22 (template minimalism), F24 (heuristics over instructions) 8.knowledge/process.mdF19 + TD-106 β the Step 0/Step 1 anomaly this deletion closesKey decisions: D42 revoked (precedent: D53 revoked TFW-46 D16). D41's stage flow is kept β only its mode-selection clause dies. D46's WAIT gate loses its subject; the Reviewer Identity and Trust Protocol halves of D46 stay.
β οΈ Cascade dependency: removing
review.mdStep 1 renumbers Steps 2-8 β 1-7. External references to those numbers exist only inconfig.mdand its two adapter copies, and are already stale. TD-106 exists precisely because someone renumbered this file before.Deliverables: 1.
.tfw/workflows/review/deleted with all three mode files 2.review.mdβ mode step and WAIT gate removed, mode-file load removed from Verify, steps renumbered contiguously, internal cross-references updated 3.templates/review/judge.mdβMode:field and Mode-Specific section removed; S1 evidence sufficiency, S2 backward compatibility and S4 safety added as universal rows with explicit-N/A grammar, and U2 sharpened to hold S3 design soundness per the Β§3 coverage table. S1 must be worded so it cannot be read as U7 (A1, owner-modified) 4.templates/review/map.md,verify.mdβMode:field removed. All fourcodeverify actions already live inverify.mdCheckpoint and the Trust Protocol. The three orphaneddocs/specverify actions β spot-check 2-3 key claims/sources Β· check citations traceable to real artifacts Β· verify data claims against primary sources β are migrated intoverify.mdas unconditional actions, or each is declined in the RF with a written reason (A2) 5.templates/REVIEW.mdβReview Modeheader field and mode placeholder removed; Β§3 Judge table realigned row-for-row with judge.md 6.project_config.yaml+templates/project_config.yamlβtfw.review.default_moderemoved,min_verify_ratiountouched 7.config.mdβreview.default_moderow removed,min_verify_ratiorow's step pointer corrected 8.conventions.mdβ Review subfolder entry cleared of mode vocabulary; Β§14 anti-pattern added: a review checklist row that cannot produce a finding 9.glossary.mdβ no term defines review modes; theReviewer (AI β coordinator in review mode)heading disambiguated so "review mode" carries one meaning (D28) 10. Adapter + entry-point sync:.claude/commands/tfw-{review,config}.md,.agent/workflows/tfw-{review,config}.md,.tfw/adapters/codex/skills/tfw-review/SKILL.md,.agents/skills/tfw-review/SKILL.md11.VERSIONbump +CHANGELOG.mdentry recording the removal and D42's revocation. Its### Removedblock names the config key, not only the files β a removed key is otherwise invisible to/tfw-update, which triages files only (A5, narrowed by the owner: the generalupdate.mdrule is deferred, see Β§8) 12.TECH_DEBT.mdβ TD-106 closed with the reason: the anomaly was deleted, not annotated
5. Definition of Done (DoD) π FROZEN¶
- β
1.
.tfw/workflows/review/no longer exists; no mode file remains anywhere in.tfw/. - β
2.
review.mdcontains no mode step, no mode WAIT gate and no mode-file load; its steps are contiguous with Step 0 = Session Naming, and every internal reference to a renumbered step is correct. - β
3.
templates/review/judge.mdhas noMode:field and no Mode-Specific Checklist. Its universal checklist is 10 rows: the seven existing ones, with U2 sharpened to cover design soundness, plus S1 evidence sufficiency, S2 backward compatibility and S4 safety. S1 is worded so that it cannot be confused with U7 Evidence completeness β one asks whether evidence exists, the other whether it establishes the claim. The explicit-N/A grammar is structural: a skipped row is visibly marked as skipped, never left as a silent β . (supersedes the original three-row wording β A3; set corrected by A1, owner-modified) - β
4. Every one of the eight mode-specific rows and each of the three orphaned
docs/specverify actions is accounted for in the RF as promoted (naming its destination), already covered (naming the universal row or template section that holds it) or declined (with the reason) β none silently disappears. (extended by A4) - β
5.
templates/review/map.mdandverify.mdcarry noMode:field. All fourcode-mode verify actions remain mandated byverify.mdCheckpoint and thereview.mdTrust Protocol, and the threedocs/specverify actions are either present inverify.mdas unconditional actions or declined in writing. (A2) - β
6.
templates/REVIEW.mdhas noReview Modeheader field and no mode-specific placeholder; its Β§3 Judge table matchesjudge.md's universal checklist row-for-row. - β
7.
tfw.review.default_modeis absent from.tfw/project_config.yamland.tfw/templates/project_config.yaml;min_verify_ratioand its 0.42 default behave exactly as before. - β
8.
config.mdno longer routesreview.default_mode, and itsreview.min_verify_ratiorow names the correct step number in the renumbered workflow. - β
9.
conventions.mdReview subfolder entry carries no mode vocabulary, and Β§14 carries the anti-pattern: adding a review checklist row that cannot produce a finding. - β
10.
glossary.mddefines no review-mode term, and "review mode" has exactly one meaning across.tfw/(D28). - β
11. All six adapter and entry-point copies carry no mode reference and match
.tfw/behaviourally (D54). - β
12.
VERSIONbumped andCHANGELOG.mdrecords the removal, the promoted rows and D42's revocation. Its### Removedblock names the removed config key explicitly, not only the deleted files, so an existing project upgrading can see thatdefault_modeis gone β/tfw-updatetriages files and would not surface it. (added by A5, narrowed: the generalupdate.mdremoved-key rule is out of scope and deferred β Β§8) - β
13. TD-106 is closed in
TECH_DEBT.mdwith the reason recorded. - β
14. Grep gate:
grep -rn "code / docs / spec\|default_mode: code\|Review Mode\|review/{code" .tfw/ .claude/ .agent/ .agents/ --exclude=CHANGELOG.mdreturns zero matches, and the command with its output is recorded as evidence. - β 15. History intact: no existing task REVIEW file and no past CHANGELOG entry is edited to erase the mode field (TFW-40 D4 precedent β historical texts are not rewritten).
6. Definition of Failure (DoF) π FROZEN¶
- β 1. A check or verify action available today disappears without a recorded home in the RF β coverage loss disguised as simplification.
- β 2. A promoted row ships without an evidenced firing rate, or the promoted set pushes the universal checklist past the point where rows are read rather than used. (sharpened by A6 β
RESTRICT, applied on filing. The corpus now provides per-row firing rates, so the original wording "a row that cannot produce a finding" was satisfiable by assertion, which is precisely what let the Β§3 table through.) - β 3. A stale step reference survives the renumbering anywhere in
.tfw/or the adapters β the TD-106 trap, sprung a second time. - β 4.
min_verify_ratiobehaviour changes as collateral of removing the sibling key. - β 5. Existing REVIEW files or past CHANGELOG entries are rewritten to remove the mode field.
- β 6. Adapters left desynced from
.tfw/, or the Codex skill still names a "review-mode WAIT gate" that no longer exists. - β 7. The axis is renamed rather than removed β a mode field kept "for information", a
default_mode: none, or an emptyreview/folder left in place. - β 8. The change collides with TFW-53 Phase C in a shared file and forces an amendment against TFW-53's frozen DoD.
On failure: DoF-1/2/4 β revert the affected file to the pre-task baseline and re-derive the coverage table before retrying. DoF-3/6 β fix forward, the grep gate is the acceptance test. DoF-5 β restore from git; the trace is the product. DoF-8 β stop, file an amendment in TFW-53 Β§12 rather than editing a frozen section.
7. Principles π FROZEN¶
- Delete, don't relabel β a mode field kept "for information" is the same maintenance cost with none of the behaviour.
- No coverage loss without a recorded home β every removed row is promoted, proven duplicate, or explicitly declined with a reason. Silence fails the review.
- A check that cannot fail is not a check β the base-rate rule TFW-53 already applied to stages, applied to rows.
- What to check is declared once β by the TS: acceptance criteria (D49) and Evidence fields (D52). A second, weaker declaration behind a gate is worse than none.
- Explicit N/A over silent skip β F21. A promoted row that is often N/A is a conscious trace; a mode-gated row is an invisible one.
- History is evidence, not debt β existing REVIEW files and CHANGELOG entries stay exactly as written.
- Single Source of Truth, behavioural adapter parity β one copy in
.tfw/, adapters promise the same behaviour, not the same bytes (D54). - Structural enforcement over promise β the acceptance test is a grep whose output is recorded, not a claim that the sweep was done.
7.2 Knowledge Citations π’ FREE¶
| # | Source | Item | How it applies |
|---|---|---|---|
| 1 | KNOWLEDGE.md Β§1 | D42 β Review mode files, mode-specific checklists, Progressive Disclosure | The decision this task revokes. Its stated premise ("44% of the old checklist was code-only") is not disputed; its outcome β 0 findings in 38 rows β is |
| 2 | KNOWLEDGE.md Β§1 | D41 β 4-stage review flow + mode selection with π WAIT | The stage flow is kept intact; only D41's mode-selection clause dies |
| 3 | KNOWLEDGE.md Β§1 | D46 β Reviewer Identity, Trust Protocol, WAIT gate at mode selection | The WAIT gate loses its subject; identity and Trust Protocol are untouched, and the Trust Protocol is where one deleted mode action already lives |
| 4 | KNOWLEDGE.md Β§1 | D49 β Requirements-first TS, acceptance criteria as the binding declaration | Principle 4: the TS already says what to check |
| 5 | KNOWLEDGE.md Β§1 | D52 / D53 β Evidence Layer, mandatory evidence/, 4-status vocabulary |
The executable-vs-textual distinction the mode axis was really groping for already exists here |
| 6 | KNOWLEDGE.md Β§1 | D54 β Adapter parity is a behavioural promise, not a file-layout promise | DoD-11: six adapter copies must behave the same, not match byte-for-byte |
| 7 | KNOWLEDGE.md Β§1 | D28 β Naming creates behaviour; one name = one behaviour | DoD-10: "review mode" must not mean two things once the axis is gone; also the counter-risk in H6 |
| 8 | KNOWLEDGE.md Β§1 | D25 β Progressive Disclosure (mode files loaded only when selected) | The original justification for mode files. It holds only if the loaded content earns its load; 38 rows say it does not |
| 9 | KNOWLEDGE.md Β§1 | D53 revoking TFW-46 D16 | Precedent that a recorded decision can be revoked by a later task rather than quietly ignored |
| 10 | .tfw/README.md Β§ Values |
Structural Enforcement β gates should be structural, not procedural | DoD-14: a recorded grep is the acceptance test, not a checkbox |
| 11 | .tfw/README.md Β§ Values |
Naming Creates Behaviour β if you must explain what a step does, it is named wrong | The mode step needed a config key, a table and a WAIT to explain itself |
| 12 | .tfw/README.md Β§ Values |
Single Source of Truth β one copy per rule, adapters reference | Six adapter copies of the mode step are the cost being removed |
| 13 | knowledge/philosophy.md | F13 β TFW is domain-agnostic; no code-specific terminology | Kills the extension option: prompt/design/architecture are software-domain enumeration inside a domain-agnostic framework |
| 14 | knowledge/philosophy.md | F21 β Explicit N/A turns a silent skip into a conscious trace | Principle 5 and the grammar of the three promoted rows |
| 15 | knowledge/philosophy.md | F22 β Template minimalism, Β«Π½Π΅ Π·Π°Ρ Π»Π°ΠΌΠ»ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½Β» | Four Mode: fields and a placeholder comment across four templates |
| 16 | knowledge/philosophy.md | F20 β Two workflow classes: investigative (staged) vs procedural | The stages survive; this task removes a parameter, not a stage |
| 17 | knowledge/philosophy.md | F24 β Instructions produce compliance, heuristics produce competence | 33 β out of 38 is compliance. The rows were filled, not used |
| 18 | knowledge/process.md | F19 β review.md is the only workflow with a non-standard Step 0/Step 1 |
The anomaly is deleted rather than annotated; F19 becomes historical |
| 19 | TECH_DEBT.md | TD-106 β the Step 0 renumbering trap in review.md |
DoD-13 closes it; the cascade warning in Β§4 is taken from it |
| 20 | conventions.md Β§6 | Scope budgets, and the project override to 30 files | Single-phase decision in Β§4 |
| 21 | conventions.md Β§14 | Anti-patterns registry | DoD-9 adds the row-that-cannot-fail anti-pattern so the axis cannot regrow under a new name |
| 22 | HL TFW-53 Β§4 Phase C | The base-rate argument that killed the fifth review stage | Β§2: applied to the measured corpus the standard splits β the gate is ceremony (0 verdict flips), the rows are not (~8%, matching the universal baseline) |
| 23 | External β Gawande, Do-Confirm checklist design (2_gather G7) | "Focus only on critical items that are commonly missed or have severe consequences if overlooked" β low frequency is not disqualifying when consequence is high | The strongest support for promoting Safety at a 4.0% firing rate, which the HL previously argued from cost-asymmetry alone |
| 24 | External β checklist length, 5-9 item working-memory band (2_gather G7) | "Each additional item needs to earn its place by addressing a specific, consequential risk" | Β§9 new risk: the promotion target of 10-11 flat rows exceeds the band, and every reviewer reads all of them every time. Cuts against the HL's own design |
| 25 | External β LLM-as-judge rubric research (2_gather G7) | Composite dilution (equal-weighted many-dimension composites underperform their best dimension); redundant criteria degrade judge accuracy; judges are order-sensitive | Supports dropping true duplicates and warns against appending promoted rows at positions 8-11. The reviewers here are all LLM agents, so this is directly on point |
| 26 | External β role/persona priming (2_gather G7) | "Role prompting systematically increases expertise depth while reducing clarity" β a measured, non-zero, two-sided effect | First external support for D28's prediction that the label itself does something. H6 remains untested in-corpus; this is why it is recorded as unresolved rather than dismissed |
8. Dependencies π’ FREE¶
| Dependency | Status |
|---|---|
TFW-53 Phase C β shares review.md, judge.md, REVIEW.md, glossary.md, conventions.md Β§14 |
π΄ planned, DoD frozen. Recommendation: this task lands first β C then edits a file with no Mode-Specific section, and C's own DoD-28 word budget on review.md gets easier. If the owner prefers C first, the two must be coordinated at TS time, file by file |
| No frozen TFW-53 DoD names a mode file | β
verified β DoD 18-29 name judge.md, review.md:28, REVIEW.md, glossary.md, conventions.md Β§14. No amendment to TFW-53 required |
| TFW-45 addendum | βοΈ FROZEN β downstream of both. Benefits: smaller surface, and the term "review mode" freed |
/tfw-update config-merge semantics for a removed framework key |
π΄ verified gap (was β¬ unverified). update.md triages at file granularity and has no rule for keys, so a removed key is invisible to its π’/π‘/π΄ categorisation. Failure mode is silent orphaning of default_mode: code in existing projects, not corruption. Amendment A5 proposes the fix; see Β§9 for the scope objection |
| Rigour axis β reviewers repurposing the header to record verification depth | β¬ sibling proposal, out of scope here. 8 of 13 field qualifiers encode depth (abbreviated, Round 3, 89,6% LOC-budget). Touching it means touching min_verify_ratio, which DoF-4 protects. To be filed as its own task after TFW-56 lands |
tfw.review.min_verify_ratio is lost on upgrade for any project that tuned it |
β¬ pre-existing defect, not caused by this task β the key sits inside a tfw.review block that update.md marks framework β update. β TECH_DEBT candidate at review time (RES FC5) |
9. Risks π’ FREE¶
| Risk | Probability | Impact | Mitigation |
|---|---|---|---|
| A mode row carried value the 38-fill sample cannot show | β MATERIALISED (was Medium) | High | Realised exactly as written. 637 rows across 3 repos: all eight fired, 20 β, ~8% hard. Mitigation is now amendment A1 β the corrected four-residue promotion set β not the frozen Β§3 table |
| The axis's real function was priming the reviewer, not the rows | π΄ unresolved β test unavailable | Medium | H6 could not be tested: the 77 unlabelled REVIEWs are structurally different documents (median 0 parseable Judge rows), not labelled reviews minus a label. External evidence says role priming has a measured two-sided effect. Decision-relevance collapsed: the rows demonstrably fire, so deletion loses coverage either way. Insurance option C5 (non-gated descriptor) remains available |
| Promoted rows exceed the 5-9 checklist band and dilute the checklist β 10-11 flat equal-weight rows, all read every time | Medium | Medium | New (R7). Mitigation is structure plus load-bearing explicit-N/A grammar (A3), not appended rows. LLM-judge composite dilution and order-sensitivity make the tail positions the weakest ones β appending three rows at 8-10 is the shape the research warns about |
| Step renumbering leaves a stale reference | Low | Medium | DoF-3 + the grep gate; the three known references are already stale and are in scope |
| An external project depends on the mode files as its extension point | β CLOSED | β | H5 confirmed: byte-identical across 3 installs, 2 versions, 2 domains. Never used as an extension point. No mitigation needed |
| Collision with TFW-53 Phase C in a shared file | Medium | High | Β§8 sequencing; DoF-8 forbids resolving it by editing a frozen section |
| Single phase means one larger review | Low | Low | The acceptance test is a recorded grep plus a 22-file diff that is almost entirely deletion |
/tfw-update mishandles a removed config key |
β CONFIRMED as a gap (was Low) | Medium | No rule exists at any granularity. A5 proposes the framework fix; the narrower in-scope option is a CHANGELOG ### Removed naming the key, with the general update.md rule filed separately β see the scope objection below |
A5 widens the task past the owner's explicit narrowing β a framework-wide removed-key rule in update.md is not "only mode removal" |
Medium | Low | Coordinator flags it rather than absorbing it. Recommendation: approve A5 narrowed to the CHANGELOG clause, file the update.md rule as its own item. The owner scoped this task to one deletion on 2026-08-13 and a research finding is not authority to widen it (conventions Β§3.17) |
10. RESEARCH Case π’ FREE¶
Blind Spots¶
- β CLOSED β External base rate. Measured: 637 rows / 203 reviews / 3 installs. The rows fire at ~8%, indistinguishable from the universal baseline; the gate flips 0 verdicts. The finding did not replicate β it inverted.
- β
CLOSED β Consumer audit.
gen_docs.pyandeditions/are clean; every hit was already in the HL's file list. The one real gap isupdate.md's missing removed-key rule. - π΄ OPEN β Priming vs rows. Could not be closed, and the reason matters: the unlabelled corpus is not a control group, so the observational test is unavailable rather than null. External research gives D28's prediction non-zero support (role priming increases expertise depth while reducing clarity β a tradeoff, not a pure gain). Closing it requires an experiment: re-review one RF with and without the label. Recorded as a standing limitation.
- π΄ OPEN β Non-software domains. All 637 rows come from two software repositories and one markdown framework repo. No analytics, curriculum or business-process corpus is in reach. F13 claims domain-agnosticism and this evidence base cannot speak to it. Standing limitation, not a scheduled iteration β no data exists to gather.
Hypotheses¶
| # | Hypothesis | Status |
|---|---|---|
| H1 | The eight mode rows contain exactly three checks absent from the universal set β backward compatibility, source traceability, safety β and the other five are synonyms of universal rows or already mandated elsewhere | β REFUTED as stated β five rows have residue, collapsing to four distinct checks. Test coverage (23.4%, the highest-firing row of all eight) and Code quality (6 hard β, contract violations rather than style) are misclassified as "already covered". β A1 |
| H2 | No verify action is lost by deleting the mode files: code's two distinctive actions are already unconditional in verify.md Checkpoint and the review.md Trust Protocol |
π‘ PARTIAL β true for all four code actions, false for three docs/spec actions the HL never enumerated. β A2 |
| H3 | The finding replicates in AFD: mode-specific rows there also produce ~0 findings across ~149 reviews | β REFUTED β AFD 408 rows: 20 β + 18 β οΈ (9.3% raw / 8.3% hard). Helpdesk independently: 190 rows, 14.2% raw, measured against a weaker 6-row universal set. The Β§10 filter condition below has fired |
| H4 | No consumer breaks: nothing outside the six identified files reads default_mode or the Review Mode header, and update.md's CONFIG merge handles a removed framework key without corrupting an existing project's config |
π‘ SPLIT β consumer audit clean (gen_docs.py, editions/ included); removed-key handling has no rule at all. β A5 |
| H5 | No project uses the mode files as an extension point for custom checks; a project needing extra checks can express them in project_config.yaml without a mode axis |
β CONFIRMED β byte-identical across 3 installs, 2 framework versions, 2 product domains |
| H6 | The axis's value was in its rows, not in priming the reviewer β so removing the label does not degrade review behaviour. (D28 predicts the opposite; this is the hypothesis most likely to be refuted) | π΄ UNRESOLVED β test unavailable, not null. The expected control group turned out to be a different class of document. Closing it needs an experiment, not a measurement. No longer decision-critical: the rows fire, so deletion loses coverage regardless |
The pre-registered filter fired, and I am not honouring its written response β here is why. Β§10 states: "H3 false β the axis works in other projects; make it project-optional instead of removing it." H3 is false. That filter was written on an assumption the same research refuted: that genre gating is what makes the rows fire. The convergence finding (RES E2) shows the opposite β gating is what hides the highest-firing check from two thirds of reviews. Test coverage fires at 23.4% and is visible only in
codereviews; universally applied, the same check catches self-declared green gates inspecwork and unsupported citations indocswork, which is exactly what thespecanddocsfragments were independently finding. Making the axis project-optional preserves a gate with 0 verdict flips in 203 reviews and keeps the check fragmented.This is a coordinator override of a pre-registered response, stated as one rather than quietly skipped. The owner may hold the filter and choose the project-optional configuration (C4) instead β it is the honest runner-up and research says so.
Filter β if false, would the approach change? H1 false β more rows must be promoted; the coverage table in Β§3 is wrong. H2 false β verify actions must be migrated into
verify.md, not just deleted. H3 false β the axis works in other projects; make it project-optional instead of removing it. H4 false β migration steps for existing projects, andupdate.mdmay need a change. H5 false β an extension slot is required and the design gains a component. H6 false β do not delete the label. Fall back to a non-gated descriptor: no file, no config key, no WAIT, one line of free text.
Risks of Not Researching¶
- We delete the label on the strength of the rows and lose the priming effect D28 predicts β the failure mode is invisible, because a worse review still produces a REVIEW file (H6).
- We generalize from 18 reviews in one markdown-only repository when a 149-review software corpus with identical templates is available and unmeasured (H3).
- We break an existing project's config on
/tfw-update(H4) β the one failure mode that hits users rather than this repository. - We migrate the wrong survivor set and the promoted rows become three more rows that cannot fail, which is DoF-2 (H1).
Proposed RESEARCH Focus¶
- Gather β measure AFD: how many REVIEW files carry a mode, the status distribution of every mode-specific row, and any instance where such a row drove a REVISE or REJECT (H3). Audit consumers:
grepfordefault_modeandReview Modeacross the docs build,update.md,editions/, and readupdate.md's CONFIG-merge rules for key removal (H4, H5). - Extract β build the coverage matrix: 8 mode rows Γ 7 universal rows, each cell duplicate / partial / absent, to confirm or correct the three-survivor set and the N/A grammar (H1, H2).
- Challenge β attack H6 head-on. Is there any evidence in the 18 reviews that the mode label changed reviewer behaviour beyond the rows it loaded β depth, tone, what got opened? Counter-argument to answer: D28 and the
.tfw/README.md"Naming Creates Behaviour" value both predict that removing a name removes a behaviour, and this task is proposing to remove a name.
Iterations. min_iterations is 2 by config. I would propose an override to 1 with justification:
the question set is narrow, four of six hypotheses are settled by measurement rather than judgement,
and the AFD corpus plus a consumer grep is one Gather. If Challenge cannot close H6 in that pass, a
second iteration is warranted rather than assumed.
Why Not Just...?¶
- Why not add
prompt/design/architecture? Those are domains, not verification methods. The list cannot be closed (data, curriculum, contract, business processβ¦), each addition costs two synonym rows, and enumerating software specialties inside a domain-agnostic framework violates F13. The axis that actually varies is executable-vs-textual, and the Evidence Layer already owns it. - Why not allow selecting 2-3 modes at once? If every selected mode's rows apply, the result is a union of all rows β which is one universal checklist with explicit N/A, reached by way of a gate. The
docs + codeheader already found in the field is evidence that one label does not classify the work; multi-select converges on deletion while keeping the ceremony. - Why not keep the mode as a non-gated descriptive field? That is the H6 fallback, held in reserve. It is not the default because a field with no behaviour still needs a template slot, an instruction and a place in six adapter copies β and it is exactly the kind of decoration that regrows into a gate.
- Why not wait and fold this into TFW-53 Phase C? C is already π΄ with 12 frozen DoD items. Adding a deletion sweep to a task built to prevent scope inflation would be a poor first use of its own contract.
- Why not leave it alone β it costs nothing? It costs a blocking gate per review, a wrong default in every new project, three stale pointers already in the tree, and eight rows of β that dilute a checklist about to be given a real job by TFW-53 Phase C.
11. Strategic Insights (Planning) π’ FREE¶
| # | Insight | Category | Source |
|---|---|---|---|
| S1 | Owner's framing is the design argument, not the data: Β«ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ°ΠΌΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈΒ» β the task frame already declares what to check, so the mode is a second, weaker declaration of something already binding. The measurement confirms an argument that stands without it | philosophy | User, 2026-08-13 |
| S2 | Owner arrived with three options (extend with prompt/design/architecture Β· multi-select 2-3 Β· remove) and chose removal after seeing the 38-row base rate. The evidence changed the decision β which makes the extension option the one that must be explicitly barred, or it returns as an obvious improvement later. This is what the Β§14 anti-pattern is for | process | User, 2026-08-13 |
| S3 | Owner deliberately split the session's three questions: mode deletion ships now, the consolidator/subagent re-architecture waits in TFW-45. Small reversible cleanup is not held hostage to a large unproven redesign β the same sequencing logic that split TFW-54 out of TFW-53 | process | User, 2026-08-13 |
| S4 | Owner connects the cleanup to the goal-defence work: Β«ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°ΡΠΈΡΡ ΡΠ΅Π»Π΅ΠΉ ΠΈ ΡΠ΅Π½Π½ΠΎΡΡΠ΅ΠΉ Π² ΡΠ΅Π²ΡΡΒ» β the checklist is about to be given a check that can actually reject work, which raises the bar for the decorative rows sitting next to it. Cleaning first is not cosmetic; it is preparing the surface | philosophy | User, 2026-08-13 |
12. Amendment Log π’ APPEND-ONLY¶
Research iteration 1 inverted the empirical claim Β§3 rests on. Seven proposals, all ruled:
A6 applied on filing as a RESTRICT (conventions Β§3.10); A1βA5 and A7 approved by the owner
2026-08-13, two of them as modified. Applied to the frozen sections, then re-frozen at a new
baseline β recoverable via git log -E --grep="^\[[^]]*/TFW-56/freeze/", which now returns two
commits: the original freeze and this re-freeze.
| # | Date | Β§ | Type | Proposer | Proposed change | Evidence | Cost | Alternatives considered | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| A1 | 2026-08-13 | Β§3 coverage table | SUPERSEDE |
research iter1 | Replace the 8-row disposition table. Promote four checks by residue: S1 Does the evidence bear on the claim (absorbs Test coverage Β· Analytical quality Β· Source verification Β· Source attribution), S2 Backward compatibility, S3 Design soundness, S4 Safety. Drop Content quality as a true duplicate of U4. The table's "Test coverage β already covered" and "Code quality β already covered" are contradicted by measurement | Test coverage 23.4% non-β , highest of the eight; Code quality 6 hard β that are contract violations, not style; four-genre convergence at 16.1% (RES E1/E2, 637 rows) | Rewrites the Β§3 table and the Β§3.1 before/after diagram; universal checklist becomes 10β11 rows; DoD-3 and DoD-4 must be reworded (A3, A4) | (a) keep the frozen three-row set β carries ~35% of the S1 signal and triggers the HL's own DoF-1 on landing day; (b) keep the axis project-optional (C4) β indicated by Β§10's written filter, but preserves a gate with 0 verdict flips and leaves the strongest check fragmented | β
APPROVED β owner, 2026-08-13 Β· as modified: S3 design soundness sharpens the existing U2 row instead of becoming an 11th row (coordinator proposal, owner-accepted) β universal set becomes 10, inside the 5-9-adjacent working band; S1 must be named so it cannot be read as U7 |
| A2 | 2026-08-13 | Β§3 / Β§4 deliverables | EXTEND |
research iter1 | Add a deliverable: migrate the three orphaned docs/spec verify actions (spot-check 2-3 key claims Β· citations traceable to real artifacts Β· data claims against primary sources) into verify.md as unconditional actions, or decline each with a written reason |
H2 was asserted from code's two actions only; the three docs/spec actions have no unconditional home (RES E1) |
One added deliverable, ~3 lines in verify.md |
(a) treat as covered by the promoted Judge rows β false, these are Verify-stage actions; (b) decline explicitly β allowed by DoD-4's grammar, but must be written, not implied | β
APPROVED β owner, 2026-08-13 |
| A3 | 2026-08-13 | Β§5 DoD-3 | SUPERSEDE |
research iter1 | Name the corrected promoted set instead of the current three rows, and require the explicit-N/A grammar to be structural β a skipped row visibly marked, never silently β | RES D6, D12; F21; 5-9 checklist band and LLM-judge composite-dilution evidence (2_gather G7) | Reworded acceptance criterion plus a template-grammar requirement for the executor | Leave DoD-3 as is β it would then accept a promotion set the measurement contradicts | β
APPROVED β owner, 2026-08-13 |
| A4 | 2026-08-13 | Β§5 DoD-4 | EXTEND |
research iter1 | Extend "every removed row accounted for" to cover the verify actions as well as the checklist rows | A2's evidence | One clause | Rely on DoF-1 alone β a failure condition is not an acceptance test; DoD-4 is where accounting is enforced | β
APPROVED β owner, 2026-08-13 |
| A5 | 2026-08-13 | Β§5 | EXTEND |
research iter1 | Add a DoD item for the removed-key gap: CHANGELOG ### Removed must name the key, and update.md Step 3 must extend π΄ Breaking to removed config keys |
update.md triages files only; a removed key falls through its categorisation (RES E5) |
~4 lines in update.md, one CHANGELOG convention β and it widens the task past the owner's "only mode removal" narrowing (Β§9) |
Coordinator recommends narrowing to the CHANGELOG clause and filing the update.md rule as its own item β a research finding is not authority to widen scope (conventions Β§3.17) |
β
APPROVED β owner, 2026-08-13 Β· narrowed as recommended: only the CHANGELOG ### Removed key-naming clause enters scope (DoD-12). The general update.md removed-key rule is deferred to TECH_DEBT at review time or its own task β Β§8 |
| A6 | 2026-08-13 | Β§6 DoF-2 | RESTRICT |
research iter1 | Sharpen DoF-2 from "a row that cannot produce a finding" to "a promoted row without an evidenced firing rate, or a promoted set that pushes the checklist past the point where rows are read rather than used" | Per-row firing rates now exist, so the old wording was satisfiable by assertion; 5-9 band and dilution evidence make set size a real failure mode | None β narrowing only | Leave DoF-2 as prose β it would stay satisfiable by assertion, which is what let the Β§3 table through | β
APPLIED β no owner verdict required |
| A7 | 2026-08-13 | Β§1 Vision | SUPERSEDE |
coordinator | Replace the frozen clause "the two checks inside it that ever carried signal" with the measured position: all eight rows fired, and the checks are promoted so that every review sees them instead of one genre in three | The clause is now factually false (RES D2) and it also contradicts Β§3, which promotes three. Found by the coordinator while applying refinements, not by research | One sentence in Β§1; no change to what the task builds | Leave it β Β§1 would then carry a false empirical claim as a frozen goal, which is the exact defect TFW-53 exists to make visible | β
APPROVED β owner, 2026-08-13 |
HL β TFW-56: Remove the Review Mode Axis | 2026-08-13