Roadmap
Crosswalker is a meta-system for ontology lifecycle management, not just a framework importer. The roadmap reflects this — architecture decisions come first, features are built on that foundation, and every significant decision is logged with rationale.
See vision alignment decisions for the philosophical foundations.
Current phase: v0.1 implementation (design phase closed 2026-05-04)
Section titled “Current phase: v0.1 implementation (design phase closed 2026-05-04)”v0.1 implementation milestones (active work)
Section titled “v0.1 implementation milestones (active work)”The v0.1 implementation phase breaks into 10 sequenced milestones. Each has its own page with concrete tasks, dependencies, and success criteria. This table mirrors the milestone hub — that page is the live source; if the two ever disagree, the hub wins.
| Milestone | Title | Effort | Status |
|---|---|---|---|
| v0.1.1 | Type system + validation foundation | 1–2 days | ✅ Done (2026-05-04) |
| v0.1.2 | render() v1 — folder + file + heading | 3–5 days | ✅ Done (2026-05-05) |
| v0.1.3 | Generation engine integration | 3–5 days | ✅ Done (2026-05-05) |
| v0.1.4 | Junction notes + crosswalk edges | 2–3 days | ✅ Done (2026-05-05) |
| v0.1.4.5 | Iterator-ready engine boundary (wizard remains eager) | 1–2 days | ✅ Done (2026-05-05) |
| v0.1.5 | Tier 2 sqlite-wasm sidecar projector | 5–8 days | ✅ Done (2026-05-06) |
| v0.1.6 | Bases query layer + SSSOM import + recipe UX | 3–5 days (ran long — absorbed the shape-workbench side-arc) | 🚧 In progress — Phases 1–6.4 ✅ + Phase 7 (shape-workbench side-arc) ✅ 2026-07-11; v0.1.7 is active. See CHANGELOG.md [Unreleased] for delivery detail |
| v0.1.7 | Portability: exporters, reusable configurations, source bindings, MappingSets | Expanded | 🚧 In progress — exporter first slice ✅; recipe-fidelity foundation ✅ 2026-07-21; recipe library slice ✅ 2026-10-02; Run again and source-change status ✅ 2026-10-02; full NIST replay proofs ✅ 2026-10-03; mapping set release record slices 1 and 2 ✅ 2026-10-03; exporter completion remains, now gated on the save-and-replay + primitives decision registers (2026-07-25). See CHANGELOG.md [Unreleased] |
| v0.1.8 | Execution records, audit, and package manifests | Expanded | 📋 Planning; depends on v0.1.7 |
| v0.1-RC | Artifact-chain acceptance, bundle, polish, ship | 2–3 days | 📋 Planning |
Status last verified: 2026-10-03 (v0.1.7 row only, re-checked against CHANGELOG.md [Unreleased] and the milestone page). The rest of this table keeps its 2026-09-05 verification below.
Status last verified: 2026-09-05 — every cell above was re-checked against the milestone pages, CHANGELOG.md [Unreleased], and the commit log. No milestone status changed in this documentation update; the fix/d1-per-import-root safety work remains unmerged branch work, not a shipped milestone. If today is far past this date and no newer verification line has replaced it, treat this table as unverified.
Delivery posture: functional correctness and a usable, explicitly supported workflow come before optimizing every ingestion path. The eager in-memory wizard can remain the initial path where it works honestly; silent data loss, crashes on declared-supported inputs, and false completion are blockers. Advanced streaming, parser migration, and replay integrity for mutable multi-pass sources are staged, measured improvements, not automatic blockers for v0.1.7. See ingestion safety and staged performance.
Total estimate: ~3–6 weeks of focused work (running a bit long — v0.1.6 absorbed an adjacent import-wizard rebuild). The closing acceptance chain is source bytes → reusable configuration → Knowledge Set/MappingSet → Execution Record → Package Manifest; see artifact roles and authority and the artifact-role synthesis. See the milestone hub for full sequencing and dependencies.
Deterministic avenues: command line and live demo (near term)
Section titled “Deterministic avenues: command line and live demo (near term)”Every lifecycle stage should be reachable both from the UI and from a deterministic script, with the same output either way. The UI stays primary and the command line is the escape hatch, per the UI parity rule. Decision log
- Command line first slice: headless commands (run without opening Obsidian) over the same engine the plugin uses: import with a recipe, export, validate against
spec/tier1.schema.jsonandspec/recipe.schema.json, and replay a saved recipe. Runs from the repo with bun against a plain folder of Markdown. Does not wait for the monorepo restructure: a thin filesystem vault adapter now, extraction intopackages/coreandpackages/clilater as an additive move. Decision · Distribution architecture - Live demo workspace: a full multi-framework demo (several frameworks, crosswalks between them, evidence junction notes, saved queries) built by the command line from content the repo may redistribute, then loaded into an OpenClast workspace (real Obsidian running in a browser tab) so anyone can open it. Regenerated by one command, never hand-built. Decision
Foundation — “Get the architecture right” (closed)
Section titled “Foundation — “Get the architecture right” (closed)”Architecture decisions before more code. The three interconnected schemas (_crosswalker metadata, FrameworkConfig, StewardshipProfile née EvolutionPattern) must be designed together — getting any wrong is expensive to fix later. Decision: architecture first
After three research waves on 2026-05-02 and the v0.1 stack-pivot, Foundation is now organised around a concrete v0.1 build target plus the genuinely-still-open spec items.
v0.1 build target — what ships first
Section titled “v0.1 build target — what ships first”Concrete, shippable. ~1.2 MB total. Tier 1 + Tier 2 sqlite-wasm sidecar bundled together.
Build against the unified v0.1 schema spec — the four interconnected schemas (_crosswalker metadata, FrameworkConfig v2, junction note 13-field schema, Tier 2 sidecar SQL) in one place.
v0.1 stack (full commitment):
- Tier 1 storage: markdown files with YAML frontmatter; STRM predicate vocabulary (
is_equivalent_to,is_broader_than,is_approximate_to,intersects_with,no_relationship); junction notes (13-field schema, Ch 07 resolution) for evidence links - Tier 1 in-memory index: plain JS Map built at vault-load time over frontmatter; works without Tier 2 (slow on large vaults but functional)
- Tier 2 sqlite-wasm sidecar projector:
@sqlite.org/sqlite-wasm(~600 KB) + sqlite-vec; auto-projects from Tier 1 on vault load; deletable; reprojected on next load. Per Ch 18 expressivity matrix, 4 ✅ tractable rule types + 4 ⚠️ caveat-tractable cover the realistic GRC workload comfortably under 100K mappings - Crosswalk-render plugin: Dataview-style queries on frontmatter for the Tier 1 path; recursive CTE over Tier 2 sidecar for transitive closure / multi-framework joins / coverage matrices / perspective views
- Portability chain: STRM/SSSOM/CSV export; explicit OSCAL target-shape decision; reusable ImportRecipe library (library slice landed 2026-10-02 under
_crosswalker/import-recipes/; each import also keeps the recipe it ran under_crosswalker/import-sets/); separate exact source/run binding (Run again slice landed 2026-10-02); minimal MappingSet identity/membership/integrity/provenance/license envelope. Hybrid SSSOM↔STRM resolution per v0.1 pivot §6 - Execution records, audit, and package manifests: one terminal Execution Record per run; execution-linked provenance/events; git + Ed25519 + FRE 902(13) consume that receipt; a separate Package Manifest inventories and attests each distributed release. Per v0.1 pivot §8
- Bundle target: under 500 KB plugin core + ~600 KB sqlite-wasm sidecar = ~1.2 MB compressed total
Plugin scope: a single, focused import wizard + crosswalk-render plugin + Tier 2 sidecar projector. Performance enhancements (DuckDB-WASM, Oxigraph, Nemo, Comunica federation) live in separate companion plugins released later.
✅ Resolved Foundation decisions
Section titled “✅ Resolved Foundation decisions”These are committed direction, with deliverables and decision logs. They feed v0.1 and beyond.
- ✅ Crosswalk edge semantics — STRM + SSSOM — STRM (NIST IR 8477) as required
predicate_idvocabulary; SSSOM as row-schema envelope. Hybrid resolution: STRM-shaped TSV is the user-facing wire format, SSSOM is the internal validation envelope. Both emittable. v0.1 pivot §6 · 04-10 synthesis - ✅ Junction notes for evidence links — one markdown file per edge, 13-field flat-YAML schema, isomorphic to OSCAL
by-component. Three orthogonal status dimensions (status×freshness×evidence_type). Ch 07 archive - ✅ Pairwise crosswalks + optional inheritable pivot — pairwise-first; SCF available as inheritable spine for users who want hub-and-spoke. Ch 06 archive
- ✅ Progressive Tier Architecture (confirmed) — Tier 1 (files canonical) → Tier 2 (sqlite-wasm sidecar) → Tier 3 (optional server). Files always source of truth. Each tier shares the same schemas. v0.1 ships Tier 1 + Tier 2 bundled. Ceiling rationale
- ✅ Distribution architecture (research done) — pnpm monorepo:
@crosswalker/core+ plugin + CLI; VaultAdapter interface bridges platforms. Implementation: monorepo restructure remains an open task below. - ✅ StewardshipProfile rename + meta-schema lifecycle commitment — EvolutionPattern renamed to StewardshipProfile; “Crosswalker eats own dog food” — every internal schema is versioned and migration-aware. Rename ripples deferred (~24 file edits).
- ✅ Audit trail floor — Tier 1 = git + signed commits — git commits + Ed25519-signed releases + on-demand FRE 902(13) PDF. T2 OpenTimestamps and T3 audit profiles surface as opt-in compliance-export mode in v1.0+. Ch 08 deliverable · Ch 13 deliverable · Ch 15 deliverable · Ch 19 deliverable
- ✅ Identifier strategy — UUIDv7 + sha256 CIDs + CURIEs (ORCID for SSSOM authors); CWUUID is display-only. Ch 09 deliverable
Genuinely-still-open Foundation items
Section titled “Genuinely-still-open Foundation items”These are design / spec items that need work before/during v0.1 implementation. Most are documentation or schema specifics, not architectural questions.
Schema spec work:
- Unified v0.1 schema spec (2026-05-03) — the four interconnected schemas designed together as the v0.1 build target. Implementation of the four schemas below proceeds against this spec.
- ImportRecipe v1 schema (formerly FrameworkConfig v2 — see naming history) — implement the recipe shape in
src/types/config.ts; migration script for legacy saved configs - _crosswalker metadata v2 — extend
src/generation/generation-engine.tsto write the v2 fields (ontology_id,ontology_version,recipe_id); idempotent migration for existing notes - Junction note 13-field schema — implement junction-note generation as new code path in the generation engine; non-destructive, git-history-preserving
- Tier 2 sidecar SQL schema — new
packages/core/projector module; auto-runs on vault load; lazy closure cache - Migration strategy matrix — given StewardshipProfile + old/new version → recommended SCD type + handling strategy
Implementation infrastructure:
- Monorepo restructure — extract ~50-60% of current codebase into
packages/core/, keep plugin UI inpackages/plugin/, createpackages/cli/. Sequence rationale. This is the later extraction step: the command line first slice no longer waits for it (decision) - Obsidian Bases direction research — Dataview is deprecated. Understand Bases API for the viewing/querying layer on native Obsidian capabilities. Datacore as backup option. Context in 04-10 synthesis
- Transform engine — custom build (14 engines evaluated, none fit). 24 transform types, ChunkyCSV-style operations, optional Arquero/JSONata escape hatches. Research
- Ontology diff primitives implementation — implement the 9 atomic operations + 4 recognized composites as the structural diff engine. Spec is settled; implementation remains.
Documentation tasks (surfaced 2026-05-02; non-blocking but valuable):
- OSCAL ↔ Crosswalker mental model — extend
reference/registry/oscalto map OSCAL terms (catalog↔ source-ontology web,Control Mapping Model↔ crosswalk edges,Assessment Result↔ junction notes) into Crosswalker’s vocabulary. Per TL;DR §3.3 - DB-choice architecture page — extend
architecture/file-based-graph-databaseexplaining why Tier 1 + sqlite-wasm sidecar is the right choice (and why not pure graph DB). Per third-wave §3.3 - Comunica honest+practical assessment — per third-wave §7.2, Comunica federation conditional confirmation pending honest assessment before v1.0 companion plugin work
- StewardshipProfile rename ripples — propagate the rename across ~24 docs files where the old “EvolutionPattern” term still appears
Research items remaining (not v0.1-blocking):
- SEACOW + folder-tag-sync prior-art integration — decide what Crosswalker reuses from the project owner’s prior tools
- Graph scope decision — directed graphs now (covers 95% of use cases). DAG and hypergraph support deferred. Pluggable layers: Thread 2
- StewardshipProfile vs transformation recipes — investigate whether per-version-transition transformation records replace or complement framework-level classification. Both may coexist.
Infrastructure (non-blocking):
- PII scanning in CI/CD — automated detection of personal paths, secrets, API keys before push
- Expand E2E smoke tests minimally (don’t test wizard UI — it will change)
- Fluid layout scaling — replace rigid Nova breakpoints (768/1152px) with
clamp()CSS. ~3-5 hours.
Formats / Acquire — “Import anything, transform it properly”
Section titled “Formats / Acquire — “Import anything, transform it properly””Built on the Foundation spec. This phase expands both source-format breadth and acquisition while preserving exact-source replay semantics.
- Complete import wizard UI — steps 2-4 redesigned around the new config schema
- Complete settings tab — all 8 sections reflecting new schema
- Complete config browser modal — search, select, delete, import/export
- XLSX parser — sheet picker + header-row offset, shipped 2026-06-12
- JSON parser — iterator path + row filter + record picker, shipped 2026-06-12
- JSONL (newline-delimited JSON) parser — not yet supported
- Source fetch automation — background acquisition helpers for known publisher files. Before this can ship, define a per-framework rights model because fetching a restricted workbook on a user’s behalf is a different act from telling the user where it lives, and define a staleness/pinning story so automation does not silently replace the exact source version a recipe or replay expects
- Remote acquisition — acquire supported sources over explicit remote references without merging acquisition policy into ImportRecipe transformation/layout semantics
- Content-hash pinning — bind runs to exact acquired bytes; detect upstream drift before refresh or replay
- Cache, refresh, and offline replay — retain verified source bytes and metadata so users can refresh deliberately or reproduce a prior run without network access
- Transform system — implement 20+ transform types defined in schema (string, array, type conversion, conditional). Current types
- Improved preview — expandable folder tree, full note preview in Step 3
- E2E test suite — full import wizard workflow tests, built from spec
Recipe authoring with AI assistance
Section titled “Recipe authoring with AI assistance”A canonical recipe is already plain JSON: every bundled recipe under recipes/import/ uses the closed 5-mechanism grammar, and an assistant can already read and propose edits to that JSON directly. This is a distinct file and code path from the config browser’s saved-config export/import, which round-trips wizard state (SavedConfig) — the config browser’s file import does not read or accept canonical Recipe JSON today. What is missing for recipe editing specifically is the packaging that makes an assistant round trip feel native instead of a manual copy-paste through the filesystem. Doing that safely means preserving the full canonical RecipeDocument rather than reconstructing a recipe from a smaller edited fragment, and giving the user an explicit preview and opt-in before any source content leaves the vault — none of this packages or sends anything automatically.
- Paste-JSON entry — accept a pasted recipe alongside the existing file import, so an edited recipe comes back without a download-and-re-upload hop
- Context-pack command — one action that copies
spec/recipe.schema.json, the recipe being edited, and the current source’s column headers as a single block to hand an assistant. The schema plus a worked recipe is already the context an assistant needs; this only packages it - Validate-on-paste — report schema violations in the UI at paste time with the offending field named, rather than failing later during generation. Follows the actionable-errors rule: name a cause and an action
Crosswalks — “Link frameworks to each other and to evidence”
Section titled “Crosswalks — “Link frameworks to each other and to evidence””The evidence mapping workflow — the core value proposition for GRC teams.
- Cross-framework linking engine — generate typed WikiLinks between imported frameworks using crosswalk data. Crosswalk specs
- Link insertion commands — “Insert framework link” with search modal and metadata form. Link metadata system
- Batch re-import — update existing framework folders with version awareness and diff preview. Resilience patterns
- FrameworkConfig presets — per-framework configs with sheet selection, custom transforms, column overrides. Community-contributed via the as-code format.
- Command line crosswalk and batch operations: crosswalk generation and batch runs from the command line, built on the near-term command line first slice (headless import, export, validate and replay live there). Decision
Performance — “v1.0+ companion plugins”
Section titled “Performance — “v1.0+ companion plugins””Performance enhancements and integration capabilities researched on 2026-05-02 (third research wave) and reframed by the v0.1 stack-pivot as opt-in companion plugins that ship after v0.1 lands. Each is fully researched; the deliverables are ready-made designs.
These are not v0.1 build target. They are v1.0+ work for users who outgrow the Tier 2 sqlite-wasm sidecar default.
- “Crosswalker Power Query” companion plugin — DuckDB-WASM + Oxigraph-WASM + Nemo-WASM layered Tier 2 stack (~5 MB compressed). Triggered when a user vault exceeds Tier 2-Lite’s ~100K mapping ceiling (per Ch 18 migration triggers) OR demands recursive SHACL / multi-stratum Datalog / SPARQL property paths. Ch 11 deliverables A/B/C · Ch 14 deliverable
- Comunica federation companion plugin — Comunica + N3 + HDT for cross-vault, cross-org, external SPARQL endpoint queries. ~250–300 KB gzipped core. Conditional — see third-wave §7.2: user flagged Comunica as “seems bulky or overengineered”; honest-and-practical assessment needed before locking in
- Compliance-export mode — opt-in profile picker exposing T2 OpenTimestamps and T3 audit options (“US litigation”, “EU regulated”, “Federal ATO”, “Supply-chain”) per the Ch 15 deliverable §E. Each profile pre-configures 4–6 settings. v0.1 default remains T1 (git + signed commits).
- Migration trigger UX — status-bar indicator and modal prompts for “you’ve outgrown Tier 2-Lite” per Ch 18 §3.2. Detects performance / scale / feature triggers; suppressed on platforms that can’t migrate (Obsidian Mobile)
- PQC dual-sign migration — Ed25519 → ML-DSA-44 dual-sign starting 2027 per Ch 15 §5.6 crypto-agility plan. Ahead of NIST IR 8547 2035 deadline.
Deployment — “v2.0+ Tier 3 server guide”
Section titled “Deployment — “v2.0+ Tier 3 server guide””Server-tier deployment options for users who genuinely need a shared multi-team server. Documented as a deployment guide rather than bundled into the plugin.
- Default recommendation: Postgres + JSONB + recursive CTE — boring tech, broadly operable, “you probably don’t need anything fancier.” Per Ch 16 deliverable §2.3
- Apache Jena Fuseki + oxigraph-server — same-API alternative for users who want SPARQL natively (oxigraph-server uses the same engine as the v0.1 Tier 2, just with
servemode). Architectural symmetry with Tier 2. - Layered Fuseki + DuckDB-on-server — power-user upgrade path for multi-team mixed SQL+graph workloads, multi-million mappings. Federated via SPARQL
SERVICEand DuckDBhttpfs/postgres_scanner - TerminusDB v12 — opt-in vault-mirror for users who want server-side git-style branch/diff. Small-vendor (DFRNT) risk explicitly flagged
- Apache AGE on Postgres — supported fallback for Postgres-standardized environments. AGE’s killer feature (graph queries inside an existing Postgres instance) has no substitute
- Migration from AGE — for early adopters who started on AGE during the Ch 10 era. The SSSOM-canonical files-first architecture turns “migrate from AGE” into “re-run the projector against the new engine,” not “translate AGE data” — see Ch 16 §5
Evolution — “The meta-system”
Section titled “Evolution — “The meta-system””Implement the ontology evolution classification system designed in Foundation. This is the novel contribution — no existing tool solves this.
- Version-transition loop — acquire/pin old and new source versions → detect structural/semantic change → review mappings and migration decisions → apply → validate → record the transition for replay and audit
- Later generalized Knowledge Set governance — extend beyond the v0.1 MappingSet portability envelope only after identity, membership, authority, versioning, licensing, and lifecycle semantics are proven across multiple set types
- Entity-aligned migration UX — design the experience for entities (agents or people) going through and fixing things. Guided form → migration plan YAML → CLI. Progressive depth. User-first maintenance
- Version registry standard — define the interface for declaring “framework version X exists.” Community builds implementations (GitHub repo, API, scrapers). Detection is pluggable, not primitive.
- Per-framework decisioning format — the taxonomy-over-taxonomies config. Per-ontology handling strategy overrides layered on default primitives.
- Progressive classification UX — community pre-classified → guided wizard → auto-detect
- Evolution profile registry — YAML/JSON per framework, community-contributed
- Migration strategy engine — old version + new version + user evidence → suggested handling + diff preview. Built on the structural diff engine.
- Stale crosswalk detection — surface when imported frameworks have newer versions available
- Community marketplace research — Obsidian ecosystem constraints, distribution model options
Community — “Share and scale”
Section titled “Community — “Share and scale””Build the ecosystem around the spec.
- Community config registry — start with GitHub repo, evaluate built-in registry later
- Package lifecycle — discover packages, resolve dependencies/compatibility, verify Package Manifest hashes/signatures/licenses, install, update, and uninstall without bypassing canonical artifact identities
- Expanded OSCAL support — add catalog or other post-v0.1 models only after the v0.1 crosswalk target-shape decision is explicit and schema-valid
- Compliance dashboards — Bases views for gap analysis, coverage tracking
- Report generation — exportable compliance reports for auditors
- Custom migration transforms — user-defined transformation logic for version migrations. From inline expressions to named transforms to custom scripts. Progressive depth applied to migration.
- AI-assisted transforms — LLM-based property mapping using templates (like Obsidian web clipper AI templates but for ontology node properties). Map source schema to target schema via AI suggestion.
- Extended graph support — research and implement DAG and hypergraph support beyond basic directed graphs
- Mobile Obsidian preview (exploratory) — drive and capture Obsidian’s mobile layout the way the desktop harness (WebdriverIO with a private X display) already drives and screenshots desktop Obsidian. Two uses: agents verify mobile rendering before release, and a visitor detected on a phone, even in a mobile browser, sees the mobile layout. Open issues: Obsidian mobile is a Capacitor app, not Electron, so desktop-side mobile emulation approximates layout and touch but not the real runtime; a real device needs an Android emulator plus Appium; streaming Obsidian itself to visitors raises licence and hosting questions. Supports the mobile-portability constraint behind the TypeScript engine commitment. Raised 2026-09-23.
- Community plugin submission — publish to Obsidian plugin registry
- Spec publication — publish EvolutionPattern taxonomy and structural diff engine as standalone specifications
Decision log
Section titled “Decision log”Every significant architectural decision is captured with rationale in the log:
Latest (2026-10-27): Command line and live demo move to the near term
Recent (2026-05-02 / 2026-05-03) — three research waves + v0.1 stack pivot:
- v0.1 initial-stack pivot — Tier 1 + Tier 2 sqlite-wasm sidecar bundled as v0.1; layered third-wave engines reframed as v1.0+ companion plugins. Read this for the v0.1 build target.
- Direction third-wave architectural shifts — Ch 14/15/16 deltas (Tier 2 confirmed-and-extended, Tier 3 default flipped to Fuseki/oxigraph-server, audit-trail 4-tier model). Reframed as back-pocket research by the v0.1 pivot.
- Direction commitments TL;DR — concise concluding artifact for the second research wave (Ch 11/12/13)
- Direction research wave + roadmap reshape — full research record for the second wave
- 05-01 Foundation commitments + follow-on research — pairwise + optional pivot, junction-notes-by-tier, StewardshipProfile rename, meta-schema lifecycle commitment
- Evidence-link edge model synthesis — junction notes commitment (Ch 07 resolution)
- 04-10 Foundation research synthesis — STRM + SSSOM crosswalk edge semantics, files-canonical ceiling, synthetic spine question
Earlier (2026-04) — first-principles foundations:
- Vision alignment decisions — 10 foundational decisions
- Deep research synthesis — ontology meta-tools, plugin state, E2E testing
- Architectural direction — the “what are we building?” question
- First principles: ontology change — 13 structural primitives, Path A/B/C
- Atomic operations research — literature survey, provably complete operation set
- User-first ontology maintenance — entity-aligned experience design
- Primitives depth + pluggable layers — detection, decisioning, custom transforms
See also: ROADMAP.md on GitHub, research deliverables, research challenges
Archive
Section titled “Archive”Past roadmap versions are preserved here for reference:
- v0.1 MVP roadmap — the original MVP scope (complete)