ADR 0001 — Hybrid PARA + Evergreen Zettelkasten Milner Bigraph Architecture

Context

The Vespa AI Knowledge Garden serves two distinct knowledge workflows simultaneously:

  1. Evergreen Architectural Synthesis (Zettelkasten / Milner Bigraph): Long-lived atomic mechanisms (content/zettels/), foundational concepts (content/concepts/), architectural invariants (content/invariants/), cross-language bridges (content/bridges/), domain guides (content/guides/), Maps of Content (content/mocs/), empirical evidence cards (content/evidence/), source analyses (content/analyses/), and contradiction records (content/contradictions/).
  2. Actionable Lifecycle & Intake Management (Tiago Forte’s PARA Method): Time-bounded active initiatives (content/projects/), ongoing subsystem maintenance responsibilities (content/areas/), reusable reference catalogs (content/resources/), retired/completed work (content/archives/), and zero-friction raw capture (content/inbox/ and content/source-materials/).

Earlier iterations forced strict 7-bit ASCII across prose notes (blocking typographic dashes —, arrows →, and math symbols ≥) and lacked an un-gated staging inbox for raw notes.

Decision

  1. Staging Folders (content/inbox/, content/source-materials/):
    • Exempt content/inbox/ and content/source-materials/ from strict graph reciprocity, frontmatter schema, and Quartz 5 publication (ignorePatterns in quartz.config.yaml), while keeping ascii_lint.py active on them.
    • Provide garden_capture_inbox in tools/garden/mcp_server.py for zero-friction intake.
  2. Relaxed Unicode Security Linter (INV-001):
    • Permit standard UTF-8 prose (—, →, ≥, accents, box-drawing diagrams) across governed files.
    • Fail closed on Trojan-Source bidirectional overrides (U+202A..U+202E, U+2066..U+2069, U+200E, U+200F, U+061C), zero-width/invisible characters (U+200B..U+200D, U+2060..U+2064, mid-file U+FEFF), C0/C1 control characters, and tag/variation-selector smuggling (U+E0000..U+E01EF, U+FE00..U+FE0F).
  3. Hybrid PARA + Zettelkasten Topology (INV-002, INV-003):
    • Keep evergreen Zettelkasten folders at the root of content/ and add top-level PARA folders (content/projects/, content/areas/, content/resources/, content/archives/) with optional para: project | area | resource | archive frontmatter metadata.
    • Model the note graph as a Milner Bigraph: orthogonal Place Graph (indexes, indexed-by, part-of, has-part) and Link Graph (supports, supported-by, refines, refined-by, contrasts, supersedes, superseded-by, related), enforced by tools/garden/link_sync.py and tools/garden/verify/check.py.

Consequences

  • Authors can capture raw notes into content/inbox/ without breaking CI, then distill them into atomic zettels and invariant cards.
  • Every governed note participates in a machine-verified Milner Bigraph with zero dangling or asymmetric edges (INV-003), while telemetry remains strictly non-authoritative (INV-004).