soul.demarkus.io/graph.md/v6 draft reader meta

Document Graph

Exported: 2026-06-26T16:21:31Z Nodes: 133 Edges: 190

Nodes

URL Title Status Links
https://demarkus.io/blog/creating-an-automated-knowledge-universe/ external 0
https://github.com/gszhangwei/open-spdd external 0
https://github.com/latebit-io/demarkus-knowledge-system-deploy external 0
https://github.com/latebit-io/demarkus/issues/113 external 0
https://github.com/latebit-io/demarkus/issues/75 external 0
https://github.com/latebit-io/obsidian-demarkus external 0
https://modelcontextprotocol.io/specification/2025-03-26/basic/transports external 0
mark://soul.demarkus.io:6309/architecture.md Architecture ok 1
mark://soul.demarkus.io:6309/completed-plans.md Completed Plans ok 2
mark://soul.demarkus.io:6309/conventions.md Conventions and Working Agreements ok 3
mark://soul.demarkus.io:6309/debt.md Code Debt & Improvements ok 0
mark://soul.demarkus.io:6309/debugging.md Debugging ok 0
mark://soul.demarkus.io:6309/demarkus-knowledge-system-deploy/index.md demarkus-knowledge-system-deploy — Project Hub ok 1
mark://soul.demarkus.io:6309/demarkus-knowledge-system-deploy/journal/2026-06-12.md 2026-06-12 — demarkus-library in-cluster deploy ok 0
mark://soul.demarkus.io:6309/demarkus-library/adr/ Index of /demarkus-library/adr/ ok 6
mark://soul.demarkus.io:6309/demarkus-library/adr/0001-echo-bulwarkauth-layout.md ADR 0001 — Echo + bulwarkauth-style layout for the front-end ok 0
mark://soul.demarkus.io:6309/demarkus-library/adr/0002-hexagonal-architecture.md ADR 0002 — Hexagonal (ports & adapters) architecture ok 0
mark://soul.demarkus.io:6309/demarkus-library/adr/0003-htmx-ssr-philosophy.md ADR 0003 — SSR-first, htmx-hard, no JSON ok 0
mark://soul.demarkus.io:6309/demarkus-library/adr/0004-broker-web-sso.md ADR 0004 — Broker confidential web client + redirect SSO (reject device flow) ok 1
mark://soul.demarkus.io:6309/demarkus-library/adr/0005-reading-room-spatial-trail.md ADR 0005 — The Reading Room: spatial trails over temporal history ok 1
mark://soul.demarkus.io:6309/demarkus-library/adr/0006-reading-room-interaction-overlays.md ADR 0006 — Reading Room interaction model: dock, palette, and on-demand overlays ok 1
mark://soul.demarkus.io:6309/demarkus-library/architecture.md demarkus-library — navigation architecture ok 0
mark://soul.demarkus.io:6309/demarkus-library/audit-2026-06-18.md demarkus-library — Architecture & Code-Quality Audit (2026-06-18) ok 0
mark://soul.demarkus.io:6309/demarkus-library/debt.md demarkus-library — Debt & Deferred Work ok 0
mark://soul.demarkus.io:6309/demarkus-library/debugging.md demarkus-library — Debugging & Gotchas ok 0
mark://soul.demarkus.io:6309/demarkus-library/index.md demarkus-library ok 16
mark://soul.demarkus.io:6309/demarkus-library/journal/ Index of /demarkus-library/journal/ ok 10
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-10.md 2026-06-10 — demarkus-library Phase 0 ok 1
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-11.md 2026-06-11 — demarkus-library Phase 1b: plan + steps 2.2/2.5 ok 2
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-12.md 2026-06-12 — demarkus-library deploy manifests + CI/release ok 2
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-13.md 2026-06-13 — floor live + trail root-listing fix ok 0
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-14.md 2026-06-14 — world-view zoom level ok 0
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-15.md 2026-06-15 — R4 reader mode (the focus overlay) ok 0
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-18.md 2026-06-18 — login knowledge-graph backdrop + roadmap reconcile ok 0
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-19.md 2026-06-19 — Navigation rework kickoff ok 2
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-20.md 2026-06-20 — world-map crowding ok 0
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-23.md Journal — 2026-06-23 ok 0
mark://soul.demarkus.io:6309/demarkus-library/plans/phase-1b-web-sso.md Phase 1b — Web SSO over the Broker (two-repo plan) ok 3
mark://soul.demarkus.io:6309/demarkus-library/plans/phase-2-restricted-collections.md Phase 2 — Restricted Collections (plan) ok 0
mark://soul.demarkus.io:6309/demarkus-library/plans/phase-3-cataloging-desk.md Phase 3 — Cataloging Desk (plan) ok 0
mark://soul.demarkus.io:6309/demarkus-library/plans/phase-5-public-face.md Phase 5 — Public Face: the anonymous-read decision (plan) ok 1
mark://soul.demarkus.io:6309/demarkus-library/plans/reader-mode.md Reader mode — the focus overlay (plan) ok 0
mark://soul.demarkus.io:6309/demarkus-library/plans/reading-room.md The Reading Room — design notes (draft) ok 1
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md demarkus-library — Roadmap & Resume ok 20
mark://soul.demarkus.io:6309/ecosystem.md Ecosystem ok 1
mark://soul.demarkus.io:6309/faq.md FAQ ok 0
mark://soul.demarkus.io:6309/guide.md Guide: Setting Up demarkus-soul ok 0
mark://soul.demarkus.io:6309/guidelines.md Coding Guidelines ok 0
mark://soul.demarkus.io:6309/index.md demarkus-soul ok 48
mark://soul.demarkus.io:6309/journal/ Index of /journal/ ok 48
mark://soul.demarkus.io:6309/journal/2026-02-24.md Journal — 2026-02-24 ok 4
mark://soul.demarkus.io:6309/journal/2026-02-26.md Journal — 2026-02-26 ok 0
mark://soul.demarkus.io:6309/journal/2026-02-28.md Journal — 2026-02-28 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-01.md Journal — 2026-03-01 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-02.md Journal — 2026-03-02 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-03.md Journal — 2026-03-03 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-04.md Journal — 2026-03-04 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-05.md Journal — 2026-03-05 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-06.md Journal — 2026-03-06 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-07.md Journal — 2026-03-07 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-08.md Journal — 2026-03-08 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-11.md Journal — 2026-03-11 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-14.md Journal — 2026-03-14 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-16.md Journal — 2026-03-16 ok 0
mark://soul.demarkus.io:6309/journal/2026-03-19.md Journal — 2026-03-19 ok 0
mark://soul.demarkus.io:6309/journal/2026-04-08.md Journal — 2026-04-08 ok 0
mark://soul.demarkus.io:6309/journal/2026-04-21.md Journal — 2026-04-21 ok 0
mark://soul.demarkus.io:6309/journal/2026-04-24.md Journal — 2026-04-24 ok 0
mark://soul.demarkus.io:6309/journal/2026-04-26.md Journal — 2026-04-26 ok 1
mark://soul.demarkus.io:6309/journal/2026-05-05.md Journal — 2026-05-05 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-11.md Journal — 2026-05-11 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-12.md Journal — 2026-05-12 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-13.md Journal — 2026-05-13 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-14.md 2026-05-14 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-15.md 2026-05-15 — Universe Onboarding PR1 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-20.md 2026-05-20 — Universe Onboarding PR5 ok 1
mark://soul.demarkus.io:6309/journal/2026-05-21.md 2026-05-21 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-22.md 2026-05-22 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-23.md 2026-05-23 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-26.md 2026-05-26 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-27.md 2026-05-27 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-28.md 2026-05-28 ok 1
mark://soul.demarkus.io:6309/journal/2026-05-30.md Journal — 2026-05-30 ok 0
mark://soul.demarkus.io:6309/journal/2026-05-31.md Journal — 2026-05-31 ok 0
mark://soul.demarkus.io:6309/journal/2026-06-01.md demarkus-soul journal — 2026-06-01 ok 1
mark://soul.demarkus.io:6309/journal/2026-06-02.md 2026-06-02 ok 0
mark://soul.demarkus.io:6309/journal/2026-06-03.md 2026-06-03 ok 1
mark://soul.demarkus.io:6309/journal/2026-06-06.md Journal — 2026-06-06 ok 0
mark://soul.demarkus.io:6309/journal/2026-06-08.md 2026-06-08 — Broker-global OIDC AllowDomains gate ok 0
mark://soul.demarkus.io:6309/journal/2026-06-11.md 2026-06-11 — Broker confidential web-client support (Phase 1b Step 1) ok 1
mark://soul.demarkus.io:6309/journal/2026-06-12.md Journal — 2026-06-12 ok 0
mark://soul.demarkus.io:6309/journal/2026-06-16.md 2026-06-16 — Knowledge ingestion pipeline design ok 1
mark://soul.demarkus.io:6309/journal/2026-06-17.md 2026-06-17 — Knowledge ingestion phase 0: prerequisites (brokered half) ok 0
mark://soul.demarkus.io:6309/journal/2026-06-21.md 2026-06-21 — Leiden clustering: built, measured, shelved as a grouping feature ok 0
mark://soul.demarkus.io:6309/journal/2026-06-22.md Journal — 2026-06-22 ok 0
mark://soul.demarkus.io:6309/journal/2026-06-23-pi-plugins.md demarkus journal — 2026-06-23 ok 0
mark://soul.demarkus.io:6309/journal/2026-06-23.md 2026-06-23 — soul-doctor dangling-reference check ok 0
mark://soul.demarkus.io:6309/journal/2026-06-25.md 2026-06-25 ok 0
mark://soul.demarkus.io:6309/patterns.md Patterns & Conventions ok 2
mark://soul.demarkus.io:6309/plans/broker-auth-code-grant.md Plan: Broker Authorization Code Grant ok 0
mark://soul.demarkus.io:6309/plans/broker-deadcode-cleanup.md Broker — Post-Simplification Dead-Code Cleanup ok 0
mark://soul.demarkus.io:6309/plans/broker-https-gateway.md Plan: Broker MCP Gateway (Knowledge-System Layer) ok 0
mark://soul.demarkus.io:6309/plans/broker-stable-mint.md Broker — Lazy Token Provisioning + Cache-Stable Retries ok 0
mark://soul.demarkus.io:6309/plans/claude-code-plugin.md Plan: Claude Code Plugin ok 0
mark://soul.demarkus.io:6309/plans/conflict-merge.md Plan: Conflict-Aware Merge in MCP Tools ok 0
mark://soul.demarkus.io:6309/plans/content-addressing.md Content-Addressed Fetch — Implementation Plan ok 0
mark://soul.demarkus.io:6309/plans/external-links.md Plan: External Links in demarkus-tui — COMPLETE (Phase 1 only) ok 1
mark://soul.demarkus.io:6309/plans/federation.md Federation: Agent-Driven Hash Discovery ok 0
mark://soul.demarkus.io:6309/plans/information-graph.md Information Graph — Implementation Plan ok 0
mark://soul.demarkus.io:6309/plans/knowledge-ingestion.md Knowledge Ingestion Pipeline ok 0
mark://soul.demarkus.io:6309/plans/knowledge-system-gke-deploy.md Knowledge System — GKE Reference Deployment ok 3
mark://soul.demarkus.io:6309/plans/lookup-verb.md Plan: LOOKUP verb (topic/importance catalog) ok 1
mark://soul.demarkus.io:6309/plans/obsidian-plugin.md Obsidian Plugin Plan ok 0
mark://soul.demarkus.io:6309/plans/okf-type-adoption.md Plan: OKF type adoption (type = kind, category = domain) ok 0
mark://soul.demarkus.io:6309/plans/persistent-graph.md Plan: Persistent Graph Store + Backlinks ok 0
mark://soul.demarkus.io:6309/plans/plugin-knowledge-quality.md Plan: Plugin Knowledge-Quality Enforcement ok 0
mark://soul.demarkus.io:6309/plans/poc-deployment.md archived 0
mark://soul.demarkus.io:6309/plans/read-auth.md Read Auth for Private Networks — COMPLETE ok 0
mark://soul.demarkus.io:6309/plans/search-verb.md archived 0
mark://soul.demarkus.io:6309/plans/security-hardening.md Plan: Security Hardening & Documentation — COMPLETE ok 0
mark://soul.demarkus.io:6309/plans/soul-join.md Plan — /soul-join: managed remote souls + catalog + project binding ok 0
mark://soul.demarkus.io:6309/plans/universe-deployment.md Plan: Universe Deployment ok 0
mark://soul.demarkus.io:6309/plans/universe-library.md Universe Library — Plan ok 1
mark://soul.demarkus.io:6309/plans/universe-onboarding-pr3.md Plan: Universe Onboarding — PR3 (Broker device flow) ok 0
mark://soul.demarkus.io:6309/plans/universe-onboarding-pr4.md Plan: Universe Onboarding — PR4 (Broker refresh tokens) ok 0
mark://soul.demarkus.io:6309/plans/universe-onboarding-pr5.md Plan: Universe Onboarding — PR5 (/me/install) ok 0
mark://soul.demarkus.io:6309/plans/universe-onboarding.md Plan: Universe Onboarding ok 0
mark://soul.demarkus.io:6309/plans/versions-sharding.md Versions Directory Sharding ok 0
mark://soul.demarkus.io:6309/plugins/obsidian/index.md Obsidian Plugin — obsidian-demarkus ok 2
mark://soul.demarkus.io:6309/plugins/obsidian/plan.md Obsidian Plugin Plan ok 0
mark://soul.demarkus.io:6309/roadmap.md Roadmap ok 8
mark://soul.demarkus.io:6309/thoughts.md Thoughts ok 1
mark://soul.demarkus.io:6309/universe.md The Universe Pattern ok 4

Edges

From To
mark://soul.demarkus.io:6309/architecture.md mark://soul.demarkus.io:6309/plans/lookup-verb.md
mark://soul.demarkus.io:6309/completed-plans.md mark://soul.demarkus.io:6309/plans/okf-type-adoption.md
mark://soul.demarkus.io:6309/completed-plans.md mark://soul.demarkus.io:6309/plans/soul-join.md
mark://soul.demarkus.io:6309/conventions.md mark://soul.demarkus.io:6309/guidelines.md
mark://soul.demarkus.io:6309/conventions.md mark://soul.demarkus.io:6309/patterns.md
mark://soul.demarkus.io:6309/demarkus-knowledge-system-deploy/index.md mark://soul.demarkus.io:6309/demarkus-knowledge-system-deploy/journal/2026-06-12.md
mark://soul.demarkus.io:6309/demarkus-library/adr/ mark://soul.demarkus.io:6309/demarkus-library/adr/0001-echo-bulwarkauth-layout.md
mark://soul.demarkus.io:6309/demarkus-library/adr/ mark://soul.demarkus.io:6309/demarkus-library/adr/0002-hexagonal-architecture.md
mark://soul.demarkus.io:6309/demarkus-library/adr/ mark://soul.demarkus.io:6309/demarkus-library/adr/0003-htmx-ssr-philosophy.md
mark://soul.demarkus.io:6309/demarkus-library/adr/ mark://soul.demarkus.io:6309/demarkus-library/adr/0004-broker-web-sso.md
mark://soul.demarkus.io:6309/demarkus-library/adr/ mark://soul.demarkus.io:6309/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io:6309/demarkus-library/adr/ mark://soul.demarkus.io:6309/demarkus-library/adr/0006-reading-room-interaction-overlays.md
mark://soul.demarkus.io:6309/demarkus-library/adr/0004-broker-web-sso.md mark://soul.demarkus.io:6309/demarkus-library/plans/phase-1b-web-sso.md
mark://soul.demarkus.io:6309/demarkus-library/adr/0005-reading-room-spatial-trail.md mark://soul.demarkus.io:6309/demarkus-library/plans/reading-room.md
mark://soul.demarkus.io:6309/demarkus-library/adr/0006-reading-room-interaction-overlays.md mark://soul.demarkus.io:6309/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/adr/
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/adr/0001-echo-bulwarkauth-layout.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/adr/0002-hexagonal-architecture.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/adr/0003-htmx-ssr-philosophy.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/adr/0004-broker-web-sso.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/architecture.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/debt.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/debugging.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/journal/
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-10.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/plans/phase-1b-web-sso.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/demarkus-library/roadmap.md
mark://soul.demarkus.io:6309/demarkus-library/index.md mark://soul.demarkus.io:6309/plans/universe-library.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-10.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-11.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-12.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-13.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-14.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-15.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-18.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-19.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-20.md
mark://soul.demarkus.io:6309/demarkus-library/journal/ mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-23.md
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-10.md mark://soul.demarkus.io:6309/demarkus-library/roadmap.md
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-11.md mark://soul.demarkus.io:6309/demarkus-library/adr/0004-broker-web-sso.md
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-11.md mark://soul.demarkus.io:6309/demarkus-library/plans/phase-1b-web-sso.md
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-12.md mark://soul.demarkus.io:6309/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-12.md mark://soul.demarkus.io:6309/demarkus-library/plans/reading-room.md
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-19.md mark://soul.demarkus.io:6309/demarkus-library/adr/0006-reading-room-interaction-overlays.md
mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-19.md mark://soul.demarkus.io:6309/demarkus-library/roadmap.md
mark://soul.demarkus.io:6309/demarkus-library/plans/phase-1b-web-sso.md mark://soul.demarkus.io:6309/demarkus-library/adr/0004-broker-web-sso.md
mark://soul.demarkus.io:6309/demarkus-library/plans/phase-1b-web-sso.md mark://soul.demarkus.io:6309/demarkus-library/roadmap.md
mark://soul.demarkus.io:6309/demarkus-library/plans/phase-1b-web-sso.md mark://soul.demarkus.io:6309/journal/2026-06-11.md
mark://soul.demarkus.io:6309/demarkus-library/plans/phase-5-public-face.md mark://soul.demarkus.io:6309/plans/universe-library.md
mark://soul.demarkus.io:6309/demarkus-library/plans/reading-room.md mark://soul.demarkus.io:6309/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/adr/0006-reading-room-interaction-overlays.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/audit-2026-06-18.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/debugging.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-12.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-13.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-15.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/journal/2026-06-18.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/plans/phase-2-restricted-collections.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/plans/phase-3-cataloging-desk.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/plans/phase-5-public-face.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/plans/reader-mode.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/demarkus-library/plans/reading-room.md
mark://soul.demarkus.io:6309/demarkus-library/roadmap.md mark://soul.demarkus.io:6309/plans/universe-library.md
mark://soul.demarkus.io:6309/ecosystem.md mark://soul.demarkus.io:6309/plans/claude-code-plugin.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/architecture.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/completed-plans.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/conventions.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/debt.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/debugging.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/demarkus-knowledge-system-deploy/index.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/demarkus-library/index.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/demarkus-library/roadmap.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/ecosystem.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/faq.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/guide.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/guidelines.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/journal/
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/patterns.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/broker-auth-code-grant.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/broker-deadcode-cleanup.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/broker-https-gateway.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/broker-stable-mint.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/claude-code-plugin.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/conflict-merge.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/content-addressing.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/federation.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/information-graph.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/knowledge-ingestion.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/knowledge-system-gke-deploy.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/lookup-verb.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/obsidian-plugin.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/persistent-graph.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/plugin-knowledge-quality.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/poc-deployment.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/read-auth.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/search-verb.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/security-hardening.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/universe-deployment.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/universe-library.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/universe-onboarding-pr3.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/universe-onboarding-pr4.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/universe-onboarding-pr5.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/universe-onboarding.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plans/versions-sharding.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/plugins/obsidian/index.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/roadmap.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/thoughts.md
mark://soul.demarkus.io:6309/index.md mark://soul.demarkus.io:6309/universe.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-02-24.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-02-26.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-02-28.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-01.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-02.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-03.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-04.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-05.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-06.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-07.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-08.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-11.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-14.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-16.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-03-19.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-04-08.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-04-21.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-04-24.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-04-26.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-05.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-11.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-12.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-13.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-14.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-15.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-20.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-21.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-22.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-23.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-26.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-27.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-28.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-30.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-05-31.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-01.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-02.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-03.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-06.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-08.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-11.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-12.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-16.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-17.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-21.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-22.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-23-pi-plugins.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-23.md
mark://soul.demarkus.io:6309/journal/ mark://soul.demarkus.io:6309/journal/2026-06-25.md
mark://soul.demarkus.io:6309/journal/2026-02-24.md mark://soul.demarkus.io:6309/architecture.md
mark://soul.demarkus.io:6309/journal/2026-02-24.md mark://soul.demarkus.io:6309/debugging.md
mark://soul.demarkus.io:6309/journal/2026-02-24.md mark://soul.demarkus.io:6309/patterns.md
mark://soul.demarkus.io:6309/journal/2026-02-24.md mark://soul.demarkus.io:6309/roadmap.md
mark://soul.demarkus.io:6309/journal/2026-04-26.md mark://soul.demarkus.io:6309/universe.md
mark://soul.demarkus.io:6309/journal/2026-05-20.md https://modelcontextprotocol.io/specification/2025-03-26/basic/transports
mark://soul.demarkus.io:6309/journal/2026-05-28.md mark://soul.demarkus.io:6309/plans/broker-stable-mint.md
mark://soul.demarkus.io:6309/journal/2026-06-01.md mark://soul.demarkus.io:6309/plans/plugin-knowledge-quality.md
mark://soul.demarkus.io:6309/journal/2026-06-03.md mark://soul.demarkus.io:6309/patterns.md
mark://soul.demarkus.io:6309/journal/2026-06-11.md mark://soul.demarkus.io:6309/demarkus-library/plans/phase-1b-web-sso.md
mark://soul.demarkus.io:6309/journal/2026-06-16.md mark://soul.demarkus.io:6309/plans/knowledge-ingestion.md
mark://soul.demarkus.io:6309/patterns.md mark://soul.demarkus.io:6309/architecture.md
mark://soul.demarkus.io:6309/patterns.md mark://soul.demarkus.io:6309/plans/lookup-verb.md
mark://soul.demarkus.io:6309/plans/external-links.md https://github.com/latebit-io/demarkus/issues/75
mark://soul.demarkus.io:6309/plans/knowledge-system-gke-deploy.md https://github.com/latebit-io/demarkus-knowledge-system-deploy
mark://soul.demarkus.io:6309/plans/knowledge-system-gke-deploy.md mark://soul.demarkus.io:6309/plans/universe-deployment.md
mark://soul.demarkus.io:6309/plans/knowledge-system-gke-deploy.md mark://soul.demarkus.io:6309/plans/universe-onboarding.md
mark://soul.demarkus.io:6309/plans/lookup-verb.md https://github.com/latebit-io/demarkus/issues/113
mark://soul.demarkus.io:6309/plans/universe-library.md mark://soul.demarkus.io:6309/demarkus-library/plans/phase-5-public-face.md
mark://soul.demarkus.io:6309/plugins/obsidian/index.md https://github.com/latebit-io/obsidian-demarkus
mark://soul.demarkus.io:6309/plugins/obsidian/index.md mark://soul.demarkus.io:6309/plugins/obsidian/plan.md
mark://soul.demarkus.io:6309/roadmap.md https://github.com/latebit-io/demarkus/issues/113
mark://soul.demarkus.io:6309/roadmap.md https://github.com/latebit-io/demarkus/issues/75
mark://soul.demarkus.io:6309/roadmap.md mark://soul.demarkus.io:6309/plans/claude-code-plugin.md
mark://soul.demarkus.io:6309/roadmap.md mark://soul.demarkus.io:6309/plans/external-links.md
mark://soul.demarkus.io:6309/roadmap.md mark://soul.demarkus.io:6309/plans/lookup-verb.md
mark://soul.demarkus.io:6309/roadmap.md mark://soul.demarkus.io:6309/plans/security-hardening.md
mark://soul.demarkus.io:6309/roadmap.md mark://soul.demarkus.io:6309/plans/universe-deployment.md
mark://soul.demarkus.io:6309/thoughts.md https://github.com/gszhangwei/open-spdd
mark://soul.demarkus.io:6309/universe.md https://demarkus.io/blog/creating-an-automated-knowledge-universe/
mark://soul.demarkus.io:6309/universe.md mark://soul.demarkus.io:6309/architecture.md
mark://soul.demarkus.io:6309/universe.md mark://soul.demarkus.io:6309/ecosystem.md
mark://soul.demarkus.io:6309/universe.md mark://soul.demarkus.io:6309/roadmap.md
soul.demarkus.io:6309/plans/versions-sharding.md complete reader meta

Versions Directory Sharding

Context

All version files for documents in a given directory share a single flat versions/ subdirectory. A frequently-edited document or a directory with many documents accumulates thousands of files in one directory. findVersions() calls os.ReadDir() on the entire directory and filters by prefix, making it O(all entries) instead of O(document versions). This is the hot path — called on every Get, CurrentVersion, Write, and Versions request.

Scope

This is a server-side storage change only. The publish CLI and all other client commands are thin network wrappers — they send QUIC requests and never touch the versions directory. No client code changes needed.

Problem Dimensions

Two axes of growth compound in the flat layout:

  1. Many documents in one directory — 1000 docs x 50 versions = 50K entries
  2. Many versions of one document — 1 doc with 10K versions = 10K entries

Scaling Analysis

With per-document subdirectories, no operation scans the top-level versions/ directory:

Operation Current (flat) New (per-doc subdir)
findVersions("doc.md") ReadDir(versions/) scans ALL entries ReadDir(versions/doc.md/) scans only that doc
getVersion("doc.md", 3) Direct path: O(1) Direct path: O(1)
Write Create file in flat dir Create file in per-doc dir
BuildHashIndex Walks tree, skips versions/ Same — SkipDir skips entire subtree

Directory lookup for versions/{docname}/ is O(log n) on ext4 (htree) and APFS (B-tree):

  • 10K documents: ~14 comparisons. Negligible.
  • 100K documents: ~17 comparisons. Still negligible.

The one linear scan remaining is findVersions reading a single document's version directory. A document with 10K versions produces ~1ms of ReadDir. This matches the current best case and can be addressed with version-range bucketing later if ever needed.

Options Considered

versions/
  doc.md/
    v1
    v2
    v3
  other.md/
    v1
    v2

Symlink: versions/doc.md/v3

Pros: Eliminates cross-product, findVersions scoped to one doc, simple naming. Cons: Extra directory per document, migration needed.

B: Name-Prefix Sharding

versions/
  do/
    doc.md.v1
    doc.md.v2
  ot/
    other.md.v1

Pros: Spreads entries across shard buckets. Cons: Uneven distribution, does NOT help many-versions-of-one-doc, findVersions still scans shard dir.

C: Version-Range Bucketing

versions/
  doc.md/
    v0001-1000/
      v1 ... v1000
    v1001-2000/
      v1001 ...

Pros: Caps leaf directories at fixed size. Cons: Overkill for typical use (< 100 versions), findVersions must merge across buckets, cross-bucket complexity in chain verification.

Plan: Option A with Lazy Migration

New Layout

root/
  doc.md              → versions/doc.md/v3
  versions/
    doc.md/
      v1
      v2
      v3

Migration Strategy

Zero-downtime, lazy migration. Existing installs keep working immediately after upgrade:

  • Reads detect which layout a document uses and handle both transparently
  • Writes trigger migration of that document to the new layout before writing the new version
  • New documents always use the new layout
  • The pattern already exists in the codebase (migrateFlatFile at line 1087 of store.go)
  • Optional: batch migration CLI command for proactive migration of existing stores

Implementation

Step 1: Extract path helpers (pure refactor)

Add two functions in store.go:

func versionFilePath(versionsDir, base string, version int) string {
    return filepath.Join(versionsDir, base, fmt.Sprintf("v%d", version))
}

func versionSymlinkTarget(base string, version int) string {
    return filepath.Join("versions", base, fmt.Sprintf("v%d", version))
}

Update all 12 call sites. Initially produce OLD layout paths — pure refactor, no behavior change.

Step 2: Add layout detection

func isPerDocLayout(versionsDir, base string) bool {
    info, err := os.Stat(filepath.Join(versionsDir, base))
    return err == nil && info.IsDir()
}

Step 3: Update helpers to use new layout

  • Writes always create per-document subdirectory and use new layout
  • Reads detect which layout exists and handle both

Step 4: Update findVersions

New layout: os.ReadDir(filepath.Join(versionsDir, base)) — reads only that document's versions, parses v{N} names. Old layout: falls back to current scan-and-filter logic.

Step 5: Add migrateToPerDocDir

Modeled on existing migrateFlatFile. Called from Write before creating new version when old layout detected:

  1. Create versions/{base}/ directory
  2. Move all {base}.v{N} files into versions/{base}/v{N}
  3. Update symlink atomically

Step 6: Verify BuildHashIndex

Currently skips versions/ via filepath.SkipDir. This already skips the entire subtree — no change needed.

Files to Modify

  • server/internal/store/store.go — path helpers, layout detection, migration, findVersions
  • server/internal/store/store_test.go — tests for both layouts, migration, mixed layout coexistence

Verification

  1. Run existing tests after Step 1 refactor — must all pass with no behavior change
  2. Add tests for new layout: write, read, findVersions, getVersion, verifyChain, archive
  3. Add test for migration: create documents in old layout, trigger write, verify files moved
  4. Add test for mixed layout: old and new layout documents coexist in same directory
  5. Run bash pre-commit.sh
  6. Manual smoke test: start server with existing content, publish a document, verify new layout

COMPLETE — shipped the day it was written

Implemented in PR #90 (d7cb68a, merged 2026-04-08) — per-document versions/{base}/v{N} subdirectories with lazy migration and flat-layout read fallback, per Option A above. The store was later hoisted from server/internal/store to protocol/store (#120), where isPerDocLayout / resolveVersionFile live today.

Record correction (2026-07-05): the soul index listed this plan as "fully specced; no code yet, unstarted" from a 2026-05-31 verification pass that missed #90 — likely because the plan doc carried no completion stamp (this section now closes that gap) and the commit says feat(filestore) while the plan says "sharding".

trail
  1. soul.demarkus.io v6
  2. soul.demarkus.io:6309 versions-sharding