Files
breakpilot-compliance/backend-compliance/reference_scenarios/journey_matcher_demo.md
T
Benjamin Admin 80bf1993e0 feat: Journey Matcher — the delta explains the journey (Delta -> Journey, ADR-011)
The sanctioned last architectural building block. Reverses the order: not Goal -> Journey -> Delta
but Goal -> Required -> Delta -> Journey. A Journey is the EXPLANATION of the Capability Delta, not
its cause — so this is a Matcher/Explainer, not a Selector.

New module compliance/journey_matcher/ = the third independent, interchangeable function of the
pipeline, beside Company 2A (Evidence -> Capability) and RS-005 (Capability -> Delta):

  match_journeys(delta, journeys, context) -> ranked, auditable explanation

- Looks ONLY at the Capability Delta — never at certificates, regulation, tenders or the goal.
  Journey signatures are certificate-agnostic capability clusters (Input -> Output pattern).
- score = share of the delta a journey explains (recall over the missing capabilities); journey_only
  documents where a journey reaches beyond the delta so a broad journey is not silently preferred.
- Deliberately dumb + deterministic (pure set overlap; NO ML/embeddings/LLM), fully auditable
  (matched / unexplained / journey_only / context signals); a learning ranker can sit on top later.
- Signatures injected, engine hermetic. mypy --strict clean.

Validated on the real patterns (demo): a CRA+MaschinenVO delta ranks the convergence journey 100%,
"ISO27001 -> CRA" 56% (misses the machine-safety caps), "ISMS -> TISAX" 0%. This resolves the
"Scope -> Journey" jump from Customer Mission #1. Freeze exception explicitly authorised; non-runtime
-> no deploy. 12 tests pass, check-loc 0.
2026-06-28 10:36:43 +02:00

2.3 KiB

Journey Matcher — Delta -> Journey (an echten Pattern validiert)

Der Matcher fragt NICHT „welche Journey passt?", sondern „welche bekannten Journeys ERKLÄREN dieses Capability Delta?". Er sieht nur das Delta — keine Zertifikate, kein Regelwerk, kein Ziel. Journey = Erklärung, nicht Ursache. Deterministisch, kein ML/Embedding/LLM. Synthetischer Kunde, keine echten Namen.

Eingang: ein echtes Capability Delta

  • Multi-zertifiziertes Unternehmen will CRA + MaschinenVO9 fehlende Capabilities (aus RS-005).
  • Der Matcher bekommt nur diese 9 Capabilities — sonst nichts.

Delta -> Journey: Rangliste (Anteil des Deltas, den die Journey erklärt)

3 Journeys erklaeren das Delta; beste: ISO27001 -> CRA + MaschinenVO (100% des Deltas)

Journey (Capability-Cluster) erklärt Anteil
ISO27001 -> CRA + MaschinenVO 9 von 9 fehlenden Capabilities 100%
ISO27001 -> CRA 5 von 9 fehlenden Capabilities 56%
ISO9001 -> CRA 4 von 9 fehlenden Capabilities 44%
ISMS -> TISAX 0 von 9 fehlenden Capabilities 0%

Warum „ISO27001 -> CRA + MaschinenVO"? — auditierbar, keine Blackbox

  • Erklärte Capabilities (9): machine_safety_risk_assessment, mechanical_safety_and_guards, operating_instructions_and_safety_information, product_cyber_risk_assessment, protection_against_corruption_of_safety_functions, public_security_advisories
  • Nicht erklärt (Rest-Delta): — (Journey erklärt das GESAMTE Delta)
  • Journey reicht darüber hinaus: ce_conformity_assessment_and_technical_documentation, coordinated_vulnerability_disclosure, exploited_vuln_and_incident_reporting
  • Kontext-Signale: gleiche Zielart

Der Paradigmenwechsel

Reihenfolge ist jetzt Goal → Required → Delta → Journey, nicht mehr Goal → Journey → Delta. Die Journey ist die Erklärung des Deltas. Der Matcher ist bewusst dumm + deterministisch (reine Mengenüberlappung) und damit auditierbar; ein lernendes Ranking kann später DAVOR gesetzt werden. Drei austauschbare Funktionen: Evidence→Capability (Company 2A) · Capability→Delta (RS-005) · Delta→Journey (dieser Matcher). In keiner kommt „Regulation" als Sonderfall vor — CRA, TISAX, Ausschreibung, OEM-Spec und Umweltziel sind nur verschiedene Quellen des Required State.