Skip to content

feat: implement milestones 19–43 (security, topology, tooling, bridges, RTOS, certification)#3

Merged
SoundMatt merged 2 commits into
mainfrom
feat/milestones-19-43
Jun 16, 2026
Merged

feat: implement milestones 19–43 (security, topology, tooling, bridges, RTOS, certification)#3
SoundMatt merged 2 commits into
mainfrom
feat/milestones-19-43

Conversation

@SoundMatt

Copy link
Copy Markdown
Owner

Summary

Phase 6 — Security

  • M19 authz.hpp: AuthController + AccessPolicy; ErrForbidden; IEC 62443 SL-2 access control (REQ-AUTH-001..008)
  • M20 firmware.hpp: FirmwareSession; chunked OTA transfer; verify+rollback; CommandType::Update (REQ-FW-001..008)

Phase 7 — Topology

  • M21 zonegroup.hpp: ZoneGroup typed sets; concurrent send_group() via std::async; GroupResponse (REQ-ZG-001..006)
  • M22 proxy.hpp: ProxyController latency budget; ProxyRegistry full relay (REQ-PROXY-001..006)
  • M23 redundancy.hpp: RedundantController hot-standby; auto_promote on fault (REQ-RED-001..008)
  • M24 federation.hpp: FederatedRegistry; lease-based cross-HPC ownership (REQ-FED-001..008)

Phase 8 — Tooling

  • M25 observe.hpp: ObservingController; InMemorySink; OTel-style span recording (REQ-OBS-001..008)
  • M26 admin.hpp: AdminServer; SSE event bus; Prometheus metrics_text() (REQ-ADMIN-001..008)
  • M27 record.hpp: RecordingController; binary log; Playback::run_all() with speed factor (REQ-REC-001..008)
  • M28 config.hpp: hand-rolled JSON parser; config::load() into Registry (REQ-CFG-001..006)
  • M29 tooling/zone_manifest_schema.json: JSON Schema draft-07 for zone manifests
  • M30 dyndata.hpp: SchemaRegistry; DynamicPayload encode/decode with 4-byte BE schema_id prefix (REQ-DYN-001..006)

Phase 9–10 — Protocol Bridges

  • M31–M39: grpcbridge, restbridge, someipbr, canbr, ddsbr, mqttbr, linbr, udsbr, doipbr — all stub Controller impls returning errc::function_not_supported

Phase 11 — RTOS / C API

  • M40 capi.h + capi_impl.hpp: pure-C flat API with opaque handles; placement-new into caller-supplied aligned buffers; rcp_send, rcp_subscribe, rcp_registry_*, rcp_ctrl_*

Phase 12 — Formal Verification

  • M41 tla/: HealthStateMachine.tla, AntiReplayGuard.tla, WatchdogProtocol.tla — TLC-checkable safety properties
  • FORMAL_VERIFICATION.md: property descriptions, C++ mapping, TLC instructions

Phase 13–14 — ISO 21434 / Certification

  • M42 TARA.md, CYBERSECURITY.md: 10 threats (T-01..T-10), risk matrix, IEC 62443 SL-2 gap analysis
  • M43 AUDIT_PACK.md: ASIL-D gap analysis, structural coverage table, CI gate table, change impact procedure
  • .fusa-reqs.json: expanded to 324 requirements across 38 groups (up from 198)

All 26 CTest cases pass ✅

Test plan

  • CI gate passes on this branch
  • All 26 tests green (14 original + 12 new: rcp_authz, rcp_firmware, rcp_zonegroup, rcp_proxy, rcp_redundancy, rcp_federation, rcp_observe, rcp_admin, rcp_record, rcp_config, rcp_dyndata, rcp_capi)
  • No regressions in rcp_core, rcp_mock, rcp_wire, rcp_e2e

SoundMatt and others added 2 commits June 16, 2026 15:48
…s, RTOS, certification)

Milestones 19–43 across 6 phases:

Phase 6 — Security
  M19 authz: AuthController + AccessPolicy; ErrForbidden; IEC 62443 SL-2
  M20 firmware: FirmwareSession; chunked OTA; rollback; CommandType::Update

Phase 7 — Topology
  M21 zonegroup: ZoneGroup typed sets; concurrent send_group; GroupResponse
  M22 proxy: ProxyController latency budget; ProxyRegistry
  M23 redundancy: RedundantController hot-standby; auto_promote
  M24 federation: FederatedRegistry; lease-based cross-HPC ownership

Phase 8 — Tooling
  M25 observe: ObservingController; InMemorySink; OTel span recording
  M26 admin: AdminServer; SSE events; Prometheus metrics_text
  M27 record: RecordingController; Record binary log; Playback replay
  M28 config: parse_json; config::load into Registry
  M29 codegen: tooling/zone_manifest_schema.json
  M30 dyndata: SchemaRegistry; DynamicPayload encode/decode

Phase 9 — Remote Access
  M31 grpcbridge: GrpcController stub
  M32 restbridge: RestController stub

Phase 10 — Protocol Bridges
  M33-M39: someipbr, canbr, ddsbr, mqttbr, linbr, udsbr, doipbr stubs

Phase 11 — Platform
  M40 capi: capi.h C API; capi_impl.hpp placement-new shim for RTOS targets

Phase 12 — Certification
  M41 tla/: HealthStateMachine, AntiReplayGuard, WatchdogProtocol TLA+ specs
      FORMAL_VERIFICATION.md
  M42 TARA.md; CYBERSECURITY.md; IEC 62443 SL-2 gap analysis
  M43 AUDIT_PACK.md; ASIL-D gap analysis; structural coverage report

Supporting changes:
  - rcp.hpp: CommandType::Update = 7
  - .fusa-reqs.json: +126 requirements (REQ-AUTH..REQ-CAPI, 24 groups → 38)
  - tests/CMakeLists.txt: +12 executables (test_authz..test_capi)
  - ROADMAP.md: M19–M43 marked ✅

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com>
- dyndata.hpp: add `schema_id = 0` default member initializer so
  DynamicPayload::decode() returns zero schema_id on short input (was UB)
- test_capi.cpp: use __attribute__((aligned(16))) after declarator for
  placement-new buffers; avoids bus error from misaligned rcp::mock::Registry

All 26 CTest cases pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com>
@SoundMatt
SoundMatt merged commit bee06a9 into main Jun 16, 2026
4 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant