Status

ACCEPTED (2026-10-27). Operator decision in resume session: “2. duckdb has been chosen”.

Context

The garden’s semantic layer was prototyped on TypeDB CE 3.14.1 (validated hands-on: schema,
recursive lineage() / contradicted_through() functions) and on an embedded DuckDB +
DuckDB-Wasm layer (tools/garden/sync_duckdb.py, GDN-ADR-0002). Two projection exporters
exist. The operator has chosen: DuckDB has been chosen.

Operational evidence (registers/INACCESSIBLE_REFERENCES_REGISTER.md, INACC-002; wave-6/7 spikes):

  • TypeDB GitHub releases ship no prebuilt binaries for any 3.x tag; the working install was
    a Homebrew bottle tarball with unreplaced @@HOMEBREW_PREFIX@@ placeholders — an unsupported
    install path.
  • TypeDB is server-only (no embedded mode): a live external daemon with dev-default
    credentials (admin/password, TLS disabled) would sit on this workstation or in CI.
  • The HTTP API is Bearer-gated with a non-trivial sign-in handshake; only gRPC drivers are
    practical — an extra dependency surface (driver churn in 3.x).
  • DuckDB needs no server, syncs the full corpus in 0.063s (36 notes, 712 edges, 384-d
    vectors), and already powers the MCP server’s garden_graph_query, garden_vector_search,
    and garden_typeql_read tiers via recursive CTEs + vss HNSW.

Decision

  1. DuckDB + DuckDB-Wasm (tools/garden/sync_duckdb.py) is the sole supported semantic
    engine
    for the garden MCP server and CI verification gates.
  2. tools/garden/sync_typedb.py is tombstoned as an optional exporter (tombstone-not-delete,
    INV-003): the file stays, carries a deprecation header, and is not invoked by any gate,
    workflow, or MCP tool. It may be removed only by a superseding ADR.
  3. tools/garden/README-sync.md gains a deprecation banner pointing at the DuckDB path.
  4. No CI step, workflow, or MCP tool may require a running TypeDB server. CI never starts one.
  5. Markdown remains canonical (INV-008, unchanged); every projection stays disposable and
    rebuildable in seconds.

Consequences

  • One less daemon, one less credential, one less dependency surface (aligned with the Wave-7
    adversarial review’s reduced-attack-surface posture: stdio-only MCP, no broker tokens).
  • TypeDB’s native inference functions are replaced by recursive CTEs (WITH RECURSIVE) —
    validated equivalent for lineage() and impact analysis at garden scale (36 -> ~5000 notes).
  • If rule-shaped semantics outgrow SQL CTEs, revisiting TypeDB (or a successor) requires a
    superseding ADR per the Chesterton protocol.

Verification

  • sync_duckdb self-test: PASS (markdown -> DuckDB/Parquet, recursive lineage, vector search).
  • grep -r "typedb" tools/garden/mcp_server.py shows no TypeDB client code; the
    garden_typeql_read tool is DuckDB-backed by name only.
  • Ledger event: note-proposed for GDN-ADR-0003 (hash-chained, seq - 9).