fix(evaluator): report skipped and unresolved scenario-table calculations - #571
fix(evaluator): report skipped and unresolved scenario-table calculations#571arcaputo3 wants to merge 1 commit into
Conversation
|
Review (1/3): summary, plus the one thing I would fix before merge Read the full diff plus the surrounding Note: 1. The
The new "seeded, but ..." is now false in exactly the case this PR introduces. Suggest dropping the claim (e.g. 2. case None => (acc, skips + 1, fired, named, unres, firstFailure) // axis overlay failed: no message
case Some(outcome) => ... firstFailure.orElse(Some(error.message.take(200)))
Two smaller things in the same expression: |
|
Review (2/3): the dynamic gate, and performance 3. The dynamic gate is a deliberate capability regression — is the blast radius as narrow as it can be?
But a table that previously seeded correctly — corner
4. Performance: an extra whole-workbook pass on every
Still, the gate only ever consumes the intersection of 5. Readability: the fold accumulators have outgrown tuples Both lanes went from 6-tuples to 7-tuples, destructured positionally inside a nested match: ) { case ((acc, fails, skips, fired, named, unres, firstFailure), cellRef) =>Two positional Nit in the same block: |
|
Review (3/3): docs, process, test coverage 6. Docs and process
7. Test coverage The new spec is well-targeted: it pins the untouched-workbook invariant with
Things I checked that look correct
Nothing here looks like a blocker. Finding 1 is the one I would fix before merge (a two-line change to a message that is now provably wrong); findings 2 and 4 deserve an explicit decision rather than a silent deferral. |
An INDIRECT-based sensitivity table could seed 1 / 1 / 1 instead of 11 / 21 / 31 without warnings. Source-evaluation failures also discarded unresolved-cone diagnostics and could report zero warnings after seeding no interiors.
Tables with dynamic references in their needed source cone are now left untouched with a named
Skippedwarning. Substituted input cells and their original ancestors are excluded from that cone. Both seeding paths retain source/member failures and unresolved precedents, count unseeded interiors, and feed those warnings into--strict. Dynamic scenario evaluation remains deferred; ordinary INDIRECT/OFFSET evaluation remains supported.Validation: 11 new cases, existing Excel-authored table oracles, and the full suite passed (5,601 cases, one existing ignored performance comparison). Native CLI probes confirm explicit skips and strict exit 1.
Closes #498.
Closes #506.