Skip to content

feat(aspice): v0.36 — full ASPICE SWE tier migration, rivet validate PASSES (#303)#311

Merged
avrabe merged 7 commits into
mainfrom
feat/v0.36-traceability-enforcement
Jun 25, 2026
Merged

feat(aspice): v0.36 — full ASPICE SWE tier migration, rivet validate PASSES (#303)#311
avrabe merged 7 commits into
mainfrom
feat/v0.36-traceability-enforcement

Conversation

@avrabe

@avrabe avrabe commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

What

Migrates meld's requirement model to the full ASPICE SWE tier (the maintainer-chosen scope for v0.36 enforced traceability, #303), driving rivet validate from 77 errors → 0 (PASS).

This is the enforcement half of #303/SR-44: requirement→verification is now a typed, mechanically-enforced trace, not just the rendered matrix (#308).

Verified with the #570-fixed rivet (merged to rivet main as 74aa830). meld CI does not run rivet validate on PRs (verification-gate.yml is a Python naming check; compliance.yml is release-only), so standard CI is unaffected. The release-time compliance report (compliance.yml, rivet-version: v0.15.0) should be bumped to a rivet release carrying the #570 fix + aspice@0.2.0 once one is cut.

Phases (per ADR-5, each oracle-gated)

  1. STPA hygiene (1a52863): UCA uca-type vocab + 3 host controllers + status-enum fixes (77→39).
  2. Tier foundation (2194f11): ADR-5 + system-requirements.yaml — STK-1/2 stakeholder needs + SYS-1..11 system reqs.
  3. The flip (60d552e): all 44 SRs requirementsw-req, each derived-from its system-req; STPA trace preserved per the chosen Option A (LS-mitigates, CC-/SC-*→declared addresses-constraint, issue refs→cited-source); meld-local schema for the link types (39→4).
  4. sw-verification layer (dca1469): 44 typed sw-verification (SWE.6) artifacts, one per sw-req, carrying the verifies backlink + concrete tests/proofs — closes the V's right side, every sw-req verified.
  5. Final UCAs (e6571db): authored UCA-F-2/UCA-F-3/UCA-CP-1 (the loss scenarios referenced never-authored UCAs) → 0 errors, PASS.

Result

rivet validatePASS (80 warnings, 0 errors). The 80 warnings are higher-tier V-closure (11 system-reqs would need sys-verification; a few inverts-uca notes on the new UCAs) — out of v0.36's software scope.

Review note

These are safety-case artifacts — the STPA×ASPICE integration (Option A: granular STPA trace kept on the sw-reqs) and the system-req hierarchy (ADR-5) warrant a maintainer look before merge. Not auto-merging.

Refs #303. ADR-5.

🤖 Generated with Claude Code

avrabe and others added 5 commits June 24, 2026 06:01
…0.36)

Drives rivet validate errors 77→39 (oracle-gated with the #570-fixed rivet)
on three clearly-correct STPA-hygiene classes — no trace-model judgment:

- rfc46-hazards.yaml: UCAs carried an undeclared `type:` field with
  off-vocabulary values; rename to the schema's required `uca-type:` and
  remap to the allowed set [not-providing, providing, too-early-too-late]
  (providing-causes-hazard→providing; too-early/too-late→too-early-too-late).
  Clears 12 missing-uca-type errors.
- control-structure.yaml: model the 3 host/runtime controllers the UCAs
  issue from — "CM Runtime (embedded)", "Fiber Manager (host intrinsic)",
  "host-wit-bindgen" — so the `issued-by` links resolve. Clears 24 errors
  (12 dangling issued-by + 12 missing-controller-link).
- loss-scenarios.yaml: status `fixed` is not in the lifecycle enum →
  LS-M-5 `verified` (cites regression test ls_m_5_*), LS-W-1 `implemented`
  (fix landed, no cited test). Clears 2 errors.

Remaining 39 (GitHub-provenance links + 4 dangling caused-by-uca) follow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Phase 1 of the full ASPICE SWE tier migration (maintainer-chosen scope for
v0.36). Authors the upstream tier the sw-req migration requires:
- ADR-5: the migration plan — target tier (stakeholder-req→system-req→sw-req
  →sw-verification), the 44-SR→11-system-req map, and the phased, oracle-gated
  execution order.
- system-requirements.yaml: STK-1/2 (stakeholder needs: functional
  equivalence; functional-safety fitness) + SYS-1..11 (system reqs grouping
  the SRs by pipeline stage), each deriving from a stakeholder-req.

Additive — oracle (the #570-fixed rivet) holds at 39 errors, 0 from the new
tier (+13 expected sys2-has-verification warnings). Phase 2 (flip 44 SRs
requirement→sw-req + derived-from SYS-n + cited-source for #N provenance) and
Phase 3 (typed sw-verification layer) follow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e (ADR-5)

Phase 2 of the ASPICE SWE tier migration. Drives rivet validate 38→4 errors
(only the 4 caused-by-uca STPA danglers remain). Per ADR-5 + the maintainer's
"keep granular STPA trace on sw-reqs" decision:

- All 44 SRs: type requirement → sw-req; each gains derived-from → SYS-n
  (the system-req from system-requirements.yaml) per the ADR map.
- STPA links reclassified to schema-valid types, preserving every
  requirement's exact safety motivation:
    derives-from CC-*/SC-*  → addresses-constraint  (declared, meld-local)
    derives-from LS-*       → mitigates              (existing)
    derives-from SR-*       → depends-on             (existing)
- GitHub-issue provenance (derives-from/tracked-by "#N") → cited-source
  (kind: github) — issues are not trace-graph artifacts.
- schemas/meld-local.yaml: declares addresses-constraint + supersedes-default-of
  link types; registered in rivet.yaml.

Verified with the #570-fixed rivet (4 errors, 121 warnings; the 44
swe1-has-verification warnings are Phase 3 — the typed sw-verification layer).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…hase 3)

Closes the right side of the V — the enforcement payload of v0.36. Authors 44
typed sw-verification (SWE.6) artifacts, one per sw-req, each carrying its
required `verifies` backlink and the concrete tests/proofs that discharge it
(from traceability.yaml's verification-status block; 40 generated from that
data, 4 stragglers — SR-18/42/43/44 — grounded in their actual tests:
test_304_identity_direct_adapter_is_inlined, the resource_floats_opaque
runtime oracle, the adapter-path runtime suite, and rivet validate itself for
the governance req).

requirement→verification is now a typed, mechanically-enforced trace, not a
rendered matrix. Oracle (the #570-fixed rivet): 4 errors (only the caused-by-uca
STPA danglers remain), 0 swe1-has-verification warnings — every sw-req verified.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The last 4 caused-by-uca danglers: loss scenarios LS-A-9, LS-A-17/18, LS-CP-5
referenced UCAs that were never authored. Authored them in their correct
controller groups, grounded in the scenario content:
- UCA-F-2 (adapter-ucas / CTRL-ADAPTER, not-providing): resource-graph build
  drops resource handling — definer-purge/terminal-exporter skip an (iface,rn)
  pair; [resource-drop] imports dropped for non-pure-consumers. [H-3, H-1]
- UCA-F-3 (adapter-ucas, not-providing): async-callback trampoline doesn't
  dispatch the host poll for a guest POLL return code. [H-3]
- UCA-CP-1 (wrapper-ucas / CTRL-WRAPPER, not-providing): composition export
  dropped or mis-typed when assembling the fused multi-component output. [H-1, H-3]

With this, `rivet validate` PASSES (0 errors) on the #570-fixed rivet — the
v0.36 traceability graph is clean and gate-able. Remaining 80 warnings are
higher-tier V-closure (11 system-reqs need sys-verification; a few inverts-uca
notes) — out of v0.36's software scope.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

LS-N verification gate

57/57 approved LS entries verified

count
Passed (≥1 test, all green) 57
Failed (≥1 test failure) 0
Missing (no ls_*_NN_* test found) 0

Approved loss-scenarios.yaml entries are expected to have a
regression test named ls_<letter>_<num>_* (e.g. LS-A-11
ls_a_11_*). The gate runs each prefix via cargo test --lib --no-fail-fast and aggregates pass/fail/missing.

Failed LS entries

(none)

Missing regression tests

(none)

Updated automatically by tools/post_verification_comment.py.
Source of truth: safety/stpa/loss-scenarios.yaml.

avrabe and others added 2 commits June 24, 2026 14:12
The release-time compliance report pinned rivet v0.15.0, which predates both
the #570 YAML-parser fix and the aspice@0.2.0 schema — it could neither parse
meld's STPA YAML cleanly nor understand the new sw-req/sw-verification tier.
rivet v0.19.0 (released 2026-06-24) includes the #570 fix (commit 74aa830 is
an ancestor) and ships aspice@0.2.0, so the compliance action + binary are
bumped together to v0.19.0. Completes the v0.36 enforcement story: the
release pipeline now validates/exports the migrated ASPICE artifacts.

Release-only workflow (on: release published) — does not affect PR CI.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Closes the system tier of the V to complete the full ASPICE migration: 11
typed sys-verification (SYS.5) artifacts, one per system-req (SYS-1..11), each
carrying its `verifies` backlink and grounded in meld's system-level test
evidence — primarily the behavioural-equivalence golden harness
(golden_e2e.rs, #213) plus the per-domain e2e/runtime suites (multi_memory,
dwarf_*, p3_*, cross_component_call, component_provenance, proptest_fusion),
and `rivet validate` itself for the governance req.

With this, BOTH tiers are verified: 0 requirement-verification gaps (sw + sys).
Oracle (rivet v0.19.0): PASS, 69 warnings (down from 80) — the remainder are
unrelated advisory coverage (orphan/prose-mention/EU-AI-Act-risk notes), not
requirement→verification gaps. The V-model is closed end to end.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@avrabe avrabe merged commit a188d7c into main Jun 25, 2026
17 checks passed
@avrabe avrabe deleted the feat/v0.36-traceability-enforcement branch June 25, 2026 05:55
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