Files
calctext/_bmad-output/implementation-artifacts/13-2-dependency-graph-and-lazy-evaluation.md
2026-03-16 19:54:53 -04:00

1.6 KiB

epic, story, title, status
epic story title status
13 13.2 Dependency Graph & Lazy Evaluation draft

Epic 13 — Performance & Reliability

Goal: Instant evaluation, never lose work.

Story 13.2: Dependency Graph & Lazy Evaluation

As a CalcPad user, I want only the lines affected by a change to re-evaluate, So that editing a variable on line 5 of a 500-line sheet does not re-evaluate unrelated lines.

Acceptance Criteria:

Given the engine maintains a directed acyclic graph (DAG) of variable dependencies across all lines When a variable's value changes on a specific line Then only lines that directly or transitively depend on that variable are marked dirty and re-evaluated And lines with no dependency on the changed variable are not re-evaluated

Given a sheet where line 3 defines tax = 0.08 and lines 10, 25, and 40 reference tax When the user changes tax to 0.10 on line 3 Then only lines 3, 10, 25, 40 (and any lines that depend on those) are re-evaluated And all other lines retain their cached results without recomputation

Given a circular dependency is introduced (e.g., a = b + 1 and b = a + 1) When the engine builds or updates the DAG Then the circular dependency is detected before evaluation And an error is displayed on the offending lines indicating a circular reference And the rest of the sheet continues to evaluate normally

Given a line is deleted that other lines depend on When the DAG is updated Then all lines that referenced the deleted variable are marked dirty And those lines display an "undefined variable" error on next evaluation