Investment Plans workspace
Open raw ↗

V7 — INDEPENDENT RE-VERIFICATION, BASELINE v2.0.0

I built none of this and I took no docstring, comment or checker PASS line on trust. I read the 32 requirements out of project_data.REQ and then opened the artefacts. I extracted all 178 top-level paragraphs and all 45 tables of the delivered study with python-docx, cell by cell; I opened the delivered workbook twice with openpyxl, once for formulas and once for cached values, and dumped all fourteen sheets; I opened the Decision Pack with python-pptx and read every run, every table and every picture shape on all twelve slides. I re-derived the whole cost-benefit case from model_params and model_agedcare in my own arithmetic without calling the builder's build(), and got $420,113.58 of benefit, $275,726.60 of cost, a net of $144,386.98, an ROI of 52.366% and break-even at month 17 / month 10 — then compared that against business_plan.json, against the A3 page, against trade_study.py, against ASM-028 and ASM-029, and against the study. I diffed the delivered business_plan.json field by field against a fresh in-memory rebuild. I printed BUSINESS_PLAN_A3.html in headless Chromium five ways, rasterised two of the resulting PDFs at 100 dpi and looked at them. I ran my own sub-10pt scan across every Office file in 05_Outputs, including inherited paragraph-style sizes and raw sz= attributes that the project's own check cannot see. I ran my own jurisdiction scan, my own secrets and PII scan over 102 files, and my own attribution measurement at two different strictnesses. I viewed D11_budget_constraint.png and D12_two_entities.png as images. I read SYSTEM_BREAKDOWN.md, SOURCE_MANIFEST.json, Dashboard.html, README.md, 09_Help_Hub/index.html, 00_Handover/, all of 03_Registers/*.csv, both T3 records, and the source of C05, C10, C12, C22, C27, C29, C31, C33, C34, C40 and C41. I built a throwaway copy of the whole tree in scratch and attacked the new C41 baseline mechanism in it. I did not run build_all.py. I did not run run_checks.py inside the project — I read the log the builder's own run left at 07:07:57 and ran the suite only inside my sandbox copy — so checker_run_log.txt is untouched and I left no __pycache__ behind.

Two things dominate this pass. First, most of the eleven fixes are real, and two of them (DEF-027 and DEF-030) are better than the defect required. Second, the source of truth is now ahead of every artefact that projects from it. 01_System/project_data.py was last written at 07:07:36; every register CSV was written at 07:05, every deliverable, the dashboard, the README, the Help Hub and the A3 page at 07:06. So DEF-025 to DEF-034 exist in the source and in none of the 24-row defect registers; the study's Appendix B2 still publishes "24 defects, all closed"; and the dashboard's headline assurance tile still reads 26 / 32 requirements INDEPENDENTLY verified, sourced to a 20 August pass, while the source of truth now derives all 32 as Open. That is the exact condition DEF-035 was raised to make impossible, still visible on the surface a stranger opens first. C40 catches it and fails; nothing else does.

Did the V6 fixes hold?

DefectFix claimedVerdictWhat you actually checked
DEF-025The A3 page prints to one A3 landscape sheet; C34 now counts pages in a real PDFNOIt prints to one page, but only because @media print{.sheet{height:296mm;overflow:hidden}} throws away whatever does not fit. I ran C34's exact call (pg.pdf(prefer_css_page_size=True, print_background=True), no format) in a fresh browser three times: 1 page, 420×297 mm — and I rasterised it. The page ends part-way through the "8 · AREAS OF CONCERN" heading. Section 8's table, all of section 9, the entire value-validation verdict block and the footer are gone. Text extraction: 10,087 chars against 16,726 for the same file at an explicit A3 size. Then I quadrupled the card content in a scratch copy and ran C34's call again: still exactly 1 page, still PASS. C34 cannot fail on content. At format='A3', landscape=True the page does render in full, three columns, legibly, with margin — I looked at that render too — so the layout is capable; what is broken is that the file's own @page rule plus @media(max-width:900px) collapses it to one column at print layout width and overflow:hidden hides the consequence.
DEF-026The three-year net is computed, not typed, and consistent everywhereNO$145,621 is gone. It has been replaced by a new inconsistency. trade_study.py now calls build_business_plan_json.build() at run time and emits $144,386.98; business_plan.json and the A3 page carry $144,386.98 twice each. But ASM-029 — in project_data.py line 1579, 03_Registers/ASM.csv and 00_Handover/ASM.csv — says the computed net is $144,421.10, and trade_study.py's own docstring says $144,421.10. ASM-028 states the $90k sensitivity against "$420,147.70 of benefit … a net of $54,421.10"; the delivered benefit is $420,113.58 and the net at $90k is $54,386.98. The DEF-033 rounding fix moved the number and nothing downstream followed. Two artefacts still state different values for the same named quantity; the gap shrank from $1,199.90 to $34.12.
DEF-027Weights and results are separate files; the weights file states what it can proveYESTwo files now. T3_trade_study_weights.md retracts its own prior attestation in terms: "that sentence is an attestation, not evidence … Independent verification V6 was right to reject it", then says plainly what was actually done and concludes "The ordering is attested, not proven", offering the live TradeStudy3 sheet as the real mitigation. That is the correct answer to an unprovable claim and it is the best piece of writing in the project. I checked the results file's sensitivity table against trade_study.sensitivity() — 0.31→C(3.61), 0.28→C(3.63), 0.23→D(3.52), 0.26→D(3.64), contribution never flips — exact. One flaw: the weights file names criterion 5 "Dependence on the owner's own hours" while trade_study.py, the workbook and the study all name and score it "Independence from the owner's own hours". The GOV-B6.3 record states the fixed criterion with inverted polarity against how it was scored.
DEF-028C29 opens all three Office artefacts; the Standard's exclusion is derived, not hard-codedPARTLYC29 does open all three, and the exclusion is derived from the CI register's owner column rather than a filename — correct and I confirmed the mechanism. The artefact side is genuinely fixed: I re-scanned independently and found zero sub-10pt runs in the .docx (including inherited paragraph styles — three styles are defined below 10pt, Body Text 3 at 8pt and Caption at 9pt, but no paragraph uses them; effective sizes are 10.5/13/17), minimum 10.0pt across 194 runs in the .pptx against V6's eight 9pt runs, and zero cells below 10pt in 1,229 workbook cells against V6's 145. The exclusion of AI_Project_Governance_Standard_v3.7.docx is justified — it is Zaid's input document, CI-001, filed under GOV-F5.7 — and it is load-bearing: I measured 1,450 sub-10pt runs in it. What did not get fixed is the six-column half. Scenarios is still 14 columns, Costs 7, TradeStudy3 7. That now passes on DEC-008, whose own record reads "NOT RATIFIED BY ZAID". A requirement satisfied by an unratified reinterpretation is not satisfied.
DEF-029Help Hub sentences generated; dashboard shows combined capital; no false statements leftPARTLYBoth sentences V6 named are fixed and now true: "Every artefact this project generates carries the currency date 2026-09-07 and baseline v2.0.0", and "gathered in 2 waves: 53 on 2026-08-20, 21 on 2026-09-07" (I counted the SRC register: exactly 53 and 21). HLP-03 now reads "24 raised, 24 closed". HLP-05's fifteen-minute route now crosses both parts (sections 1, 15.3, 15.2, 16, 5.2, 18, 19) and says "Seven findings". The dashboard has a $44,483 COMBINED capital tile, a $11,492 working-capital tile, and the $15,875 NDIS-only figure demoted with "Read it beside the combined figure above, not instead of it", plus $1,002/$435 aged care tiles. But the same two surfaces still carry at least eight false statements of exactly the class that was fixed — see New defects D-V7-4. The most serious: the dashboard's headline "26 / 32 Requirements INDEPENDENTLY verified" and the study/README/dashboard ACT-013 claim that at $90,000 "the three-year return falls from 53 per cent to roughly 10 per cent", which is 52.4% to 14.9%.
DEF-030The three false workbook-README statements are gone; the currency sentence is trueYESTitle is now "…Financial Model v2.0.0". The currency sentence is "74 sources across 2 research waves: 53 verified 2026-08-20, 21 verified 2026-09-07 … the FIRST source to expire does so on 2027-08-20" — I checked it against the SRC register's accessed-date histogram: exactly 53 and 21, first expiry 2027-08-20. True. The blanket "nothing is typed in" is now "Nothing … is a typed-in result EXCEPT the two comparison sheets named below", naming Structure B5:C6 and Combined B5:C9. I scanned every non-formula numeric cell on every sheet outside Inputs/Drivers/AC_Inputs/README: the only typed results are exactly those declared cells. Everything else typed is an input (fees, budget levels, hour ramps, utilisation steps, trade-study weights and scores). The claim is now accurate. 455 formulas, all 455 carrying cached values.
DEF-031SRC-074 exists and contains the figuresPARTLYSRC-074 exists in project_data.py, 03_Registers/SRC.csv, 00_Handover/SRC.csv and study Table 20, and its Claim field carries "$63.85 per client per day against direct cost $47.75 … a positive margin of $16.10 per client per day". But nothing cites it. Every place the figure is actually used still cites SRC-068, the row that does not contain it: study finding 5 "[SRC-068, SRC-069, RSK-011, V4]", study Table 29/15.1a "[SRC-068, SRC-069, RSK-011, V4]", RSK-011 "about $16.10 per client per day [SRC-068]", deck slide 9 footer "SRC-068 sector results". SRC-074 appears in exactly three files, all of them register projections, and in no citation anywhere. The row was created and never wired up.
DEF-032The classification table starts at $10,731 with 1.80 hr/weekYESStudy Table 15.2 row 1: `$10,731 a year [SRC-064] \
DEF-033The placeholder is gone; the delivered JSON reconcilesYESI read build_business_plan_json.py end to end. The and NR and 0 or 0 placeholder and the 250-lines-later repair are both gone, replaced by a comment saying why. ndis_contrib_hr_paid is now recomputed from price − loaded_wage(l2) − admin × loaded_wage(l3) = 6.69692875 rather than the rounded 6.70. I diffed the delivered business_plan.json field by field against a fresh build() — zero differences. And I re-derived the whole CBA myself without touching the builder: 11,110 NDIS hours × 6.69692875 + 345 aged care client-months × 1,002.06 = $420,113.58; costs 21,948.60 + 66,258.00 + 7,520.00 + 180,000.00 = $275,726.60; net $144,386.98; ROI 52.366%; break-even month 17 with opportunity cost, month 10 on cash. Every one matches the delivered JSON to the cent.
DEF-034Tables 4.2, 7.0, 10.2 and the WorkCover/LSL/WWCC roadmap rows exist; Part II carries diagramsYESTable 4.2 exists: 12 rows × 6 columns (Obligation / Authority / Cost / Frequency / Lead time / Source), zero empty cells, every row carrying a SRC — I tested cell by cell, as I did for Table 4.1 (17 rows, zero empties, frequency column present). Table 7.0 exists and answers time-to-first-revenue and cost-to-be-ready for all four models, with the support coordination row saying explicitly that its $0 "is the absence of a cost, not a cost of zero" and pricing what happens if the pause lifts. Table 10.2 exists: nine sequenced aged care rows. Table 10.1 row 6 is a new "Weeks 5-7 / **BEFORE ANY PAY RUN" row registering WorkCover and portable LSL, and row 5 now carries the WWCC. Part II carries D11 (section 15) and D12 (section 17); 12 diagrams on disk, 12 word/media/*.png embedded. I viewed both PNGs at full size: D12 is clean, nothing clipped, nothing overlapping; D11 is legible but its orange "the modelled average, 5.04 hr [ASM-020]" label is drawn on top of the dashed line it annotates rather than above it.
DEF-035Every verdict carries a baseline; C41 fails on a stale oneNO — I defeated it in five minutesThe shape is right: IV_VERDICT_RAW is {rid: (result, baseline)}, IV_VERDICT downgrades anything whose baseline ≠ BASELINE_VERSION to STALE, REQ status derives from that, and today it correctly holds all 32 at Open with 26 marked stale. But C41 tests only os.path.exists() on the file named in IV_SOURCES["v2.0.0"] — it never opens it. In a sandbox copy of the whole tree I wrote a file at 02_Work/scratch/V7_baseline_v2_reverification.md whose entire content is "EVERY REQUIREMENT FAILS. 0 of 32 requirements PASS.", set IV_V7 = {r[0]: "PASS" for r in REQ}, and ran the suite. C31: PASS, "32 of 32 requirements independently verified". C41: PASS, "32 of 32 requirements carry a verdict taken against the CURRENT baseline v2.0.0". Total: 1 of 41 checks failed, and that one was C40 complaining about a byte count. Then I appended 4 KB of nulls to the delivered study and re-ran: C41 still PASS. Second hole: BASELINE_VERSION is a hand-typed string, not a content identity — every artefact was rebuilt at 07:06 under an unchanged "v2.0.0" and the source of truth edited again at 07:07 under the same string, so a "v2.0.0 verdict" does not name an artefact set. Third: C41's second condition (result == "PASS" and baseline != cur and status == "Verified") is unreachable, because status is only "Verified" when the baseline already matches. The check has one live test, not two.

Verdict table

RequirementVerdictEvidence you personally openedIf FAIL, exactly what is wrong
REQ-SYS-01PASSStudy Table 5.1 gives core supports $9,110–$12,786 (base $10,791), support coordination $3,673 and SIL/SDA $8,600–$16,900, each row citing SRC-025 to SRC-041 / DEC-005; Table 18.1 gives the aged care $11,157.80 and the combined $21,948.60. I traced the NDIS lines to workbook Costs B6:D25 and the aged care one-off to model_agedcare.ONE_OFF_COSTS. SIL/SDA carries DEC-005 and is named in the study.—
REQ-SYS-02PASSStudy Table 7.0 (section 7.1) gives a month-count for all four candidate models: core supports "About 4 months" [ASM-015], support coordination "About 2 months … the fastest line in the study" [SRC-018], 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]. No model states a range with no source.—
REQ-SYS-03PASSDEC-004 records weights at 2026-08-20T09:40 and scores at 11:05, in separate register fields. Study Table 6.1 shows three alternatives; I recomputed A1 2.85, A2 4.05, A3 2.30 by hand and they are correct. Sensitivity names the flipping weight (addressable market above ~55%); rationale present.—
REQ-SYS-04PASSStudy Table 7.1: core supports 3.30, support coordination 3.70, SIL/SDA 2.20 against six identical weighted criteria; I recomputed all three. Table 7.1a states the flip (regulatory stability 25%→40% gives 3.45 v 3.40), which I verified arithmetically.—
REQ-SYS-05PASSWorkbook UnitEconomics!B11 = SUM(B5:B10) → 21.30424, where B5 = Inputs!$B$5 (SRC-002, 73.58) and B6:B9 are -Inputs!$B$8 times Inputs!$B$10/$B$11/$B$12 (SRC-009, SRC-011, SRC-012, SRC-013). Not one constant in the chain.—
REQ-SYS-06PASSStudy Table 4.1 (NDIS entity, 17 rows) and Table 4.2 (aged care entity, 12 rows), both six columns — Obligation / Authority / Cost / Frequency / Lead time / Source. I tested every cell of both tables programmatically: zero empty cells, and every data row's last column carries a SRC-###. Aged care worker screening (SRC-057) and the ACQSC registration (SRC-065) both now appear, the latter with its lead time recorded honestly as "NOT PUBLISHED … ACT-011 closes it".—
REQ-SYS-07PASSWorkbook Scenarios rows 37-45: the downside scenario carries a formula-driven month-by-month cumulative line from -11,638.13 to -20,958.80 and a single runway figure N45 = MIN(B45:M45) → -20,958.80, which reconciles to 10,790.80 + 847.33×12 as I computed independently. Study Table 8.2 row 4 states -$20,959.—
REQ-SYS-08PASSStudy Table 9.1 ("WHAT WOULD CHANGE THIS ANSWER") lists five items, each naming a register ID — ASM-008, ASM-002, SRC-002, ASM-015, SRC-049 — and three name the checkable party ("a real provider", "you", "government publishes"). Part II adds a second such box in section 19.—
REQ-SYS-09PASSStudy Table 10.1 (13 rows) and Table 10.2 (9 rows), both under a heading that says "This roadmap is CONDITIONAL". I walked every obligation in Tables 4.1 and 4.2 against them: WorkCover and portable LSL are now sequenced at "Weeks 5-7 / **BEFORE ANY PAY RUN" in both entity roadmaps, the WWCC at Weeks 5-8, and the two that are not sequenced (voluntary disability worker registration, the annual company review) are named in the caption with the reason.—
REQ-SYS-10PASSBreakEven!B6 = Costs!$C$28/UnitEconomics!$B$16 → 39.77; B7 → 126.53; SupportCoordination!B13 = Costs!$C$28/Inputs!$B$7 → 8.46; aged care 1.0 client from model_agedcare.breakeven_clients(). Every figure resolves through input cells. SIL/SDA excluded by DEC-005 and named in Table 5.1.—
REQ-SYS-11PASSBreakEven!B12 is a live formula over Drivers!$B$14, the loaded-wage chain and the ASM-007 payment lag → 7,318.61, with B13 giving 15,682.73 at 30 days. Aged care $4,173.20 from model_agedcare.working_capital() at a seven-day lag (ASM-030). No constant anywhere.—
REQ-SYS-12PASSStudy Table 7.0, fourth column, answers the July-2027 question for all four models and pairs each with a cost to be ready: core supports "Mandatory registration arrives. Trading unregistered stops being lawful" at $3,500–$6,000 + $649–$1,825; support coordination "The exposure here is redesign, not registration" at "$0 audit and $0 manual TODAY, because mandatory registration for support coordination is currently PAUSED — and that is the absence of a cost, not a cost of zero", with the cost to be ready if the pause lifts priced explicitly; SIL/SDA "Already in force. There is no unregistered pathway to close" at $8,600–$16,900; aged care "Not affected by the NDIS change" at $600–$3,000 + $4,997. No model is silent, and the V6 gap (support coordination carrying no cost to be ready) is closed by naming the absence rather than by inventing a figure.—
REQ-SYS-13PASS12 PNGs in 02_Work/diagrams/ and 12 word/media/*.png in the delivered package. Part II now carries D11 at section 15 (the fixed-budget mechanism) and D12 at section 17 (the two-entity dependency structure) — the two process narratives V6 found in prose and tables alone. I opened both images: D12 renders cleanly, nothing clipped or overlapping; D11 is legible, with one label drawn over its own reference line.—
REQ-SYS-14PASSI read the HLP-10 table in 09_Help_Hub/index.html row by row. All nine GOV-G3.4 symptoms are present as real symptom/cause/check/fix rows: dead link, chart empty or wrong, dashboard blank or will not load, register will not open, two documents disagree, #NAME?, wrong version, phone view, conflict copy. Count = nine, and none of them tells the reader to ask anyone first.—
REQ-SYS-15PASSDashboard.html carries "GENERATED FILE … Rebuilt from 01_System/project_data.py by 01_System/build_web.py"; it is the only dashboard in the tree; all twelve tile values project from register or model values. Nothing is typed onto the page.— (but see D-V7-1: it is a faithful projection of a source that has since moved, and its headline tile is now false)
REQ-SYS-16PASSI extracted the twelve data-metric attributes from the dashboard myself and matched them against 03_Registers/METRIC_LINEAGE.csv: 18 lineage rows, zero tiles without a row, and zero empty cells across all 18 rows × 6 fields. Metrics-without-lineage = 0.—
REQ-SYS-17PASSThe builder's run log shows C22 "15 pack files re-derive from their sources" and C23 "C22 detected a deliberate one-line tamper in HANDOVER.txt and the file was restored". I reproduced both in my sandbox copy. The negative test demonstrably fails on demand.— (but see D-V7-6: C22 compares SHA-256 against a manifest written at the same moment; it does not re-derive anything, and the pack it certifies is stale)
REQ-SYS-18PASSI parsed 03_Registers/SRC.csv myself: 51 of 74 rows sit below High confidence (42 Medium, 9 Low) and the 'Why below High' field is non-empty on all 51. I tested for emptiness, not for the checker's word.—
REQ-CON-01PASSC05 reports 0.966 over 292 material figures with 10 unmatched; I opened all ten and every one is internal arithmetic (123 = 45+78, 1,849 = 649+1,200, 5,325 = 1,825+3,500, 406.39 = 87.64+318.75, 6,797 and 9,997 = the aged care policy-pack bands, 16,200 = the halving threshold, 16,900 = the SIL band, 20,959 = the downside runway) or an HTTP status code (403). Zero material external claims lack a SRC reference.— (but see D-V7-3: three of those references resolve to rows that do not contain the figure)
REQ-CON-02PASSI extracted the whole study to text and scanned for New South Wales, Queensland, South Australia, Western Australia, Tasmania, Northern Territory, NSW, QLD, WA and SA: zero hits. 47 occurrences of Victoria. Every jurisdiction-dependent obligation — worker screening, WWCC, WorkCover, portable LSL, payroll tax, disability worker registration, aged care screening — names Victoria or the Commonwealth.—
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, inside the 90-day window. The workbook README and the Help Hub now both state this distribution correctly.—
REQ-CON-04FAILI ran my own scan over every Office file in 05_Outputs, measuring explicit run sizes, inherited paragraph-style sizes and raw XML sz= attributes. Text: the 10-point clause is genuinely met — 0 sub-10pt runs in 3,223 study runs (1,587 of which inherit, and the three sub-10pt styles in the template are unused), minimum 10.0pt across 194 deck runs, 0 of 1,229 workbook cells below 10pt. Tables: 0 document tables above six columns in the .docx and .pptx; no defined Excel Table objects in the workbook.The workbook's worksheet grids are Scenarios 14 columns, Costs 7, TradeStudy3 7. The requirement says "Every delivered Office artefact shall carry … zero tables of more than six columns" and its criterion is a flat threshold with no interpretive latitude. The count is 3, not 0. It reads as zero only under DEC-008, whose own record states "Interpreted by the project on 2026-09-07. NOT RATIFIED BY ZAID" and whose rationale field says a waiver cannot be self-granted. The project has correctly refused to self-grant the waiver and has correctly disclosed the widest worksheet in every run — and that is precisely why the requirement is not yet met. One decision from Zaid closes this; a builder cannot.
REQ-CON-05PASSI parsed 03_Registers/ASM.csv: 31 rows, zero with an empty Confidence field, zero with an empty 'What breaks if it is wrong' field. 26 Low, 5 Medium, matching the study's Table 12.1 caption.—
REQ-CON-06PASSI ran my own regex scan for email addresses, Australian mobile numbers, ABN-shaped identifiers, TFN patterns, API-key assignments, AWS keys and PEM private-key headers across 102 .py/.md/.csv/.json/.html/.txt/.js files in the controlled set. One hit, and it is a false positive: the digit run 06053495854 inside V6's own report, which is the tail of 1002.06053495854. Zero real hits.—
REQ-MOE-01PASSI read all thirteen rows of 03_Registers/ACT.csv. ACT-010 now carries 2026-10-31 (or before the sixth client, whichever comes first) and ACT-012 carries 2026-12-19 (or before the tenth client). Every one of the thirteen carries an owner and a due date. The narrowest V6 failure is closed by the narrowest possible edit.— (twelve of the thirteen are already past their stated due date as at 2026-09-07, which the criterion does not test)
REQ-MOP-01PASSI re-implemented the unit extraction independently. Using the checker's own exemption list: 150 units carrying a dollar figure, 147 attributed, ratio 0.9800. With no exemptions at all: 156 units, 150 attributed, ratio 0.9615. Above 0.90 on either reading. The six unattributed units are three table captions and the three defect-history rows quoting what was wrong.—
REQ-AC-01PASSI rebuilt $1,002.06 from scratch: $30,000/12 = $2,500; less 10% (SRC-063) = $2,250; ÷ $103.11 (SRC-060) = 21.82135 hr; × ($43.03 × 1.1545) = $1,084.04 labour; + $250 pool; less $87.64 care management; less $318.75 service admin; less $7.50 bad debt = $1,002.06. And $435.30: 65 hr × $73.58 = $4,782.70; less 65 × $52.27576 = $3,397.92; less $949.48 = $435.30. Ratio 2.30200. Both figures are in study Table 15.3; workbook AC_ClientEconomics!B17/C17 cache 1002.06053495854 and 435.300368749999, matching the model to the cent; C37 compares fifteen such figures.—
REQ-AC-02PASSStudy Table 15.2 and workbook AC_ClientEconomics A22:D27 now span $10,731 (Level 1, 1.80 hr/week, $894.25, $302.14) to $78,106 (Level 8, 13.11 hr/week, $6,508.83, $2,749.44) — the actual bottom and top ongoing classifications, not a round $12,000. Every one of the 18 value cells is a live workbook formula over A22:A27 and AC_Inputs; I opened them in formula view.—
REQ-AC-03PASS$606.50 / $7,278.00 / $22,578.00 appear in study Table 3 finding 6 and Table 17.1, in workbook Structure!D5, D7 = D5*12 and D8 = D5*36+D6, and in business_plan.json at value_proposition.benefits[3].target, areas_of_concern[4] and value_validation.conditions[4]. All derive from model_agedcare.structure_comparison(). I recomputed 606.50 = 78+300+200+342/12 and 22,578 = 606.50×36 + 744.—
REQ-AC-04PASSStudy Table 15.1a states the mechanism (dual care-management 15–20% plus package-management 10–15% replaced by a single 10% pool, landing on cost bases built for the old structure), cites the independent 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"). I opened V4_agedcare_margin_verification.md and confirmed $16.10 is derived there from quoted text ($63.85 − $47.75), not asserted.— (but see D-V7-3: the figure is still cited to SRC-068, which does not contain it, while the new SRC-074, which does, is cited nowhere)
REQ-BUS-01FAILThe twin exists; I diffed it against a fresh rebuild and it is byte-identical in content. All twelve C-BP checks pass — I read all twelve and ran validate() myself. The A3 page and the twin are same-second current (both 07:06:08). I re-derived the entire CBA independently and it reconciles to the cent.The one-sheet property is produced by clipping, and the check that certifies it cannot fail. @media print sets html,body{height:296.5mm;overflow:hidden} and .sheet{height:296mm;overflow:hidden}. Printed in Chromium with C34's exact call — pg.pdf(prefer_css_page_size=True, print_background=True), honouring the file's own @page{size:A3 landscape;margin:0} — the output is 1 page at 420×297 mm with sections 8 (partly), 9, the entire value-validation verdict block and the footer discarded; I rasterised it and read the page. The cause is @media(max-width:900px){.grid{columns:1}} firing at print layout width, and overflow:hidden hiding the consequence. I then quadrupled the card content in a scratch copy and C34's call still returned exactly 1 page: no amount of content can ever make this check fail. At format='A3', landscape=True the page does render in full and legibly, so the fix is a layout that fits rather than a container that truncates — and a check with a negative test.
REQ-WEB-01PASSSYSTEM_BREAKDOWN.md section 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 why it is not built. BKL-011 carries it in the backlog against REQ-WEB-01; COMPONENTS.csv scopes REQ-WEB-01 to C1. My own credential scan across every generated artefact returned zero hits.—

New defects found

D-V7-1. Every delivered artefact and every register is a projection of a source of truth that has since moved, and the status surface asserts a verification that no longer exists. 01_System/project_data.py was last written at 07:07:36. Every register CSV was written at 07:05:55, every deliverable and every web surface at 07:06. Consequences I confirmed by opening the files: DEF-025 to DEF-034 exist in project_data.DEF (34 rows) and in neither 03_Registers/DEF.csv nor 00_Handover/ (24 rows); the study's Appendix B2 publishes a 24-row defect history and states "24 defects, all closed"; the Help Hub says "DEF | Defects. 24 raised, 24 closed"; the README says "Defects | 24 raised, 24 closed". Worse, 03_Registers/REQ.csv and 00_Handover/REQ.csv both carry 26 Verified / 6 Open, and Dashboard.html publishes "26 / 32 Requirements INDEPENDENTLY verified — the verifier built none of them" and "Requirements: 26 of 32 verified (81%)", while project_data.IV_VERDICT now derives all 32 as Open and 26 as STALE. The delivered study's Definition of Done gate 1 still reads "FAIL — 26 of 32 … Verdict source: V3_closing_verdict.md (independent verification pass 4, 2026-08-20)". That 20-August-verdict-on-a-7-September-artefact is exactly the condition DEF-035 was raised to eliminate; the mechanism was built and the artefacts were never rebuilt through it. C40 is the only check that notices, and it names a byte count rather than the consequence.

D-V7-2. The three-year net and the $90,000 sensitivity are wrong in the artefacts a reader actually opens. (a) ASM-029, in project_data.py and in both delivered ASM projections, states "a computed net of $144,421.10" while the computation now yields $144,386.98; trade_study.py's docstring says the same stale figure two lines above the function that computes the right one. (b) ASM-028 states the $90k case as "$365,726.60 against the same $420,147.70 of benefit, a net of $54,421.10"; the benefit is $420,113.58 and the net is $54,386.98. (c) Far more seriously, the delivered study (section 1, the ACT-013 box) and the delivered dashboard (ACT-013 row) both still say "At $90,000 the three-year return falls from 53 per cent to roughly 10". The correct figures, which I computed twice, are 52.4% to 14.9% — and ASM-028 already carries them. V6 raised this; the register was corrected and the two documents a human reads were not. The project describes ACT-013 as "the one input that changes the verdict", so this is the wrong number attached to the most decision-relevant sensitivity in the plan.

D-V7-3. Three citations resolve to rows that do not contain the figure, and one figure has no source at all. (a) $16.10 / $63.85 / $47.75 are cited to SRC-068 everywhere they are used (study finding 5, study Table 15.1a, RSK-011, deck slide 9); SRC-068's Value field is a document title with no figure in it. SRC-074 exists and carries all three and is cited nowhere. (b) business_plan.json and the A3 page state the NDIS market as "Approximately 717,000 active participants nationally", cited to SRC-001, which is the price schedule identity ("v1.2, effective 1 July 2026"). No register anywhere contains 717,000 — the register figure is SRC-043's 774,456. (c) The second market row, "Around 300,000 home-care recipients nationally", is cited to SRC-064, the classification-budget schedule, which contains budgets and no population. Check C-BP3 passes all three because it only tests that size_source is non-empty; C05 never reads the A3 or the JSON; C36 only tests that the identifier exists. This is DEF-031's defect class, unfixed and now present in three more places.

D-V7-4. The DEF-032 fix left a false sentence behind it, and eight more false statements survive on the Help Hub, the dashboard and the README. build_business_plan_json.py line 347 formats R['budget_sensitivity'][0][3] into a hard-coded sentence: "the model brackets contribution from $302.14 a client a month at a $12,000 budget". budget_sensitivity[0] is now (10731, 1.80, 894.25, 302.14). $302.14 is the contribution at $10,731, not at $12,000. The value moved when DEF-032 was fixed; the literal in the sentence did not. That false statement is in business_plan.json, on the A3 page and in the delivered PDF render. Alongside it, on surfaces DEF-029 was supposed to clean: the Help Hub says the decision pack has "ten slides" three times and the README twice — it has twelve; the deliverables map says the workbook has "398 formulas, zero hard-coded results" — I counted 455 formulas, and the workbook's own README now explicitly says two sheets are typed-in results, so the Help Hub directly contradicts the DEF-030 fix; the deliverables map and the "chart is empty" troubleshooting entry both say "D1 to D10" — there are twelve; the reading order says "study sections 1 and 9 → the four ACT items" when the study's own box names six; and the Help Hub calls the study "32 pages" in one entry and "the 47-page study" two entries later.

D-V7-5. The published open-item count is short by two, and one of the two is the go/no-go decision itself. project_data.parked_decisions() matches the literal string "Parked-Zaid". DEC-003 uses that string. DEC-007 (the aged care/NDIS ordering — the decision the whole study escalates) and DEC-008 (the six-column interpretation) are both recorded as "Parked with Zaid", a different string, and are therefore invisible to open_item_count(). The dashboard prints "OPEN ITEMS … DEC parked with Zaid 1" beside a decisions table that visibly lists three parked decisions. The published figure of 47 should be 49. This silently undoes DEF-015, whose fix note reads "A decision parked with Zaid is an open item … so it is now counted". C11 cannot catch it because the published count and the "count the registers actually produce" are the same function. Note that the DEF-028 fix is what created DEC-008, so a fix introduced an uncounted open item.

D-V7-6. C22 does not do what its own description says, and the pack it certifies is stale. C22's description is "Every file in the transfer pack re-derives from its source: nothing missing, extra or altered", and REQ-SYS-17's statement is "The transfer pack shall re-derive from its sources". I read the function: it hashes each pack file and compares against the SHA-256 recorded in MANIFEST.txt, which was written at the same moment by the same generator. It proves the pack has not been tampered with since it was written. It re-derives nothing. That is why 00_Handover/REQ.csv can say 26 Verified against a source of truth that says 0, and 00_Handover/ASM.csv can carry the stale $144,421.10, while C22 reports zero discrepancies. This is the DEF-011 defect class ("checkers that assert more than they test") in a check that certifies a requirement.

D-V7-7. Smaller things I would still record. The T3 weights record — the GOV-B6.3 artefact — names criterion 5 "Dependence on the owner's own hours" while the scoring, the workbook and the study all use "Independence from"; the polarity of a fixed criterion is inverted in the only document that fixes it. Study Table 5.1 still cites "[Financial Model, SupportCoordination sheet]" for the $8,757 six-month runway; I searched every cell of that sheet and the figure is not in it. Workbook AC_Inputs!F9 still says the Schedule F Level 3 rate is "used for care management and administration time" while F23/ASM-031, fourteen rows below, says the SACS rate is used instead — V6 raised this and it is unchanged. C12 still reads if len(names) < 10: return False, "expected 10 diagrams" and passes on len(media) >= 10, so two of the twelve diagrams could be deleted without failing it. The A3 footer still says "verified by PENDING — independent verification pass V5 has not yet run against this plan"; V5 was the negative-test pass and the relevant pass is V7. The aged care critical path (Table 10.2) is the only critical path in the study with no diagram, while the NDIS one has D1 — and the aged care entity is the one the study recommends starting first. The CBA uses the rounded $1,002.06 for the aged care contribution while DEF-033 was specifically about not using the rounded $6.70 on the NDIS side; the effect is $0.18 over three years, but the principle is the one DEF-033 established. The README's section 1 still describes the project as being about "starting an NDIS provider business in Victoria" with no mention of aged care, and its reading order still points at Standard v3.7 while the governance line says v3.9 plus v4.0.

What I could not verify, and why

Disclosure of my own footprint. I ran the checker suite only inside a disposable copy of the tree in my scratch directory; 01_System/checker_run_log.txt still carries the builder's 07:07:57 run untouched. Every Python process I started set sys.dont_write_bytecode = True; the 01_System/__pycache__ directory that C35 reports predates this pass (mtime 07:07:36, written alongside project_data.py by the builder's own run) and I did not add to it. python 01_System/tidy.py clears it. I created and modified exactly one file inside the project: this report.

Closing verdict

30 of 32 requirements PASS.

The two failures are narrow and both are closable. REQ-CON-04 needs one decision from Zaid on DEC-008, or a restructured workbook. REQ-BUS-01 needs a layout that fits without overflow:hidden and a C34 with a negative test that proves it can fail. But read the new-defects section before reading the count as good news: nine of the eleven surfaces I opened are projections of a source of truth that moved after they were built, the delivered dashboard tells a stranger that 26 of 32 requirements are independently verified when none are, and the mechanism built to prevent exactly that can be defeated by writing a file with the right name.

MACHINE-READABLE VERDICTS

REQ-SYS-01=PASS
REQ-SYS-02=PASS
REQ-SYS-03=PASS
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=FAIL
REQ-WEB-01=PASS