soul.demarkus.io/completed-plans.md/v2 draft reader meta

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:

  1. content-hash added to FETCH responses — SHA-256 of stripped body in metadata
  2. Hash index in Store — BuildHashIndex(), LookupHash(), UpdateHashIndex(), RemoveHashEntry()
  3. Index updates on writes — Write(), SetArchived() keep index synchronized
  4. Hash-based FETCH — isHashPath() validates /sha256-<64hex>, handleFetchByHash() retrieves by hash
  5. 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_index MCP tool — crawls source server, collects hashes, publishes index to hub
  • mark_resolve MCP tool — resolves content by hash using hub index
  • client/internal/index package — Parse, Build, Merge for markdown hash index documents
  • Manifest check enforced by tool, force override, dry_run mode, 1000 doc cap

Persistent Graph — COMPLETED ✓

Completed: March 2026 (Phase 4)

Disk-backed graph store, incremental crawl, backlinks.

Shipped:

  • client/internal/graphstore package — nodes, edges, etags, timestamps, atomic writes, schema versioning
  • CrawlAndPersist — unified crawl + merge + save, nil-safe, shared across CLI/TUI/MCP
  • mark_backlinks MCP 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) on TokenStore — pre-computed readPaths at load time
  • authorizeRead handler 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/v2 checks auth on base path /doc.md
  • Directory path normalization — /private and /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.

trail
  1. soul.demarkus.io v2