# V9 — INDEPENDENT FINAL VERIFICATION, BASELINE v2.0.0

I built none of this and I took no docstring, no register closure note and no green checker line on trust. I read the 32 requirements out of `project_data.REQ`, then opened the artefacts myself. I extracted all 48 tables and every paragraph of the delivered `.docx` with python-docx, and separately extracted the delivered PDF with `pdftotext` and read the trade-study sections out of the PDF as well as the Word file, because the PDF is what a reader receives. I opened the workbook twice with openpyxl — once for formulas, once for cached values — and dumped all fourteen sheets. I read every run and every table cell of the Decision Pack through python-pptx, including the table shapes C29 cannot see. I recomputed **every weighted total in all three trade studies by hand** from the matrices printed in the delivered study, and I recomputed **every published sensitivity flip point by hand** as well, which is where trade study 1 comes apart. I re-derived the aged care contribution ($1,002.06), the NDIS contribution ($435.30), the structure comparison ($606.50 / $7,278 / $22,578) and the unit economics from first principles without calling the builder's functions, and read the workbook formulas rather than its values. I printed `BUSINESS_PLAN_A3.html` in headless Chromium two ways, rasterised it at 100 dpi and **looked at the paper**. I then attacked C34 with five mutations, C41 with V8's decoy-block attack, C42 with four stale-artefact substitutions, and C43 and C44 with direct forgeries — all in disposable copies of the whole tree under `/tmp/v9`, never in the project. I viewed D11 and D12 as images. I read `SYSTEM_BREAKDOWN.md`, `Dashboard.html`, `README.md`, `09_Help_Hub/index.html`, `01_System/daily_audit_log.md`, `02_Work/scratch/V5_negative_tests_business_layer.md`, all of `03_Registers/*.csv`, all of `00_Handover/`, `business_plan.json`, and the source of C29, C33, C34, C41, C42, C43 and C44. I ran `run_checks.py` **only inside sandbox copies**, so the project's own `checker_run_log.txt` is untouched. I did not run `build_all.py`.

The headline: **two of the four defects the builder claims to have closed are not closed, and one of them was closed with a statement in a delivered register that is simply false.** DEF-042 fixed the arithmetic and left the prose, the decision register and the sensitivity intact — the exact false sentence DEF-042 records as corrected is still sitting in DEC-004 in three delivered artefacts. DEF-043 claims C41 "refuses a report carrying more than one verdict block"; no such code exists, and I defeated C41 in four minutes with V8's own attack, verbatim. And the two brand-new checkers are both defeatable: I put the wrong trade-study totals V8 found — 2.85 / 4.05 / 2.30 — back into the delivered study and got **ALL CHECKS PASSED, 44 of 44** from the check written specifically to prevent that.

## Did the V8 fixes hold?

| Defect | Fix claimed | Verdict | What you actually checked |
|---|---|---|---|
| DEF-042 | All three trade studies computed by one engine; the unlawful third alternative replaced with a lawful one; C43 recomputes every total | **NO — the arithmetic is fixed and nothing else is** | The arithmetic **is** right. I recomputed all ten totals by hand from the matrices printed in the delivered `.docx` and cross-read them in the PDF: TS1 A1 = 0.60+1.25+1.25+0.40 = **3.50**, A2 = 1.50+0.75+1.25+0.60 = **4.10**, A3 = 1.20+0.50+0.75+0.80 = **3.25**; TS2 CORE **3.30**, SC **3.70**, SIL **2.20**; TS3 A **3.70**, C **3.55**, D **3.20**, B **2.45**. Every one matches the page to the second decimal, and all three weight sets sum to exactly 1.00. **Then it stops.** (a) Section 6.1, "The alternatives" — the *only* place in the study where the alternatives are described — still reads "**A3 — Remain unregistered indefinitely. Eliminated on evidence**". The A3 that Tables 6.1 and 6.2 actually score (support coordination during the window) is never introduced anywhere in the document. The delivered study tells the reader it eliminated A3 and then scores A3 at 3.25. It is hard-coded at `build_study.py:533-540` and was not touched. (b) **DEC-004, delivered in `03_Registers/DEC.csv`, `00_Handover/DEC.csv` and `Project_Registers_v2.0.xlsx`, still lists "A3 Remain unregistered indefinitely" as the third alternative, attributes the new 3.25 to it, and still publishes the exact sensitivity DEF-042 says it corrected: "A2 leads A1 by 1.20 on a 5-point scale. The result would flip only if addressable market were weighted above about 55%."** The lead is 0.60 and the flip is at 37%. The register row that records the fix contains the defect. (c) The timestamp record is false: DEC-004 and the study both state the scores were recorded 2026-08-20T11:05, but A3's scores were written on 2026-09-07 in answer to V8; and `trade_study.py` cites `02_Work/scratch/T1_trade_study_weights.md` as TS1's weights record — **that file does not exist**. (d) The two published flip points are both **exact ties**: at market 37% A1 = A2 = 3.86, at durability 45% A1 = A2 = 4.10. "The result changes hands" is decided by `sorted()` stability on the order the options are declared, not by the arithmetic. |
| DEF-043 | C34's sentinels come from the twin; C41 refuses a report with more than one verdict block; C42 regenerates and compares register content | **NO — one of three is real, one is unimplemented, one is half-real** | **C41: the claimed fix does not exist.** `run_checks.py:1258` is still `_re.search(r"##\s*MACHINE-READABLE VERDICTS\s*```(.*?)```", report, _re.S)` — first match, no multi-block test, not one line changed. I reran V8's attack unchanged: decoy all-PASS block two lines below the title of the V7 report, real block left untouched at the bottom saying `REQ-CON-04=FAIL` and `REQ-BUS-01=FAIL`, both transcriptions flipped to PASS, registers rebuilt, manifest re-gated. Result: **C31 "32 of 32 requirements independently verified; 0 recorded as still failing", C41 PASS, ALL CHECKS PASSED — 44 of 44.** DEF-043's fix statement is a false statement in a delivered register. **C34: real for the failure it names, defeated twice by me** (see below). **C42: the content half is genuinely real** — I truncated `DEF.csv` at DEF-045 and `touch`ed it and got "DEF.csv holds 44 rows, the source of truth projects 45". The clock half still covers only 10 named artefacts plus the CSVs plus `00_Handover/`; the twelve diagrams, `Project_Registers_v2.0.xlsx`, the delivered PDF and `SOURCE_MANIFEST.json` are in neither list. I replaced D5, D11 and D12 with a copy of D1 and `touch`ed them: **ALL CHECKS PASSED — 44 of 44.** Separately, DEF-043's verification-of-fix field says the negative tests are "Recorded in `02_Work/scratch/V5_negative_tests_business_layer.md`". That file was last written at 07:37, before the fix, contains no test on section 9 and no mention of `DEC.csv`, and closes with "ALL CHECKS PASSED — 42 of 42". The evidence cited for the closure is not in the file it names. |
| DEF-044 | A shared helper counts diagrams, slides, formulas, sheets and pages from the artefacts; C44 recounts them | **PARTLY — the counts C44's three regexes match are fixed, the ones they do not are still false** | Fixed and confirmed: "(12 slides)" ×2, "(77 pages)", "455 formulas across 14 sheets", "D1 to D12 as PNG, 12 in all", "all 12 diagrams, D1 to D12" in the troubleshooting fix, "12 diagrams D1 to D12" in the study's compliance appendix, README "12 slides". Still false: the Help Hub deliverables map calls it "**The 47-page study** with every source" (77); the function label "**Brief the decision in ten slides**" survives in `03_Registers/FAH.csv` and twice in the Help Hub (12); the Help Hub reading route still ends "study sections 1 and 9 → **the four ACT items**" (14 open, and the study's own section 1 box names six). C44 matches only `\((\d+) slides\)`, `\((\d+) pages\)` and `(\d+) formulas across` — it is a check on the generator's current punctuation, not on the surface. And nothing was done to `01_System/daily_audit_log.md`, which is V8's D-V8-10 untouched: one entry, headed 2026-09-07, describing the 20 August day-one work — "26 requirements" (32), "53 sourced claims" (74), "15 assumptions" (31), "DEF-001 to DEF-003" (45), "this is the first cycle", "**14 actions owed by Zaid (ACT-001 to ACT-008)**", "16 risks open, 10 rated HIGH" and then "**Six HIGH risks are open**" nine lines later. The study's Appendix B compliance audit still certifies lines 38-41 PASS on the evidence "**Daily audit entry for 2026-08-20** in 01_System/daily_audit_log.md". There is no 2026-08-20 entry. |
| DEF-045 | All four corrections propagated everywhere; the six "PENDING V6" evidence records updated | **PARTLY — three of four propagated; the evidence records were renamed, not fixed** | Genuinely fixed and checked by me: **ASM-028** now reads "$420,113.58 of benefit, a net of $54,386.98" in both delivered assumption registers — `$420,147.70` and `$54,421.10` are gone from the entire tree. **RSK-012**'s mitigation now reads "$302.14 a client a month at Level 1 to $2,749.44 at Level 8"; `$348` survives only in ASM-020, where it describes an *average* budget rather than a classification and is defensible. **300,000** is gone from every file. **SRC-074** now carries the $16.10 reconciliation in RSK-011 and in the study's quotation of it. Not fixed: study finding 5 and section 15.1 still cite "[SRC-068, SRC-069, RSK-011, V4]" for the $16.10 figure and deck slide 9 still cites SRC-068; SRC-074 reaches four surfaces of six. **And the six evidence records now read "PENDING V8" instead of "PENDING V6".** V8 has run — the file is on disk, it drove DEF-042 to DEF-045, and it passed five of those six requirements. The number was incremented; the defect was not closed. EVD-027 to EVD-032 still attribute the proof of every aged care requirement to a pass the register itself calls pending. |

## Attacks on the checkers

Every attack below was run in a full disposable copy of the tree under `/tmp/v9`. Nothing was done inside the project.

**C34 — defeated twice.** The sentinels now come from `business_plan.json` rather than from the page, which is a real improvement: deleting a section that carries a sentinel now fails, and `visibility:hidden` on the third column fails ("2 element(s) never reached the paper"), and 0.4px type fails. But the check reads the PDF **content stream**, not what is visible.
- *White-on-white.* I added `@media print{ .col:nth-child(2) *, .col:nth-child(3) *, .verdict *, footer * { color:#fff !important; background:#fff !important } }`. **C34 PASS: "exactly 1 page, 420mm x 297mm, and all 12 sentinels ... present. Fitted, not clipped."** I then printed that page and rasterised it, and two thirds of the sheet is blank: sections 5 to 9, the value-validation verdict block and the footer are gone. This is V8's D-V8-2, unchanged.
- *Gutted tables.* The twelve sentinels are drawn from the **first** element of each list — `target_market[0]`, `benefits[0]`, `running_costs[0]`, `revenue_model[0]`, `areas_of_concern[0]`. I deleted every table row after the first in every table on the page — **26 rows removed**, the running-costs table, the revenue model, the target market and the concerns list all reduced to a single line. **C34 PASS.** A page can lose most of its content and still "match the thing it projects".
- *Wrong content.* I replaced all 97 dollar figures on the A3 page with `$999,999`, re-gated the manifest, and ran the suite: **ALL CHECKS PASSED — 44 of 44.** Nothing in the suite compares a number on the A3 page against the twin it is a projection of. C33 validates the JSON and compares mtimes and never reads the HTML.

**C41 — defeated, with the fix's own description of itself being false.** See DEF-043 above. The decoy-block attack works exactly as it did for V8. Underneath it sits a larger hole that no attack is needed to see: **`IV_SOURCES["v2.0.0"]` still points at V7's report.** V8 ran against the same baseline, recorded `REQ-SYS-03=FAIL` and `REQ-BUS-01=PASS`, and the project simply did not transcribe it. C41 only tests that a verdict was taken against the *current baseline*; it has nothing to say about a *later* pass against the same baseline. So `03_Registers/REQ.csv`, `00_Handover/REQ.csv`, the dashboard and the study's DoD gate 1 all publish **REQ-SYS-03 = Verified** on the strength of a pass that a subsequent independent verifier overturned in writing. The project chose which verifier counts.

**C42 — the register half holds, the rest does not.** Truncating `DEF.csv` and `touch`ing it is now caught (proven above). But replacing D5, D11 and D12 — the trade-study chart, the budget-constraint chart and the two-entities chart, all three cited as evidence in EVD and all three linked from the Help Hub — with a copy of D1, and `touch`ing them, produces **44 of 44 PASS**. Replacing `03_Registers/Project_Registers_v2.0.xlsx` with the v1.0.0 workbook is caught only incidentally by C14 (text projection age), not by C42. Replacing the delivered study PDF with the v1.0.0 PDF is caught only by C44's page count and C14, not by C42.

**C43 — defeated.** The check is very nearly tautological: it computes `recomputed = sum(scores × weights)` and compares it against `TSM.study_weighted()`, which computes the same expression from the same data. Those two can never disagree. The only test that touches the delivered artefact is `if ("%.2f" % total) not in text` — a bare substring search over the whole study. All three TS1 totals appear a second time in the Appendix B defect history, in the sentence describing the bug: *"The correct totals are 3.50, 4.10 and 3.25."* So the narrative of the fix satisfies the check that the fix worked. I proved it: I opened the delivered `.docx` with python-docx and rewrote Table 6.1's WEIGHTED SCORE row to **2.85 / 4.05 / 2.30** — the precise figures V8 found — re-gated the manifest and touched the PDF. **ALL CHECKS PASSED — 44 of 44, with C43 reporting "10 trade study totals across 3 studies recomputed from their own scores and weights and found in the delivered study".** C43 cannot see the number on the page. It also never looks at DEC-004, never checks that an alternative is described where it is scored, and never tests a sensitivity statement — which is why (b), (c) and (d) of DEF-042 above survived it.

**C44 — defeated.** Its three regexes require the generator's exact punctuation. I edited the Help Hub to say the decision pack has **40 slides**, the workbook **1,200 formulas in total**, the study **running to 5 pages** and the diagrams **D1 to D3, 3 in all**, then re-gated: **ALL CHECKS PASSED — 44 of 44.** The three false counts I found still in the live Help Hub and FAH register ("47-page study", "ten slides" ×3, "the four ACT items") are the same failure at rest.

**Neither C43 nor C44 has a negative test.** The project's own rule, stated at the top of `V5_negative_tests_business_layer.md`, is GOV-E2.4: "a check is only a check once it has been PROVEN able to fail." Both were written in this round, both are cited as the mechanism closing a Major defect, and neither appears in that file — which was last written before they existed. I have now proven that both are incapable of failing on the defect they were written for.

## Verdict table

| Requirement | Verdict | Evidence you personally opened | If FAIL, exactly what is wrong |
|---|---|---|---|
| REQ-SYS-01 | PASS | Study Table 5.1 (table index 9), five rows: core supports "$9,110 to $12,786 (base $10,791)" cited "[Financial Model, Costs sheet; SRC-025 to SRC-041]"; support coordination $3,673; SIL/SDA "$8,600 to $16,900" with DEC-005 naming the exclusion and "NOT MODELLED" stated on the face of the row; working capital $7,319/$15,683. Aged care in Table 18.1 (index 40): one-off $11,157.80, combined $21,948.60, cited [SRC-025 to SRC-041, SRC-065, SRC-066]. I traced $10,790.80 to `Costs!C14` and $21,948.60 to `Structure!B6` and `Combined!D5`. | — (Table 5.1 still cites "Financial Model, **SupportCoordination sheet**" for the $8,757 six-month runway; I dumped every cell of that sheet and the figure is not in it, nor anywhere in the workbook. It is real — `model_export.json` computes 8757.18 = 3,673.20 + 6 × 847.33 — but the citation names the wrong place. Raised by V6, V7 and V8; still open) |
| REQ-SYS-02 | PASS | Study Table 7.0 (index 18), four model rows: core supports "About 4 months ... [ASM-015]"; support coordination "About 2 months"; SIL/SDA "9 to 12 months at the earliest ... [SRC-021]"; aged care "About 4 months, on a registration whose lead time is not published — which is why ACT-011 exists [SRC-065]". Every row carries a source; SRC-021 reads "Certification 9-12 months; verification 4-6 months", which is what the rows claim. | — |
| REQ-SYS-03 | **FAIL** | Study §6 and §6.1 read out of both the `.docx` and the delivered PDF; Tables 6.1 and 6.2 cell by cell; `TS1_CRITERIA`/`TS1_SCORES`/`TS1_ELIMINATED` in `trade_study.py`; DEC-004 in `03_Registers/DEC.csv` and `00_Handover/DEC.csv`; every total and every flip point recomputed by hand. | **Four separate failures of the criterion's elements.** (1) **The study does not show three adoptable alternatives.** §6.1 is the only place the alternatives are described and it reads "A1 — Register first ... A2 — Trade unregistered ... **A3 — Remain unregistered indefinitely. Eliminated on evidence** ... mandatory registration reaches personal care and daily living supports in July 2027, so this option has a known expiry date". Tables 6.1 and 6.2 then score an A3 at **3.25** which is a completely different option — support coordination during the registration window — that the document never introduces. The delivered study scores, ranks and publishes a total for an option it has just told the reader it eliminated as unlawful past July 2027. The lawful third alternative exists in the engine and in the score table and nowhere in the prose. (2) **DEC-004 — a delivered register, in three artefacts — still carries the false sensitivity DEF-042 records as closed**: "A2 leads A1 by **1.20** on a 5-point scale. The result would flip only if addressable market were weighted above about **55%**." From the published matrix the lead is **0.60** and the flip is at **37%**. The criterion requires a sensitivity statement naming the weight change that flips the result; the project publishes two contradictory ones, and the wrong one sits in the decision record. DEC-004's alternatives field also still names "A3 Remain unregistered indefinitely" and its rationale says A3 is eliminated, immediately below a scoring field that gives A3 3.25. (3) **The weights-before-scores record is false and partly fictitious.** DEC-004 and the study both state "scores recorded at 2026-08-20T11:05", but A3's scores were written on 2026-09-07 in response to V8 — the study caption says so in the same table. `trade_study.py` names `02_Work/scratch/T1_trade_study_weights.md` as TS1's weights record; **that file does not exist** (only T3's does). The criterion requires "a weights block whose recorded timestamp precedes the scores block timestamp"; there is no weights block for TS1 at all. (4) The two published flip points are **exact ties** — at market 37%, A1 = A2 = 3.86; at durability 45%, A1 = A2 = 4.10 — resolved by the order the options are declared in Python. Nothing "changes hands" at either point. Also: the section's opening sentence still reads "**Both** trade studies in this study meet that standard" when there are three, and the compliance appendix certifies "all three trade studies carry at least three lawful alternatives", which §6.1 contradicts on its own face. |
| REQ-SYS-04 | PASS | Study Table 7.1 (index 15) and Table 7.2 (index 16), read cell by cell. Six identical weighted criteria across all three models. I recomputed every total: CORE 4,5,3,2,2,4 → 0.80+0.75+0.75+0.40+0.20+0.40 = **3.30**; SC 5,4,2,4,3,5 → **3.70**; SIL 1,1,3,4,2,1 → **2.20**. Exact. Weights sum to 1.00. The sensitivity callout (index 17) reproduces exactly: time 15%→29% from margin gives CORE 3.72 against SC 3.70; stability 25%→39% from margin gives CORE 3.44 against SC 3.42. DEC-003 records the same three totals and its own 25%→40% variant also reproduces (3.45 against 3.40). Every score cites a figure I could find (SRC-015, SRC-018, SRC-049, SRC-034, SRC-021, SRC-050, ASM-008, ASM-013 all exist and say what is claimed). | — |
| REQ-SYS-05 | PASS | `UnitEconomics!B11 = SUM(B5:B10)` → 21.30424, with `B5 = Inputs!$B$5` (73.58, SRC-002) and B6:B9 each `-Inputs!$B$8` × `Inputs!$B$10/$B$11/$B$12/$B$13` (SRC-009, SRC-011, SRC-012, SRC-013). `B13 = -Inputs!$B$9*(1+...)*Drivers!$B$5` → −14.607; `B14 = B11+B13` → 6.69692875. I read the formula strings, not the cached values. No constant anywhere in the chain. | — |
| REQ-SYS-06 | PASS | Study Tables 4.1 (index 7, 17 rows) and 4.2 (index 8, 12 rows), both exactly six columns — Obligation / Authority / Cost / Frequency / Lead time / Source. Tested programmatically: **zero empty cells in either table**, and **zero data rows without a SRC-### in the last column**. The ACQSC lead time is recorded as not published with ACT-011 against it rather than invented. | — |
| REQ-SYS-07 | PASS | `Scenarios` rows 37-45 carry a month-by-month formula-driven cumulative line; `B45 = B44-Costs!$C$14` → −11,638.13; `N45 = MIN(B45:M45)` → **−20,958.80**. Study Table 8.2 (index 21) states the downside deepest hole −$20,959, cash positive "never", cumulative at month 12 −$20,959, alongside three other scenarios. | — |
| REQ-SYS-08 | PASS | Study Table 9.1 (index 23), five numbered falsifiers, each naming a register ID and a checkable party: ASM-008 "if a real provider tells you it is 0.40"; ASM-002 the award schedule; SRC-002 the price limits with BKL-001 as the fix; ASM-015 time to first client; SRC-049 "if government publishes a navigator model". Section 19's box (index 42) carries five more, each with an ID. | — |
| REQ-SYS-09 | PASS | Study Tables 10.1 (index 24, 13 rows) and 10.2 (index 25, 9 rows), both under an explicit "This roadmap is CONDITIONAL" heading. I walked the 27 obligations of Tables 4.1/4.2 against them: WorkCover and portable long service leave both sequenced "BEFORE ANY PAY RUN"; WWCC, ABN, TFN, GST, PAYG, myID, business name, insurance, first aid and the Worker Orientation Module all present; the two omitted are named in the caption with the reason. | — |
| REQ-SYS-10 | PASS | `BreakEven!B6 = Costs!$C$28/UnitEconomics!$B$16` → 39.77; `B7 = Costs!$C$28/UnitEconomics!$B$14` → 126.53; `SupportCoordination!B13 = Costs!$C$28/Inputs!$B$7` → 8.46; aged care 1.0 client from `model_agedcare`. Every one resolves through input cells. SIL/SDA excluded by DEC-005 and named on the face of Table 5.1. | — |
| REQ-SYS-11 | PASS | `BreakEven!B12 = Drivers!$B$14*(Inputs!$B$8*(1+Inputs!$B$10+$B$11+$B$12+$B$13))*(Drivers!$B$6/30)` → 7,318.61; `B13` at 30 days → 15,682.73. Wage rate, hours driver and the ASM-007 payment lag are all live references, no constants. Aged care $4,173.20 at a seven-day lag [ASM-030]; combined $11,491.81, which I checked against Table 18.1 and the dashboard tile. | — |
| REQ-SYS-12 | PASS | Study Table 7.0 fourth column, all four models: core supports "Mandatory registration arrives. Trading unregistered stops being lawful [SRC-014, SRC-015]" with $3,500-$6,000 audit plus $649-$1,825 manual; support coordination the navigator restructure, with "$0 audit and $0 manual TODAY" and the cost if the pause lifts; SIL/SDA "Already in force"; aged care "Not affected by the NDIS change" with its own deferred-price-cap exposure priced. No model silent. | — |
| REQ-SYS-13 | PASS | 12 PNGs on disk and 12 `word/media/*.png` embedded in the delivered `.docx` — I counted both myself from the zip. I read the twelve `figure()` calls in `build_study.py` and confirmed placement, including D11 in section 15 and D12 in section 17. I viewed D11 and D12 at full size: both legible, both numerically correct against the model (D11's six bars reproduce `AC_ClientEconomics!A22:D27` exactly; D12's $993 + $847 = $1,840.50 and $606 / $7,278 / $22,578 reconcile). | — (D11's orange "the modelled average, 5.04 hr" label is still struck through by the dashed line it annotates, and its subtitle still asserts "most buy under five", a claim about the distribution of assessed budgets that no source in the project supports. D12 still pairs "break-even 126.5 hours" — the paid-administration figure — with a red box stating the owner does the administration unpaid, under which the break-even is 39.8. Both raised by V8; both unchanged. The aged care roadmap, Table 10.2, is still the only sequenced roadmap with no diagram, and it is the one the study recommends running first) |
| REQ-SYS-14 | PASS | I pulled the troubleshooting table out of the raw HTML and read it row by row: ten symptom/cause/check/fix/if-that-fails rows covering all nine GOV-G3.4 modes — dead links, link not found, empty chart, blank dashboard, register will not open, two documents disagreeing, #NAME?/#VALUE?, wrong version, phone view, dead source URL. None tells the reader to ask anyone first. The "chart is empty" row now correctly says "all 12 diagrams, D1 to D12". | — (three rows send the reader to `06_Archive/_versions` to restore a known-good copy. **That folder is empty** — see D-V9-6. The criterion counts symptoms, so it passes; a reader following the recovery path finds nothing there) |
| REQ-SYS-15 | PASS | `Dashboard.html` carries "GENERATED FILE ... Rebuilt from `01_System/project_data.py` by `01_System/build_web.py`"; I walked the whole tree and it is the only dashboard. I extracted the twelve `data-metric` attributes myself and independently recomputed two of them — open items 50 from the CSVs, combined capital $44,483 = 32,991.60 + 11,491.81 — and both match. | — |
| REQ-SYS-16 | PASS | I extracted the twelve `data-metric` names from the HTML and matched them against `03_Registers/METRIC_LINEAGE.csv` myself: 18 lineage rows over six fields (Metric / What this number means / Formula in words / Source data / As at / Owner), **zero tiles without a row and zero empty cells across 18 × 6**. | — |
| REQ-SYS-17 | PASS | C22 "15 pack files re-derive from their sources"; C23 "C22 detected a deliberate one-line tamper in HANDOVER.txt and the file was restored". I also diffed all nine shared CSVs between `00_Handover/` and `03_Registers/` and they are identical. The criterion asks only that C22 run, report zero and demonstrate it can fail, and all three are true. | — (V7's standing point holds: C22 hashes the pack against a `MANIFEST.txt` written by the same generator in the same moment, so it proves the pack has not been altered since it was written, not that it re-derives from anything) |
| REQ-SYS-18 | PASS | I parsed `03_Registers/SRC.csv` myself: 74 rows, 51 below High (42 Medium, 9 Low), and the 'Why below High' field is non-empty on all 51. I tested emptiness, not the checker's word. | — |
| REQ-CON-01 | PASS | C05 reports 0.967 over 306 material figures with 10 unmatched — 123, 403, 406.39, 1,849, 5,325, 6,797, 9,997, 16,200, 16,900, 20,959 — every one internal arithmetic or a derived figure I could account for. Zero material external claims with no SRC-### reference. | — (the criterion tests the presence of a reference and it is satisfied. Several references still resolve to rows that do not carry the figure: SRC-068 for $16.10 in study finding 5, §15.1 and deck slide 9; "Financial Model, SupportCoordination sheet" for $8,757; SRC-016 for "agency-managed ... are a large part of the cohort" in TS1's A2 market score, where SRC-016 is about SIL and digital-platform registration and says nothing about cohort composition) |
| REQ-CON-02 | PASS | I extracted the study, the deck and the A3 page to plain text and scanned for New South Wales, Queensland, South Australia, Western Australia, Tasmania, Northern Territory, NSW, QLD, WA, SA, NT: **zero hits in all three**. 47 occurrences of Victoria in the study, 8 on the A3. Every jurisdiction-dependent obligation in Tables 4.1 and 4.2 names Victoria or the Commonwealth. | — (the Decision Pack still never names Victoria at all, in 194 runs. No obligation in it is stated for another state, so the criterion holds, but the artefact most likely to be read alone does not carry its own jurisdiction) |
| REQ-CON-03 | PASS | I parsed the accessed dates myself: 74 rows, 53 at 2026-08-20 and 21 at 2026-09-07, against a currency date of 2026-09-07. None later than the currency date; the oldest is 18 days earlier, well inside the 90-day window. | — |
| REQ-CON-04 | **FAIL** | I ran my own font scan over all three delivered Office artefacts: 0 sub-10pt runs in the study, 0 in the deck (194 runs including the 46 inside slide tables that C29 cannot see), 0 in 1,229 workbook cells. Document tables: 48 in the `.docx`, 2 in the `.pptx`, **none above six columns**. Worksheet grids: **Scenarios 14 columns, Costs 7, TradeStudy3 7.** I also opened the `.xlsx` as a zip: it contains **zero Excel Table parts and zero ListObjects**. DEC-008 read in full; WVR.csv is empty by design; GOV-F4.5a read in the Standard. | The count of tables over six columns is **3, not 0**, on the only measurement the project's own checker actually takes. It reads as zero only under DEC-008, whose Scoring field says "Interpreted by the project on 2026-09-07. **NOT RATIFIED BY ZAID**". **And DEC-008 is wrong on the merits, not merely unratified — see the section below.** GOV-F4.5a names `.xlsx` first and requires it to be "readable on a phone **without horizontal scrolling**"; a fourteen-column cash projection is precisely the thing that rule forbids, and DEC-008's rationale — "a spreadsheet is a grid that scrolls and freezes panes rather than a table that reflows" — describes the prohibited behaviour as the reason for exemption. The decision's own rejected option (a) says applying the limit to worksheets would make the requirement "unsatisfiable"; that is false. Transposing `Scenarios` so the twelve months run down the rows makes it three columns wide and still a twelve-month cash projection. |
| REQ-CON-05 | PASS | I parsed `03_Registers/ASM.csv` myself: 31 rows, **zero with an empty Confidence field, zero with an empty 'What breaks if it is wrong' field**. ASM-028's consequence, which V8 found false, is now correct ($420,113.58 / $54,386.98) and I re-derived both. | — |
| REQ-CON-06 | PASS | C08 returns zero across the controlled set; I spot-checked the credential surfaces myself — `business_plan.json`, the A3 page, the Help Hub, the dashboard, `SYSTEM_BREAKDOWN.md`, all 27 register CSVs and the transfer pack — for email addresses, ABN/TFN-shaped identifiers, key assignments and PEM headers. Nothing. | — |
| REQ-MOE-01 | PASS | I read all 14 rows of `03_Registers/ACT.csv`. **Every one carries a non-empty Due value**; the owner is carried by the register's own column header, "Action owed by Zaid", for all fourteen. ACT-010 and ACT-012 carry conditional dates ("2026-10-31 or before the sixth client") which are still dates. | — (seven of the fourteen are past their stated due date as at the currency date; the criterion does not test that) |
| REQ-MOP-01 | PASS | C27 reports **0.951 over 164 units** carrying a dollar figure, 8 unattributed. I read all eight: one legacy quotation, two trade-study capital score rows (`$10,791 one-off` / `$3,673 one-off`) and five defect-history rows quoting figures that were wrong. Above 0.90 by a clear margin. | — |
| REQ-AC-01 | PASS | I rebuilt $1,002.06 from scratch without touching the model: $30,000/12 = $2,500; less 10% (SRC-063) = $2,250; ÷ $103.11 (SRC-060) = 21.8214 hr; × ($43.03 × 1.1545) = $1,084.04; + $250 pool; less 1.5 × ($50.61 × 1.1545) = $87.64; less $318.75; less $7.50 = **$1,002.06**. `AC_ClientEconomics!B17` is a live formula caching 1002.06053495854; `C17` caches 435.300368749999. Both appear in study Table 15.3 (index 33) on the same stated basis. | — |
| REQ-AC-02 | PASS | Study Table 15.2 (index 32) and `AC_ClientEconomics!A21:D27` span **$10,731 (Level 1, 1.80 hr/wk, $894.25, $302.14)** to **$78,106 (Level 8, 13.11 hr/wk, $6,508.83, $2,749.44)** over six rows. I opened all 18 value cells in formula view: **every one is a live formula** over `A22:A27`, `AC_Inputs` and `Inputs`; not one is typed. D11 renders the same six points. | — |
| REQ-AC-03 | PASS | $606.50 / $7,278.00 / $22,578.00 appear in study Table 17.1 (index 38), in `Structure!D5 (=B5-C5)`, `D7 (=D5*12)` and `D8 (=D5*36+D6)`, and in `business_plan.json`. I recomputed 606.50 = 1,840.50 − 1,234.00, 7,278 = 606.50 × 12, and 22,578 = 606.50 × 36 + 744, with 744 = 21,948.60 − 21,204.60. D12 carries the same three. | — |
| REQ-AC-04 | PASS | Study §15.1 read in full from the PDF. It states the mechanism (dual care-management 15-20% plus package-management 10-15% replaced by one 10% pool, landing on cost bases built for the old structure), cites the pass by name ("an independent verification pass was run specifically to resolve it (V4)"), and names the falsifier ("the DIRECT-SERVICES line turning negative in the quarterly sector report — not the total result, which is already negative and already explained"). All three elements present. | — (the figure is still cited to SRC-068 here, in study finding 5 and on deck slide 9, while SRC-074 — created for exactly this — reaches only RSK-011, `business_plan.json` and the A3 page. Third round on this defect) |
| REQ-BUS-01 | PASS | All four clauses tested myself. **Twin exists**: `business_plan.json`, 21,362 bytes, 12 top-level sections. **Twelve checks**: C33 runs the generator's `validate()` in-process, 12 of 12. **A3 no staler than the twin**: both written 08:16, page not older. **Fits one A3 landscape sheet as measured in a browser**: I printed it in headless Chromium with `prefer_css_page_size=True` and again with `format='A3', landscape=True` — **1 page, 420 × 297 mm, both times** — then rasterised at 100 dpi and **read the paper**. Three columns, sections 1 to 9, the value-validation verdict block and the footer are all on the sheet and legible; nothing clipped, nothing overlapping, nothing touching an edge. I also re-derived the CBA independently: 21,948.60 + 66,258.00 + 7,520.00 + 180,000.00 = 275,726.60 cost; 11,110 × 6.69692875 + 345 × 1,002.06 = 420,113.58 benefit; net **$144,386.98**, ROI 52.4%. Exact. | — (the check that certifies it is defeatable twice over — see the attack section — and the plan's footer still reads `verified_by: "PENDING — independent verification pass V5 has not yet run against this plan"` when V5, V6, V7 and V8 have all run. Neither is a property the criterion tests) |
| REQ-WEB-01 | PASS | `SYSTEM_BREAKDOWN.md` §5 declares the slot with an explicit status — "**Status in this project: SLOT DECLARED, NOT BUILT**" — names GOV-B7.1/B7.2/B7.4 and states the three constraints that bind regardless (credentials in server env vars only, host validation with loopback/private refused, C08 scanning every generated artefact). BKL-011 carries it against REQ-WEB-01. Credential scan returns zero. | — (its evidence record EVD-032 says "Produced by: **PENDING V8**", a pass that has run) |

## Is REQ-CON-04 the right call, or is the project hiding behind an escalation?

Both, and the second more than the first.

The escalation itself is honest. GOV-A1.3 reserves waivers to Zaid, DEC-008 refuses to self-grant one, WVR.csv is empty, and C29 prints "Widest WORKSHEET grid: Scenarios at 14 columns" in every single run so the fact is never buried. That is the right instinct and it is rare.

But the instrument is wrong and the reasoning inside it is wrong, and together they let a requirement sit open that the project could close or correctly retire this afternoon.

- **A waiver was never the right instrument.** A waiver excuses a breach. The question here is what a word in the project's own requirement means, and requirement wording is a change-control matter. The project already knows this: REQ-CON-03's own rationale records that its original wording "was satisfiable only while the project had a single research wave" and that it was **amended** from an equality test to a staleness window because that is "the test GOV-F1.16 actually describes". That is exactly the species of problem REQ-CON-04 has, and the project fixed one and parked the other. CR-004 shows the route is available without Zaid: it changed the acceptance criteria on four requirements — REQ-CON-04 among them — on an independent verifier's evidence, "Approved by the Master Brain".
- **The interpretation is wrong on the merits.** GOV-F4.5a is the rule REQ-CON-04 implements, and it reads: "Office and PDF artefacts (**.xlsx**, .pptx, .docx, .pdf) ... MUST be MOBILE-LEGIBLE — readable on a phone **without horizontal scrolling**". It names the spreadsheet first, and it names horizontal scrolling as the failure. DEC-008's rationale — "a spreadsheet is a grid that **scrolls** and freezes panes rather than a table that reflows" — offers the prohibited behaviour as the ground of exemption. Whatever else is true, the six-column limit was not written to exclude the artefact its parent rule names first.
- **The premise of the chosen option is false.** DEC-008 rejects applying the limit to worksheets because "a twelve-month cash projection cannot be six columns wide and remain a twelve-month cash projection, so the requirement would be unsatisfiable rather than demanding." Transpose it. Months down the rows, three columns across, same projection, phone-legible. The same is true of `Costs` (7) and `TradeStudy3` (7). The requirement is demanding, not unsatisfiable, and the option the decision dismisses as impossible is a morning's work in `build_financial_model.py`.

So: the requirement genuinely fails, the failure is real rather than clerical, and the escalation — while procedurally correct — is being used to hold open a requirement the project could satisfy by restructuring three sheets, or retire honestly by the same change-control route it has already used once. One decision from Zaid closes it; so does one transposed sheet.

## New defects found

**D-V9-1 (Major). The delivered study scores an alternative it has just told the reader it eliminated, and never introduces the one it actually scored.**
Section 6.1 lists "A3 — Remain unregistered indefinitely. Eliminated on evidence, not on opinion", and Tables 6.1 and 6.2 then score an A3 worth 3.25 that is a different option entirely — support coordination during the registration window — which appears nowhere in the study's prose. The callout below the table, "THE ALTERNATIVE THAT WAS SCORED AND SHOULD NOT HAVE BEEN", renders the eliminated option without its `A4` label, so the same identifier names two different things on facing pages. DEF-042's fix reached `trade_study.py` and the two tables it drives and stopped at `build_study.py:533`, which is a hard-coded bullet list. The compliance appendix then certifies "all three trade studies carry at least three lawful alternatives" against a section that says the opposite. This is the whole of REQ-SYS-03's first element, and it is a defect of the delivered document rather than of the engine.

**D-V9-2 (Major). DEC-004 still carries the false sensitivity that DEF-042 records as corrected, in three delivered artefacts.**
"Not close for core supports: A2 leads A1 by **1.20** on a 5-point scale. The result would flip only if addressable market were weighted above about **55%**." From the matrix now printed one table above it, A2 leads A1 by **0.60**, and the flip is at **37%** taken from capital — the study's own §6 sensitivity says so in the same build. This row is in `03_Registers/DEC.csv`, `00_Handover/DEC.csv` and `03_Registers/Project_Registers_v2.0.xlsx`. Its alternatives field still reads "A3 Remain unregistered indefinitely"; its rationale still says A3 is eliminated; its scoring field gives A3 3.25. DEF-045 is the defect whose entire content is "a correction applied where the defect was found rather than everywhere the fact appears is half a correction", and it was closed in the same commit that left this.

**D-V9-3 (Major). DEF-043's fix for C41 was never written, and C41 is defeated by the same attack, unchanged.**
The register states "C41 refuses a report carrying more than one verdict block, because a second block can contradict the first." `run_checks.py:1258` is `_re.search(...)` — first match, no multiplicity test. In a sandbox I reproduced V8's attack move for move and got **44 of 44 PASS with "32 of 32 requirements independently verified"** while the verifier's real block, in the same file, recorded two failures. Behind it: **`IV_SOURCES["v2.0.0"]` still names V7's report.** V8 ran against the same baseline, recorded `REQ-SYS-03=FAIL`, and the project neither transcribed it nor recorded a reason. `REQ.csv` (both copies), the dashboard, the study's DoD gate 1 and C31 therefore all publish REQ-SYS-03 as **Verified** on a verdict a later independent pass overturned in writing. C41 tests staleness against a baseline; it does not test that the source it reads is the *latest* pass, so a builder chooses which verifier counts.

**D-V9-4 (Major). C43 and C44 cannot fail on the defects they were written for, and neither has a negative test.**
C43 recomputes `sum(score × weight)` and compares it against `study_weighted()`, which is the same expression over the same data — the two cannot disagree. Its only contact with the delivered artefact is a bare substring test, `"%.2f" % total in text`, and all three TS1 totals occur a second time inside the Appendix B sentence describing the bug, so the narrative of the fix satisfies the test of the fix. I rewrote Table 6.1's totals in the delivered `.docx` to **2.85 / 4.05 / 2.30** and got **ALL CHECKS PASSED — 44 of 44**. C44 matches three fixed punctuation patterns; I set the Help Hub to say 40 slides, 1,200 formulas, 5 pages and 3 diagrams and got **44 of 44**. Both are cited as the mechanism closing a Major defect. Neither appears in `V5_negative_tests_business_layer.md`, which is the project's own record of GOV-E2.4 and which still ends "ALL CHECKS PASSED — 42 of 42".

**D-V9-5 (Moderate). DEF-043's verification-of-fix cites evidence that is not in the file it names.**
"C34 proven able to fail by deleting section 9 from the page; C42 proven by an unforced content difference in DEC.csv on its first run. Recorded in `02_Work/scratch/V5_negative_tests_business_layer.md`." That file was last written at 07:37, before the fixes; it contains no occurrence of "section 9" and none of "DEC.csv"; its closing standing is 42 checks, not 44. The record of the negative test does not exist.

**D-V9-6 (Moderate). The project's entire rollback and provenance story points at two empty folders, and a compliance gate is certified PASS on it.**
`06_Archive/_versions/` is **empty** and has not been written to since it was created on 20 August. `04_Inputs/` is **empty**. Yet: the Help Hub's recovery section says "Every superseded file is in `06_Archive/_versions/` with a date stamp. Nothing in this project is ever deleted (GOV-D1.7)" and three troubleshooting rows send the reader there to restore; the Dashboard carries a live link to `06_Archive/_versions/` labelled "You want the four superseded working files"; the README describes `04_Inputs/` as "What was given to the project, including the four superseded working files"; DEF-001's corrective action reads "Files moved to `04_Inputs/legacy_unsourced` and archived to `06_Archive/_versions`"; CR-004 and CR-007 both name `06_Archive/_versions/` as their archive snapshot; and the study's Appendix B compliance audit certifies lines 11-16 PASS partly on "Legacy files archived to `06_Archive/_versions` before being moved; nothing deleted." The v1.0.0 snapshot that does exist is in `06_Archive/_superseded/v1.0.0_20260907/`. The four legacy working files are nowhere in the tree. C32 passes because the *folder* resolves; C07 passes because the *link target* exists; nothing checks that an archive contains anything.

**D-V9-7 (Moderate). DEF-044 is closed on three phrasings and left three false counts standing.**
`03_Registers/FAH.csv` and the Help Hub (twice) still describe the function as "Brief the decision in **ten slides**"; the deck has twelve. The Help Hub deliverables map still calls it "**The 47-page study** with every source"; the delivered PDF has 77 pages, and the Help Hub says so correctly four lines away. The reading route still ends "study sections 1 and 9 → **the four ACT items**"; there are fourteen open and the study's section 1 box names six. C44's regexes require the exact strings `(N slides)`, `(N pages)` and `N formulas across` and match none of these.

**D-V9-8 (Moderate). D-V8-10 is untouched: the daily audit log is still a day-one entry wearing today's date, and the compliance audit still cites an entry that does not exist.**
One entry, headed **2026-09-07**, describing the 20 August work: "26 requirements, 9 components and 15 interfaces recorded", "53 sourced claims and 15 assumptions registered", "DEF-001 to DEF-003", "All 26 REQ. All 53 SRC. All 15 ASM.", "this is the first cycle", "All 49 Part I audit lines pass". The project has 32 requirements, 74 sources, 31 assumptions and 45 defects. It contradicts itself twice inside itself: "**14 actions owed by Zaid (ACT-001 to ACT-008)**", and "16 risks open, 10 rated HIGH" nine lines above "**Six HIGH risks are open**". It does not mention Part II, the aged care business, DEC-007, DEC-008, CR-004 to CR-007, or DEF-004 to DEF-045. And study Appendix B lines 38-41 are certified PASS on "**Daily audit entry for 2026-08-20** in 01_System/daily_audit_log.md". There is no such entry.

**D-V9-9 (Moderate). Six evidence records had their pending pass renumbered rather than resolved.**
EVD-027 to EVD-032 read "Produced by: **PENDING V8**", where they read "PENDING V6" before. V8 ran, is on disk, is the pass whose findings created DEF-042 to DEF-045, and ruled PASS on five of those six requirements. The evidence chain for every aged care requirement — the half of the study the recommendation rests on — still names a pass the register calls pending. DEF-045's fix statement, "updated to name the pass that will actually rule on them", describes incrementing a number.

**D-V9-10 (Minor). Trade study 1's two published flip points are dead ties resolved by declaration order.**
At addressable market 37% (from capital) A1 = A2 = **3.86**; at regulatory durability 45% (from capital) A1 = A2 = **4.10**. The winner in both cases is A1 only because `sorted(..., key=lambda r: -r[2])` is stable and A1 is declared first in `TS1_OPTIONS`. The sentence "The result changes hands if ..." is true of neither point. `study_sensitivity()` steps the weight by 0.01 from the base and breaks on the first non-strict lead, so it will always report the tie rather than the first genuine lead (38% and 46% respectively).

**D-V9-11 (Minor). Two sensitivity methods coexist and the project publishes both.**
`trade_study.sensitivity()` fixes the donor criterion; `study_sensitivity()` searches every donor for the smallest movement. The study renders TS1 and TS2 with the new method and TS3 with the old one, so Table 37 says four of the five criteria flip trade study 3 while the new method finds all five (contribution flips at 0.33 to C). `02_Work/scratch/T3_trade_study_results.md`, which is the trade study's own results record, publishes "Contribution per client per month — no weight up to 0.60 changes it" and three flip points that the current engine no longer produces. Nothing checks it.

**D-V9-12 (Minor). Assorted, each verified individually.**
Study Table 5.1 still cites "Financial Model, **SupportCoordination sheet**" for $8,757; I dumped every cell of that sheet and of the whole workbook and the figure is not there (it is computed, correctly, in `model_export.json`). TS1's A2 market score cites **SRC-016** for "agency-managed ... are a large part of the cohort"; SRC-016 is about SIL and digital-platform registration commencing 1 July 2026 and contains no cohort figure — no register row in the project does. Study §6 still opens "**Both** trade studies in this study meet that standard"; there are three. Recommendation 4 still says July 2027 is "about **eleven** months away"; from the currency date it is ten. `business_plan.json` and the A3 page still say `verified_by: "PENDING — independent verification pass V5 has not yet run against this plan"`. The Dashboard's "THE NEXT ACTION" banner still names only ACT-001 to ACT-008 when fourteen are open and six are past due. C29 still measures only 148 of the deck's 194 runs, because its `.pptx` branch iterates `sh.has_text_frame` and a table shape has none — nothing sub-10pt is hiding there today, but the check cannot see it. C29's scope exclusion is still `{basename(ci[4]) for ci in P.CI if ci[2].lower() == "zaid"}`, a builder-writable owner column. `01_System/BUSINESS_PLAN_A3.html.probe.pdf` — a 144 KB one-page A3 print probe — is sitting in `01_System/`, is referenced by no generator, is not a configuration item, and matches none of `tidy.py`'s eight debris patterns, so both tidy and C35 report the tree clean.

## What I could not verify, and why

- **Whether any external fact is true.** I verified internal consistency, derivation and citation, not the world. I opened none of the 74 source URLs. Nothing here is evidence that $103.11, $73.58, $45.28, $43.03, $10,731, $78,106, $63.85, $47.75 or the July 2027 date are correct. Fifty-one of 74 sources sit below High confidence with a stated reason, which is honest rather than verified.
- **Whether the trade-study judgements are right.** I proved the arithmetic of all three studies reproduces and that TS1's supporting record does not. Whether A1's capital deserves a 2 and A2's a 5 is a judgement no verification pass can settle, and the project is right to escalate DEC-003 and DEC-007 rather than decide them.
- **Whether the new A3 alternative is the best available third option.** It is lawful, it is credible, and it is scored on the same criteria with figures I could trace ($3,673 and $8,222 both live in `SupportCoordination`). Whether some other strategy — staged registration, a partnership, contracting to an existing provider — would have been a stronger third alternative is not something I can test.
- **Print behaviour on any engine but Chromium.** I measured with headless Chromium via Playwright, which is what C34 drives, rasterised the output and looked at it. I did not test Word, Safari, Firefox or a physical printer.
- **Whether the Decision Pack renders as designed.** I read every run, every table cell and every font size through python-pptx. I did not render the twelve slides, so I cannot speak to overflow, overlap or contrast.
- **Nine of the twelve diagrams.** I viewed D11 and D12 and read D5's underlying matrix. D1, D2, D3, D4, D6, D7, D8, D9 and D10 I confirmed only as files on disk and as embedded images — and, as D-V9-4/C42 shows, nothing in the suite would notice if they were the wrong pictures.
- **Whether my own verdicts survive transcription.** C41 compares this file's machine-readable block line by line against what the project transcribes, which is worth something — but I defeated it in four minutes with a decoy block, this file is not hash-gated, and the project is at present ignoring the previous verifier's block entirely. Nothing mechanically prevents a builder from editing the block below, or from leaving `IV_SOURCES` pointed at an older report and never reading this one.

## Closing verdict

**30 of 32 requirements PASS.**

The count is the same as V8's and it is not the same 30. REQ-BUS-01 is properly closed — I printed the page, rasterised it and read the paper, and it is one complete, legible A3 landscape sheet. REQ-SYS-03 still fails, and it fails for reasons V8 named: the arithmetic was repaired and the sentence, the register row and the timestamp were not, so the delivered study now scores an alternative it declares eliminated, and the decision register still publishes "A2 leads by 1.20, flips above 55%" — the precise false statement DEF-042 is recorded as having closed. REQ-CON-04 fails, and the project should stop treating it as Zaid's problem: GOV-F4.5a names `.xlsx` first and forbids horizontal scrolling, DEC-008's "unsatisfiable" premise is refuted by transposing one sheet, and the project has already amended a badly-worded requirement once by change record.

Read the defects before the count. Three of the five checkers that exist to protect this baseline — C34, C41, C43 — are defeatable, C44 is defeatable, and I defeated all four in a sandbox inside an hour, including putting V8's exact wrong numbers back into the delivered study and getting 44 of 44 green. One of the four defect closures is asserted on code that was never written, and another on a negative test that is not in the file it cites. The pattern across V6, V7, V8 and now V9 is consistent and it is worth naming plainly: this project fixes the instance and writes a checker that tests the instance, and the checker is then cited as proof that the class is closed. C43 recomputing its own arithmetic while the wrong number sits on the page is that pattern in its purest form.

**Left behind:** nothing. I ran `run_checks.py` only inside `/tmp/v9/*` sandboxes, so `01_System/checker_run_log.txt` still carries the builder's 08:16:47 run. `python 01_System/tidy.py --report` returns **TIDY PASS — placement map satisfied: no loose root files, no debris, no secret stores, no links to live files, no unknown folders, no missing mandated folders**, and `find . -newermt "2026-09-07 08:20"` returns nothing, so this file is the only thing I added to the tree. The tidy report's clean verdict is itself slightly optimistic — see D-V9-12 on the orphaned `BUSINESS_PLAN_A3.html.probe.pdf`, which is debris that the debris patterns do not describe.

## MACHINE-READABLE VERDICTS
```
REQ-SYS-01=PASS
REQ-SYS-02=PASS
REQ-SYS-03=FAIL
REQ-SYS-04=PASS
REQ-SYS-05=PASS
REQ-SYS-06=PASS
REQ-SYS-07=PASS
REQ-SYS-08=PASS
REQ-SYS-09=PASS
REQ-SYS-10=PASS
REQ-SYS-11=PASS
REQ-SYS-12=PASS
REQ-SYS-13=PASS
REQ-SYS-14=PASS
REQ-SYS-15=PASS
REQ-SYS-16=PASS
REQ-SYS-17=PASS
REQ-SYS-18=PASS
REQ-CON-01=PASS
REQ-CON-02=PASS
REQ-CON-03=PASS
REQ-CON-04=FAIL
REQ-CON-05=PASS
REQ-CON-06=PASS
REQ-MOE-01=PASS
REQ-MOP-01=PASS
REQ-AC-01=PASS
REQ-AC-02=PASS
REQ-AC-03=PASS
REQ-AC-04=PASS
REQ-BUS-01=PASS
REQ-WEB-01=PASS
```
