Repository navigation
[cpp-RCP-parity-A] Release integrity: close the tag/main drift and release-pipeline gaps #122
Description
Background
c-RCP (the project's reference implementation) just closed a tag/main drift of its own (v0.477.0 → v0.479.0, 5 commits) and has a hardened release pipeline: a release.yml that verifies every shipped safety artifact declares the version actually being released (added after a real incident, c-RCP issue c-RCP-09, where artifacts drifted ~184 versions stale), plus a standalone per-PR version-sources-agree CI job.
A parity audit against cpp-RCP (2026-08-21, verified against cpp-RCP main@ba31fa1) found cpp-RCP has the same class of problem, worse in degree, and is missing the guard rails c-RCP now has to prevent it recurring.
Findings (verified against current main, not docs)
mainis 26 real commits ahead of the latest tagv2.19.0(git describe --tags→v2.19.0-26-gba31fa1). This isn't just an artifact-regen commit — it includes a documented BREAKING change (fix: v2.24.0 — PWM_OUT write semantics + GPIO input-pin masking (BREAKING)) and the entire Table 30/33 Row-2 evt[2:0] validation feature (8 endpoint types, PRs feat: implement Table 30 Row-2 evt[2:0] validation — pilot (shared predicate + I2C dispatch wiring) #114-121), all unreleased.CMakeLists.txtonmainsaysVERSION 2.26.0; the tag says2.19.0.- The safety artifacts currently committed in the tree (
sbom.json,provenance.json,sci.json,qualify-report.json) were last regenerated forv2.19.0(5179580, 2026-07-30) and all report"toolVersion": "0.17.0"— stale relative to the now-pinnedv0.18.0cpp-FuSatool. release.ymlhas no step verifying shipped artifacts declare the version being released — c-RCP's exact c-RCP-09 gate has no cpp-RCP equivalent anywhere in the 248-line file.- No per-PR
version-sources-agreejob exists (grep -n "version-sources-agree" .github/workflows/*.yml→ nothing). Porting this isn't a drop-in: cpp-RCP's.fusa.jsonhas noproject.versionfield at all (only a config-schema"version": "1") —CMakeLists.txt'sVERSION 2.26.0andinclude/rcp/version.hpp'skVersioncurrently agree, but nothing enforces it going forward, and a schema decision (addproject.versionto.fusa.json, or do a two-way check) is needed first. release.ymlis missing the IEC 62443 gap-report step c-RCP's has (cfusa iec62443 --sl SL-2) — noiec62443step and no suchcpfusainvocation anywhere.
Checklist
- Cut a release tag closing the 26-commit / breaking-change drift behind
main— do this first, before the drift grows further (mirrors what was just done for c-RCP:v0.477.0→v0.479.0) - Add a version-declaration release-gate verification step to
release.yml(mirrors c-RCP's c-RCP-09 gate) — requires first deciding how.fusa.jsonrepresents the project version (add aproject.versionfield, or verifyCMakeLists.txt/version.hpptwo-way) - Add a per-PR
version-sources-agreeCI job, once the schema question above is settled - Add the missing IEC 62443 gap-report step to
release.yml - Create
CHANGELOG.md— see the sibling issue for CHANGELOG-specific detail; listed here too since it's part of the same release-integrity theme
Not in scope here
Runtime feature work (CAN XL fragmentation, requirement-schema fields, MC/DC, etc.) is tracked in the sibling roadmap issues — see the parent tracker.
Activity
SoundMatt commentedon Aug 21, 2026
Superseded by #129: rather than incrementally patch this gap, cpp-RCP is being fully rewritten from scratch, using c-RCP's current (RC5-conformant, atomicity-audited, ASIL-D-hardened) implementation as the content source of truth. This work is subsumed into that rewrite's phased checklist. Closing.
docs(roadmap): v3.0.0 becomes a full rewrite ported from c-RCP, not P…