

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1# Agent instructions — DIY BACnet Server (Open-FDD field-bus)23This file is **durable project context**. Do not remove or bypass these rules when refactoring.45## Hosted BACnet device (device 599999 / OpenFDD)67The gateway hosts a BACnet/IP server on UDP **47808** (configurable via `OPENFDD_FIELDBUS_BACNET_PORT`).89| Requirement | Detail |10|-------------|--------|11| Device name | `OpenFDD` (`config/gateway.toml` → `device_name`) |12| Vendor ID | **999** on `BACnetServer::bip_builder().vendor_id(999)` **and** `DeviceConfig.vendor_id` |13| Model | `openfdd-fieldbus` |14| Point catalog | `config/objects.csv` — **do not drop rows** without explicit user request |1516### Server vs client UDP sockets1718- **Server** binds `0.0.0.0:47808` (or configured port) — only socket on that port.19- **Client** uses **ephemeral** UDP ports (`whois_bind_port = 0` in `gateway.toml`).20- Never bind the BACnet client to the same UDP port as the hosted server (causes Workbench `???` / dropped ReadProperty).2122## REST vs BACnet write split (critical — no data races)2324Points in `objects.csv` with **`Commandable=Y`** are **BACnet-writable only**:2526- External BMS / Workbench / Niagara may WriteProperty (e.g. `openfdd-optimization-enabled` BV **9010**).27- REST **`POST /bacnet/server/update` must reject** writes to commandable points.28- Mechanism: `BacnetServerManager::api_writable()` / `reject_api_write()` in `rust-api/src/services/bacnet_server.rs`.29- Rejection message constant: `API_WRITABLE_REJECT_MSG`.3031Points with **`Commandable=N`** are **server-owned** (weather mirror, FDD diagnostics). Only these may be updated via REST.3233### Tests that must stay green3435- `every_commandable_point_rejects_api_write`36- `optimization_enabled_is_only_commandable_hosted_point`37- `update_rejects_commandable_point`38- Smoke: `scripts/smoke_test.sh` hosted-server section (commandable reject + weather points)3940## Weather mirror (Open-Meteo)4142Weather AVs **9101–9104**, location CSV **9105**, fault BV **9106**, last-updated CSV **9107**.4344On each mirror cycle, update:45461. **Present-value** on weather points472. **Description** with live Open-Meteo context (value + timestamp + source)483. **`weather-last-updated`** (CSV:9107) with human-readable timestamp4950Implementation: `rust-api/src/services/weather.rs` → `mirror_to_bacnet()`.5152## Before merging BACnet changes53541. `cargo test` in `rust-api/`552. `scripts/smoke_test.sh` against running container563. Optional: `point-discover --device 599999 --address <host>:47808` from rusty-bacnet samples — expect name **OpenFDD** and ≥10 objects5758## Swagger / OpenAPI bench examples5960- **`OPENFDD_FIELDBUS_SWAGGER_BENCH=1`** by default — bench JSON bodies always pre-filled (opt-out with `=0`).61- **Open-FDD workflow:** `POST /bacnet/whois` `{}` → `POST /api/bacnet/point-discovery` → `POST /api/bacnet/supervisory`.62- **`GET /bacnet/points` removed** — use Who-Is + point discovery instead.6364## Key files6566```67config/objects.csv # hosted point catalog (+ Description column)68config/gateway.toml # device 599999, server bind, client ephemeral ports69rust-api/src/services/bacnet_server.rs70rust-api/src/services/weather.rs71scripts/smoke_test.sh72```73
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-fddtools/open-fdd-modernization/AGENTS.md · 157 | AGENTS.md | teststyletesting-strategygit+5 | 69/100 | today |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| vllm-project/vllmAGENTS.md · 89k | AGENTS.md | setuptestlint-formatstyle+5 | 100/100 | 14 days ago | |
| duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70 | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| 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 | |
| aaif-goose/gooseAGENTS.md · 53k | AGENTS.md | setupbuildtestlint-format+7 | 100/100 | 8 days ago | |
| n8n-io/n8npackages/@n8n/agents/AGENTS.md · 201k | 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 | |
| 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-services-fieldbus-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.