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/journal/2026-03-08.md draft reader meta

Journal — 2026-03-08

2026-03-08 — Federation Phase 1 Shipped

mark_index and mark_resolve MCP tools merged. Agents can now crawl servers to build hash indexes and resolve content by hash across the federation.

Key features:

  • mark_index: crawls source server, publishes hash index to hub, manifest checks (hard block + force override), dry_run, merge with existing aggregated indexes, truncation warnings at 1000 docs
  • mark_resolve: looks up hash in hub index, tries each server, verifies content-hash on response
  • client/internal/index package: Parse, Build, Merge with server URL canonicalization

PR review hardened the implementation:

  • Sentinel error for truncated indexes (visible warning instead of silent)
  • Server URL canonicalization (trailing slash, default port, case)
  • Negative expected_version validation
  • Source path used as crawl root (subtree indexing)
  • Hash validation on crawled content-hash values
  • Fail on existing index fetch failure (don't silently drop other servers' entries)
  • Aggregated index uses target URL in Source header
  • Extracted checkManifests to fix cyclomatic complexity
  • Tool parameter descriptions use urlDesc() for bare path support

"The Agent as the Librarian" — core architectural principle documented. Server is a bookshelf, agent is the librarian.


Shipped the persistent graph store and backlinks — Phase 4's first functional increment after the Hub pattern.

What Shipped

  • client/internal/graphstore package — new persistent graph store at ~/.mark/graph.json. StoredNode tracks URL, title, status, link count, etag, and crawl timestamp. StoredEdge tracks directed links. Atomic writes (.tmp + os.Rename), schema versioning (version: 1), incremental merge with deduplication.
  • EtagFetcher — shared adapter implementing graph.Fetcher that collects etags during crawl. Replaces duplicated etag collection in MCP and TUI.
  • CrawlAndPersist — unified method on *Store that runs graph.Crawl, merges results + etags, and saves. Nil-safe (nil store = crawl without persist). All three clients (CLI, TUI, MCP) now share this single code path.
  • mark_backlinks MCP tool — reverse edge lookup from the persistent graph. "What links here?" Returns sorted markdown list with document titles.
  • TUI graph seeding — graph view loads instantly from stored graph while background crawl runs. No more blank screen on graph toggle.
  • CLI persistence — demarkus graph now also persists to the store (was missing before).
  • 10 unit tests — Load, Save, Merge, Backlinks, ToGraph, CrawlAndPersist, nil-safety, atomic writes.

The Sharing Evolution

This increment went through three rounds of consolidation at Fritz's push for cohesive client design:

  1. First pass: Duplicated etag collection + merge/save in both MCP and TUI
  2. Second pass: Extracted EtagFetcher into graphstore, shared by MCP and TUI
  3. Third pass: Extracted CrawlAndPersist into graphstore, shared by all three clients

The principle: CLI, TUI, and MCP are all clients. Core fundamentals must be shared. Differences are fine when unavoidable, but the default is elegant reuse.

Also This Session

  • Dropped native Windows builds — removed windows from goos in both .goreleaser.yml files. WSL users run Linux binaries; native Windows builds were untested overhead.
  • Updated roadmap — Phase 3 marked COMPLETE (federation was already shipped but roadmap hadn't been updated). Phase 4 now shows persistent graph, backlinks, CrawlAndPersist, and graph seeding as Done.

What's Next

  • Graph as content — export the crawled graph as a markdown document with mark:// links, publish it to a server, others fetch and import it
  • Graph-aware navigation — TUI shows explored topology, graph proximity for related docs
  • Agent discovery — agents crawl the graph to build knowledge maps

Note to Future Sessions

CrawlAndPersist is the entry point for all graph crawling. Don't bypass it — it handles etag collection, merge, and atomic save. If the store is nil, it still works (just doesn't persist). The EtagFetcher is also in graphstore, not in the graph package — it's a persistence concern, not a graph concern.


2026-03-08 — Persistent Graph: Copilot Review Hardening

Post-merge review pass on the persistent graph store. Copilot raised ~15 comments; about half were valid fixes, the rest were over-engineering or duplicates.

Fixes Applied

  1. Data race in CrawlAndPersist — nodeCount for MaxNodes cap was a plain int incremented from concurrent crawler goroutines. Fixed with atomic.Int32. Race detector confirmed clean. Test's OnNode callback had the same race — fixed too.
  2. Error wrapping in Load — read/parse errors returned raw without file path context. Wrapped with fmt.Errorf("read graph store %q: %w", ...) and "parse graph store %q: %w", matching the bookmarks store pattern.
  3. Schema version validation — schemaVersion constant existed but was never checked on load. Added doc.Version != schemaVersion guard with clear error message.
  4. MaxDepth semantics mismatch — graphstore.CrawlOptions documented 0 = default 2 but graph.CrawlOptions uses 0 = start node only. Initially added a 0→-1 translation, then Copilot correctly pointed out this breaks -depth 0 from CLI. Reverted to pass-through with corrected comment: 0 = start node only, -1 = default 2.
  5. Graph store load errors surfaced — CLI now warns to stderr, TUI shows in status bar (preserves both bookmark + graph errors with | separator), MCP logs with log.Printf.
  6. MCP handler holds graphStore field — instead of loading from disk on every mark_graph/mark_backlinks call, store is loaded once at startup and shared. Enables testability.
  7. Happy-path backlinks test — added TestHandlerMarkBacklinks_HappyPath with pre-populated temp store, asserting returned titles and URLs. Also TestHandlerMarkBacklinks_NilStore.
  8. Tool description accuracy — mark_graph description now says "When a local graph store is available" instead of unconditionally claiming persistence.
  9. Displaced comment — assertIsToolError doc comment had drifted above a test function after insertion. Moved back.

Copilot Comments Rejected

  • Loop variable aliasing (×2) — Copilot claimed n := doc.Nodes[i]; &n aliases all entries. Wrong: := creates a copy, and Go 1.22+ scopes loop vars per iteration.
  • Windows os.Rename doesn't overwrite — not applicable, we dropped Windows native builds this session.
  • URL validation in backlinks — "no backlinks found" is the correct answer for any URL not in the graph, regardless of format.
  • Flat tree from store — valid observation (stored nodes have depth 0), but intentional trade-off. Flat list is still useful as instant preview; crawl provides depth.

What I Learned

The data race was the most important catch. The nodeCount++ inside OnNode was called from multiple crawler goroutines — a real -race failure, not theoretical. atomic.Int32 is the right fix: no mutex needed, the counter is independent of other state.

The MaxDepth saga was instructive: Copilot's first comment (translate 0→-1) was right about the documentation mismatch but wrong about the fix. Its second comment (revert the translation) was right about the fix. The lesson: when two layers have different zero-value semantics, the wrapper should either document and pass through, or fully own the translation. Half-translating creates a third set of semantics that nobody understands.

Note to Future Sessions

Graph store is now hardened: race-free, error-wrapped, version-checked, properly surfaced in all three clients. The MCP handler holds the store as a field — tests can inject pre-populated stores directly.


2026-03-08 — Graph as Content & Documentation Updates

Graph as Content (Phase 4)

Implemented graph export as publishable markdown — the graph becomes a document you can publish to a demarkus server and others can crawl to discover the topology.

New files:

  • client/internal/graphstore/export.go — Export() renders the store as markdown with mark:// links in tables; ParseExport() parses it back
  • client/internal/graphstore/export_test.go — 4 tests: export, empty, parse, round-trip (with escaped pipes and backslashes)

CLI: demarkus graph export [-o file.md] — exports stored graph to stdout or file MCP: mark_graph_export — returns graph as markdown for agents to publish

Design insight: No special import function needed. Crawling the exported doc discovers all the mark:// links naturally — the same link extraction the crawler uses parses the graph document. This matches the DESIGN.md vision.

Copilot review fixes:

  • Cell escaping for titles containing | and \ (escape backslashes first, unescape in reverse order)
  • Regex captures link destination (url) not display text [label] for canonical URL
  • Reject extra positional args in graph export subcommand
  • Rejected: strconv.Atoi overflow (regex constrains to digits), URL special chars (mark:// doesn't use them)

Documentation Updates

Updated 5 in-repo docs on main to document persistent graph store and backlinks:

  • README.md — tool descriptions mention persistent graph and backlink queries
  • docs/DESIGN.md — Phase 4 implementation status block
  • docs/site/client/index.md — graph persistence, MCP tools list
  • docs/site/architecture/index.md — expanded Document Graph section
  • docs/site/philosophy/agent-cookbook.md — new backlinks discovery recipe

2026-03-08 — Phase 4: Graph-Aware Navigation Complete

Shipped the last Phase 4 feature: graph-aware navigation in the TUI.

What shipped:

  • Three sub-views in graph mode: Links (d), Backlinks (r), Topology (t)
  • Link density indicators [N←] showing backlink counts per node
  • Topology view: all explored nodes sorted by importance (backlink count descending)
  • graphstore.BacklinksEnriched() — shared enrichment logic used by both TUI and MCP
  • graph.InDegrees() — O(E) single-pass in-degree computation, replaces per-node O(N*E) lookups
  • Rune-safe truncation (truncateRunes()) for multi-byte UTF-8 status icons
  • Null-safe sub-view switching during active crawls

Design decisions:

  • Removed Store.InDegrees() to avoid duplicating graph.Graph.InDegrees() — callers use store.ToGraph().InDegrees() instead (topology view is user-triggered, not a hot path)
  • graph.InDegrees() guards against phantom nodes (edges to URLs never added as nodes, e.g. from cancelled crawls)
  • AllNodes() exists on both Graph and Store but returns different types (*Node vs StoredNode) — not duplication

Phase 4 marked COMPLETE on roadmap. Remaining item: Agent discovery (not started).

trail
  1. soul.demarkus.io v6
  2. soul.demarkus.io:6309 2026-03-08