title: "Extract — "What do we NOT see?"" source: "tasks/TFW-56__review_mode_removal/research/iter1/3_extract.md"
Extract — "What do we NOT see?"¶
Mindset: Analyst. You have the raw findings. Now build structure. Make combinations visible that nobody proposed. Test: "Does my configuration space reveal at least one combination that nobody proposed in the Briefing?" Parent: HL-TFW-56 Goal: Review stops asking which kind of review this is — the
code / docs / specaxis is deleted and the two checks inside it that ever carried signal are promoted into the universal checklist.Headline: the eight mode rows are not eight checks. Read by what they found rather than by what they are called, four of them are one check wearing three genre costumes — and it is the highest-firing check in the entire mechanism. The HL's promotion list names a narrow version of it ("claims traceable to sources") that misses its largest instance.
E1 — The coverage matrix (H1, H2)¶
8 mode rows × 7 universal rows. Cell values: D duplicate · P partial · · absent.
Universal rows as they stand in templates/review/judge.md:
U1 DoD met · U2 Philosophy aligned · U3 Tech debt documented · U4 Style & standards ·
U5 Observations collected · U6 RF completeness §7-9 · U7 Evidence completeness.
| Mode row | non-✅ | U1 | U2 | U3 | U4 | U5 | U6 | U7 | Residue — what no universal row holds |
|---|---|---|---|---|---|---|---|---|---|
| Test coverage | 23.4% | P | · | · | · | · | · | P | Does the evidence bear on the claim? U1 asks if the AC is met, U7 asks if evidence exists. Neither asks whether green tests test the thing |
| Analytical quality | 25.0% | · | P | · | P | · | · | P | Is the method sound / are self-declared gates honest? |
| Source attribution | 22.2% | · | · | · | · | · | · | P | Do the cited sources support the claim? |
| Source verification | 12.5% | · | · | · | · | · | · | P | same as above |
| Breaking changes | 8.5% | · | · | · | · | · | · | · | Compatibility with existing consumers — absent from all seven |
| Content quality | 5.9% | P | · | · | D | · | · | · | ~none — U4 covers clarity/tone |
| Code quality | 4.5% | · | P | · | D | · | · | · | Design soundness — U4 is naming/conventions; the 6 ❌ are contract violations |
| Security | 4.0% | · | · | · | · | · | · | · | Safety — absent from all seven |
H1 verdict: refuted as stated, and the correction is not "more rows". The HL says three checks are absent (compatibility, source traceability, safety) and five are covered. The matrix says five have residue, not three — but two of the five newly-surfaced ones (Test coverage, Analytical quality) turn out to be the same residue as the two the HL already identified. Collapsing by residue rather than by name gives four, not three, and not eight.
H2 verdict: confirmed. Line-by-line against the three mode files:
| Mode verify action | Already mandated unconditionally? | Where |
|---|---|---|
code 1 · docs 1 · spec 1 — open min_verify_ratio of files, escalate on discrepancy |
✅ yes | review.md Verify step + verify.md; identical text in all three mode files |
code 2 — re-run ≥1 build/test command |
✅ yes | verify.md Checkpoint |
code 3 — cross-reference RF §3 checkmarks against TS DoD |
✅ yes | verify.md TS↔RF section; judge U1 |
code 4 — if "Tests pass" claimed → check test file exists |
✅ yes | review.md Trust Protocol row |
docs 2 — check document structure matches spec |
⚠️ partial | Nothing mandates structural conformance; U1 covers it only if the TS wrote an AC for it |
docs 3 — spot-check 2-3 key claims/sources |
❌ no | This is the action behind the Source-verification residue. Not in verify.md |
spec 2 — check citations traceable to real artifacts |
❌ no | same residue |
spec 3 — verify data claims against primary sources |
❌ no | same residue |
The HL asserts H2 on the strength of code's two actions and never enumerates docs/spec.
Three docs/spec verify actions have no unconditional home. They are not checklist rows — they
are Verify-stage actions, so promoting a judge row does not rescue them. DoF-1 is live here.
E2 — The unexpected combination: four rows are one check in three genres¶
Read the Evidence cells of the non-✅ rows rather than the row titles. The findings converge:
| Row | Genre | An actual finding |
|---|---|---|
| Test coverage | code | "All large suites pass, but the acceptance contract is green with a compiled forbidden production collector" |
| Test coverage | code | "1577 JVM/server + 72 Android are green, but the defining constructor bypass is untested and invisible to the current pin" |
| Analytical quality | spec | "Собственные completeness gates отмечены зелёными при невыполнении" |
| Source attribution | spec | "Один primary-source claim неверен, восемь source bindings отсутствуют" |
| Source verification | docs | "Security/source samples pass, migration and changeset source checks fail" |
Every one is the same shape: the artifact carries a green signal, and the green signal does not establish the claim. In code it is a passing test that tests the wrong thing; in spec it is a self-declared gate marked green while unmet; in docs it is a citation that does not support the sentence. The genre changes the instrument; the check is identical.
Combined firing rate of the four: 28 non-✅ in 174 rows = 16.1% — well above both the mode average (10.2%) and the universal baseline (9.4%). This is the most productive check TFW's review has, and it currently exists only as three genre-specific fragments behind a gate.
The HL's promoted row — "Claims traceable to sources" — captures the docs/spec fragments and misses the code fragment, which is the largest one (141 of the 174 rows). Promoting the HL's wording would carry ~35% of the signal and drop the rest, which is DoF-1 in the precise sense the HL defines it: coverage loss disguised as simplification.
Corrected survivor set — four rows, by residue:
| # | Promoted row | Absorbs | Evidence rate |
|---|---|---|---|
| S1 | Evidence bears on the claim — does the proof offered actually establish what it is offered for? (green tests that test the thing · cited sources that support the sentence · self-declared gates that were truly met) | Test coverage · Analytical quality · Source verification · Source attribution | 16.1% (28/174) |
| S2 | Backward compatibility — do existing consumers survive? (APIs, wire shapes, migrations, doc anchors, renumbered template sections) | Breaking changes | 8.5% (12/141) |
| S3 | Design soundness — does the implementation honour the contract it claims, beyond naming and style? | Code quality residue | 4.5% (7/155) — but 6 of 7 are hard ❌ |
| S4 | Safety — explicit N/A permitted (F21) | Security | 4.0% (6/150) |
Dropped as genuine duplicates: Content quality (U4 Style & standards — the sole ❌ in 17 rows is a content-accuracy finding that S1 also covers).
S3 is the one I would flag as contestable: its residue overlaps U2 Philosophy aligned (HL §7 principles), and four of its six ❌ are arguably principle violations. A coordinator could defend folding S3 into U2 by sharpening U2's wording rather than adding a row. That decision belongs to the TS, not to research — but it must be made consciously, because leaving it implicit is how six ❌ findings lose their home.
E3 — Configuration Space¶
Seven options × the six Gather dimensions. Not evaluated here — elimination is Challenge's job. D1 substance · D2 firing · D3 priming · D4 consumers · D5 extension · D6 generality.
| Config | What it is | D1 | D2 | D3 | D4 | D5 | D6 |
|---|---|---|---|---|---|---|---|
| C1 | Delete, promote HL's 3 rows (the HL as frozen) | assumes 3 absent | assumes ~0 firing | assumes Alt A | Alt A | Alt A | Alt B |
| C2 | Delete, promote corrected 4 rows (S1-S4, S1 reworded to cover code) | 4 absent by residue | 16.1/8.5/4.5/4.0% | assumes Alt A | Alt A | Alt A | Alt A |
| C3 | Delete axis, promote 4 rows, migrate the 3 orphan verify actions into verify.md |
as C2 + Verify layer | as C2 | Alt A | Alt A | Alt A | Alt A |
| C4 | Project-optional axis — keep mechanism, default_mode: none disables it |
unchanged | unchanged | Alt B | Alt B | Alt B | Alt B |
| C5 | Non-gated descriptor — no file, no key, no WAIT; one free-text line in the header (the HL's H6 fallback) | rows still lost unless paired with C2/C3 | n/a | Alt B | Alt A | Alt A | Alt A |
| C6 | Extend the enum (prompt/design/architecture) |
+2 synonym rows each | untested | Alt B | Alt A | Alt C | Alt C — violates F13 |
| C7 | Replace genre with rigour — delete code/docs/spec, and let the header declare verification depth (the variable the field actually writes there), bound to the surviving min_verify_ratio |
as C2 needed separately | n/a | Alt B via a different label | Alt B — touches the key the HL keeps | Alt A | Alt A |
C7 is the combination nobody proposed, and it comes straight out of G6 rather than from
invention: 8 of the 13 free-text qualifiers reviewers wrote into the mode field encode how hard they
looked (full mode — §6 guardrail, abbreviated — full codebase verified by AFD-6, Round 3,
89,6% LOC-budget), not what genre it was. The field is already being repurposed. C7 says: the
axis was measuring the wrong variable, and the right one already has a config key.
C7 is not a recommendation — it enlarges scope, touches min_verify_ratio (DoF-4 territory),
and is a design proposal that belongs in an HL amendment or a sibling task, not smuggled into a
deletion. It is recorded because the Configuration Space exists to make it visible.
Excluded as obviously contradictory: multi-select (HL §10 already shows it converges on a union
= one universal checklist reached via a gate; G6's six field instances confirm reviewers do this
anyway) and "leave it alone" (the stale config.md pointers and the wrong default_mode: code
default are real costs nobody defends).
E4 — What the numbers do and do not license¶
The HL's argument has two claims stacked on one measurement. They must be separated, because one survives and one does not.
| Claim | Status | Evidence |
|---|---|---|
| "The mode rows produce no findings" | ❌ false | 65 non-✅ in 637 rows across 203 reviews; 10.2% vs 9.4% universal baseline; all 8 rows fire; no decay over 5 months; 28 of 63 tasks; ≥9 reviewer identities |
| "The mode rows never changed a verdict" | ✅ true | 0 of 203 reviews had a mode row as the sole non-✅. Every REVISE with a mode failure had ≥1 universal failure (median 4) |
| "Therefore the axis can be deleted with 3 promoted rows" | ⚠️ does not follow | The rows fire; the findings mostly have no other home (62/65 lexically distinct — an upper bound, but not zero); the promotion list is mis-specified (E2) and the docs/spec verify actions are orphaned (E1) |
The base-rate argument the HL borrows from TFW-53 Phase C is about stages, and the transfer is not clean. A stage costs a 🛑 WAIT and a file load whether or not it finds anything; a checklist row costs one line in a table the reviewer is already filling. The base rate that justifies killing a stage does not, at the same value, justify killing a row — the denominators are different. And here the base rate is not even low.
What genuinely survives from the HL, and it is substantial:
- The gate is unjustified — 0 verdict flips means the 🛑 WAIT buys nothing.
- The three mode files duplicate verify.md in their first action and are byte-identical across
three installs — pure maintenance cost (G5, H5).
- The config key is wrong-by-default in this repo and routed by three stale pointers.
- docs and spec are synonyms — confirmed: their four rows collapse into one residue (S1).
- The Mode: template fields carry no behaviour once the gate is gone.
That is a real and defensible task. It is just not the same task as "the rows never fired".
E5 — H4's residue: the removed-key gap¶
update.md categorises files, never keys. A framework key deleted upstream is invisible to its
🟢/🟡/🔴 triage, so an existing project keeps tfw.review.default_mode: code indefinitely, pointing
at a workflow step that no longer exists. No corruption — but silent orphaning, and the same class of
stale-pointer debt as TD-106, which this task exists partly to close.
Two options for the TS, both cheap:
- (a) CHANGELOG ### Removed entry naming the key, plus one line in update.md Step 3
extending 🔴 to removed config keys. Generalises past this task.
- (b) Task-local migration note only. Cheaper, leaves the framework gap for the next removal.
Also recorded and out of scope: min_verify_ratio sits in the tfw.review block that update.md
marks framework → update, so a project that tuned it loses the tuning on any upgrade. Pre-existing,
not caused by this task → tech-debt candidate.
Checkpoint¶
| Found | Remaining |
|---|---|
| Four rows are one check in three genres — evidence-bears-on-claim, 16.1% firing, the most productive check in TFW review. The HL's promoted wording captures ~35% of it | Exact wording and N/A grammar for S1 — TS/HL work, not research |
| Corrected survivor set is 4 (S1-S4), not 3 — and S3 (design soundness) is contestable against U2, which is a decision the TS must make explicitly | Whether S3 becomes a row or a sharpening of U2 |
H2 has a hole the HL never checked: three docs/spec verify actions have no unconditional home. Promoting judge rows does not rescue Verify-stage actions |
Whether they migrate into verify.md (C3) or are explicitly declined |
The two HL claims separate cleanly: "rows never fire" is false; "rows never flipped a verdict" is true. The gate, files, key and Mode: fields are still defensible removals |
Whether the owner accepts a re-scoped task — coordinator's call |
C7 surfaced: the field is already being repurposed to declare verification depth, the variable min_verify_ratio owns. Recorded, not recommended |
Out of scope for this HL; sibling-task candidate |
H4 residue: update.md has no removed-key rule; silent orphaning, no corruption |
(a) framework fix vs (b) task-local note — TS decision |
Sufficiency: - [x] External source used? — LLM-judge rubric research (composite dilution, redundant-criteria degradation) applied to the promotion design; the 203-review external corpus underpins every rate - [x] Briefing gap closed? — coverage matrix built and it corrected the HL rather than confirming it - [x] Configuration Space built from Gather dimensions? — 7 configs × 6 dimensions, C7 unproposed before
Stage complete: YES → User decision: autonomous run authorised at briefing; proceeding to Challenge without a gate