Platform convention
ADR-0030
✓ 12
snake_case wire fields
ADR-30
snake_case wire fields
bigeng-01-snake-case-wire
Status COMPLIANT
Evidence 2563 matches across apps/api/src/routes
Ref ADR-0030 §Convention 1
store_hash in payload ADR-30
Typed-error contract ADR-30
D1 migration discipline ADR-30
Cents-precision currency ADR-30
UTC + ISO-8601 timestamps ADR-30
ADR commitments
29 ratified
✓ 22
◐ 5
✕ 2
ADR-0037 stored instruments closed
ADR-0038 capture timing
3/5 AC
ADR-0038 capture timing
adr-0038-capture-timing
Status PARTIAL — 3 of 5 ACs
Open auth/capture split + webhook transitions
Spec Hive #789
Phase 2
ADR-0055 substrate closed
ADR-0019 hive metadata
3/4 AC
ADR-0044 dashboard rewire 0/3 AC
ADR-0006 epic gating closed
Capabilities
344 derived
✓ 287
◐ 32
✕ 14
? 11
portal · subs list
portal · subs detail
admin · health badge
storefront · cart binding
admin · dunning workflow
a11y · screen-reader audit
api · POST /v3/subscriptions
Non-functional
NFR · Gate 7
✓ 6
? 2
P95 < 300ms (read)
P99 < 800ms (write)
WCAG 2.2 AA — portal
BigDesign parity audit
Scenario coverage
19 scenarios
✓ 19
install · happy-path
install · re-install idempotent
scope · missing scope error
scope · upgraded scope
uninstall · cleanup
Dependency routing — preview
Slice A — auth handshake
Slice C — uninstall sweep
What this proves. Categories → swimlanes; status → fill + 4-px leading edge (dual-encoded, colorblind-safe); evidence → hover popover. No dates anywhere. The dependency-arrow primitive measures real DOM rects on resize so blocked_by chains render against the actual layout.
Backed by React primitives at packages/ui/src/components/{swimlane,task-bar,dependency-arrow}. This HTML is the static spike — open the React versions when the aesthetic lands.