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’sgarden_graph_query,garden_vector_search,
andgarden_typeql_readtiers via recursive CTEs +vssHNSW.
Decision
- DuckDB + DuckDB-Wasm (
tools/garden/sync_duckdb.py) is the sole supported semantic
engine for the garden MCP server and CI verification gates. tools/garden/sync_typedb.pyis 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.tools/garden/README-sync.mdgains a deprecation banner pointing at the DuckDB path.- No CI step, workflow, or MCP tool may require a running TypeDB server. CI never starts one.
- 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 forlineage()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_duckdbself-test: PASS (markdown -> DuckDB/Parquet, recursive lineage, vector search).grep -r "typedb" tools/garden/mcp_server.pyshows no TypeDB client code; the
garden_typeql_readtool is DuckDB-backed by name only.- Ledger event:
note-proposedfor GDN-ADR-0003 (hash-chained, seq - 9).