Skip to content

Compatibility Model ​

Formulon treats compatibility as a measured property. It does not claim generic Excel behavior; it targets named profiles backed by generated oracle data. That gives the project two concrete things to do — capture oracle data per profile, and surface accepted divergences explicitly.

Glossary: measured compatibility

A compatibility claim that points at a profile and a body of oracle data that proves it. "Compatible with win-365-ja_JP" means we ran this on Excel and captured the values. "Excel-compatible" without a profile is intentionally not used.

Capturing a profile is a one-way pipeline from a real Excel build to a reusable dataset:

01Excel builde.g. Win 365 ja-JP02Oracle datasetValues captured from Excel03Compatibility profilee.g. win-365-ja_JP, verified01Excel builde.g. Win 365 ja-JP02Oracle datasetValues captured from Excel03Compatibility profilee.g. win-365-ja_JP, verified
A profile claim is only as strong as the oracle data captured from a real Excel build.

Oracle tests recalculate fixture workbooks and compare their results with captured Excel values. Applications run the same engine, but do not compare against oracle data automatically:

Test inputsEngineOutputOracle test comparisonFixture workbookThe workbook to recalculateCompatibility profileThe profile under testFormulon engineRecalculates the fixture workbookCalculated valuesCompared with captured Excel valuesNo divergenceProfile claim holdsTracked divergenceReason + last-verifiedbuildUntrackeddivergenceBug: fix or documentTest inputsEngineOutputOracle test comparisonFixture workbookThe workbook to recalculateCompatibility profileThe profile under testFormulon engineRecalculates the fixture workbookCalculated valuesCompared with captured Excel valuesNo divergenceProfile claim holdsTracked divergenceReason + last-verified buildUntracked divergenceBug: fix or document
Only an untracked divergence counts as a bug; a tracked one carries its reason and last-verified Excel build.

Profiles ​

Formulon has 28 profiles, {mac,win}-365-{ja_JP,en_US,de_DE,fr_FR,zh_CN,ko_KR,th_TH,es_ES,es_MX,pt_BR,ru_RU,zh_TW,it_IT,nl_NL}, and the default is win-365-en_US. All 14 Mac profiles are measured against Mac Excel 365 formula oracles that gate CI: mac-365-ja_JP is primary and the other 13 locales each retain their own goldens. win-365-ja_JP is measured on Windows and is the workbook oracle profile; the other 13 Windows profiles are estimated from their Mac captures plus the measured Mac/Windows host differences.

See Locale profiles for the public list and pinning behavior.

Divergences ​

Reproducible differences in rounding, coercion, formula entry, and other results are engine work: capture Excel's answer and fix the implementation. Platform floating-point differences do not receive a blanket tolerance.

The divergence registry records deliberate differences, Excel cases without a reproducible value, capture-tool limitations, and unresolved engine gaps. Read each entry's cause, profile scope, reason, and last-verified Excel build. mode: skip-oracle means the comparison does not run; it does not establish agreement. A comparison with a tolerance establishes agreement only within that tolerance.

For example, a cycle through several cells with iteration disabled returns #REF! because its Excel result depends on entry order that the saved file does not record. A cell whose only cycle member is itself holds 0 as in Excel. Array memory limits and external services impose other boundaries. See How far compatibility goes for examples and Oracle testing for classifications and release criteria.

Practical rule ​

DoingShould
Applications using FormulonPersist the profile used for calculation
TestsState the profile they expect and pin to a Formulon version
DocumentationAvoid unqualified claims like "Excel-compatible" when a feature is only verified for one profile
Issue reportsInclude the profile, the Formulon version, the Excel build of the oracle, and a minimal reproducing workbook