Circular references
xplo now recomputes circular references, but only when your workbook has Excel's iterative calculation enabled and the cycle is safely executable. Every other cyclic cell keeps its last saved value rather than recomputing. The set of executable cycles and their convergence behavior may change between releases, and cyclic results are not guaranteed bit-for-bit identical to Excel.
A circular reference is a group of cells that depend on one another, directly or through a chain. Excel resolves these only when you turn on iterative calculation; xplo mirrors that model — it detects each cycle, and either iterates it to convergence or freezes it at the value Excel last saved.
How xplo resolves cycles
During ingest, xplo detects circular references in the dependency graph as strongly-connected components (SCCs) — the smallest groups of cells that all feed back into each other. Each group is then given one of two execution policies:
- Iterative recompute. When the workbook enables iterative calculation and the cycle body is safely executable, xplo recomputes the group with Gauss-Seidel iteration: it re-evaluates the members in order, pass after pass, so each cell reads the freshest values from earlier in the same pass. Iteration stops when the largest change between passes falls below the workbook's maximum-change tolerance, or when the maximum iteration count is reached.
- Baseline passthrough. Otherwise the group keeps the values Excel saved into the file. Those cells still show their saved results, but they will not recompute when inputs change.
Iteration settings come from your workbook
xplo reads the iterative-calculation configuration Excel persists in the workbook (the iterate, iterateCount, and iterateDelta settings) and honors it when recomputing a cycle. There is no separate switch to flip in xplo.
- Maximum iterations— the workbook's iterate count, defaulting to Excel's 100 when iteration is enabled without an explicit value. Counts above 10,000 are clamped to that safety cap.
- Maximum change— the workbook's convergence tolerance, defaulting to Excel's 0.001.
To enable iteration in Excel, open File → Options → Formulas, tick Enable iterative calculation, set your maximum iterations and maximum change, and save. xplo picks those values up from the saved file.
Which cycles recompute
A cycle is recomputed only when iteration is enabled and every one of its cells is safely executable. Anything below leaves the whole cycle at its saved baseline value.
| Cycle contents | Result |
|---|---|
| Workbook has Excel iterative calculation enabled and every cell in the cycle is safely executable | Recomputed iteratively |
| Iterative calculation is not enabled in the workbook | Frozen at saved value |
| A cycle cell uses a volatile function (other than NOW / TODAY) or another baseline-bypass function | Frozen at saved value |
| A cycle cell uses INDIRECT or OFFSET | Frozen at saved value |
| A cycle cell is a spill, array, or LAMBDA-family formula (LAMBDA, MAP, REDUCE, SCAN, BYROW, BYCOL, MAKEARRAY) | Frozen at saved value |
| A cycle cell holds a pinned circular-reference error | Frozen at saved value |
| The cycle depends on a cell that is not yet resolved when the cycle runs (cross-cycle scheduling) | Frozen at saved value |
These exclusions are conservative on purpose: xplo would rather keep a correct saved value than recompute a cycle whose Excel semantics it cannot yet reproduce exactly. INDIRECT and OFFSET are excluded even when statically resolvable, because a scenario that changes a dynamically-referenced cell might not correctly re-trigger the cycle.
Caveats and limitations
- Frozen cycles do not respond to changed inputs. Baseline passthrough keeps the saved value, so a cell inside a frozen cycle will not move when you run the workbook with different inputs — something to watch for in simulations and scenario sweeps.
- Circular-reference errors are preserved. If Excel saved a cell in the cycle as a circular-reference error, xplo re-asserts that error rather than trying to resolve the cell.
- Cyclic results are not bit-guaranteed.Iterative solutions depend on member ordering and the convergence tolerance, so an iterated cycle can differ from Excel in the last digits even when both converge. xplo emulates Excel's Gauss-Seidel model but does not promise byte-for-byte parity on cyclic cells.
- Cross-cycle scheduling is still limited. When one cycle depends on the output of another cycle (or of a cell computed after it), xplo currently freezes the dependent cycle at its baseline rather than risk reading an unwritten value.