Architecture decisions and contracts that edp-api consumes from other repos. Source files are authoritative; this is a reading aid so a new contributor doesn't have to chase across the org to understand a docstring reference.
Canonical home: ~/arcnode/ems/system_adr.md
Numbering: section-based (§1 through §18 at last check), not
ADR-NNN style. Code comments that say ADR-002 §N are referring to
ems/system_adr.md §N — the ADR-002 prefix is a stale label inherited
from an older numbering scheme.
Sections most relevant to edp-api:
| Section | Title | Why it matters here |
|---|---|---|
| §6 | SLD SVG generated by edp-api, served by device-api, animated by HMI | Defines the three-party SLD contract — drives SldHmiSvgService + the POST re-render endpoint. |
| §9 | Fixed-depth topics | Constrains DTM topology depth; informs device_id flat addressing in spite of parent-chain. |
| §14 | Device templates as canonical vocabulary | Defines device_templates/, bess_module/compute_module/grid_module roots, the parent-chain tree, the contains: block, the templates-PR-gated rule. Single source for DTM shape. |
| §16 | Identifier format: snake_case slugs, immutable | Drives the _SLUG_RE validator in src/shared/schemas/dtm.py + src/shared/schemas/template.py. |
| §17 | Spec versioning: semver, diff-free events | Drives the version: "1.0.0" field on Dtm + the system/topology_changed event contract on device-api. |
Canonical home: ~/arcnode/edp-module-assemblies/system_adrs.md
Numbering: ADR-NNN style. These are the hardware/manifest-shape
contracts edp-api consumes.
Sections most relevant to edp-api:
| ADR | Title | Why it matters here |
|---|---|---|
| ADR-002 | v1 targets HGX B200 | Sets GpuVariant.B200 as default; informs sizing constants. |
| ADR-006 | Manifest absorbs profile→asset mapping | Why ManifestService lives in edp-api but manifest_profiles.yaml is upstream. Drives the per-job manifest pin. |
| ADR-009 | Hardware↔edp-api contract artifacts | Pins the bom.yaml (input) + bom.json (output) shapes. Drives manifest_models.py + bom_models.py. |
| ADR-011 | Manifest URL versioning deferred | Documents the in-flight torn-read risk + the per-job-fetch-and-pin mitigation that landed in commit 87c18dd. |
- Wholesale market scope beyond ERCOT/HB_NORTH — depends on
ems-analyst-server(🤖 ai-engineer) certifying each ISO's gridstatus.io dataset + LMP filter logic. Cross-role; edp-api owns only the validator surface. SeeConfiguratorPayload.market_hub_supported. - DNP3 master_external leaf template +
equipment/GRD-UTM-001/spec — both repos are ⚡ power-engineer scope, but the point map + whether GRD-UTM-001 is a separate physical relay or a second DNP3 session on the existing SEL-351-7 is a product-architecture decision (IEEE 1547.2 interconnection requirements vary by utility). See TODO in~/arcnode/edp-module-assemblies/assemblies/grid-container/commercial-ac/topology.yaml.
Resolved (was previously flagged as open):
— never was a structural issue.federal_*profile rename +dod_*↔defense_*alignmentDeploymentProfilestays commercial_* + defense_* (hardware variants);SourcingTierseparately tracksFEDERAL_CIVILIANvsDOD_ELIGIBLE(procurement path). The two dimensions are orthogonal, no rename required.
Captured here so the link between code and standard is one click away.
| Standard | Where edp-api uses it |
|---|---|
| IEC 61850 (substation automation logical-node refs) | src/drawing/_iec_61850.py + every template's measurements[*].iec_61850_ref field. MMXU.W identifies bus-source side; XCBR.Pos.stVal / XSWI.Pos.stVal mark breakers. |
| IEC 60617 (graphical symbols for diagrams) | src/drawing/_sld_eng_symbols.py. Breaker S00286, disconnector S00282, meter S00313, battery S00306. |
| ISO 5457 (engineering drawing sheets) | src/drawing/_sld_eng_title_block.py::draw_sheet_frame — A3 landscape, 5mm border inset. |
| ISO 7200 (title blocks) | src/drawing/_sld_eng_title_block.py::draw_title_block — "lite" version, ~4 rows in the bottom-right corner. |
| IEEE 2030.5 / CSIP (Common Smart Inverter Profile) | device_templates/leaf/operating_envelope.yaml — CSIP.opModImpLimW, CSIP.opModExpLimW measurement refs. |
| ANSI C12.20 / IEC 62053-22 (revenue-meter accuracy class) | device_templates/leaf/revenue_meter.yaml description. Class 0.1S. |
| DXF R2018 (AutoCAD Drawing Exchange Format) | src/drawing/sld_engineering_service.py — dxfversion="R2018". |