You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: fusa-asil-b CI gate — pin cpp-FuSa v0.17.1, stop wiping requirements, enforce real gap thresholds
Three compounding problems in the fusa-asil-b (and sarif) CI jobs:
1. cpp-FuSa was pinned to v0.15.0, missing conformance fixes through
v0.17.1 that affect this repo's own generated evidence (sbom.json
component hashes, safety-case completeness — see cpp-FuSa's
CHANGELOG v0.17.0 entry). Both jobs now pin v0.17.1.
2. `cpfusa init --force` ran as the first step in both jobs, before the
traceability step, unconditionally overwriting the real, populated
`.fusa-reqs.json` (50+ KB of hand-maintained REQ-* entries) with an
empty scaffold. CI traceability coverage was always computed against
zero requirements regardless of the repo's actual state. Removed the
step entirely — `.fusa.json`/`.fusa-reqs.json` are already checked
in and match what `init` would have generated; the step is only
needed for first-time local setup.
3. The ISO 26262 / IEC 61508 gap-analysis steps were wrapped in
`|| true`, so they could never fail the build regardless of gap
count (15/20 and 12/18 gaps at last real measurement). Two changes:
- Reordered the job so boundary/tara/fmea/safety-case/sas/sci run
BEFORE the gap analyses: cpfusa grades several objectives (e.g.
§9-2.1 Safety case, §10.4 SCI) on whether safety-case.json/
sci.json already exist, so gap-checking first was undercounting
what the repo actually addresses. This alone closed 2 gaps.
- Replaced `|| true` with an explicit, intentional gate: fail the
build if the gap count regresses past the current, documented
baseline (13 for ISO 26262, 11 for IEC 61508). A "0 gaps" target
is not reachable with cpfusa v0.17.1 regardless of this repo's
actual documentation completeness — several objectives (e.g. §6.1
Software architectural design, §8-6.2 Safety manual) have no
evidence-detection logic implemented in the tool at all and report
Gap unconditionally (cpp-FuSa src/iso26262/iso26262.cpp's
detect_status()). The gate at least makes future regressions
visible instead of being structurally unable to fail.
Also fixed independently while investigating (2), a real bug the fix
exposed: cpp-FuSa v0.17.0 started actually enforcing `sourceDirs`
(previously ignored per its own CHANGELOG), and `.fusa.json`'s
sourceDirs (["src", "include"]) omitted "tests" and "cli" — so every
`fusa:test`/`fusa:req` annotation in those directories silently stopped
being seen by `trace`, dropping real test-coverage traceability from
93.5% to 0% the moment the pin bumped. Added both directories to
sourceDirs, and registered 6 real, already-annotated CLI requirements
(REQ-CLI-001..006, both impl- and test-annotated in cli/ and
tests/test_cli.cpp already) that this surfaced as dangling references
in requirements/requirements.json and .fusa-reqs.json.
README's ASIL-B badge/description is reworded to "ASIL-B target
(SEooC)" with a pointer to the real gap-report artifacts, per this
repo's own SAFETY_PLAN.md framing — the prior flat "ISO 26262 ASIL-B"
claim overstated completeness relative to the tool's own (now
enforced) gap reports.
Verified locally end-to-end against a clean checkout with a freshly
built cpfusa v0.17.1: check/lint/trace/cyber/qualify/boundary/tara/
fmea/safety-case/sas/sci/badge/vuln/metrics/report all exit 0; trace
reports 135/144 (93.8%) annotated and tested with zero dangling
references; iso26262 gate passes at 13 gaps (baseline); iec61508 gate
passes at 10 gaps (under the 11 baseline).
Closes#19, #20, #21
Signed-off-by: Matt <47545907+SoundMatt@users.noreply.github.com>
"description": "cmd_version's json and text renderings shall include tool, protocol, version, spec_version, language, and runtime fields per RELAY spec §12.1.",
616
+
"asil": "ASIL-B",
617
+
"rationale": "Integrators must be able to programmatically confirm which cpp-lin build and RELAY spec version a binary implements.",
"description": "cmd_status's json and text renderings shall include protocol, tool, version, healthy, connected, endpoint, and details fields per RELAY spec §12.3.",
632
+
"asil": "ASIL-B",
633
+
"rationale": "Operators and orchestration tooling need a machine-readable liveness/health signal.",
634
+
"tags": ["cli"]
635
+
},
636
+
{
637
+
"id": "REQ-CLI-004",
638
+
"title": "parse_frame_json parses a LIN frame from JSON",
639
+
"description": "parse_frame_json shall extract id, data, checksum_type, and checksum from a JSON object and throw on a missing or invalid id field.",
640
+
"asil": "ASIL-B",
641
+
"rationale": "The CLI's frame-publish path depends on correctly reconstructing a lin::Frame from user-supplied JSON.",
642
+
"tags": ["cli", "json"]
643
+
},
644
+
{
645
+
"id": "REQ-CLI-005",
646
+
"title": "message_to_json serialises a RELAY Message to JSON",
"rationale": "relay conform and downstream consumers depend on a spec-conformant JSON rendering of RELAY messages.",
650
+
"tags": ["cli", "json"]
651
+
},
652
+
{
653
+
"id": "REQ-CLI-006",
654
+
"title": "convert command rejects RELAY error-vector inputs per spec",
655
+
"description": "cmd_convert (and the underlying conversion path) shall reject inputs matching RELAY's published error vectors (e.g. ID overflow, wrong checksum) rather than silently accepting them.",
656
+
"asil": "ASIL-B",
657
+
"rationale": "RELAY spec §20 continuous conformance requires a conformant implementation to exercise the reject path, not only the happy path.",
0 commit comments