Field note #40 read the closeout beats on the F-CP-01 lane: per-target byte-parity goldens against checked-in fixtures pinned each adapter for n8n, Temporal, and LangGraph, and a drift-detection hook surface opened at SKELETON on the shared evidence emitter. The note named one remaining beat to walk before the ROADMAP marker turned over — a NIS2 Article 21(2)(a) mapping document tying the schema to the clause the risk-analysis evidence stream discharges.
This note reads that beat landed and the ROADMAP marker turned. F-CP-01 risk-analysis is Shipped — the first continuous-posture evidence stream in the catalogue lit up end-to-end across all three reference compile targets, with a regulator-traceable mapping into NIS2 at clause granularity.
What this note reads off main
F-CP-01 EXTEND-NIS2-MAPPING — Article 21(2)(a) at clause granularity
The mapping document lands through
PR #270 as
content/mappings/nis2/article-21-risk-management.md. It is a
companion narrative to the structured article-21-2-a.yaml already on
disk, and it ties the risk-analysis evidence emitter to NIS2 Article
21(2)(a) — the policy-and-procedure obligation at the head of the
risk-management measures list.
The document does not duplicate the schema body. It points back at the authoritative artifacts and reads the trace:
- Schema source of truth. Points at
schemas/evidence/risk-analysis.schema.jsonand the stream README atcontent/evidence/risk-analysis/README.md— the typed schema field note #34 read in as the lane opened. - Field set ↔ obligation mapping. Walks the on-disk field set —
control_id,attestation_state,review_cadence,attestation_state_delta, the evidence envelope — against the §21(2)(a) obligation surface, naming which field carries which regulator-visible property. - Reference compile targets, by name. Names n8n, Temporal, and
LangGraph as the three reference adapters, and points at the
per-target golden directories under
tests/fixtures/risk_analysis_evidence/<target>.jsonso a reader walking the mapping from the regulator end can land on the bytes a compiler emits without an extra translation hop. - Drift hook surface, by file. Points at
compilers/_shared/evidence/drift_hook.pyso the audit-lane reader can see where the structured drift event surfaces and which contract it advances under.
The mapping reads as a tie, not a translation. It does not invent a new vocabulary on top of the schema; it reads the schema and the clause against each other.
F-CP-01 ROADMAP-FLIP — In Progress → Shipped
The marker turns through PR #271. Both ROADMAP acceptance criteria on the F-CP-01 row now read green:
content/evidence/risk-analysis/is populated by the reference workflows. The schema is in, the stream root is in, the emitter SKELETON is in, the CORE-FANOUT lights up the three reference target adapters against a single framework-agnostic helper, per-target byte-parity goldens pin each adapter against a checked-in fixture, and the drift-detection hook surface is open at SKELETON across all three reference targets.- The schema is documented under
content/mappings/nis2/article-21-risk-management.md§21(2)(a), tying each field on the schema to the regulator-visible obligation.
The risk-analysis row on ROADMAP now reads Shipped. The first continuous-posture evidence stream in the catalogue is lit up end-to-end.
What this Shipped state actually carries
It carries a typed evidence shape. Every record on the risk-analysis
stream validates against
schemas/evidence/risk-analysis.schema.json. attestation_state and
attestation_state_delta.previous_state are drawn from the shared
four-state vocabulary in schemas/attestation_state.json. The shape
does not depend on which reference compile target emitted it.
It carries cross-target byte parity at emission. All three reference
target adapters — n8n, Temporal, LangGraph — sit on top of a single
framework-agnostic helper under compilers/_shared/evidence/. The
CORE-FANOUT parity test pins that on every push: under the same
context, the three adapters produce byte-identical JSON.
It carries per-target byte parity against a checked-in golden. Each
adapter is pinned against an immutable fixture under
tests/fixtures/risk_analysis_evidence/<target>.json. A silent
serialisation drift from a shared-helper refactor fails the golden for
the affected target, by name, on the next push.
It carries a structured drift event surface. A typed DriftHook
contract on the shared emitter fires a DriftEvent when
attestation_state advances between cadence walks. Every reference
target adapter threads the hook through. The SKELETON does not alert,
does not promote a KRI, and does not persist; alerting (CORE-WIRE),
KRI promotion (EXTEND-KRI), and persistence (EXTEND-PERSIST) ride
their own sibling beats on the same shape.
It carries a regulator-traceable mapping into NIS2. A reader walking from Article 21(2)(a) can land on the schema, the stream root, the three reference adapter directories, and the drift hook surface without leaving the repository or moving through a separate translation layer.
What this Shipped state does not promise
It does not promise the drift-detection CORE-WIRE is in. The hook surface is an interface and a noop default. Alerting, KRI promotion, and persistence each sit on their own sibling beat on the lane, on the same shared-helper-plus-three-adapters shape this SKELETON opens against. Field note #40 named these as siblings; F-CP-01 reading Shipped does not advance them.
It does not promise the six remaining continuous-posture streams are scaffolded. The cross-stream index field note #34 named still reads seven slots; CP-01 risk-analysis is the first slot lit up end-to-end across all three reference compile targets. CP-02 through CP-07 compose onto the same shape as their own evidence streams open against the substrate F-CP-01 just closed.
It does not promise the mapping covers Article 21 in full. The document scopes to §21(2)(a) — the policy/procedure clause the risk-analysis evidence stream discharges. The other §21(2) clauses ride their own evidence streams and their own mapping documents.
Where the F-CP-01 lane sits now
The lane reads Shipped end-to-end across these waves:
- SCHEMA (PR #255) — typed schema for the risk-analysis evidence record.
- STREAM-ROOT (PR #256)
—
content/evidence/risk-analysis/stream root with README and example fixtures. - EMITTER SKELETON (PR #257) — Temporal-first emitter SKELETON against the shared helper shape.
- CORE-FANOUT (PR #267) — n8n + LangGraph adapters land on the same framework-agnostic helper; cross-target parity pinned at emission.
- EXTEND-tests-goldens (PR #268) — per-target byte-parity goldens against checked-in fixtures, one per reference target.
- drift-detection SKELETON (PR #269) — typed hook surface on the shared emitter, every adapter threading the noop default through.
- EXTEND-NIS2-MAPPING (PR #270) — schema tied to NIS2 Article 21(2)(a) at clause granularity.
- ROADMAP-FLIP (PR #271) — In Progress → Shipped on ROADMAP.
The practical handle the lane gives a reader walking in today: risk-analysis workflows get a typed, drift-checked, regulator-traceable evidence shape across all three reference compile targets, sitting on a single shared helper that does not move when the adapter underneath it moves.
Community lane status
The community-ignition entry point — “Open for contributors” — remains
live against the good-first-issues on secops-ng-framework, and the
free practitioner Discord
(discord.gg/secops-ng) remains the
contributor chat. A contributor walking in today finds the
launch-window workflow set — F-WF-01 vulnerability triage, F-WF-03
alert triage, F-WF-05 incident management — all reading Shipped on
every reference compile target, and the first continuous-posture
evidence stream F-CP-01 risk-analysis reading Shipped on the
same substrate, with the NIS2 Article 21(2)(a) tie sitting under
content/mappings/nis2/.
Where the work is
secops-ng-framework— F-CP-01 ROADMAP flip through PR #271 and the NIS2 Article 21(2)(a) mapping through PR #270, on top of the closeout beats field note #40 read in.secops-ng-website— this note and the forty that preceded it.github.com/secops-ng— the issues, the good-first-issues open against the community lane, the auto-generated roadmap.
Walk the framework repo today and the catalogue reads two Shipped surfaces against the same substrate: the launch-window workflow set (F-WF-01, F-WF-03, F-WF-05) on the orchestration side, and F-CP-01 risk-analysis on the continuous-posture side. The next moves walk the drift-detection CORE-WIRE through the same fanout shape the SKELETON just opened against, and start lighting up the six sibling continuous-posture streams against the parity floor F-CP-01 just closed on.
More from the lanes as the drift-detection CORE-WIRE picks up the shape this Shipped marker just sealed against.