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/demarkus-library/adr/0003-htmx-ssr-philosophy.md draft reader meta

ADR 0003 — SSR-first, htmx-hard, no JSON

promoted-via: knowledge promoted: mark://latebit/projects/demarkus-library/adr/0003-htmx-ssr-philosophy.md@v1

Status: accepted (2026-06-10). The load-bearing front-end principle for demarkus-library. Deliberately strict: we are pushing the hypermedia approach as far as it goes and treating every escape hatch as a tracked concession.

Decision

The application is hypermedia-driven (HATEOAS). The server renders HTML; htmx is the only general interaction layer; there is no JSON API and no client-side application state. This is not "SSR with some htmx" — it is htmx-hard: the default answer to any interaction is "return server-rendered HTML and swap it in."

The rules (hard)

  1. The server owns all rendering. Every response is HTML — a full page or a fragment built by html/template. The browser receives finished markup, never data to assemble. goldmark→bluemonday→template is the only render path.
  2. No JSON tier, ever. Handlers return HTML via c.Render/c.HTML, never c.JSON. No REST/JSON projection, no GraphQL, no serialized view models crossing the wire. (Health check returns plain text; that's the lone non-HTML response and it's not application data.)
  3. No client-side state. Application state lives on the server (session + the world). The DOM is the only client state, and the server is its source of truth. No stores, no client router, no reactivity layer.
  4. Interactivity is hx-* attributes. Navigation (hx-boost), search (hx-get debounced), version/panel swaps, pagination, forms (hx-post → PUBLISH) — all are htmx returning server-rendered fragments into a target. Reach for an attribute before a line of JS.
  5. Self-hosted assets. htmx is vendored in-repo and served from the Go binary (/static/htmx.min.js, pinned to the latest htmx — currently 4.0.0) — not a CDN. Single binary, no runtime dependency, no third-party origin, version pinned and reviewable. Keep it current: bump to the latest htmx release as they ship. (Embodied 2026-06-10.)
  6. Fragments are first-class. Templates are factored so the inner content block can render standalone (for an htmx swap) or inside the page chrome (full load). A fragment request and a full navigation hit the same handler and the same template — no duplicate rendering paths.
  7. Degrade without JS. Because the server renders every route in full, hx-boost navigation and form posts work with JS disabled. htmx is enhancement, never the renderer. Keep it that way: no interaction may be only reachable through htmx.

How far we push it (the experiment)

We will attempt the entire app as hypermedia before admitting any island:

  • Catalog search (LOOKUP): debounced hx-get, results as an HTML <table> to click through. No JSON, no client filtering.
  • Editions (VERSIONS) + citations (backlinks): fragment swaps into a panel.
  • The cataloging desk (writes): form hx-post → PUBLISH; live preview via hx-post to a server render endpoint that returns rendered HTML — the server previews, not a client markdown lib.
  • The AI librarian (Phase 4): streaming via SSE (htmx 4 first-party hx-sse) — a token stream and a live tool-call trace, still server-driven HTML over the wire.

JS islands — last resort, tracked

A real island (custom JS beyond htmx + its official extensions) is allowed ONLY when hypermedia genuinely cannot do the job, and each one is recorded as a concession in this ADR with the reason. Pre-agreed candidates from the plan:

  • CodeMirror — the editor textarea needs real code-editing affordances (Phase 3).
  • Canvas graph — force-directed citation graph (post-v1).

Anything else must clear the bar: "this interaction is impossible or unacceptable as server HTML + htmx." Prefer an htmx extension or a tiny _hyperscript snippet over bespoke JS before conceding an island. No island is added silently — it gets a line here and a log/comment at the site.

Conceded islands

  • mermaid (2026-06-12) — diagram rendering is client-side by nature (the server cannot rasterize mermaid without a headless browser, which is a far larger concession). Vendored mermaid.min.js 11.15.0; loaded lazily by islands.js only when a page contains a language-mermaid block; degrades to the readable source code block; render failure restores the source block.
  • KaTeX (2026-06-12) — math typesetting; same server-side rasterization argument. Vendored 0.17.0 (js + auto-render + css + woff2 fonts); loaded lazily on delimiter presence (\(…\) inline, $$…$$/\[…\] display — single-$ deliberately unsupported, dollar-amount false positives); degrades to readable TeX source. trust: false, throwOnError: false.
  • Both islands ride one tiny loader (/static/islands.js) that re-scans on htmx:after:settle so fragment swaps keep working. Server side, math is shielded from markdown by the goldmark passthrough extension; bluemonday still sanitizes everything (islands render from text content, never raw HTML).

Consequences

  • No Node build, no bundler, no SPA framework — fits demarkus's single-Go-binary ethos and makes Phase 5's shareable, server-rendered links free.
  • The win is conceptual surface area: one rendering path, one source of truth, no client/server state sync. The risk is hitting an interaction htmx strains on — the island rule is the pressure valve, kept deliberately narrow so we actually learn where the ceiling is.
  • .coderabbit.yaml enforces this on the web adapter: flag any c.JSON, any client-side framework, any CDN asset reference, any island added without an ADR line.

Vendored asset versions

  • htmx 2.0.10 (2026-06-10) — current latest; initial vendor. (Briefly 2.0.4 the same day before bumping to latest.)
  • mermaid 11.15.0 (2026-06-12) — islands concession above.
  • KaTeX 0.17.0 (2026-06-12) — islands concession above; woff2 fonts only (modern-browser format; the css's woff/ttf fallbacks 404 by design).

Conceded islands — Phase 4 (2026-07-03)

  • htmx SSE extension (sse.min.js 2.2.4, vendored + pinned beside htmx) — the pre-agreed streaming-librarian spend named in this ADR's experiment list. Declarative attributes only (sse-connect/sse-swap/ sse-close): the librarian pane's live answers stream trace/token/ rendered/done frames of server-rendered content into hx-swap targets — no hand-written EventSource code. Degrades: the ask form is a real POST that runs the ask server-side and PRG-redirects to the finished answer; SSE is enhancement, never the renderer.
  • Pane click-engagement toggle (2026-07-03, islands.js) — clicking into a pane moves the visual attention marker (an .engaged class) without touching the URL focus (which owns layout + the live read; re-focusing collapses panes and reads as navigation). Presentational-only: no fetch, no URL change, no client state, reset by the next server render — the same register as the graph hover-highlight. htmx attributes cannot express click-scoped CSS toggling; without JS the server-truth focus marker stands.

Related non-island notes: the reader-overlay Esc handler, palette glue, and overlay summon/dismiss already ride islands.js under ADR 0005/0006 grants; the transcript's bottom-anchored chat scroll is pure CSS (column-reverse), deliberately NOT an island.

Vendored asset versions (continued)

  • htmx-ext-sse 2.2.4 (2026-07-02) — SSE island above.

htmx 4 upgrade (2026-09-09)

  • htmx 4.0.0 (released 2026-08-28; npm tag next, latest stays 2.x until early 2027) replaces 2.0.10. Vendored dist/htmx.min.js; the SSE extension is now first-party (dist/ext/hx-sse.min.js, vendored as /static/hx-sse.min.js, replaces htmx-ext-sse 2.2.4). Extensions load by script inclusion; hx-ext is gone.
  • Inheritance is explicit: <body hx-boost:inherited="true">; child hx-boost="false" still wins (own attribute checked first).
  • History has no DOM cache: back/forward re-fetch the URL with HX-Request: true + HX-History-Restore-Request: true (no HX-Boosted) and swap the body. wantsFragment in reading_handlers.go treats that as a full-page request; without it the back button swapped a bare fragment into the body.
  • SSE vocabulary rewired: htmx 4 swaps only unnamed SSE frames; named events become DOM events (sse-swap removed). trace/token/rendered now go out unnamed as <hx-partial hx-target="find .ask-…" hx-swap="…"> (targets resolve relative to the connecting block, so no ids); answer/done stay named, hx-sse:close="done" closes. See sseFrame in librarian_stream.go.
  • Error responses swap by default in 4; kept the htmx 2 rule via <meta name="htmx-config" content='{"noSwap":[204,304,"4xx","5xx"]}'> because Echo's default error body is JSON. Follow-up: render HTML error fragments, then drop the meta and let 4xx/5xx swap.
  • Events renamed: islands.js listens for htmx:after:settle (on document); hx-on::after-request became hx-on::after:request.
  • 60s default request timeout is new; hx-sse clears it once the stream responds, so long answers are unaffected.
  • htmx.ajax("GET", url, "#selector") still valid; next <selector> targets, delay:/once/changed triggers, hx-headers JSON, HX-Request/HX-Boosted/HX-Current-URL/HX-Redirect all unchanged.
  • Official checker: npx htmx.org@4.0.0 upgrade-check -- ./internal/adapter/inbound/web/templates. Its edit.html hx-headers warning is a false positive (the header sits on the requesting textarea itself).

htmx 4 upgrade, live-test corrections (2026-09-09)

  • Error handling moved off the htmx-config meta: noSwap short-circuits before hx-status, and a boosted 404 click still pushed the URL. Now every body carries {{template "hx-body"}} (page.html): hx-boost:inherited="true" hx-status:4xx:inherited="swap:none push:false" hx-status:5xx:inherited="swap:none push:false". Verified in Chrome: 404 link leaves URL and panes untouched, no JSON in body.
  • Verified end to end with Playwright against Google Chrome (channel: 'chrome', no Chrome extension needed): boosted nav sends HX-Boosted, back sends HX-History-Restore-Request and gets the full page without reload, preview cards, ⌃K palette, librarian SSE (hx-partial frames swap <p>pong</p>, hx-on::after:request resets the form).
  • Pre-existing, NOT a regression: document-body links wrapped by the hover preview carry hx-get on the <a> itself, so neither htmx 2 nor 4 boosts them (a click is a full page load). Fix candidate: move the preview attributes onto the .preview-host span (hx-trigger="mouseenter delay:300ms once", hx-target="find .preview-card") so the anchor stays boostable.
  • Drive scripts live in the session scratchpad (pw/drive.js, compare.js, status.js); worth turning into a project run skill.

Conceded island — copy mark:// address (2026-10-20, #94)

  • Clipboard copy (islands.js wakeCopy/copyAddress) — an icon beside the address in every pane head and edit meta line copies the document's mark://{world}{path}; c does the same for the focused pane and carries a same-pane #fragment along; a clone on each body heading copies that section's #anchor. The clipboard is the one thing a server cannot write, so no hypermedia form of this exists. Pure client affordance over text the server already rendered: no endpoint, no JSON, no state. Degrades: the button ships hidden and only JS wakes it, so without JS the address is plain selectable text and no dead control renders. Prerequisite landed in the markdown adapter, not the island: heading ids from mdoutline.Headings so page fragments and protocol anchors agree.
trail
  1. soul.demarkus.io v6
  2. soul.demarkus.io:6309 0003-htmx-ssr-philosophy