Investment Plans workspace
Open raw ↗

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?

DefectFix claimedVerdictWhat you actually checked
DEF-042All three trade studies computed by one engine; the unlawful third alternative replaced with a lawful one; C43 recomputes every totalNO — the arithmetic is fixed and nothing else isThe 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-043C34's sentinels come from the twin; C41 refuses a report with more than one verdict block; C42 regenerates and compares register contentNO — one of three is real, one is unimplemented, one is half-realC41: 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 touched 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 touched 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-044A shared helper counts diagrams, slides, formulas, sheets and pages from the artefacts; C44 recounts themPARTLY — the counts C44's three regexes match are fixed, the ones they do not are still falseFixed 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-045All four corrections propagated everywhere; the six "PENDING V6" evidence records updatedPARTLY — three of four propagated; the evidence records were renamed, not fixedGenuinely 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.

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 touching 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 touching 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

RequirementVerdictEvidence you personally openedIf FAIL, exactly what is wrong
REQ-SYS-01PASSStudy 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-02PASSStudy 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-03FAILStudy §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-04PASSStudy 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-05PASSUnitEconomics!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-06PASSStudy 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-07PASSScenarios 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-08PASSStudy 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-09PASSStudy 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-10PASSBreakEven!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-11PASSBreakEven!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-12PASSStudy 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-13PASS12 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-14PASSI 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-15PASSDashboard.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-16PASSI 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-17PASSC22 "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-18PASSI 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-01PASSC05 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-02PASSI 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-03PASSI 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-04FAILI 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-05PASSI 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-06PASSC08 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-01PASSI 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-01PASSC27 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-01PASSI 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-02PASSStudy 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-03PASS$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-04PASSStudy §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-01PASSAll 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-01PASSSYSTEM_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.

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

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