Restructure SX docs nav into 4 top-level sections with nested routing

New hierarchy: Geography (Reactive Islands, Hypermedia Lakes, Marshes,
Isomorphism), Language (Docs, Specs, Bootstrappers, Testing),
Applications (CSSX, Protocols), Etc (Essays, Philosophy, Plans).

All routes updated to match: /reactive/* → /geography/reactive/*,
/docs/* → /language/docs/*, /essays/* → /etc/essays/*, etc.
Updates nav-data.sx, all defpage routes, API endpoints, internal links
across 43 files. Enhanced find-nav-match for nested group resolution.

Also includes: page-helpers-demo sf-total fix (reduce instead of set!),
rebootstrapped sx-browser.js and sx_ref.py, defensive slice/rest guards.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 18:50:31 +00:00
parent 0174fbfea3
commit 4d54be6b6b
43 changed files with 813 additions and 746 deletions

View File

@@ -3,232 +3,230 @@
;; @css aria-selected:bg-violet-200 aria-selected:text-violet-900
(define docs-nav-items (list
(dict :label "Introduction" :href "/docs/introduction")
(dict :label "Getting Started" :href "/docs/getting-started")
(dict :label "Components" :href "/docs/components")
(dict :label "Evaluator" :href "/docs/evaluator")
(dict :label "Primitives" :href "/docs/primitives")
(dict :label "Special Forms" :href "/docs/special-forms")
(dict :label "Server Rendering" :href "/docs/server-rendering")))
(dict :label "Introduction" :href "/language/docs/introduction")
(dict :label "Getting Started" :href "/language/docs/getting-started")
(dict :label "Components" :href "/language/docs/components")
(dict :label "Evaluator" :href "/language/docs/evaluator")
(dict :label "Primitives" :href "/language/docs/primitives")
(dict :label "Special Forms" :href "/language/docs/special-forms")
(dict :label "Server Rendering" :href "/language/docs/server-rendering")))
(define reference-nav-items (list
(dict :label "Attributes" :href "/hypermedia/reference/attributes")
(dict :label "Headers" :href "/hypermedia/reference/headers")
(dict :label "Events" :href "/hypermedia/reference/events")
(dict :label "JS API" :href "/hypermedia/reference/js-api")))
(dict :label "Attributes" :href "/geography/hypermedia/reference/attributes")
(dict :label "Headers" :href "/geography/hypermedia/reference/headers")
(dict :label "Events" :href "/geography/hypermedia/reference/events")
(dict :label "JS API" :href "/geography/hypermedia/reference/js-api")))
(define protocols-nav-items (list
(dict :label "Wire Format" :href "/protocols/wire-format")
(dict :label "Fragments" :href "/protocols/fragments")
(dict :label "Resolver I/O" :href "/protocols/resolver-io")
(dict :label "Internal Services" :href "/protocols/internal-services")
(dict :label "ActivityPub" :href "/protocols/activitypub")
(dict :label "Future" :href "/protocols/future")))
(dict :label "Wire Format" :href "/applications/protocols/wire-format")
(dict :label "Fragments" :href "/applications/protocols/fragments")
(dict :label "Resolver I/O" :href "/applications/protocols/resolver-io")
(dict :label "Internal Services" :href "/applications/protocols/internal-services")
(dict :label "ActivityPub" :href "/applications/protocols/activitypub")
(dict :label "Future" :href "/applications/protocols/future")))
(define examples-nav-items (list
(dict :label "Click to Load" :href "/hypermedia/examples/click-to-load")
(dict :label "Form Submission" :href "/hypermedia/examples/form-submission")
(dict :label "Polling" :href "/hypermedia/examples/polling")
(dict :label "Delete Row" :href "/hypermedia/examples/delete-row")
(dict :label "Inline Edit" :href "/hypermedia/examples/inline-edit")
(dict :label "OOB Swaps" :href "/hypermedia/examples/oob-swaps")
(dict :label "Lazy Loading" :href "/hypermedia/examples/lazy-loading")
(dict :label "Infinite Scroll" :href "/hypermedia/examples/infinite-scroll")
(dict :label "Progress Bar" :href "/hypermedia/examples/progress-bar")
(dict :label "Active Search" :href "/hypermedia/examples/active-search")
(dict :label "Inline Validation" :href "/hypermedia/examples/inline-validation")
(dict :label "Value Select" :href "/hypermedia/examples/value-select")
(dict :label "Reset on Submit" :href "/hypermedia/examples/reset-on-submit")
(dict :label "Edit Row" :href "/hypermedia/examples/edit-row")
(dict :label "Bulk Update" :href "/hypermedia/examples/bulk-update")
(dict :label "Swap Positions" :href "/hypermedia/examples/swap-positions")
(dict :label "Select Filter" :href "/hypermedia/examples/select-filter")
(dict :label "Tabs" :href "/hypermedia/examples/tabs")
(dict :label "Animations" :href "/hypermedia/examples/animations")
(dict :label "Dialogs" :href "/hypermedia/examples/dialogs")
(dict :label "Keyboard Shortcuts" :href "/hypermedia/examples/keyboard-shortcuts")
(dict :label "PUT / PATCH" :href "/hypermedia/examples/put-patch")
(dict :label "JSON Encoding" :href "/hypermedia/examples/json-encoding")
(dict :label "Vals & Headers" :href "/hypermedia/examples/vals-and-headers")
(dict :label "Loading States" :href "/hypermedia/examples/loading-states")
(dict :label "Request Abort" :href "/hypermedia/examples/sync-replace")
(dict :label "Retry" :href "/hypermedia/examples/retry")))
(dict :label "Click to Load" :href "/geography/hypermedia/examples/click-to-load")
(dict :label "Form Submission" :href "/geography/hypermedia/examples/form-submission")
(dict :label "Polling" :href "/geography/hypermedia/examples/polling")
(dict :label "Delete Row" :href "/geography/hypermedia/examples/delete-row")
(dict :label "Inline Edit" :href "/geography/hypermedia/examples/inline-edit")
(dict :label "OOB Swaps" :href "/geography/hypermedia/examples/oob-swaps")
(dict :label "Lazy Loading" :href "/geography/hypermedia/examples/lazy-loading")
(dict :label "Infinite Scroll" :href "/geography/hypermedia/examples/infinite-scroll")
(dict :label "Progress Bar" :href "/geography/hypermedia/examples/progress-bar")
(dict :label "Active Search" :href "/geography/hypermedia/examples/active-search")
(dict :label "Inline Validation" :href "/geography/hypermedia/examples/inline-validation")
(dict :label "Value Select" :href "/geography/hypermedia/examples/value-select")
(dict :label "Reset on Submit" :href "/geography/hypermedia/examples/reset-on-submit")
(dict :label "Edit Row" :href "/geography/hypermedia/examples/edit-row")
(dict :label "Bulk Update" :href "/geography/hypermedia/examples/bulk-update")
(dict :label "Swap Positions" :href "/geography/hypermedia/examples/swap-positions")
(dict :label "Select Filter" :href "/geography/hypermedia/examples/select-filter")
(dict :label "Tabs" :href "/geography/hypermedia/examples/tabs")
(dict :label "Animations" :href "/geography/hypermedia/examples/animations")
(dict :label "Dialogs" :href "/geography/hypermedia/examples/dialogs")
(dict :label "Keyboard Shortcuts" :href "/geography/hypermedia/examples/keyboard-shortcuts")
(dict :label "PUT / PATCH" :href "/geography/hypermedia/examples/put-patch")
(dict :label "JSON Encoding" :href "/geography/hypermedia/examples/json-encoding")
(dict :label "Vals & Headers" :href "/geography/hypermedia/examples/vals-and-headers")
(dict :label "Loading States" :href "/geography/hypermedia/examples/loading-states")
(dict :label "Request Abort" :href "/geography/hypermedia/examples/sync-replace")
(dict :label "Retry" :href "/geography/hypermedia/examples/retry")))
(define cssx-nav-items (list
(dict :label "Overview" :href "/cssx/")
(dict :label "Patterns" :href "/cssx/patterns")
(dict :label "Delivery" :href "/cssx/delivery")
(dict :label "Async CSS" :href "/cssx/async")
(dict :label "Live Styles" :href "/cssx/live")
(dict :label "Comparisons" :href "/cssx/comparisons")
(dict :label "Philosophy" :href "/cssx/philosophy")))
(dict :label "Overview" :href "/applications/cssx/")
(dict :label "Patterns" :href "/applications/cssx/patterns")
(dict :label "Delivery" :href "/applications/cssx/delivery")
(dict :label "Async CSS" :href "/applications/cssx/async")
(dict :label "Live Styles" :href "/applications/cssx/live")
(dict :label "Comparisons" :href "/applications/cssx/comparisons")
(dict :label "Philosophy" :href "/applications/cssx/philosophy")))
(define essays-nav-items (list
(dict :label "Why S-Expressions" :href "/essays/why-sexps"
(dict :label "Why S-Expressions" :href "/etc/essays/why-sexps"
:summary "Why SX uses s-expressions instead of HTML templates, JSX, or any other syntax.")
(dict :label "The htmx/React Hybrid" :href "/essays/htmx-react-hybrid"
(dict :label "The htmx/React Hybrid" :href "/etc/essays/htmx-react-hybrid"
:summary "How SX combines the server-driven simplicity of htmx with the component model of React.")
(dict :label "On-Demand CSS" :href "/essays/on-demand-css"
(dict :label "On-Demand CSS" :href "/etc/essays/on-demand-css"
:summary "How SX delivers only the CSS each page needs — server scans rendered classes, sends the delta.")
(dict :label "Client Reactivity" :href "/essays/client-reactivity"
(dict :label "Client Reactivity" :href "/etc/essays/client-reactivity"
:summary "Reactive UI updates without a virtual DOM, diffing library, or build step.")
(dict :label "SX Native" :href "/essays/sx-native"
(dict :label "SX Native" :href "/etc/essays/sx-native"
:summary "Extending SX beyond the browser — native desktop and mobile rendering from the same source.")
(dict :label "Tail-Call Optimization" :href "/essays/tail-call-optimization"
(dict :label "Tail-Call Optimization" :href "/etc/essays/tail-call-optimization"
:summary "How SX implements proper tail calls via trampolining in a language that doesn't have them.")
(dict :label "Continuations" :href "/essays/continuations"
(dict :label "Continuations" :href "/etc/essays/continuations"
:summary "First-class continuations in a tree-walking evaluator — theory and implementation.")
(dict :label "The Reflexive Web" :href "/essays/reflexive-web"
(dict :label "The Reflexive Web" :href "/etc/essays/reflexive-web"
:summary "A web where pages can inspect, modify, and extend their own rendering pipeline.")
(dict :label "Server Architecture" :href "/essays/server-architecture"
(dict :label "Server Architecture" :href "/etc/essays/server-architecture"
:summary "How SX enforces the boundary between host and embedded language, and what it looks like across targets.")
(dict :label "Separate your Own Concerns" :href "/essays/separation-of-concerns"
(dict :label "Separate your Own Concerns" :href "/etc/essays/separation-of-concerns"
:summary "The web's HTML/CSS/JS split separates the framework's concerns, not your application's. Real separation is domain-specific.")
(dict :label "SX and AI" :href "/essays/sx-and-ai"
(dict :label "SX and AI" :href "/etc/essays/sx-and-ai"
:summary "Why s-expressions are the most AI-friendly representation for web interfaces.")
(dict :label "There Is No Alternative" :href "/essays/no-alternative"
(dict :label "There Is No Alternative" :href "/etc/essays/no-alternative"
:summary "Every attempt to escape s-expressions leads back to s-expressions. This is not an accident.")
(dict :label "sx sucks" :href "/essays/sx-sucks"
(dict :label "sx sucks" :href "/etc/essays/sx-sucks"
:summary "An honest accounting of everything wrong with SX and why you probably shouldn't use it.")
(dict :label "Tools for Fools" :href "/essays/zero-tooling"
(dict :label "Tools for Fools" :href "/etc/essays/zero-tooling"
:summary "SX was built without a code editor. No IDE, no build tools, no linters, no bundlers. What zero-tooling web development looks like.")
(dict :label "React is Hypermedia" :href "/essays/react-is-hypermedia"
(dict :label "React is Hypermedia" :href "/etc/essays/react-is-hypermedia"
:summary "A React Island is a hypermedia control. Its behavior is specified in SX.")
(dict :label "The Hegelian Synthesis" :href "/essays/hegelian-synthesis"
(dict :label "The Hegelian Synthesis" :href "/etc/essays/hegelian-synthesis"
:summary "On the dialectical resolution of the hypertext/reactive contradiction. Thesis: the server renders. Antithesis: the client reacts. Synthesis: the island in the lake.")))
(define philosophy-nav-items (list
(dict :label "The SX Manifesto" :href "/philosophy/sx-manifesto"
(dict :label "The SX Manifesto" :href "/etc/philosophy/sx-manifesto"
:summary "The design principles behind SX: simplicity, self-hosting, and s-expressions all the way down.")
(dict :label "Strange Loops" :href "/philosophy/godel-escher-bach"
(dict :label "Strange Loops" :href "/etc/philosophy/godel-escher-bach"
:summary "Self-reference, and the tangled hierarchy of a language that defines itself.")
(dict :label "SX and Wittgenstein" :href "/philosophy/wittgenstein"
(dict :label "SX and Wittgenstein" :href "/etc/philosophy/wittgenstein"
:summary "The limits of my language are the limits of my world — Wittgenstein's philosophy and what it means for SX.")
(dict :label "SX and Dennett" :href "/philosophy/dennett"
(dict :label "SX and Dennett" :href "/etc/philosophy/dennett"
:summary "Real patterns, intentional stance, and multiple drafts — Dennett's philosophy of mind as a framework for understanding SX.")
(dict :label "S-Existentialism" :href "/philosophy/existentialism"
(dict :label "S-Existentialism" :href "/etc/philosophy/existentialism"
:summary "Existence precedes essence — Sartre, Camus, and the absurd freedom of writing a Lisp for the web.")))
(define specs-nav-items (list
(dict :label "Architecture" :href "/specs/")
(dict :label "Core" :href "/specs/core")
(dict :label "Parser" :href "/specs/parser")
(dict :label "Evaluator" :href "/specs/evaluator")
(dict :label "Primitives" :href "/specs/primitives")
(dict :label "Special Forms" :href "/specs/special-forms")
(dict :label "Renderer" :href "/specs/renderer")
(dict :label "Adapters" :href "/specs/adapters")
(dict :label "DOM Adapter" :href "/specs/adapter-dom")
(dict :label "HTML Adapter" :href "/specs/adapter-html")
(dict :label "SX Wire Adapter" :href "/specs/adapter-sx")
(dict :label "Browser" :href "/specs/browser")
(dict :label "SxEngine" :href "/specs/engine")
(dict :label "Orchestration" :href "/specs/orchestration")
(dict :label "Boot" :href "/specs/boot")
(dict :label "Continuations" :href "/specs/continuations")
(dict :label "call/cc" :href "/specs/callcc")
(dict :label "Deps" :href "/specs/deps")
(dict :label "Router" :href "/specs/router")))
(dict :label "Architecture" :href "/language/specs/")
(dict :label "Core" :href "/language/specs/core")
(dict :label "Parser" :href "/language/specs/parser")
(dict :label "Evaluator" :href "/language/specs/evaluator")
(dict :label "Primitives" :href "/language/specs/primitives")
(dict :label "Special Forms" :href "/language/specs/special-forms")
(dict :label "Renderer" :href "/language/specs/renderer")
(dict :label "Adapters" :href "/language/specs/adapters")
(dict :label "DOM Adapter" :href "/language/specs/adapter-dom")
(dict :label "HTML Adapter" :href "/language/specs/adapter-html")
(dict :label "SX Wire Adapter" :href "/language/specs/adapter-sx")
(dict :label "Browser" :href "/language/specs/browser")
(dict :label "SxEngine" :href "/language/specs/engine")
(dict :label "Orchestration" :href "/language/specs/orchestration")
(dict :label "Boot" :href "/language/specs/boot")
(dict :label "Continuations" :href "/language/specs/continuations")
(dict :label "call/cc" :href "/language/specs/callcc")
(dict :label "Deps" :href "/language/specs/deps")
(dict :label "Router" :href "/language/specs/router")))
(define testing-nav-items (list
(dict :label "Overview" :href "/testing/")
(dict :label "Evaluator" :href "/testing/eval")
(dict :label "Parser" :href "/testing/parser")
(dict :label "Router" :href "/testing/router")
(dict :label "Renderer" :href "/testing/render")
(dict :label "Dependencies" :href "/testing/deps")
(dict :label "Engine" :href "/testing/engine")
(dict :label "Orchestration" :href "/testing/orchestration")
(dict :label "Runners" :href "/testing/runners")))
(dict :label "Overview" :href "/language/testing/")
(dict :label "Evaluator" :href "/language/testing/eval")
(dict :label "Parser" :href "/language/testing/parser")
(dict :label "Router" :href "/language/testing/router")
(dict :label "Renderer" :href "/language/testing/render")
(dict :label "Dependencies" :href "/language/testing/deps")
(dict :label "Engine" :href "/language/testing/engine")
(dict :label "Orchestration" :href "/language/testing/orchestration")
(dict :label "Runners" :href "/language/testing/runners")))
(define isomorphism-nav-items (list
(dict :label "Roadmap" :href "/isomorphism/")
(dict :label "Bundle Analyzer" :href "/isomorphism/bundle-analyzer")
(dict :label "Routing Analyzer" :href "/isomorphism/routing-analyzer")
(dict :label "Data Test" :href "/isomorphism/data-test")
(dict :label "Async IO" :href "/isomorphism/async-io")
(dict :label "Streaming" :href "/isomorphism/streaming")
(dict :label "Affinity" :href "/isomorphism/affinity")
(dict :label "Optimistic" :href "/isomorphism/optimistic")
(dict :label "Offline" :href "/isomorphism/offline")))
(dict :label "Roadmap" :href "/geography/isomorphism/")
(dict :label "Bundle Analyzer" :href "/geography/isomorphism/bundle-analyzer")
(dict :label "Routing Analyzer" :href "/geography/isomorphism/routing-analyzer")
(dict :label "Data Test" :href "/geography/isomorphism/data-test")
(dict :label "Async IO" :href "/geography/isomorphism/async-io")
(dict :label "Streaming" :href "/geography/isomorphism/streaming")
(dict :label "Affinity" :href "/geography/isomorphism/affinity")
(dict :label "Optimistic" :href "/geography/isomorphism/optimistic")
(dict :label "Offline" :href "/geography/isomorphism/offline")))
(define plans-nav-items (list
(dict :label "Status" :href "/plans/status"
(dict :label "Status" :href "/etc/plans/status"
:summary "Audit of all plans — what's done, what's in progress, and what remains.")
(dict :label "Reader Macros" :href "/plans/reader-macros"
(dict :label "Reader Macros" :href "/etc/plans/reader-macros"
:summary "Extensible parse-time transformations via # dispatch — datum comments, raw strings, and quote shorthand.")
(dict :label "Reader Macro Demo" :href "/plans/reader-macro-demo"
(dict :label "Reader Macro Demo" :href "/etc/plans/reader-macro-demo"
:summary "Live demo: #z3 translates SX spec declarations to SMT-LIB verification conditions.")
(dict :label "Theorem Prover" :href "/plans/theorem-prover"
(dict :label "Theorem Prover" :href "/etc/plans/theorem-prover"
:summary "prove.sx — constraint solver and property prover for SX primitives, written in SX.")
(dict :label "Self-Hosting Bootstrapper" :href "/plans/self-hosting-bootstrapper"
(dict :label "Self-Hosting Bootstrapper" :href "/etc/plans/self-hosting-bootstrapper"
:summary "py.sx — an SX-to-Python translator written in SX. Complete: G0 == G1, 128/128 defines match.")
(dict :label "JS Bootstrapper" :href "/plans/js-bootstrapper"
(dict :label "JS Bootstrapper" :href "/etc/plans/js-bootstrapper"
:summary "js.sx — SX-to-JavaScript translator + ahead-of-time component compiler. Zero-runtime static sites.")
(dict :label "SX-Activity" :href "/plans/sx-activity"
(dict :label "SX-Activity" :href "/etc/plans/sx-activity"
:summary "A new web built on SX — executable content, shared components, parsers, and logic on IPFS, provenance on Bitcoin, all running within your own security context.")
(dict :label "Predictive Prefetching" :href "/plans/predictive-prefetch"
(dict :label "Predictive Prefetching" :href "/etc/plans/predictive-prefetch"
:summary "Prefetch missing component definitions before the user clicks — hover a link, fetch its deps, navigate client-side.")
(dict :label "Content-Addressed Components" :href "/plans/content-addressed-components"
(dict :label "Content-Addressed Components" :href "/etc/plans/content-addressed-components"
:summary "Components identified by CID, stored on IPFS, fetched from anywhere. Canonical serialization, content verification, federated sharing.")
(dict :label "Environment Images" :href "/plans/environment-images"
(dict :label "Environment Images" :href "/etc/plans/environment-images"
:summary "Serialize evaluated environments as content-addressed images. Spec CID → image CID → every endpoint is fully executable and verifiable.")
(dict :label "Runtime Slicing" :href "/plans/runtime-slicing"
(dict :label "Runtime Slicing" :href "/etc/plans/runtime-slicing"
:summary "Tier the client runtime by need: L0 hypermedia (~5KB), L1 DOM ops (~8KB), L2 islands (~15KB), L3 full eval (~44KB). Sliced by slice.sx, translated by js.sx.")
(dict :label "Typed SX" :href "/plans/typed-sx"
(dict :label "Typed SX" :href "/etc/plans/typed-sx"
:summary "Gradual type system for SX. Optional annotations, checked at registration time, zero runtime cost. types.sx — specced, bootstrapped, catches composition errors.")
(dict :label "Nav Redesign" :href "/plans/nav-redesign"
(dict :label "Nav Redesign" :href "/etc/plans/nav-redesign"
:summary "Replace menu bars with vertical breadcrumb navigation. Logo → section → page, arrows for siblings, children below. No dropdowns, no hamburger, infinite depth.")
(dict :label "Fragment Protocol" :href "/plans/fragment-protocol"
(dict :label "Fragment Protocol" :href "/etc/plans/fragment-protocol"
:summary "Structured sexp request/response for cross-service component transfer.")
(dict :label "Glue Decoupling" :href "/plans/glue-decoupling"
(dict :label "Glue Decoupling" :href "/etc/plans/glue-decoupling"
:summary "Eliminate all cross-app model imports via glue service layer.")
(dict :label "Social Sharing" :href "/plans/social-sharing"
(dict :label "Social Sharing" :href "/etc/plans/social-sharing"
:summary "OAuth-based sharing to Facebook, Instagram, Threads, Twitter/X, LinkedIn, and Mastodon.")
(dict :label "SX CI Pipeline" :href "/plans/sx-ci"
(dict :label "SX CI Pipeline" :href "/etc/plans/sx-ci"
:summary "Build, test, and deploy in s-expressions — CI pipelines as SX components.")
(dict :label "Live Streaming" :href "/plans/live-streaming"
(dict :label "Live Streaming" :href "/etc/plans/live-streaming"
:summary "SSE and WebSocket transports for re-resolving suspense slots after initial page load — live data, real-time collaboration.")
(dict :label "sx-web Platform" :href "/plans/sx-web-platform"
(dict :label "sx-web Platform" :href "/etc/plans/sx-web-platform"
:summary "sx-web.org as online development platform — embedded Claude Code, IPFS storage, sx-activity publishing, sx-ci testing. Author, stage, test, deploy from the browser.")
(dict :label "sx-forge" :href "/plans/sx-forge"
(dict :label "sx-forge" :href "/etc/plans/sx-forge"
:summary "Git forge in SX — repositories, issues, pull requests, CI, permissions, and federation. Configuration as macros, diffs as components.")
(dict :label "sx-swarm" :href "/plans/sx-swarm"
(dict :label "sx-swarm" :href "/etc/plans/sx-swarm"
:summary "Container orchestration in SX — service definitions, environment macros, deploy pipelines. Replace YAML with a real language.")
(dict :label "sx-proxy" :href "/plans/sx-proxy"
(dict :label "sx-proxy" :href "/etc/plans/sx-proxy"
:summary "Reverse proxy in SX — routes, TLS, middleware chains, load balancing. Macros generate config from the same service definitions as the orchestrator.")
(dict :label "Async Eval Convergence" :href "/plans/async-eval-convergence"
(dict :label "Async Eval Convergence" :href "/etc/plans/async-eval-convergence"
:summary "Eliminate hand-written evaluators — bootstrap async_eval.py from the spec via an async adapter layer. One spec, one truth, zero divergence.")
(dict :label "WASM Bytecode VM" :href "/plans/wasm-bytecode-vm"
(dict :label "WASM Bytecode VM" :href "/etc/plans/wasm-bytecode-vm"
:summary "Compile SX to bytecode, run in a Rust/WASM VM. Compact wire format, no parse overhead, near-native speed, DOM via JS bindings.")
(dict :label "Generative SX" :href "/plans/generative-sx"
(dict :label "Generative SX" :href "/etc/plans/generative-sx"
:summary "Programs that write themselves as they run — self-compiling specs, runtime self-extension, generative testing, seed networks.")
(dict :label "Art DAG on SX" :href "/plans/art-dag-sx"
(dict :label "Art DAG on SX" :href "/etc/plans/art-dag-sx"
:summary "SX endpoints as portals into media processing environments — recipes as programs, split execution across GPU/cache/live boundaries, streaming AV output.")))
(define reactive-islands-nav-items (list
(dict :label "Overview" :href "/reactive/"
(dict :label "Overview" :href "/geography/reactive/"
:summary "Architecture, four levels (L0-L3), and current implementation status.")
(dict :label "Demo" :href "/reactive/demo"
(dict :label "Demo" :href "/geography/reactive/demo"
:summary "Live demonstration of signals, computed, effects, batch, and defisland — all transpiled from spec.")
(dict :label "Event Bridge" :href "/reactive/event-bridge"
(dict :label "Event Bridge" :href "/geography/reactive/event-bridge"
:summary "DOM events for htmx lake → island communication. Server-rendered buttons dispatch custom events that island effects listen for.")
(dict :label "Named Stores" :href "/reactive/named-stores"
(dict :label "Named Stores" :href "/geography/reactive/named-stores"
:summary "Page-level signal containers via def-store/use-store — persist across island destruction/recreation.")
(dict :label "Plan" :href "/reactive/plan"
(dict :label "Plan" :href "/geography/reactive/plan"
:summary "The full design document — rendering boundary, state flow, signal primitives, island lifecycle.")
(dict :label "Marshes" :href "/reactive/marshes"
:summary "Where reactivity and hypermedia interpenetrate — server writes to signals, reactive transforms reshape server content, client state modifies how hypermedia is interpreted.")
(dict :label "Phase 2" :href "/reactive/phase2"
(dict :label "Phase 2" :href "/geography/reactive/phase2"
:summary "Input binding, keyed lists, reactive class/style, refs, portals, error boundaries, suspense, transitions.")))
(define bootstrappers-nav-items (list
(dict :label "Overview" :href "/bootstrappers/")
(dict :label "JavaScript" :href "/bootstrappers/javascript")
(dict :label "Python" :href "/bootstrappers/python")
(dict :label "Self-Hosting (py.sx)" :href "/bootstrappers/self-hosting")
(dict :label "Self-Hosting JS (js.sx)" :href "/bootstrappers/self-hosting-js")
(dict :label "Page Helpers" :href "/bootstrappers/page-helpers")))
(dict :label "Overview" :href "/language/bootstrappers/")
(dict :label "JavaScript" :href "/language/bootstrappers/javascript")
(dict :label "Python" :href "/language/bootstrappers/python")
(dict :label "Self-Hosting (py.sx)" :href "/language/bootstrappers/self-hosting")
(dict :label "Self-Hosting JS (js.sx)" :href "/language/bootstrappers/self-hosting-js")
(dict :label "Page Helpers" :href "/language/bootstrappers/page-helpers")))
;; Spec file registry — canonical metadata for spec viewer pages.
;; Python only handles file I/O (read-spec-file); all metadata lives here.
@@ -327,21 +325,31 @@
(define sx-nav-tree
{:label "sx" :href "/"
:children (list
{:label "Reactive" :href "/reactive/" :children reactive-islands-nav-items}
{:label "Hypermedia" :href "/hypermedia/"
{:label "Geography" :href "/geography/"
:children (list
{:label "Reference" :href "/hypermedia/reference/" :children reference-nav-items}
{:label "Examples" :href "/hypermedia/examples/" :children examples-nav-items})}
{:label "Docs" :href "/docs/" :children docs-nav-items}
{:label "CSSX" :href "/cssx/" :children cssx-nav-items}
{:label "Protocols" :href "/protocols/" :children protocols-nav-items}
{:label "Essays" :href "/essays/" :children essays-nav-items}
{:label "Philosophy" :href "/philosophy/" :children philosophy-nav-items}
{:label "Specs" :href "/specs/" :children specs-nav-items}
{:label "Bootstrappers" :href "/bootstrappers/" :children bootstrappers-nav-items}
{:label "Testing" :href "/testing/" :children testing-nav-items}
{:label "Isomorphism" :href "/isomorphism/" :children isomorphism-nav-items}
{:label "Plans" :href "/plans/" :children plans-nav-items})})
{:label "Reactive Islands" :href "/geography/reactive/" :children reactive-islands-nav-items}
{:label "Hypermedia Lakes" :href "/geography/hypermedia/"
:children (list
{:label "Reference" :href "/geography/hypermedia/reference/" :children reference-nav-items}
{:label "Examples" :href "/geography/hypermedia/examples/" :children examples-nav-items})}
{:label "Marshes" :href "/geography/marshes/"
:summary "Where reactivity and hypermedia interpenetrate — server writes to signals, reactive transforms reshape server content, client state modifies how hypermedia is interpreted."}
{:label "Isomorphism" :href "/geography/isomorphism/" :children isomorphism-nav-items})}
{:label "Language" :href "/language/"
:children (list
{:label "Docs" :href "/language/docs/" :children docs-nav-items}
{:label "Specs" :href "/language/specs/" :children specs-nav-items}
{:label "Bootstrappers" :href "/language/bootstrappers/" :children bootstrappers-nav-items}
{:label "Testing" :href "/language/testing/" :children testing-nav-items})}
{:label "Applications" :href "/applications/"
:children (list
{:label "CSSX" :href "/applications/cssx/" :children cssx-nav-items}
{:label "Protocols" :href "/applications/protocols/" :children protocols-nav-items})}
{:label "Etc" :href "/etc/"
:children (list
{:label "Essays" :href "/etc/essays/" :children essays-nav-items}
{:label "Philosophy" :href "/etc/philosophy/" :children philosophy-nav-items}
{:label "Plans" :href "/etc/plans/" :children plans-nav-items})})})
;; Resolve a URL path to a nav trail + children.
;; Returns {:trail [{:node N :siblings S} ...] :children [...] :depth N}
@@ -384,11 +392,15 @@
item)))
items)
;; Path contains section: /plans/typed-sx matches section with /plans/ children
;; Also handles prefix matching on children for nested groups (e.g. Geography → Reactive Islands)
(some (fn (item)
(let ((children (get item "children")))
(when children
(when (some (fn (child)
(= (get child "href") path))
(let ((href (get child "href")))
(or (= href path)
(and (ends-with? href "/")
(starts-with? path href)))))
children)
item))))
items))))