Completed Plans
Archive of implementation plans that have been executed and shipped.
Content Addressing — COMPLETED ✓
Completed: March 2026 (Phase 3)
Hash-based fetch, in-memory index, mirror foundation. All five implementation steps completed:
content-hashadded to FETCH responses — SHA-256 of stripped body in metadata- Hash index in Store —
BuildHashIndex(),LookupHash(),UpdateHashIndex(),RemoveHashEntry() - Index updates on writes —
Write(),SetArchived()keep index synchronized - Hash-based FETCH —
isHashPath()validates/sha256-<64hex>,handleFetchByHash()retrieves by hash - Startup initialization —
BuildHashIndex()called on server startup
Key details: Content-hash is separate from etag (stripped body vs full doc). Current versions only indexed. Read auth checked after hash resolves to real path. In-memory index rebuilt on startup.
Foundation for: Federation, content-addressed mirroring, distributed caching
Federation — COMPLETED ✓
Completed: March 2026 (Phase 3)
Agent-driven hash discovery via MCP tools. Zero server changes, zero new verbs.
Shipped:
mark_indexMCP tool — crawls source server, collects hashes, publishes index to hubmark_resolveMCP tool — resolves content by hash using hub indexclient/internal/indexpackage — Parse, Build, Merge for markdown hash index documents- Manifest check enforced by tool,
forceoverride,dry_runmode, 1000 doc cap
Persistent Graph — COMPLETED ✓
Completed: March 2026 (Phase 4)
Disk-backed graph store, incremental crawl, backlinks.
Shipped:
client/internal/graphstorepackage — nodes, edges, etags, timestamps, atomic writes, schema versioningCrawlAndPersist— unified crawl + merge + save, nil-safe, shared across CLI/TUI/MCPmark_backlinksMCP tool — reverse link lookup- Graph export —
Store.Export()renders as publishable markdown,ParseExport()parses back - TUI graph view — Links (BFS), Backlinks, Topology sub-views
- Graph seeding — TUI loads instantly from stored graph while crawl runs in background
Read Auth (Server-Side) — COMPLETED ✓
Completed: 2026-03-14 (Phase 5)
Per-path read token enforcement on the server. Fully backwards compatible — no read tokens = everything public.
Shipped:
RequiresReadAuth(path)onTokenStore— pre-computedreadPathsat load timeauthorizeReadhandler helper — checks token store, exempts/.well-known/agent-manifest.md- Integrated into FETCH, LIST, VERSIONS handlers
- Content-addressed fetch respects read auth (hash resolves to path first, then checks auth)
- Versioned path auth —
/doc.md/v2checks auth on base path/doc.md - Directory path normalization —
/privateand/private/both match/private/**patterns
Remaining (Phase 5): Client-side read auth — fetch.Client read methods (Fetch, List, Versions) need a token parameter, then CLI, TUI, and MCP need to pass it through. The server enforces correctly; the clients just can't send a token on reads yet.