Skip to content

feat: v2.1.0 — RC Server lifecycle & register-map model (milestone 45) - #38

Merged
SoundMatt merged 1 commit into
mainfrom
feat/m45-rc-server-lifecycle-regmap
Jul 28, 2026
Merged

SoundMatt merged 1 commit into
mainfrom
feat/m45-rc-server-lifecycle-regmap

Conversation

@SoundMatt

Copy link
Copy Markdown
Owner

Summary

Implements ROADMAP.md milestone 45, "RC Server Lifecycle & Register-Map Model (v2.1.0)" — the next item in Phase 13's TC18 protocol-replacement sequence, following milestone 44's wire-format core (v2.0.0).

  • include/rcp/lifecycle.hpp — the 3-state RC Server lifecycle machine (HW_UNCONFIGURED/HW_CONFIGURED/RCP_CONFIGURED), forward-only single-step advance() transitions, the HW_CFG_INCONSISTENT/RCP_CFG_INCONSISTENT plausibility checks gating each transition, an explicit deconfigure() backward path, and independent generic/functional config-block locking queries.
  • include/rcp/regmap.hpp — the register-map data model: the generic/functional endpoint config split, general bootstrap fields (magic, protocol version, vendor/device ID, endpoint count, stream/queue capacity, svr_implemented_options, and the five table pointer/capacity fields), HW pin-map config, request-stream config (including the rx_wd_*/rx_safety_measure fields, present but intentionally inert until v2.6.0), the EP-ID/byte_bus_id mapping table (client-ordering risk flagged explicitly in comments), response/ack queue config, and persistent 8-bit sequencer-state storage — plus Ep0, the RC Server pseudo-endpoint implementing whole-register-map read (unrestricted) and write (root-client-only), and per-endpoint write restriction for every other client.
  • The four mandatory register-map error codes (UNAUTHORIZED_ACCESS, LOCKED_MEM_ACCESS, REQUEST_REJECTED, INVALID_PARAMETER) as rcp::regmap::RegMapErrc.
  • New coverage: tests/test_lifecycle.cpp (REQ-LIFECYCLE-001..006) and tests/test_regmap.cpp (REQ-REGMAP-001..014), both traced in .fusa-reqs.json.
  • Version bumped to 2.1.0 (version.hpp, CMakeLists.txt); ROADMAP.md milestone 45 checked off with a "Done (v2.1.0)" note following the milestone 44 precedent.

rcp/wire.hpp and rcp/legacy_wire.hpp are untouched, per the milestone's own scope note. rcp/rcp.hpp's pre-replacement Zone/Command/Controller/Registry model is left in place, unmodified in behavior — only its header comment now points at the new replacement headers — since roughly three dozen other headers still build against it and aren't rebound until their own later milestones (v2.9.0 onward per the Release Plan); see the Satellite Package Disposition table. Full removal of rcp.hpp's old model in one PR would have broken the whole tree for no benefit to this milestone's scope.

Field widths, the register-map magic-number value, and locking policy are this implementation's own design choices for realizing the described behavior — no text from the source specification is reproduced anywhere in code or comments, consistent with wire.hpp's existing conformance disclaimer.

Test plan

  • cmake --build (Release + Debug, C++17 and C++20, AppleClang locally) — clean, no new warnings
  • ctest — all 44 suites pass, including the two new ones (43 + 77 assertions)
  • RELAY conformance gate (relay conform --strict against the built cpp-rcp CLI) — PASS
  • cpfusa check — 0 errors
  • cpfusa lint — 0 errors (info/warning counts unchanged from baseline pattern)
  • cpfusa cyber — 0 errors
  • cpfusa trace --req-coverage 100 — all new REQ-LIFECYCLE-/REQ-REGMAP- entries show impl:[✓] test:[✓]
  • cpfusa verify — ctest evidence generated, 44/44 passed
  • CI (waiting on this PR's GitHub Actions run)

…lestone 45)

Adds rcp/lifecycle.hpp (3-state HW_UNCONFIGURED/HW_CONFIGURED/RCP_CONFIGURED
machine with forward-only transitions, HW_CFG_INCONSISTENT/RCP_CFG_INCONSISTENT
plausibility checks, and generic/functional config-block locking) and
rcp/regmap.hpp (the register-map data model: generic vs. functional endpoint
config split, general bootstrap fields, HW pin-map/request-stream/EP-ID-mapping/
response-queue config, persistent sequencer-state storage, and EP0 — the RC
Server pseudo-endpoint with whole-map read/write and root-client/per-endpoint
write-access enforcement). Adds the four mandatory register-map error codes
(UNAUTHORIZED_ACCESS, LOCKED_MEM_ACCESS, REQUEST_REJECTED, INVALID_PARAMETER)
as rcp::regmap::RegMapErrc.

New coverage in tests/test_lifecycle.cpp (REQ-LIFECYCLE-001..006) and
tests/test_regmap.cpp (REQ-REGMAP-001..014), both traced in .fusa-reqs.json.

rcp/rcp.hpp's pre-replacement Zone/Command/Controller/Registry model is left
in place unmodified in behavior — only its header comment now points at this
milestone's replacement headers — since roughly three dozen other headers
still build against it and aren't rebound until their own later milestones
(v2.9.0 onward per the Release Plan); see ROADMAP.md's Satellite Package
Disposition table.

Bumps version.hpp and the CMake project version to 2.1.0, and checks off
ROADMAP.md milestone 45 with a "Done (v2.1.0)" note following the milestone
44 precedent.

Signed-off-by: Matt <47545907+SoundMatt@users.noreply.github.com>
@SoundMatt
SoundMatt merged commit 6b67a4a into main Jul 28, 2026
20 checks passed
@SoundMatt
SoundMatt deleted the feat/m45-rc-server-lifecycle-regmap branch July 28, 2026 15:51
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