DataFusion-first policy

Status: active product contract (Wave J Stage A, 2026-09-08). Supersedes the 2026-07-25 “target / PR2+” wording below where they conflict.

For tabular building telemetry computation in the product:

If the operation can reasonably be expressed as DataFusion SQL, it belongs in DataFusion SQL in central.

Product (required)

Layer Owns
Central + sql_rules/ + DataFusion FDD, Overview/RCx analytics, exports of computed values
React SPA (frontend/web) Rendering, interaction, presentation-only formatting — no engineering recomputation
Mosquitto + fieldbus Transport / edge ingest

Forbidden in product (any request path, job, export, sidecar, or opt-in flag):

  • Python / pandas / Pyodide / WASM Python / subprocess bridges for FDD or analytics
  • Silent pandas FDD fallback when DataFusion fails
  • OPENFDD_ALLOW_PANDAS_FDD (retired — must not reappear in product)
  • Millions of raw rows into the browser for client-side downsample before fault math
  • A second React app for WattLab/EnergyPlus (keep Export handoff in the united UI)

External tooling (allowed outside the product)

Class When
PyPI oracle Independent open_fdd.rules / cookbook parity vs SQL
Offline helpers WattLab/ECM tools consuming authenticated exports like any client
Test harnesses Python drivers against a Python-free SUT

Do not delete the pandas cookbook because production uses SQL. Do not recreate deleted frontend/web/app/*.py paths.

Production FDD today

Canonical path: sql_rules/ + crates/fdd_rules + POST /api/fdd/run.
UI: one React SPA (frontend/web → openfdd-web).

See SoT: openfdd_agent_spec/ARCHITECTURE.md · ownership inventory · Rule Cookbook.