Skip to content

Commit d5db7d7

Browse files
authored
feat: v2.18.0 — Certification Refresh (§Phase 16 milestone 62) (#57)
Retires the pre-replacement REQ-ZONE-*/REQ-CMD-*/REQ-STATUS-* requirement groups (20 entries) that milestone 61 explicitly left untouched, and regenerates HARA.md/.fusa-hara.json, TARA-ANALYSIS.md, CYBERSECURITY.md, and AUDIT_PACK.md against the full v2.x stream/endpoint/register-map requirement set, keeping existing OS-*/H-*/SG-*/A-*/T-* IDs stable while replacing every Zone/Command/Controller-era mechanism reference with the real v2.x module it now maps to. Adds a new H-011/SG-011 hazard/safety-goal pair for the E2E CRC mechanism, the roadmap's own stated most safety-relevant new surface. Replaces the three formal-verification TLA+ specs (AntiReplayGuard, HealthStateMachine, WatchdogProtocol), none of which matched any mechanism actually in this tree, with RxSequenceGuard/CrcSafeStateLatch/ WatchdogSafeState modelling rcp/e2e.hpp's and rcp/watchdog.hpp's actual primitives — each verified for real with TLC via a checked-in .cfg file, closing a pre-existing gap where FORMAL_VERIFICATION.md's documented invocation had no config to load. version.hpp/CMakeLists.txt bumped to 2.18.0. fmea.*/safety-case.*/tara.*/ sbom.json/audit-pack.zip/etc. are left for release.yml's existing tag-triggered regeneration rather than hand-edited here. Signed-off-by: Matt <47545907+SoundMatt@users.noreply.github.com>
1 parent e7a8178 commit d5db7d7

23 files changed

Lines changed: 918 additions & 638 deletions

.fusa-hara.json

Lines changed: 59 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,41 @@
22
"project": "cpp-RCP",
33
"standard": "ISO 26262",
44
"createdAt": "2026-06-16T00:00:00Z",
5-
"updatedAt": "2026-06-16T00:00:00Z",
5+
"updatedAt": "2026-07-28T00:00:00Z",
66
"operationalSituations": [
77
{
88
"id": "OS-001",
9-
"description": "Normal vehicle operation \u2014 all zone controllers reachable"
9+
"description": "Normal operation — the RC Client and every discovered RC Server are reachable"
1010
},
1111
{
1212
"id": "OS-002",
13-
"description": "Partial network fault \u2014 one or more zone controllers unreachable"
13+
"description": "Partial network fault one or more RC Servers unreachable or a request stream lost"
1414
},
1515
{
1616
"id": "OS-003",
17-
"description": "Safety-critical manoeuvre \u2014 emergency braking or collision avoidance active"
17+
"description": "Safety-critical manoeuvre — a request is in flight to a safety-relevant endpoint (e.g. a GPIO/CAN endpoint driving a braking-adjacent actuator)"
1818
},
1919
{
2020
"id": "OS-004",
21-
"description": "HPC software fault \u2014 runaway process, crash, or OOM condition"
21+
"description": "RC Client software fault runaway process, crash, or OOM condition on the HPC"
2222
},
2323
{
2424
"id": "OS-005",
25-
"description": "Elevated network latency \u2014 congestion, EMI, or hardware degradation"
25+
"description": "Elevated network latency congestion, EMI, or hardware degradation on the AVB/TSN segment"
2626
},
2727
{
2828
"id": "OS-006",
29-
"description": "Adversarial access \u2014 attacker present on the zone Ethernet bus"
29+
"description": "Adversarial access — attacker present on the Ethernet segment"
30+
},
31+
{
32+
"id": "OS-007",
33+
"description": "RC Server power-state transition — cold/hot start or a StandBy/Sleep to Normal wake sequence in progress"
3034
}
3135
],
3236
"hazards": [
3337
{
3438
"id": "H-001",
35-
"description": "Loss of command delivery to safety-critical zone (e.g. braking actuator)",
39+
"description": "Loss of request delivery to a safety-critical endpoint (e.g. a braking-adjacent actuator)",
3640
"situations": [
3741
"OS-001",
3842
"OS-002",
@@ -50,7 +54,7 @@
5054
},
5155
{
5256
"id": "H-002",
53-
"description": "Spurious command sent to wrong zone controller",
57+
"description": "Request misaddressed to the wrong endpoint via a stale or corrupted stream_id/byte_bus_id pairing",
5458
"situations": [
5559
"OS-001"
5660
],
@@ -66,7 +70,7 @@
6670
},
6771
{
6872
"id": "H-003",
69-
"description": "Zone controller watchdog not kicked, leading to unintended reset",
73+
"description": "Per-stream watchdog not kicked, leading to an unintended safe-state entry or endpoint reset",
7074
"situations": [
7175
"OS-001",
7276
"OS-003"
@@ -83,7 +87,7 @@
8387
},
8488
{
8589
"id": "H-004",
86-
"description": "Replay of stale commands from a previous drive cycle",
90+
"description": "Replay or out-of-order re-delivery of a stale request from a previous session",
8791
"situations": [
8892
"OS-001",
8993
"OS-006"
@@ -100,7 +104,7 @@
100104
},
101105
{
102106
"id": "H-005",
103-
"description": "Zone controller falsely reported as alive when unresponsive",
107+
"description": "RC Server falsely reported reachable/ready when actually unresponsive",
104108
"situations": [
105109
"OS-002",
106110
"OS-005"
@@ -117,7 +121,7 @@
117121
},
118122
{
119123
"id": "H-006",
120-
"description": "Priority inversion \u2014 low-priority burst of commands starves a safety-critical CmdWatchdog",
124+
"description": "Execution-priority inversion — a lower-priority request burst starves a safety-tagged or cancellation request",
121125
"situations": [
122126
"OS-001",
123127
"OS-003",
@@ -136,7 +140,7 @@
136140
},
137141
{
138142
"id": "H-007",
139-
"description": "Rate limiter blocks watchdog kick during high command burst, causing spurious zone reset",
143+
"description": "Rate limiter blocks a safety-relevant request during a high-traffic burst, causing a spurious watchdog trip",
140144
"situations": [
141145
"OS-001",
142146
"OS-005"
@@ -154,7 +158,7 @@
154158
},
155159
{
156160
"id": "H-008",
157-
"description": "Unauthorized command injection via unsecured UDP transport on the zone Ethernet bus",
161+
"description": "Unauthorized request injection or register-map modification via an unsecured transport, spoofed discovery response, or non-root EP0 write",
158162
"situations": [
159163
"OS-006"
160164
],
@@ -170,10 +174,11 @@
170174
},
171175
{
172176
"id": "H-009",
173-
"description": "Zone controller not properly woken from sleep, causing loss of actuation during safety manoeuvre",
177+
"description": "RC Server not properly woken from StandBy/Sleep, causing loss of actuation during a safety manoeuvre",
174178
"situations": [
175179
"OS-002",
176-
"OS-003"
180+
"OS-003",
181+
"OS-007"
177182
],
178183
"risk": {
179184
"severity": "S3",
@@ -188,7 +193,7 @@
188193
},
189194
{
190195
"id": "H-010",
191-
"description": "Fault injection state persists across vehicle power cycles, masking real faults in production",
196+
"description": "Fault injection state persists across process/power cycles, masking real faults in production",
192197
"situations": [
193198
"OS-001",
194199
"OS-004"
@@ -202,47 +207,65 @@
202207
"safetyGoals": [
203208
"SG-009"
204209
]
210+
},
211+
{
212+
"id": "H-011",
213+
"description": "Undetected payload corruption bypasses the E2E CRC check, or a stream configured to latch on CRC failure fails to enter or hold safe state",
214+
"situations": [
215+
"OS-001",
216+
"OS-003",
217+
"OS-005"
218+
],
219+
"risk": {
220+
"severity": "S3",
221+
"exposure": "E3",
222+
"controllability": "C2",
223+
"asil": "ASIL-B"
224+
},
225+
"safetyGoals": [
226+
"SG-011"
227+
]
205228
}
206229
],
207230
"safetyGoals": [
208231
{
209232
"id": "SG-001",
210-
"description": "Commands to safety-critical zones shall be delivered within the watchdog period or a fault shall be signalled.",
233+
"description": "Requests to safety-critical endpoints shall be delivered within the configured watchdog period or a fault shall be signalled.",
211234
"asil": "ASIL-B"
212235
},
213236
{
214237
"id": "SG-002",
215-
"description": "Commands shall only be processed by the zone they are addressed to; misrouted commands shall be rejected.",
238+
"description": "Requests shall only be dispatched to the endpoint they are addressed to (stream_id + byte_bus_id); misaddressed requests shall be rejected.",
216239
"asil": "ASIL-B"
217240
},
218241
{
219242
"id": "SG-003",
220-
"description": "The watchdog kick command (CmdWatchdog) shall always be deliverable at the configured priority.",
243+
"description": "A per-stream watchdog kick shall be recorded for every accepted inbound request, regardless of request kind or safety tag.",
221244
"asil": "ASIL-B"
222245
},
223246
{
224247
"id": "SG-004",
225-
"description": "Replayed or duplicated commands from prior sessions shall be detected and rejected.",
248+
"description": "A request stream configured with rx_enforce_seq shall reject any sequence number that is not strictly greater than the last accepted one.",
226249
"asil": "ASIL-B"
227250
},
228251
{
229-
"id": "SG-007",
230-
"description": "A zone controller that stops publishing Status shall be detected as dead within the configured deadline.",
252+
"id": "SG-005",
253+
"description": "Cancellation and triggered requests shall never be delayed by a standard or compound request queued earlier on the same stream.",
231254
"asil": "ASIL-B"
232255
},
233256
{
234-
"id": "SG-005",
235-
"description": "Priority::Critical commands shall never be delayed by Priority::Normal or Priority::High commands queued earlier.",
257+
"id": "SG-006",
258+
"description": "Transport authentication (mTLS on the UDP/IP variant, or link-layer authentication on native Ethernet) and per-endpoint access policy shall be enforced on every external RC Server connection.",
236259
"asil": "ASIL-B"
237260
},
238261
{
239-
"id": "SG-006",
240-
"description": "Transport authentication (mTLS or equivalent) shall be enforced on all external zone controller connections.",
262+
"id": "SG-007",
263+
"description": "An RC Server that stops responding shall be detected as unreachable within the configured liveness deadline.",
241264
"asil": "ASIL-B"
242265
},
243266
{
244267
"id": "SG-008",
245-
"description": "A zone controller shall only be declared operational after a successful Wake command response.",
268+
"description": "An RC Server shall only be treated as operational after its lifecycle state machine reports RCP_CONFIGURED following a successful wake sequence.",
246269
"asil": "ASIL-B"
247270
},
248271
{
@@ -252,8 +275,13 @@
252275
},
253276
{
254277
"id": "SG-010",
255-
"description": "Zone controller health state transitions shall be deterministically derivable from observable send() outcomes alone.",
278+
"description": "A stream's watchdog/safe-state status shall be deterministically derivable from its own kick/overflow/latch history alone.",
279+
"asil": "ASIL-B"
280+
},
281+
{
282+
"id": "SG-011",
283+
"description": "A request whose computed E2E CRC does not match its received trailer shall be rejected, and a stream configured with rx_enforce_e2e shall latch safe state on the first such failure until explicitly reset.",
256284
"asil": "ASIL-B"
257285
}
258286
]
259-
}
287+
}

0 commit comments

Comments
 (0)