v0.1.4 — Junction notes + crosswalk edges
Wire the two non-concept-note Tier 1 shapes — junction notes (evidence links, 13-field schema per Ch 07 synthesis) and crosswalk edges (between two concepts in different ontologies, with STRM predicate vocabulary + SSSOM-shaped envelope) — into the generation engine. After this milestone, the plugin produces complete Tier 1 vaults that capture concepts, evidence, and crosswalks together.
Status
Section titled “Status”✅ Done (2026-05-05). Recipe schema extended with kind: concept | junction-note | crosswalk-edge on layout entries (default concept, backwards-compatible). render() emits kind discriminator into Address.frontmatter when non-default. New native-recipe entry point generateFromRecipe() + plugin.runImportFromRecipe() runs render() against any Ch 22 recipe, validates against spec/tier1.schema.json pre-write (STRM predicate enforcement happens here), writes spec-conformant Tier 1 output. Three starter recipes shipped: CSF→800-53 crosswalk, ISO 27001→800-53 crosswalk, evidence junction-notes — plus a recipes/starter/README.md documenting that the recipe shape is generic over framework pairs (CIS↔800-53, MITRE↔800-53, CRI↔NIST CSF, etc., all use the same template; only ontology slugs + folder paths change).
Dependencies
Section titled “Dependencies”Blocks: v0.1.5 needs all three frontmatter shapes for Tier 2 SQL projection; v0.1.7 needs crosswalk edges for STRM TSV / OSCAL exports
In:
- Junction-note generation as a new code path — non-destructive, git-history-preserving (per Ch 08 audit-trail synthesis)
- Crosswalk-edge generation when sources have crosswalk columns (e.g., NIST CSF → NIST 800-53 mapping spreadsheet from the NIST OLIR registry)
- STRM predicate vocabulary enforcement (closed enum:
is_equivalent_to,is_broader_than,is_narrower_than,is_approximate_to,intersects_with,no_relationship) - SSSOM-shaped fields on crosswalk edges (
match_type,match_confidence,mapping_justification,mapping_provider,creator_id) - Recipe support for junction-note + crosswalk-edge “kinds” — recipe specifies
kind: junction-noteorkind: crosswalk-edgein its layout (per Ch 22 synthesis)
Out:
- Junction-note UI (read/write evidence-link form) — that’s a wizard feature; defer to v0.2
- Auto-suggested crosswalks (LLM-assisted) — community phase
- Multi-source crosswalk derivation (chain rules) — Tier 2 sidecar concern, v0.1.5+
Concrete tasks
Section titled “Concrete tasks”- Extend recipe schema (
spec/recipe.schema.json) —target.layout[].kindfield acceptingconcept | junction-note | crosswalk-edge(defaultconcept) - Extend
render()— whenkind: junction-note, produce a junction-noteAddress; whenkind: crosswalk-edge, produce a crosswalk-edgeAddress - Junction-note frontmatter writer — emits the 13-field schema; includes
subject,predicate,object,coverage,reviewer,review_date,status,confidence,scope,expires_at,notes,tags,_crosswalker - Crosswalk-edge frontmatter writer — emits
subject_id,predicate_id(STRM enum-validated),object_id,match_type,match_confidence,mapping_justification,mapping_provider,mapping_date,creator_id,review_status,_crosswalker - Add a NIST-CSF-to-800-53 starter recipe in
recipes/starter/— produces concept notes for both ontologies + crosswalk edges between them - Add a crosswalk fixture CSV to
tools/fixtures/synthetic/— small subset of CSF→800-53 mappings;bun run fixtures:crosswalks(or extend the existing fixtures script) - Tests against the new starter recipe + fixture — verify CIDs are stable across runs; verify STRM enum validation rejects bad predicates
Success criteria
Section titled “Success criteria”- Running the CSF→800-53 starter recipe produces concept notes for CSF + 800-53 + crosswalk-edge notes between them, all validating against
spec/tier1.schema.json - STRM predicate vocabulary is enforced — invalid
predicate_idrejected at validation - Junction notes carry the full 13-field schema with all required fields populated
- Re-running the recipe produces byte-identical output (deterministic)
Files to touch
Section titled “Files to touch”spec/recipe.schema.json— addkindfield to LayoutEntrysrc/render/mechanisms/file.ts(or newkinds/junction-note.ts,kinds/crosswalk-edge.ts)src/generation/generation-engine.ts— kind-aware dispatchrecipes/starter/nist-csf-to-800-53.json(or .yaml) — new starter recipetools/fixtures/synthetic/csf-800-53-crosswalk.csv— new fixturetests/generation/junction-notes.test.ts— newtests/generation/crosswalk-edges.test.ts— new
Open questions
Section titled “Open questions”- Recipe
kindfield — should it default toconcept(least surprise) or be required (explicit)? Lean toward defaultconcept - Crosswalk edges as separate
.mdfiles vs. embedded as wikilinks in concept-note frontmatter — recipe author’s choice, but what’s the v0.1 default? - Where to host the starter recipe library —
recipes/starter/at repo root, or move to its own GitHub repo per the marketplace pattern?
Related
Section titled “Related”Concept pages:
- Terminology — junction note, crosswalk edge, STRM, SSSOM, predicate, CURIE, kind discriminator
- Hierarchy primitives — the 5 mechanisms; kind dispatch composes with them
- ETL and import — schema-as-primitive applies to all three Tier 1 shapes
- What makes Crosswalker unique — first-class crosswalk-edge + evidence-link primitives differentiate the architecture
- Ontology evolution — STRM enforcement protects schema fidelity across imports
Agent context:
- v0.1 schema spec — junction_note_frontmatter, crosswalk_edge_frontmatter
$defs - Vision — open-ecosystem + standards-aligned vocabulary (STRM/SSSOM)
- Tradeoffs — closed predicate vocabulary vs. open-ended
Design decisions (synthesis logs):
- Ch 07 evidence-link edge model synthesis — 13-field junction-note schema origin
- Ch 22 synthesis (target-structure expressivity) — kind dispatch is part of the closed 5-mechanism grammar
- v0.1 import-engine design (2026-05-04) — design-phase summary
- Volatility and registry (2026-04-04) — STRM as closed enum; SSSOM as bibliographic envelope
- Foundation research synthesis (2026-04-10)
- v0.1.4 delivery log (2026-05-05) — what shipped + system-design diagram + multi-framework story
Research deliverables:
- Ch 22 deliverable (target-structure expressivity) — recipe-shape research
- Ch 06 deliverable (pairwise-spine model) — crosswalk-edge as pairwise relation
- Ch 13 deliverable (attestation primitives) — junction notes as attestation primitives
Spec & schema files:
spec/tier1.schema.jsonjunction_note_frontmatterspec/tier1.schema.jsoncrosswalk_edge_frontmatter — STRM enum is enforced herespec/recipe.schema.jsonlayout_entry.kind- NIST IR 8477 (STRM source)
- SSSOM specification (Mapping Commons)
Registry references:
- STRM (NIST IR 8477) — predicate vocabulary
- SSSOM — envelope shape
- OLIR (NIST mapping registry) — official source of CSF↔800-53 mappings
- NIST · ISO · MITRE · CIS · CRI · FFIEC · SKOS — same recipe shape generalizes to all
Starter recipes shipped:
recipes/starter/nist-csf-to-800-53-crosswalk.jsonrecipes/starter/iso27001-to-800-53-crosswalk.jsonrecipes/starter/evidence-junction-notes.jsonrecipes/starter/README.md— multi-framework recipe-pattern story
Other milestones:
- v0.1.3 — Generation engine integration — dependency
- v0.1.5 — Tier 2 sidecar — what this unblocks (sidecar projects all 3 kinds)
- v0.1.7 — Exporters — STRM TSV / OSCAL JSON exporters consume crosswalk edges
- Milestone hub