Skip to content

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

  1. The axis is deleted, not renamed. .tfw/workflows/review/ and its three mode files are gone. No code/docs/spec, no prompt, no design, no architecture, no multi-select.
  2. The mode gate is gone. review.md loses its mode step and its πŸ›‘ WAIT, and its steps renumber contiguously with Step 0 = Session Naming, like every other TFW workflow.
  3. Substantive survivors are promoted, not dropped. The universal judge.md checklist 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.
  4. 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.
  5. tfw.review.default_mode is removed from config; min_verify_ratio is untouched.
  6. Adapters and entry points re-sync, and the stale config.md step pointer dies with the key.
  7. History is not rewritten. Existing REVIEW files keep their Review Mode headers; 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 §14

Context 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.md F13 (domain-agnostic), F20 (two workflow classes), F21 (explicit N/A), F22 (template minimalism), F24 (heuristics over instructions) 8. knowledge/process.md F19 + TD-106 β€” the Step 0/Step 1 anomaly this deletion closes

Key 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.md Step 1 renumbers Steps 2-8 β†’ 1-7. External references to those numbers exist only in config.md and 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 four code verify actions already live in verify.md Checkpoint and the Trust Protocol. The three orphaned docs/spec verify actions β€” spot-check 2-3 key claims/sources Β· check citations traceable to real artifacts Β· verify data claims against primary sources β€” are migrated into verify.md as unconditional actions, or each is declined in the RF with a written reason (A2) 5. templates/REVIEW.md β€” Review Mode header 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_mode removed, min_verify_ratio untouched 7. config.md β€” review.default_mode row removed, min_verify_ratio row'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; the Reviewer (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.md 11. VERSION bump + CHANGELOG.md entry recording the removal and D42's revocation. Its ### Removed block 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 general update.md rule 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.md contains 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.md has no Mode: 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/spec verify 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.md and verify.md carry no Mode: field. All four code-mode verify actions remain mandated by verify.md Checkpoint and the review.md Trust Protocol, and the three docs/spec verify actions are either present in verify.md as unconditional actions or declined in writing. (A2)
  • βœ… 6. templates/REVIEW.md has no Review Mode header field and no mode-specific placeholder; its Β§3 Judge table matches judge.md's universal checklist row-for-row.
  • βœ… 7. tfw.review.default_mode is absent from .tfw/project_config.yaml and .tfw/templates/project_config.yaml; min_verify_ratio and its 0.42 default behave exactly as before.
  • βœ… 8. config.md no longer routes review.default_mode, and its review.min_verify_ratio row names the correct step number in the renumbered workflow.
  • βœ… 9. conventions.md Review subfolder entry carries no mode vocabulary, and Β§14 carries the anti-pattern: adding a review checklist row that cannot produce a finding.
  • βœ… 10. glossary.md defines 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. VERSION bumped and CHANGELOG.md records the removal, the promoted rows and D42's revocation. Its ### Removed block names the removed config key explicitly, not only the deleted files, so an existing project upgrading can see that default_mode is gone β€” /tfw-update triages files and would not surface it. (added by A5, narrowed: the general update.md removed-key rule is out of scope and deferred β€” Β§8)
  • βœ… 13. TD-106 is closed in TECH_DEBT.md with the reason recorded.
  • βœ… 14. Grep gate: grep -rn "code / docs / spec\|default_mode: code\|Review Mode\|review/{code" .tfw/ .claude/ .agent/ .agents/ --exclude=CHANGELOG.md returns 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_ratio behaviour 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 empty review/ 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

  1. Delete, don't relabel β€” a mode field kept "for information" is the same maintenance cost with none of the behaviour.
  2. No coverage loss without a recorded home β€” every removed row is promoted, proven duplicate, or explicitly declined with a reason. Silence fails the review.
  3. A check that cannot fail is not a check β€” the base-rate rule TFW-53 already applied to stages, applied to rows.
  4. 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.
  5. 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.
  6. History is evidence, not debt β€” existing REVIEW files and CHANGELOG entries stay exactly as written.
  7. Single Source of Truth, behavioural adapter parity β€” one copy in .tfw/, adapters promise the same behaviour, not the same bytes (D54).
  8. 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.py and editions/ are clean; every hit was already in the HL's file list. The one real gap is update.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 code reviews; universally applied, the same check catches self-declared green gates in spec work and unsupported citations in docs work, which is exactly what the spec and docs fragments 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, and update.md may 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

  1. 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: grep for default_mode and Review Mode across the docs build, update.md, editions/, and read update.md's CONFIG-merge rules for key removal (H4, H5).
  2. 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).
  3. 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 + code header 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