

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1# Open-FDD React product UI agent guide23## Mission45Maintain React (`frontend/web`) as the sole production UI with domain authority6on **central Rust + DataFusion SQL**. Python is oracle/characterization only.7**No FastAPI sidecar.**89Phase 1+2 exits are approved. Phase 3 (edge/live streaming) is outlook-only —10see `PHASE_3_READINESS.md`. Do not redesign BACnet/MQTT without explicit auth.1112This file is the modernization-kit `AGENTS.md`. It does **not** replace13[`openfdd_agent_spec/AGENTS.md`](../../openfdd_agent_spec/AGENTS.md) or the repo14root [`AGENTS.md`](../../AGENTS.md).1516## Mandatory skill + OS bootstrap (every UI PR)1718Before editing React/product UI code, **read and follow** in order:19201. Repo root [`AGENTS.md`](../../AGENTS.md)212. [`openfdd_agent_spec/AGENTS.md`](../../openfdd_agent_spec/AGENTS.md) — product law,22 ownership, PR protocol, Milestone skills233. This file244. [`AGENT_SKILL_BRIDGE.md`](AGENT_SKILL_BRIDGE.md) — which skill for which work255. **[`openfdd_agent_spec/skills/openfdd-react-spa/SKILL.md`](../../openfdd_agent_spec/skills/openfdd-react-spa/SKILL.md)**266. [`AGENT_EXECUTION_SYSTEM.md`](AGENT_EXECUTION_SYSTEM.md)277. Current phase doc + [`docs/migration/react-rust/`](../../docs/migration/react-rust/)28 ledgers298. Matching skill from `openfdd_agent_spec/skills/` when the PR touches SQL FDD,30 cookbooks, GHCR, ECM, or architecture ownership3132Do not invent a React redesign. Match documented product behavior and API contracts.3334## Open-FDD repository map3536```text37frontend/web/ React SPA (sole production UI)38services/central/ Rust browser API + jobs + FDD orchestration39sql_rules/ + crates/fdd_* DataFusion FDD / analytics40docs/migration/react-rust/ Durable ledgers + Phase 3 readiness41tools/open-fdd-modernization/ This program kit42openfdd_agent_spec/ Engineering agent OS + Milestone skills43open_fdd/ PyPI oracle / ECM (not production FDD runtime)44```4546## Source-of-truth hierarchy47481. Running React at the target viewport and state (product path).492. Central `/api` contracts and ledgers under `docs/migration/react-rust/`.503. Browser measurements and same-viewport screenshots when doing visual work.514. Visual inference last — document uncertainty.5253Document intentional differences. Prefer React + contract evidence.5455## Required architecture (Open-FDD)5657```text58React SPA ── same-origin /api ── central Rust ── DataFusion SQL59 │60 ├── jobs / mappings / artifacts61 └── fieldbus/MQTTS (unchanged)6263Python ── oracle / characterization only (Phase 1)64```6566### React owns6768- Layout, components, tabs, responsive behavior, visible UI state.69- Form drafts, selections, open/closed panels, transient feedback.70- Loading, empty, disconnected, validation, and error presentation.71- Client downloads when no server authority is needed.7273### central Rust owns7475- APIs, authz, validation, durable jobs, persistence, orchestration.76- Ingestion, package/ZIP defenses, exports, error envelopes.77- Stable JSON contracts consumed by React.7879### DataFusion / sql_rules owns8081- Deterministic telemetry analytics and FDD rule execution.82- Never silently fall back to pandas in production paths.8384### Python oracle owns8586- Characterization fixtures, cookbook parity, optional ECM honesty checks.87- Never a browser-facing FastAPI or production UI dependency for React.8889## React SPA skill law9091Follow [`openfdd_agent_spec/skills/openfdd-react-spa/SKILL.md`](../../openfdd_agent_spec/skills/openfdd-react-spa/SKILL.md):92931. Inspect before editing (inventory widgets, session keys, branches).942. Build a parity contract before pixel chasing.953. Measure the product UI when browser tools exist.964. Separate domain logic into Rust/SQL — not TypeScript formulas.975. Translate shareable session keys into explicit React/URL/server state98 ([P1-M3-03](MILESTONE_PR_MATRIX.md)).996. Verify with Vitest and Playwright where applicable.100101For Open-FDD: **backend = `services/central` (Rust)**. Do not add a Python API sidecar.102103## Migration workflow (bounded PRs)1041051. Establish baseline (record viewport/fixture).1062. Inventory navigation, controls, session keys, downloads.1073. Capture visual/geometry specs (`LAYOUT_GEOMETRY.md` and ledgers).1084. Define/version Rust contracts before coupling React.1095. Implement React presentation only; reuse widgets from `frontend/web`.1106. Compare (exact / numeric / temporal / interaction / visual / artifact /111 security classes). UNKNOWN blocks DONE.1127. Update ledgers + `openfdd_agent_spec/SESSION_LOG.md` /113 `BUILD_CHECKPOINTS.md` when Phase 1 status changes.1148. One milestone ID per PR; CodeRabbit; green CI; squash-merge; prune.115116## State translation117118| UI state | Destination |119|---|---|120| Current tab / section | URL + React router (`main_section`) |121| Select / open panel | React local or URL state |122| Shareable job/equipment/site | URL search params |123| Calculation input | React form → Rust API |124| Calculation result | Query/cache from `/api/*` |125| Durable config / mapping | Rust jobs + FDD session-config |126| Auth | Server-side JWT / session validation |127128Do not store authoritative job/mapping state only in `localStorage`.129130## Calculation rules131132- No pandas logic in TypeScript.133- No FastAPI bridge.134- No silent SQL → pandas fallback.135- Preserve BACnet write safety; React never touches BACnet wire.136- Distinguish raw values from presentation rounding.137138## Minimum test coverage139140- Contract/health and typed client compile.141- Widget/component interaction tests for new primitives.142- Route refresh/back/deep-link for session translation.143- Slice e2e for Jobs → upload → map → run (M4+) without Python UI container.144- Parity evidence rows updated in the same PR.145146## Definition of done (shell / slice)147148- Inventoried workflow migrated or explicitly waived in ledgers.149- React talks only to central `/api`.150- Production React build + affected CI green.151- Product UI compared at identical viewport/state when visual class applies.152- Intentional differences documented in `DECISIONS.md`.153154## Related program docs155156See [`README.md`](README.md) and [`AGENT_SKILL_BRIDGE.md`](AGENT_SKILL_BRIDGE.md).157
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| bbartling/open-fdd.cursor/rules/openfdd-demo-ghcr.mdc · 157 | Cursor rules | testdo-not | 69/100 | today | |
| bbartling/open-fdd.cursor/rules/openfdd-phase1-react-parity.mdc · 157 | Cursor rules | no sections | 47/100 | today | |
| bbartling/open-fddAGENTS.md · 157 | AGENTS.md | styleuido-notagent-behaviour | 80/100 | today | |
| bbartling/open-fddopenfdd_agent_spec/AGENTS.md · 157 | AGENTS.md | stylesecuritydependenciesmonorepo+2 | 67/100 | today | |
| bbartling/open-fddservices/fieldbus/AGENTS.md · 157 | AGENTS.md | testapiagent-behaviour | 62/100 | today |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| n8n-io/n8npackages/@n8n/agents/AGENTS.md · 201k | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| aaif-goose/gooseAGENTS.md · 53k | AGENTS.md | setupbuildtestlint-format+7 | 100/100 | 8 days ago | |
| duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70 | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| deepseek-ai/deepseek-harnessnative/landlock-run/AGENTS.md · 104k | AGENTS.md | setupteststylearch+3 | 100/100 | today | |
| code-yeongyu/oh-my-openagentpackages/web/AGENTS.md · 68k | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 13 days ago | |
| TryGhost/Ghoste2e/AGENTS.md · 55k | AGENTS.md | setupteststylearch+2 | 100/100 | today | |
| vllm-project/vllmAGENTS.md · 89k | AGENTS.md | setuptestlint-formatstyle+5 | 100/100 | 14 days ago | |
| mui/material-uiAGENTS.md · 99k | AGENTS.md | setupbuildtestlint-format+9 | 100/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/bbartling-open-fdd-tools-open-fdd-modernization-agents)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.