Releases: SybilGambleyyu/formulafence
Release list
FormulaFence 0.11.0
FormulaFence 0.11.0 improves static review of Excel explicit implicit intersection.
- Traces the selected cell for direct static @A1:A3 and persisted _xlfn.SINGLE(A1:A3) forms when the formula location is unambiguous.
- Profiles explicit intersection, reports new usage as FF017, and adds the no_new_implicit_intersections policy control (FFP017).
- Normalizes display and OOXML spellings of dynamic-array compatibility functions in formula fingerprints.
Validated with 59 tests, lint, a clean wheel install, an XlsxWriter interoperability fixture, and GitHub CI on commit d6e626b.
FormulaFence 0.10.0
Dynamic-array spill coverage
- Trace the static anchor behind direct internal
A1#references and OOXML_xlfn.ANCHORARRAY(A1)calls. - Inventory every spill consumer and make new instances visible as
FF015/no_new_spill_references; dynamic extent and blocking cells remain explicit limits. - Surface formula-tokenization failures as
FF016/no_new_tokenization_failuresinstead of silently omitting their dependency graph. - Keep spill-bearing formula-defined names unresolved at callers so partial dynamic behavior cannot be hidden behind a name.
Validated by the hosted CI run for commit 5462c77 and clean wheel installs against literal and XlsxWriter-generated spill workbooks.
FormulaFence 0.9.0
FormulaFence 0.9.0 adds conservative static dependency expansion for workbook- and worksheet-local named LAMBDA calls.
- Resolves nested named LAMBDAs and formula-defined names that call them when their full definitions are static and internal.
- Preserves workbook and worksheet-local name scope, including qualified local calls.
- Supports OOXML formula definitions without a leading equals sign plus _xlfn.LAMBDA, _xlpm., and _xlop. serialization.
- Leaves dynamic, recursive, relative, external, 3-D, and tokenizer-unsupported named LAMBDAs as explicit unresolved coverage at call sites.
Validation: 50 tests passed; hosted CI passed; a clean installed wheel profiled the public Vertex42 LAMBDA Library (121 defined names, 116 named LAMBDAs) and resolved safe LAMBDA calls while preserving unsupported definitions as coverage notes.
Wheel SHA-256: 1dcc88f090a08c271257e0442c3abf9fffd50b210f0d84a7d3b2b79930749fe2.
FormulaFence 0.8.0
FormulaFence 0.8.0 preserves static dependency paths through modern Excel lexical scope.
- Recognizes ordinary
LETbindings as local variables instead of unresolved workbook names. - Recognizes inline
LAMBDAparameters, including nested lambdas supplied to higher-order functions such asREDUCE. - Retains surrounding A1, named-range, formula-defined-name, and supported table dependencies in the graph.
- Handles nested shadowing and OOXML
_xlfn.function prefixes conservatively. - Keeps spilled ranges and named LAMBDA/custom-function calls outside the static subset rather than inferring dependencies.
Validation: 45 tests, Ruff, fresh wheel install and CLI impact tracing, two public-workbook regression profiles, and GitHub Actions CI all pass.
FormulaFence 0.7.0
FormulaFence 0.7.0 resolves the static dependency paths hidden behind formula-defined Excel names.
- Expands nested workbook-level and sheet-local formula-defined names when their full definition is statically visible and internal.
- Recognizes named constants without inventing cell dependencies.
- Supports the existing safe static table subset inside formula-defined names.
- Keeps relative, cyclic, external, dynamic, 3-D-in-name, and tokenizer-unsupported definitions unresolved instead of guessing.
- Continues to report changes to a defined-name formula as the existing
FF008workbook-control finding.
Validation: 39 tests, Ruff, a fresh wheel install and CLI impact check, a public 4,228-formula workbook re-profile, and GitHub Actions CI all pass.
FormulaFence 0.6.0
FormulaFence 0.6.0 expands static internal Excel 3-D A1 references such as Jan:Mar!B2 across the real workbook tab span.
- Adds correct dependency and impact tracing for direct static 3-D references, without inventing a
Jan:Marpseudo-sheet. - Profiles 3-D formula cells and reports
FF014when an unchanged formula changes scope because worksheet order or membership changes. - Adds
no_3d_reference_scope_changesfor CI policy enforcement (FFP014). - Keeps external, malformed, endpoint-missing, and non-A1 3-D forms explicit rather than guessing.
- Corrects the runtime version report and locks it to package metadata with a regression test.
Validation: 33 tests, Ruff, an isolated wheel install, and GitHub Actions CI all pass.
FormulaFence v0.5.0
Current-row table references
FormulaFence now traces conservative Excel table references that are scoped to the formula row. It resolves unqualified calculated-column forms such as [@[Sales Amount]] and [Sales Amount] only inside a table data cell, plus qualified Sales[@Amount] / Sales[[#This Row],[Amount]:[Rate]] forms when the formula is on that named table's data row.
Header, totals, cross-sheet, ambiguous, malformed, and complex bracket-escape cases remain explicit unresolved-reference coverage notes rather than guessed dependency edges.
Validation: 26 tests pass, lint is clean, GitHub CI passed, the wheel was installed into a fresh virtual environment, and the public Excel Easy structured-reference workbook was re-profiled with zero unresolved tokens.
FormulaFence 0.4.0
FormulaFence 0.4.0 adds trustworthy static Excel-table coverage.
- Resolves fully qualified table names, static columns or contiguous column ranges, and #All/#Data/#Headers/#Totals regions.
- Profiles table metadata and emits FF013 when a table definition changes.
- Adds no_table_definition_changes (FFP013) for policies that need to lock table semantics.
- Keeps this-row (@) and complex table syntax visible as coverage gaps instead of guessing.
Wheel SHA-256 is included in SHA256SUMS.txt.
FormulaFence 0.3.0
FormulaFence 0.3.0 makes static-analysis coverage explicit.
- Resolves ordinary workbook and sheet-local static named ranges into dependency paths.
- Profiles and diffs expose new unresolved formula references and dynamic INDIRECT/OFFSET use (FF011/FF012).
- Adds opt-in policy controls to block either class of new coverage gap.
Wheel SHA-256 is included in SHA256SUMS.txt.
FormulaFence v0.2.0
Explainability release.\n\n- Adds deterministic shortest dependency-path samples to change reports\n- Carries path evidence into FormulaFence findings, policy failures, and SARIF\n- Improves review context for high-impact workbook changes