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

Document Graph

Exported: 2026-06-26T12:15:06Z Nodes: 133 Edges: 186

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 0
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 0
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-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/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/broker-stable-mint.md complete reader meta

Broker — Lazy Token Provisioning + Cache-Stable Retries

Context

Today the broker rotates per-world demarkus tokens on every /auth/callback and /me/install call AND on every 401 retry inside dispatchWithAuth. Combined with kubelet's Secret-projection lag (~30-40s on GKE), the result is ~20 tokens written to the world's tokens.toml in 78 seconds during one user session, almost all of which fail before kubelet propagates any of them, producing the user-visible "broker: world rejected freshly-minted token after N attempts" failure.

The fsnotify watcher (PR #158) reduced the world-side reload floor from "never without SIGHUP" to "kubelet sync interval," but propagation lag is still the bottleneck.

Network shape (confirmed 2026-05-27): in knowledge.demarkus.io, world-a is not exposed outside the cluster. The broker is the only public ingress. Combined with requireAuth re-validating the OIDC bearer on every MCP request, this means SSO removal at the IdP = no path to the world's data plane. The broker's per-world demarkus tokens can therefore be a pure internal implementation detail; the client never needs to hold them.

The broker structurally cannot return the same raw token twice (issuer.go:40-43: "Raw token material is never recorded here"). So "tokens don't change on next join" is satisfied not by stable-token-recall but by not minting at join time at all.

Design

Two changes, both small, both targeted at the bug they fix:

1. Lazy provisioning

/me/install and /auth/callback stop calling Issuer.Mint*. They become identity-confirm endpoints: verify the bearer, list the worlds the caller passes worldAllows against, return {email, worlds: [...]}. No tokens in the response.

Minting moves to the place it has to happen anyway: the dispatch path's sessionCache miss in dispatchWithAuth. The first mark_* call to a given world from a given broker pod mints, writes the world Secret, populates the cache. Subsequent calls cache-hit.

Consequence: kubelet-lag is hit at most once per (broker-pod, user, world) triple — only on the first dispatch after a cold cache. Pod restarts re-warm lazily on first call. For HPA-heavy deployments where this becomes painful, a startup pre-warm is a follow-on; not in this slice.

2. Cache-stable retries

dispatchWithAuth currently calls sessionCache.Invalidate(...) + GetOrMint(...) inside its 401 retry loop, which re-mints on every iteration. That's the cascade producing ~20 junk tokens per first-call burst.

The retry loop was meant to wait for the freshly-minted token to become recognized by the world after kubelet projects the Secret update — not to re-mint each tick. The fix is:

  • On 401 after fresh-mint: sleep the backoff, retry the same cached token. No Invalidate, no re-mint.
  • On 401 after cache-hit (token was cached but world rejected): a genuine rotation race — Invalidate once, mint once, retry the new token. Bound this to a single rotation per request.
  • Only after the budget exhausts entirely does the request error out.

Why this is small

  • No new protocol surface on the world.
  • No probe-during-mint, no sidecar, no encrypted-at-rest token storage.
  • No client-side token-shape changes (~/.mark/tokens.toml and DEMARKUS_AUTH keep working for the direct-QUIC personal-soul flow; only the knowledge-system endpoints change).
  • No data migration: existing issuances on the live cluster are still consulted by Revoke/List/RotateLabel; they just stop accumulating fresh entries per-join.

Slices

Slice 1 — Lazy provisioning (smallest)

  • /me/install (install.go): replace MintFiltered call with a pure authorizedWorlds + keep filter; drop accessToken from response struct; return {email, worlds: [...]}.
  • /auth/callback device path (device.go) and auth-code path (oauth_authorize.go / wherever the new RFC 6749 handler shipped in #156 lives): same shape change.
  • Tests: handlers return identity + worlds without invoking the issuer; verify no Secret writes happen during these flows on the test k8s client.

Slice 2 — Cache-stable retries

  • dispatchWithAuth (mcp_tools_read.go:147-211) — restructure so the retry loop does NOT re-mint on every 401 from a freshly-minted token; reserve Invalidate+re-mint for one cache-hit-rejection per request.
  • The FirstMintMaxAttempts knob now governs propagation waits, not mint cascades.
  • Tests: simulate world returning N consecutive 401s on a fresh-mint token, then 200; confirm exactly one mint, N+1 dispatch attempts, success.

Slice 3 (deferred — only if needed)

  • Shrink FirstMintMaxAttempts and FirstMintMaxBackoff once Slices 1+2 land and we observe the new behavior in the field. Not blocking.

Out of scope (deliberately)

  • Access-change propagation via tokens.toml metadata rewrites. requireAuth-claims-check is the source of truth for revocation; the world's tokens.toml just needs to recognize the token, the broker decides whether it should be honored.
  • Background sweeper changes. Sweeper still has work to do for genuine rotations and orphans.
  • Pre-warming sessionCache at broker startup. Future optimization if HPA churn shows a problem.

Status

  • 2026-05-27 — Plan v2 published, simpler model than v1. Starting Slice 1.
  • PR #158 (fsnotify watcher) open, prerequisite for any field improvement but not a code-level dependency for these slices.

Follow-up cleanup (next) — dead DefaultToken knobs

After the per-world write-token model + full issuance-subsystem retirement landed (PR #164, branch refactor/broker-retire-issuance-subsystem), two WorldConfig.DefaultToken fields are now no-op knobs:

  • operations — worldWriteTokenStore.Provision hardcodes ["publish"] regardless of config (deliberate, so open-reads can't regress via a stray "read"; see #163 and the comment in world_write_tokens.go). Already documented as "kept but ignored."
  • expiresAfter — was only consumed by the removed mintForWorld. Provision sets Expires: "" (long-lived) and reads use no token, so nothing reads it now.

Both currently sit as validated-but-ignored config (chart comments updated in #164 to say so). They're a footgun for the same reason the /tokens API was: operator-facing knobs that silently do nothing.

Task: remove expiresAfter (and decide on operations) from WorldConfig.DefaultToken in config.go + its validation/defaults, the worlds[].defaultToken.* example in the broker chart values.yaml, and any config_test cases. Small standalone change — no behavior change since they're already ignored. Keep paths (still consumed by Provision).

Open question: whether to drop operations too or keep it as an explicit "this is always publish" marker. Lean toward removing both for honesty; if kept, the config struct should reject any value other than ["publish"] rather than silently ignoring it.

Status — COMPLETE (verified 2026-05-31)

All three slices plus the named follow-up shipped and verified in tools/demarkus-broker (broker tests green, run fresh).

  • Lazy per-world provisioning (#159, #164): worldWriteTokenStore.Provision mints once per world (Secret + world tokens.toml + in-memory cache); subsequent calls hit Get. /me/install reduced to a pure identity-confirm endpoint — no minting, no accessToken in the response.
  • Cache-stable retries (#159): dispatchWithAuth provisions once before the loop, then retries the same token on 401 with backoff (FirstMint* knobs). No re-mint inside the loop — the ~20-token mint cascade is structurally impossible. Regression test TestWriteHandlersInheritPropagationRaceRetry confirms exactly 2 dispatch attempts on one 401.
  • Dead-knob follow-up (#163, #165): TokenScope now carries only Paths; operations/expiresAfter removed; operations hardcoded to ["publish"], Expires empty (long-lived). rg expiresAfter → zero hits.

Design simplified beyond the plan to one long-lived write token per world (reads dispatch open to any SSO identity); deliberate, not a gap. PRs: #158, #159, #163, #164, #165.

trail
  1. soul.demarkus.io v5
  2. soul.demarkus.io:6309 broker-stable-mint