Static analysis for the elixcee check subcommand: inspects a .bas file
without executing it. Deliberately narrow scope — see tasks/todo.md
Milestone B1/B1.1 for what’s included here vs. still deferred and why.
Milestone B6a: the diagnose subcommand — classifies why Excel would
reject an operation (missing worksheet/workbook, array out of bounds)
with concrete evidence, instead of only reporting a bare runtime-error
string. Runs a macro exactly once, with Vm::strict_resolution turned
on (see that field’s doc comment in src/vm/mod.rs) so a reference to a
nonexistent sheet/workbook is a classified failure rather than being
papered over by elixcee’s usual auto-vivify/silent-Empty convenience —
and with On Error not honored, so the first such failure always
propagates instead of being swallowed by the macro’s own error handling.
Milestone B6d: the diagnose-workbook subcommand — reuses
test-workbook’s (Milestone B5a) generated-case search
(testworkbook::run_fixture, called with strict: true) and enriches
whichever failures are classifiable with diagnose’s (Milestones
B6a–B6c2) existing root-cause machinery, via the single pub(crate)
entry point diagnose::root_causes_json.
Structured error classification and hand-rolled JSON output for the CLI’s
--json agent contract. No serde dependency — the output shapes are
flat and fixed, so a small escaper is all that’s needed.
Workbook snapshot (Milestone B4): reads a .xlsx/.ods file directly
(via reader::read_workbook, no VBA execution) and renders it as either
JSON (authoritative, for machine consumers) or Markdown (default, for
human display) — the elixcee snapshot subcommand’s own output shapes,
distinct from run-mode’s cells/entrypoint and check’s diagnostics.
Property-based workbook test runner (Milestone B5a): the test-workbook
subcommand runs a macro against a starting .xlsx/.ods workbook many
times with generated boundary-value inputs, checking each run for
panics, runtime errors, timeouts, and Excel error values in a result
range. Every case starts from a completely fresh Vm and a fresh read
of the workbook file — no cell, variable, MsgBox-log, or deadline state
survives from one case to the next.