Manifests mirror the fluxcd repo's apps/apps/<name>/<name>/{app,backup} nesting
and build clean with kubectl kustomize; they are unverified against a live
cluster. README documents the build, the deploy order, MCP_TOKEN rotation across
its two Vault paths, harness wiring, and every deviation from PLAN.md.
Every variant runs at the same char budget; dim variants build and delete their
own index. pick_default() only names a new default when its nDCG@10 CI clears
the baseline's. First run is synthetic (fake embeddings, 18 queries) and is
recorded as a machinery check, not a tuning result — defaults stay RRF/2560.
Six pages (inbox, search, note, edit, browse, health), HTMX vendored, markdown
rendered with raw HTML disabled, CSP + origin check on every POST. The group
check rejects a missing scope, a missing claim and a wrong-typed claim
separately, each with its own test (§14.21). /healthz, /readyz and /metrics
stay open and carry no note content; readiness ignores Bifrost (§14.17).
Uses mcp 2.2.0 (FastMCP is MCPServer there) with stateless streamable HTTP.
The SDK's DNS-rebinding protection checks the Host header, so the in-cluster
name Bifrost dials is an explicit allow-list entry (MCP_ALLOWED_HOSTS) —
otherwise every proxied call returns 421 and looks like an mdmem bug.
Agent edits to active notes become inbox revisions; no delete tool exists.
Caching/batching/prefixing moved into Embedder so FakeEmbedder exercises the
same cache the Bifrost client uses. Rebuilding an index with an unchanged model
embeds nothing; a dim or model change drops the vectors and re-embeds. A
token-free query short-circuits before the embedding call.
A file written directly into the vault is searchable in well under 2 s, the
service's own writes are hash-deduped so the watcher never double-indexes, and
reindex runs standalone with --no-embed for a lexical-only rebuild.
chunks_fts/chunks_tri are ordinary FTS5 tables, not content='': contentless
FTS5 cannot delete rows before SQLite 3.43 (bookworm ships 3.40) and cannot
snippet. Vectors survive an edit that does not change the embed text.
Frontmatter uses ruamel round-trip so unknown keys, order and comments survive
an edit (§4). Writes are tmp→fsync→os.replace with a pre-write history snapshot,
and iter_files skips *.tmp so a crashed write is never visible (§14.6, §14.8).