Releases: SybilGambleyyu/workbook-change-benchmark
Release list
WCAB 0.13.0
Adds a deterministic active-AutoFilter review case.
- The sole list criterion in Report!A1:B5 moves from North to South while Report!D2=SUBTOTAL(109,B2:B5) and Dashboard!B4=Report!D2 stay unchanged.
- The raw validator proves the exact stored AutoFilter transition, formula/dependency boundary, and report-worksheet-only package difference. It does not apply the filter or calculate a subtotal.
- The FormulaFence 0.220 adapter requires the matching redacted filter_visibility_controls_changed evidence and high-severity FF036.
Validation: 71 local tests; hosted Python 3.10/3.13 CI passed: https://github.com/SybilGambleyyu/workbook-change-benchmark/actions/runs/30759774638. FormulaFence mapped 29 of 30 declared facts, with the structural-rewrite fact intentionally unmapped.
SHA-256:
- workbook_change_benchmark-0.13.0-py3-none-any.whl: 52b84e11107e221b54d39a36fa5341ba08e9b3f37392fa29ee7239f8d21f4693
- workbook_change_benchmark-0.13.0.tar.gz: 7b26e5d47b7465046676e117181ea3aba1fb4346d9fd25b351792a89af433d06
WCAB 0.12.0 — raw workbook date-system evidence
WCAB 0.12.0 adds governance.workbook_date_system_changed: an explicit raw workbookPr/@date1904 transition from false to true while dateCompatibility=true, a numeric date serial, its date format, and local formulas remain unchanged.
This is stored-control review evidence, not a claim about formula calculation, serial conversion, displayed dates, or Excel-client behavior. The release contains 27 deterministic cases, 29 observable facts, and 63 passing tests. FormulaFence 0.220.0 maps all 28 mappable facts, including exact FF117 date-system evidence.
Hosted validation passed on Python 3.10 and 3.13: https://github.com/SybilGambleyyu/workbook-change-benchmark/actions/runs/30758782183
Artifact SHA-256:
- wheel:
2ea722da14f86bc91bd0c8b11ff6b7a34ca3e55b0ed9da2cb71752141eb0753c - source archive:
7a52a81913d510d2422f08315c73b11ea0fe86653806fb431229cc9300e1b26c
WCAB 0.11.0 — saved formula-result evidence
WCAB 0.11.0 adds governance.formula_cached_result_changed: one raw numeric <v> saved beside Model!B2's unchanged <f> formula changes from 20 to 25 while the direct input, calculation properties, and local downstream formula remain unchanged.
The benchmark treats that as review evidence only. It does not calculate a formula, decide whether either saved result is current, stale, tampered, or correct, or claim what an Excel client will display after opening.
This release contains 26 deterministic cases (25 pairs plus one portfolio), 28 observable facts, and 56 passing tests. FormulaFence 0.219.0 maps all 27 mappable facts, including the dedicated redacted FF042 evidence. Hosted validation passed on Python 3.10 and 3.13: https://github.com/SybilGambleyyu/workbook-change-benchmark/actions/runs/30756217102
Artifact SHA-256:
- wheel:
918475c0cbb5a41091f8d1ba8beac0a0b9f3f7c4595ad3b1b1fe9aec6571d7da - source archive:
80a608d279ac67acfc5c47b8d2227aea8d1d2d738ea8a593bc71d52aa9d8b75c
Workbook Change Assurance Benchmark 0.10.0
Precision as displayed, made reviewable
This release adds governance.precision_as_displayed_enabled: a workbook pair whose stored 10.005 input, two-decimal format, formulas, and local downstream reference remain unchanged while calcPr/@fullPrecision moves from true to false.
The fixture records a stored calculation control only. It does not open or save an Excel workbook, calculate a formula, claim a rounded stored value, or claim that any client applies the setting.
The optional FormulaFence adapter requires the exact isolated FF009 full-precision transition with every other stored calculation control unchanged.
Validation: 25 cases, 27 declared facts, 49 tests under Python 3.12 and 3.13, clean Python 3.12 wheel installation, and hosted CI under Python 3.10 and 3.13.
WCAB 0.9.0 — iterative calculation coverage
WCAB 0.9.0 adds a deterministic iterative-calculation case. Its direct self-referencing formula and downstream local reference are unchanged while calcPr/@iterate moves from false to true; explicit bounds remain 100 iterations and a 0.001 delta. WCAB validates stored OOXML and formula text only: it does not calculate the circular model, claim convergence, report a terminal value, or assert numerical correctness.\n\nValidation: 24 cases, 26 facts, 43 tests on Python 3.12/3.13 locally; hosted CI passed on Python 3.10/3.13. The optional FormulaFence reference pass matched all 25 mappable facts and all three coverage declarations; one structural-equivalence annotation remains intentionally unmapped.
WCAB 0.8.0 — external workbook-link policy coverage
WCAB 0.8.0 adds a deterministic external-workbook link startup-policy case. The synthetic external formula and local downstream reference stay unchanged while workbookPr/@updateLinks moves from never to always. The source workbook is deliberately absent: the benchmark validates stored OOXML and formula text only; it does not resolve, refresh, authenticate to, or calculate the source.\n\nValidation: 23 cases, 25 facts, 37 tests on Python 3.12/3.13 locally; hosted CI passed on Python 3.10/3.13. The optional FormulaFence reference pass matched all 24 mappable facts and all three coverage declarations; one structural-equivalence annotation remains intentionally unmapped.
WCAB 0.7.0
WCAB 0.7.0 adds a deterministic array-formula semantic transition: the same =LEN(Inputs!A1:A3) anchor and stored B1:B3 range move from fixed legacy CSE to dynamic-array mode through inspectable OOXML metadata.
The fixture never evaluates a formula or predicts a spill extent. Its validator checks the raw cm cell-metadata binding and XLDAPR fDynamic=true record, while the FormulaFence reference adapter requires the exact FF018 mode transition and range.
Validation: 22 cases, 24 declared facts, 32 tests on Python 3.12 and 3.13, hosted CI on 3.10 and 3.13, and a fresh Python 3.12 wheel validation. FormulaFence maps 23 of 24 facts and all three coverage disclosures; the documented structural rewrite remains intentionally unmapped.
WCAB 0.6.0
Refresh-on-open is workbook behavior
WCAB 0.6.0 adds a deterministic external-data connection case where only a relationship-backed connection’s refreshOnLoad setting switches from false to true. The worksheet cells and formulas do not change, but opening the workbook can now attempt to refresh external data.
The fixture uses a non-routable example.invalid endpoint. WCAB never opens it, retrieves data, tests credentials, or claims a calculated output. Its raw-OOXML validator proves the exact connection ID and transition, and the optional FormulaFence adapter requires the matching private external_data_connections_changed detail plus FF023.
The corpus now contains 21 deterministic cases, 23 observable facts, and three scoreable coverage expectations. CI passed on Python 3.10 and 3.13; a fresh Python 3.12 wheel installation validated the fixture tree and byte-identical manifest.
WCAB 0.5.0
Dynamic references can change without a formula diff
WCAB 0.5.0 adds two scoreable cases where formula text stays unchanged while a dynamic selector moves the effective reference:
INDIRECT: an input changes address text fromRevenue!B8toRevenue!C8.OFFSET: an input changes the selected column displacement.
The stable schema-v3 truth contract now has dynamic_reference_driver_changed, which pairs the changed literal driver with the unchanged dynamic formula and its declared function. The optional FormulaFence adapter requires both its native value_changed evidence and the candidate profile dynamic-reference feature before it declares that boundary.
The corpus now contains 20 deterministic cases, 22 observable facts, and three scoreable coverage expectations. CI passed on Python 3.10 and 3.13; a fresh Python 3.12 wheel installation also validated the full fixture tree and byte-identical manifest.
WCAB 0.4.0
WCAB 0.4.0 makes analysis-boundary disclosure part of the benchmark contract.
Highlights:
- Fixture schema v3 adds a deterministic direct-to-INDIRECT change case and a machine-matchable static-dependency coverage expectation.
- Observation protocol v2 adds coverage declarations, coverage-disclosure recall, and strict handling for unrecognized declarations.
- The optional FormulaFence adapter maps both the native dynamic-reference change and FF012 boundary warning.
Validation:
- 18 cases, 20 observable facts, and 1 scoreable coverage expectation.
- 23 tests passed locally on Python 3.12 and 3.13; hosted CI passed on Python 3.10 and 3.13.
- FormulaFence matched all 19 mappable facts and the one mapped coverage declaration; the structural rewrite remains intentionally unmapped.
SHA-256:
- workbook_change_benchmark-0.4.0-py3-none-any.whl: 2f5910eb06441fb8b8d9ee0baaae37e6b897e320a89e1424ca26fa2f138d67ad
- workbook_change_benchmark-0.4.0.tar.gz: a5b3f893e63a505f9cb3acef64fb35699d07ab9723155f192c9a53d9bb120a99