diff --git a/sx/sx/nav-data.sx b/sx/sx/nav-data.sx index e7068dfb..c4e8c34d 100644 --- a/sx/sx/nav-data.sx +++ b/sx/sx/nav-data.sx @@ -1,527 +1,63 @@ -;; Navigation data and section-nav component for sx docs. -;; Replaces Python nav tuples from content/pages.py and _nav_items_sx() from utils.py. -;; @css aria-selected:bg-violet-200 aria-selected:text-violet-900 +(define docs-nav-items (list (dict :label "Introduction" :href "/sx/(language.(doc.introduction))") (dict :label "Getting Started" :href "/sx/(language.(doc.getting-started))") (dict :label "Components" :href "/sx/(language.(doc.components))") (dict :label "Evaluator" :href "/sx/(language.(doc.evaluator))") (dict :label "Primitives" :href "/sx/(language.(doc.primitives))") (dict :label "Special Forms" :href "/sx/(language.(doc.special-forms))") (dict :label "Server Rendering" :href "/sx/(language.(doc.server-rendering))"))) -(define docs-nav-items (list - (dict :label "Introduction" :href "/sx/(language.(doc.introduction))") - (dict :label "Getting Started" :href "/sx/(language.(doc.getting-started))") - (dict :label "Components" :href "/sx/(language.(doc.components))") - (dict :label "Evaluator" :href "/sx/(language.(doc.evaluator))") - (dict :label "Primitives" :href "/sx/(language.(doc.primitives))") - (dict :label "Special Forms" :href "/sx/(language.(doc.special-forms))") - (dict :label "Server Rendering" :href "/sx/(language.(doc.server-rendering))"))) +(define reference-nav-items (list (dict :label "Attributes" :href "/sx/(geography.(hypermedia.(reference.attributes)))") (dict :label "Headers" :href "/sx/(geography.(hypermedia.(reference.headers)))") (dict :label "Events" :href "/sx/(geography.(hypermedia.(reference.events)))") (dict :label "JS API" :href "/sx/(geography.(hypermedia.(reference.js-api)))"))) -(define reference-nav-items (list - (dict :label "Attributes" :href "/sx/(geography.(hypermedia.(reference.attributes)))") - (dict :label "Headers" :href "/sx/(geography.(hypermedia.(reference.headers)))") - (dict :label "Events" :href "/sx/(geography.(hypermedia.(reference.events)))") - (dict :label "JS API" :href "/sx/(geography.(hypermedia.(reference.js-api)))"))) +(define protocols-nav-items (list (dict :label "Wire Format" :href "/sx/(applications.(protocol.wire-format))") (dict :label "Fragments" :href "/sx/(applications.(protocol.fragments))") (dict :label "Resolver I/O" :href "/sx/(applications.(protocol.resolver-io))") (dict :label "Internal Services" :href "/sx/(applications.(protocol.internal-services))") (dict :label "ActivityPub" :href "/sx/(applications.(protocol.activitypub))") (dict :label "Future" :href "/sx/(applications.(protocol.future))"))) -(define protocols-nav-items (list - (dict :label "Wire Format" :href "/sx/(applications.(protocol.wire-format))") - (dict :label "Fragments" :href "/sx/(applications.(protocol.fragments))") - (dict :label "Resolver I/O" :href "/sx/(applications.(protocol.resolver-io))") - (dict :label "Internal Services" :href "/sx/(applications.(protocol.internal-services))") - (dict :label "ActivityPub" :href "/sx/(applications.(protocol.activitypub))") - (dict :label "Future" :href "/sx/(applications.(protocol.future))"))) +(define examples-nav-items (list (dict :label "Click to Load" :href "/sx/(geography.(hypermedia.(example.click-to-load)))") (dict :label "Form Submission" :href "/sx/(geography.(hypermedia.(example.form-submission)))") (dict :label "Polling" :href "/sx/(geography.(hypermedia.(example.polling)))") (dict :label "Delete Row" :href "/sx/(geography.(hypermedia.(example.delete-row)))") (dict :label "Inline Edit" :href "/sx/(geography.(hypermedia.(example.inline-edit)))") (dict :label "OOB Swaps" :href "/sx/(geography.(hypermedia.(example.oob-swaps)))") (dict :label "Lazy Loading" :href "/sx/(geography.(hypermedia.(example.lazy-loading)))") (dict :label "Infinite Scroll" :href "/sx/(geography.(hypermedia.(example.infinite-scroll)))") (dict :label "Progress Bar" :href "/sx/(geography.(hypermedia.(example.progress-bar)))") (dict :label "Active Search" :href "/sx/(geography.(hypermedia.(example.active-search)))") (dict :label "Inline Validation" :href "/sx/(geography.(hypermedia.(example.inline-validation)))") (dict :label "Value Select" :href "/sx/(geography.(hypermedia.(example.value-select)))") (dict :label "Reset on Submit" :href "/sx/(geography.(hypermedia.(example.reset-on-submit)))") (dict :label "Edit Row" :href "/sx/(geography.(hypermedia.(example.edit-row)))") (dict :label "Bulk Update" :href "/sx/(geography.(hypermedia.(example.bulk-update)))") (dict :label "Swap Positions" :href "/sx/(geography.(hypermedia.(example.swap-positions)))") (dict :label "Select Filter" :href "/sx/(geography.(hypermedia.(example.select-filter)))") (dict :label "Tabs" :href "/sx/(geography.(hypermedia.(example.tabs)))") (dict :label "Animations" :href "/sx/(geography.(hypermedia.(example.animations)))") (dict :label "Dialogs" :href "/sx/(geography.(hypermedia.(example.dialogs)))") (dict :label "Keyboard Shortcuts" :href "/sx/(geography.(hypermedia.(example.keyboard-shortcuts)))") (dict :label "PUT / PATCH" :href "/sx/(geography.(hypermedia.(example.put-patch)))") (dict :label "JSON Encoding" :href "/sx/(geography.(hypermedia.(example.json-encoding)))") (dict :label "Vals & Headers" :href "/sx/(geography.(hypermedia.(example.vals-and-headers)))") (dict :label "Loading States" :href "/sx/(geography.(hypermedia.(example.loading-states)))") (dict :label "Request Abort" :href "/sx/(geography.(hypermedia.(example.sync-replace)))") (dict :label "Retry" :href "/sx/(geography.(hypermedia.(example.retry)))"))) -(define examples-nav-items (list - (dict :label "Click to Load" :href "/sx/(geography.(hypermedia.(example.click-to-load)))") - (dict :label "Form Submission" :href "/sx/(geography.(hypermedia.(example.form-submission)))") - (dict :label "Polling" :href "/sx/(geography.(hypermedia.(example.polling)))") - (dict :label "Delete Row" :href "/sx/(geography.(hypermedia.(example.delete-row)))") - (dict :label "Inline Edit" :href "/sx/(geography.(hypermedia.(example.inline-edit)))") - (dict :label "OOB Swaps" :href "/sx/(geography.(hypermedia.(example.oob-swaps)))") - (dict :label "Lazy Loading" :href "/sx/(geography.(hypermedia.(example.lazy-loading)))") - (dict :label "Infinite Scroll" :href "/sx/(geography.(hypermedia.(example.infinite-scroll)))") - (dict :label "Progress Bar" :href "/sx/(geography.(hypermedia.(example.progress-bar)))") - (dict :label "Active Search" :href "/sx/(geography.(hypermedia.(example.active-search)))") - (dict :label "Inline Validation" :href "/sx/(geography.(hypermedia.(example.inline-validation)))") - (dict :label "Value Select" :href "/sx/(geography.(hypermedia.(example.value-select)))") - (dict :label "Reset on Submit" :href "/sx/(geography.(hypermedia.(example.reset-on-submit)))") - (dict :label "Edit Row" :href "/sx/(geography.(hypermedia.(example.edit-row)))") - (dict :label "Bulk Update" :href "/sx/(geography.(hypermedia.(example.bulk-update)))") - (dict :label "Swap Positions" :href "/sx/(geography.(hypermedia.(example.swap-positions)))") - (dict :label "Select Filter" :href "/sx/(geography.(hypermedia.(example.select-filter)))") - (dict :label "Tabs" :href "/sx/(geography.(hypermedia.(example.tabs)))") - (dict :label "Animations" :href "/sx/(geography.(hypermedia.(example.animations)))") - (dict :label "Dialogs" :href "/sx/(geography.(hypermedia.(example.dialogs)))") - (dict :label "Keyboard Shortcuts" :href "/sx/(geography.(hypermedia.(example.keyboard-shortcuts)))") - (dict :label "PUT / PATCH" :href "/sx/(geography.(hypermedia.(example.put-patch)))") - (dict :label "JSON Encoding" :href "/sx/(geography.(hypermedia.(example.json-encoding)))") - (dict :label "Vals & Headers" :href "/sx/(geography.(hypermedia.(example.vals-and-headers)))") - (dict :label "Loading States" :href "/sx/(geography.(hypermedia.(example.loading-states)))") - (dict :label "Request Abort" :href "/sx/(geography.(hypermedia.(example.sync-replace)))") - (dict :label "Retry" :href "/sx/(geography.(hypermedia.(example.retry)))"))) +(define cssx-nav-items (list (dict :label "Overview" :href "/sx/(applications.(cssx))") (dict :label "Patterns" :href "/sx/(applications.(cssx.patterns))") (dict :label "Delivery" :href "/sx/(applications.(cssx.delivery))") (dict :label "Async CSS" :href "/sx/(applications.(cssx.async))") (dict :label "Live Styles" :href "/sx/(applications.(cssx.live))") (dict :label "Comparisons" :href "/sx/(applications.(cssx.comparison))") (dict :label "Philosophy" :href "/sx/(applications.(cssx.philosophy))"))) -(define cssx-nav-items (list - (dict :label "Overview" :href "/sx/(applications.(cssx))") - (dict :label "Patterns" :href "/sx/(applications.(cssx.patterns))") - (dict :label "Delivery" :href "/sx/(applications.(cssx.delivery))") - (dict :label "Async CSS" :href "/sx/(applications.(cssx.async))") - (dict :label "Live Styles" :href "/sx/(applications.(cssx.live))") - (dict :label "Comparisons" :href "/sx/(applications.(cssx.comparison))") - (dict :label "Philosophy" :href "/sx/(applications.(cssx.philosophy))"))) +(define reactive-runtime-nav-items (list (dict :label "Ref" :href "/sx/(applications.(reactive-runtime.ref))") (dict :label "Foreign FFI" :href "/sx/(applications.(reactive-runtime.foreign))") (dict :label "State Machines" :href "/sx/(applications.(reactive-runtime.machine))") (dict :label "Commands" :href "/sx/(applications.(reactive-runtime.commands))") (dict :label "Render Loop" :href "/sx/(applications.(reactive-runtime.loop))") (dict :label "Keyed Lists" :href "/sx/(applications.(reactive-runtime.keyed-lists))") (dict :label "App Shell" :href "/sx/(applications.(reactive-runtime.app-shell))"))) -(define reactive-runtime-nav-items (list - (dict :label "Ref" :href "/sx/(applications.(reactive-runtime.ref))") - (dict :label "Foreign FFI" :href "/sx/(applications.(reactive-runtime.foreign))") - (dict :label "State Machines" :href "/sx/(applications.(reactive-runtime.machine))") - (dict :label "Commands" :href "/sx/(applications.(reactive-runtime.commands))") - (dict :label "Render Loop" :href "/sx/(applications.(reactive-runtime.loop))") - (dict :label "Keyed Lists" :href "/sx/(applications.(reactive-runtime.keyed-lists))") - (dict :label "App Shell" :href "/sx/(applications.(reactive-runtime.app-shell))"))) +(define essays-nav-items (list (dict :label "Why S-Expressions" :href "/sx/(etc.(essay.why-sexps))" :summary "Why SX uses s-expressions instead of HTML templates, JSX, or any other syntax.") (dict :label "The htmx/React Hybrid" :href "/sx/(etc.(essay.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 "/sx/(etc.(essay.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 "/sx/(etc.(essay.client-reactivity))" :summary "Reactive UI updates without a virtual DOM, diffing library, or build step.") (dict :label "SX Native" :href "/sx/(etc.(essay.sx-native))" :summary "Extending SX beyond the browser — native desktop and mobile rendering from the same source.") (dict :label "Tail-Call Optimization" :href "/sx/(etc.(essay.tail-call-optimization))" :summary "How SX implements proper tail calls via trampolining in a language that doesn't have them.") (dict :label "Continuations" :href "/sx/(etc.(essay.continuations))" :summary "First-class continuations in a tree-walking evaluator — theory and implementation.") (dict :label "The Reflexive Web" :href "/sx/(etc.(essay.reflexive-web))" :summary "A web where pages can inspect, modify, and extend their own rendering pipeline.") (dict :label "Server Architecture" :href "/sx/(etc.(essay.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 "/sx/(etc.(essay.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 "/sx/(etc.(essay.sx-and-ai))" :summary "Why s-expressions are the most AI-friendly representation for web interfaces.") (dict :label "There Is No Alternative" :href "/sx/(etc.(essay.no-alternative))" :summary "Every attempt to escape s-expressions leads back to s-expressions. This is not an accident.") (dict :label "sx sucks" :href "/sx/(etc.(essay.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 "/sx/(etc.(essay.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 "/sx/(etc.(essay.react-is-hypermedia))" :summary "A React Island is a hypermedia control. Its behavior is specified in SX.") (dict :label "The Hegelian Synthesis" :href "/sx/(etc.(essay.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.") (dict :label "The Art Chain" :href "/sx/(etc.(essay.the-art-chain))" :summary "On making, self-making, and the chain of artifacts that produces itself. Ars, techne, content addressing, and why the spec is the art.") (dict :label "The True Hypermedium" :href "/sx/(etc.(essay.self-defining-medium))" :summary "The true hypermedium must define itself with itself. On ontological uniformity, the metacircular web, and why address and content should be the same stuff.") (dict :label "Hypermedia in the Age of AI" :href "/sx/(etc.(essay.hypermedia-age-of-ai))" :summary "JSON hypermedia, MCP, and why s-expressions are the format both humans and AI agents actually need."))) -(define essays-nav-items (list - (dict :label "Why S-Expressions" :href "/sx/(etc.(essay.why-sexps))" - :summary "Why SX uses s-expressions instead of HTML templates, JSX, or any other syntax.") - (dict :label "The htmx/React Hybrid" :href "/sx/(etc.(essay.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 "/sx/(etc.(essay.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 "/sx/(etc.(essay.client-reactivity))" - :summary "Reactive UI updates without a virtual DOM, diffing library, or build step.") - (dict :label "SX Native" :href "/sx/(etc.(essay.sx-native))" - :summary "Extending SX beyond the browser — native desktop and mobile rendering from the same source.") - (dict :label "Tail-Call Optimization" :href "/sx/(etc.(essay.tail-call-optimization))" - :summary "How SX implements proper tail calls via trampolining in a language that doesn't have them.") - (dict :label "Continuations" :href "/sx/(etc.(essay.continuations))" - :summary "First-class continuations in a tree-walking evaluator — theory and implementation.") - (dict :label "The Reflexive Web" :href "/sx/(etc.(essay.reflexive-web))" - :summary "A web where pages can inspect, modify, and extend their own rendering pipeline.") - (dict :label "Server Architecture" :href "/sx/(etc.(essay.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 "/sx/(etc.(essay.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 "/sx/(etc.(essay.sx-and-ai))" - :summary "Why s-expressions are the most AI-friendly representation for web interfaces.") - (dict :label "There Is No Alternative" :href "/sx/(etc.(essay.no-alternative))" - :summary "Every attempt to escape s-expressions leads back to s-expressions. This is not an accident.") - (dict :label "sx sucks" :href "/sx/(etc.(essay.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 "/sx/(etc.(essay.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 "/sx/(etc.(essay.react-is-hypermedia))" - :summary "A React Island is a hypermedia control. Its behavior is specified in SX.") - (dict :label "The Hegelian Synthesis" :href "/sx/(etc.(essay.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.") - (dict :label "The Art Chain" :href "/sx/(etc.(essay.the-art-chain))" - :summary "On making, self-making, and the chain of artifacts that produces itself. Ars, techne, content addressing, and why the spec is the art.") - (dict :label "The True Hypermedium" :href "/sx/(etc.(essay.self-defining-medium))" - :summary "The true hypermedium must define itself with itself. On ontological uniformity, the metacircular web, and why address and content should be the same stuff.") - (dict :label "Hypermedia in the Age of AI" :href "/sx/(etc.(essay.hypermedia-age-of-ai))" - :summary "JSON hypermedia, MCP, and why s-expressions are the format both humans and AI agents actually need."))) +(define philosophy-nav-items (list (dict :label "The SX Manifesto" :href "/sx/(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 "/sx/(etc.(philosophy.godel-escher-bach))" :summary "Self-reference, and the tangled hierarchy of a language that defines itself.") (dict :label "SX and Wittgenstein" :href "/sx/(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 "/sx/(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 "/sx/(etc.(philosophy.existentialism))" :summary "Existence precedes essence — Sartre, Camus, and the absurd freedom of writing a Lisp for the web.") (dict :label "Platonic SX" :href "/sx/(etc.(philosophy.platonic-sx))" :summary "The allegory of the cave, the theory of Forms, and why a self-defining hypermedium participates in something Plato would have recognized."))) -(define philosophy-nav-items (list - (dict :label "The SX Manifesto" :href "/sx/(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 "/sx/(etc.(philosophy.godel-escher-bach))" - :summary "Self-reference, and the tangled hierarchy of a language that defines itself.") - (dict :label "SX and Wittgenstein" :href "/sx/(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 "/sx/(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 "/sx/(etc.(philosophy.existentialism))" - :summary "Existence precedes essence — Sartre, Camus, and the absurd freedom of writing a Lisp for the web.") - (dict :label "Platonic SX" :href "/sx/(etc.(philosophy.platonic-sx))" - :summary "The allegory of the cave, the theory of Forms, and why a self-defining hypermedium participates in something Plato would have recognized."))) +(define specs-nav-items (list {:href "/sx/(language.(spec.core))" :children (list {:href "/sx/(language.(spec.parser))" :label "Parser"} {:href "/sx/(language.(spec.evaluator))" :label "Evaluator"} {:href "/sx/(language.(spec.primitives))" :label "Primitives"} {:href "/sx/(language.(spec.special-forms))" :label "Special Forms"} {:href "/sx/(language.(spec.renderer))" :label "Renderer"}) :label "Core"} {:href "/sx/(language.(spec.adapters))" :children (list {:href "/sx/(language.(spec.adapter-dom))" :label "DOM Adapter"} {:href "/sx/(language.(spec.adapter-html))" :label "HTML Adapter"} {:href "/sx/(language.(spec.adapter-sx))" :label "SX Wire Adapter"} {:href "/sx/(language.(spec.adapter-async))" :label "Async Adapter"}) :label "Adapters"} {:href "/sx/(language.(spec.browser))" :children (list {:href "/sx/(language.(spec.engine))" :label "SxEngine"} {:href "/sx/(language.(spec.orchestration))" :label "Orchestration"} {:href "/sx/(language.(spec.boot))" :label "Boot"} {:href "/sx/(language.(spec.router))" :label "Router"}) :label "Browser"} {:href "/sx/(language.(spec.reactive))" :children (list {:href "/sx/(language.(spec.signals))" :label "Signals"} {:href "/sx/(language.(spec.frames))" :label "CEK Frames"} {:href "/sx/(language.(spec.cek))" :label "CEK Machine"}) :label "Reactive"} {:href "/sx/(language.(spec.host))" :children (list {:href "/sx/(language.(spec.boundary))" :label "Boundary"} {:href "/sx/(language.(spec.forms))" :label "Forms"} {:href "/sx/(language.(spec.page-helpers))" :label "Page Helpers"}) :label "Host Interface"} {:href "/sx/(language.(spec.extensions))" :children (list {:href "/sx/(language.(spec.continuations))" :label "Continuations"} {:href "/sx/(language.(spec.callcc))" :label "call/cc"} {:href "/sx/(language.(spec.types))" :label "Types"} {:href "/sx/(language.(spec.deps))" :label "Deps"}) :label "Extensions"})) -(define specs-nav-items (list - {:label "Core" :href "/sx/(language.(spec.core))" :children (list - {:label "Parser" :href "/sx/(language.(spec.parser))"} - {:label "Evaluator" :href "/sx/(language.(spec.evaluator))"} - {:label "Primitives" :href "/sx/(language.(spec.primitives))"} - {:label "Special Forms" :href "/sx/(language.(spec.special-forms))"} - {:label "Renderer" :href "/sx/(language.(spec.renderer))"})} - {:label "Adapters" :href "/sx/(language.(spec.adapters))" :children (list - {:label "DOM Adapter" :href "/sx/(language.(spec.adapter-dom))"} - {:label "HTML Adapter" :href "/sx/(language.(spec.adapter-html))"} - {:label "SX Wire Adapter" :href "/sx/(language.(spec.adapter-sx))"} - {:label "Async Adapter" :href "/sx/(language.(spec.adapter-async))"})} - {:label "Browser" :href "/sx/(language.(spec.browser))" :children (list - {:label "SxEngine" :href "/sx/(language.(spec.engine))"} - {:label "Orchestration" :href "/sx/(language.(spec.orchestration))"} - {:label "Boot" :href "/sx/(language.(spec.boot))"} - {:label "Router" :href "/sx/(language.(spec.router))"})} - {:label "Reactive" :href "/sx/(language.(spec.reactive))" :children (list - {:label "Signals" :href "/sx/(language.(spec.signals))"} - {:label "CEK Frames" :href "/sx/(language.(spec.frames))"} - {:label "CEK Machine" :href "/sx/(language.(spec.cek))"})} - {:label "Host Interface" :href "/sx/(language.(spec.host))" :children (list - {:label "Boundary" :href "/sx/(language.(spec.boundary))"} - {:label "Forms" :href "/sx/(language.(spec.forms))"} - {:label "Page Helpers" :href "/sx/(language.(spec.page-helpers))"})} - {:label "Extensions" :href "/sx/(language.(spec.extensions))" :children (list - {:label "Continuations" :href "/sx/(language.(spec.continuations))"} - {:label "call/cc" :href "/sx/(language.(spec.callcc))"} - {:label "Types" :href "/sx/(language.(spec.types))"} - {:label "Deps" :href "/sx/(language.(spec.deps))"})})) +(define testing-nav-items (list (dict :label "Overview" :href "/sx/(language.(test))") (dict :label "Evaluator" :href "/sx/(language.(test.eval))") (dict :label "Parser" :href "/sx/(language.(test.parser))") (dict :label "Router" :href "/sx/(language.(test.router))") (dict :label "Renderer" :href "/sx/(language.(test.render))") (dict :label "Dependencies" :href "/sx/(language.(test.deps))") (dict :label "Engine" :href "/sx/(language.(test.engine))") (dict :label "Orchestration" :href "/sx/(language.(test.orchestration))") (dict :label "Runners" :href "/sx/(language.(test.runners))"))) -(define testing-nav-items (list - (dict :label "Overview" :href "/sx/(language.(test))") - (dict :label "Evaluator" :href "/sx/(language.(test.eval))") - (dict :label "Parser" :href "/sx/(language.(test.parser))") - (dict :label "Router" :href "/sx/(language.(test.router))") - (dict :label "Renderer" :href "/sx/(language.(test.render))") - (dict :label "Dependencies" :href "/sx/(language.(test.deps))") - (dict :label "Engine" :href "/sx/(language.(test.engine))") - (dict :label "Orchestration" :href "/sx/(language.(test.orchestration))") - (dict :label "Runners" :href "/sx/(language.(test.runners))"))) +(define isomorphism-nav-items (list (dict :label "Roadmap" :href "/sx/(geography.(isomorphism))") (dict :label "Bundle Analyzer" :href "/sx/(geography.(isomorphism.bundle-analyzer))") (dict :label "Routing Analyzer" :href "/sx/(geography.(isomorphism.routing-analyzer))") (dict :label "Data Test" :href "/sx/(geography.(isomorphism.data-test))") (dict :label "Async IO" :href "/sx/(geography.(isomorphism.async-io))") (dict :label "Streaming" :href "/sx/(geography.(isomorphism.streaming))") (dict :label "Affinity" :href "/sx/(geography.(isomorphism.affinity))") (dict :label "Optimistic" :href "/sx/(geography.(isomorphism.optimistic))") (dict :label "Offline" :href "/sx/(geography.(isomorphism.offline))"))) -(define isomorphism-nav-items (list - (dict :label "Roadmap" :href "/sx/(geography.(isomorphism))") - (dict :label "Bundle Analyzer" :href "/sx/(geography.(isomorphism.bundle-analyzer))") - (dict :label "Routing Analyzer" :href "/sx/(geography.(isomorphism.routing-analyzer))") - (dict :label "Data Test" :href "/sx/(geography.(isomorphism.data-test))") - (dict :label "Async IO" :href "/sx/(geography.(isomorphism.async-io))") - (dict :label "Streaming" :href "/sx/(geography.(isomorphism.streaming))") - (dict :label "Affinity" :href "/sx/(geography.(isomorphism.affinity))") - (dict :label "Optimistic" :href "/sx/(geography.(isomorphism.optimistic))") - (dict :label "Offline" :href "/sx/(geography.(isomorphism.offline))"))) +(define cek-nav-items (list (dict :label "Overview" :href "/sx/(geography.(cek))" :summary "The CEK machine — explicit evaluator with Control, Environment, Kontinuation. Three registers, pure step function.") (dict :label "Demo" :href "/sx/(geography.(cek.demo))" :summary "Live islands evaluated by the CEK machine. Counter, computed chains, reactive attributes — all through explicit continuation frames.") (dict :label "Freeze / Thaw" :href "/sx/(geography.(cek.freeze))" :summary "Serialize a CEK state to s-expressions. Ship it, store it, content-address it. Thaw and resume anywhere.") (dict :label "Content Addressing" :href "/sx/(geography.(cek.content))" :summary "Hash frozen state to a CID. Same state = same address. Store, share, verify, reproduce."))) -(define cek-nav-items (list - (dict :label "Overview" :href "/sx/(geography.(cek))" - :summary "The CEK machine — explicit evaluator with Control, Environment, Kontinuation. Three registers, pure step function.") - (dict :label "Demo" :href "/sx/(geography.(cek.demo))" - :summary "Live islands evaluated by the CEK machine. Counter, computed chains, reactive attributes — all through explicit continuation frames.") - (dict :label "Freeze / Thaw" :href "/sx/(geography.(cek.freeze))" - :summary "Serialize a CEK state to s-expressions. Ship it, store it, content-address it. Thaw and resume anywhere.") - (dict :label "Content Addressing" :href "/sx/(geography.(cek.content))" - :summary "Hash frozen state to a CID. Same state = same address. Store, share, verify, reproduce."))) +(define plans-nav-items (list (dict :label "Status" :href "/sx/(etc.(plan.status))" :summary "Audit of all plans — what's done, what's in progress, and what remains.") (dict :label "Reader Macros" :href "/sx/(etc.(plan.reader-macros))" :summary "Extensible parse-time transformations via # dispatch — datum comments, raw strings, and quote shorthand.") (dict :label "Reader Macro Demo" :href "/sx/(etc.(plan.reader-macro-demo))" :summary "Live demo: #z3 translates SX spec declarations to SMT-LIB verification conditions.") (dict :label "Theorem Prover" :href "/sx/(etc.(plan.theorem-prover))" :summary "prove.sx — constraint solver and property prover for SX primitives, written in SX.") (dict :label "Self-Hosting Bootstrapper" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.js-bootstrapper))" :summary "js.sx — SX-to-JavaScript translator + ahead-of-time component compiler. Zero-runtime static sites.") (dict :label "SX-Activity" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.typed-sx))" :summary "Gradual type system with static effect checking. Optional type annotations, deftype (aliases, unions, records), and effect declarations — checked at registration time, zero runtime cost. types.sx — specced, bootstrapped, catches composition and boundary errors.") (dict :label "Nav Redesign" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.fragment-protocol))" :summary "Structured sexp request/response for cross-service component transfer.") (dict :label "Glue Decoupling" :href "/sx/(etc.(plan.glue-decoupling))" :summary "Eliminate all cross-app model imports via glue service layer.") (dict :label "Social Sharing" :href "/sx/(etc.(plan.social-sharing))" :summary "OAuth-based sharing to Facebook, Instagram, Threads, Twitter/X, LinkedIn, and Mastodon.") (dict :label "SX CI Pipeline" :href "/sx/(etc.(plan.sx-ci))" :summary "Build, test, and deploy in s-expressions — CI pipelines as SX components.") (dict :label "Live Streaming" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.sx-swarm))" :summary "Container orchestration in SX — service definitions, environment macros, deploy pipelines. Replace YAML with a real language.") (dict :label "sx-proxy" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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.") (dict :label "Spec Explorer" :href "/sx/(etc.(plan.spec-explorer))" :summary "The fifth ring — SX exploring itself. Per-function cards showing source, Python/JS/Z3 translations, platform dependencies, tests, proofs, and usage examples.") (dict :label "SX Protocol" :href "/sx/(etc.(plan.sx-protocol))" :summary "S-expressions as a universal protocol for networked hypermedia — replacing URLs, HTTP verbs, query languages, and rendering with one evaluable format.") (dict :label "Scoped Effects" :href "/sx/(etc.(plan.scoped-effects))" :summary "Algebraic effects as the unified foundation — spreads, islands, lakes, signals, and context are all instances of one primitive: a named scope with downward value, upward accumulation, and a propagation mode.") (dict :label "Foundations" :href "/sx/(etc.(plan.foundations))" :summary "The computational floor — from scoped effects through algebraic effects and delimited continuations to the CEK machine. Why three registers are irreducible, and the three-axis model (depth, topology, linearity).") (dict :label "Deref as Shift" :href "/sx/(etc.(plan.cek-reactive))" :summary "Phase B: replace explicit effect wrapping with implicit continuation capture. Deref inside reactive-reset performs shift, capturing the rest of the expression as the subscriber.") (dict :label "Rust/WASM Host" :href "/sx/(etc.(plan.rust-wasm-host))" :summary "Bootstrap the SX spec to Rust, compile to WASM, replace sx-browser.js. Shared platform layer for DOM, phased rollout from parse to full parity.") (dict :label "Isolated Evaluator" :href "/sx/(etc.(plan.isolated-evaluator))" :summary "Core/application split, shared sx-platform.js, isolated JS evaluator, Rust WASM via handle table. Only language-defining spec gets bootstrapped; everything else is runtime-evaluated .sx.") (dict :label "Mother Language" :href "/sx/(etc.(plan.mother-language))" :summary "SX as its own compiler. OCaml as substrate (closest to CEK), Koka as alternative (compile-time linearity), ultimately self-hosting. One language, every target.") (dict :label "sx-web" :href "/sx/(etc.(plan.sx-web))" :summary "Federated component web. Browser nodes via WebTransport, server nodes via IPFS, content-addressed SX verified by CID. In-browser editing, testing, publishing. AI composition over the federated graph."))) -(define plans-nav-items (list - (dict :label "Status" :href "/sx/(etc.(plan.status))" - :summary "Audit of all plans — what's done, what's in progress, and what remains.") - (dict :label "Reader Macros" :href "/sx/(etc.(plan.reader-macros))" - :summary "Extensible parse-time transformations via # dispatch — datum comments, raw strings, and quote shorthand.") - (dict :label "Reader Macro Demo" :href "/sx/(etc.(plan.reader-macro-demo))" - :summary "Live demo: #z3 translates SX spec declarations to SMT-LIB verification conditions.") - (dict :label "Theorem Prover" :href "/sx/(etc.(plan.theorem-prover))" - :summary "prove.sx — constraint solver and property prover for SX primitives, written in SX.") - (dict :label "Self-Hosting Bootstrapper" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.js-bootstrapper))" - :summary "js.sx — SX-to-JavaScript translator + ahead-of-time component compiler. Zero-runtime static sites.") - (dict :label "SX-Activity" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.typed-sx))" - :summary "Gradual type system with static effect checking. Optional type annotations, deftype (aliases, unions, records), and effect declarations — checked at registration time, zero runtime cost. types.sx — specced, bootstrapped, catches composition and boundary errors.") - (dict :label "Nav Redesign" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.fragment-protocol))" - :summary "Structured sexp request/response for cross-service component transfer.") - (dict :label "Glue Decoupling" :href "/sx/(etc.(plan.glue-decoupling))" - :summary "Eliminate all cross-app model imports via glue service layer.") - (dict :label "Social Sharing" :href "/sx/(etc.(plan.social-sharing))" - :summary "OAuth-based sharing to Facebook, Instagram, Threads, Twitter/X, LinkedIn, and Mastodon.") - (dict :label "SX CI Pipeline" :href "/sx/(etc.(plan.sx-ci))" - :summary "Build, test, and deploy in s-expressions — CI pipelines as SX components.") - (dict :label "Live Streaming" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.sx-swarm))" - :summary "Container orchestration in SX — service definitions, environment macros, deploy pipelines. Replace YAML with a real language.") - (dict :label "sx-proxy" :href "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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 "/sx/(etc.(plan.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.") - (dict :label "Spec Explorer" :href "/sx/(etc.(plan.spec-explorer))" - :summary "The fifth ring — SX exploring itself. Per-function cards showing source, Python/JS/Z3 translations, platform dependencies, tests, proofs, and usage examples.") - (dict :label "SX Protocol" :href "/sx/(etc.(plan.sx-protocol))" - :summary "S-expressions as a universal protocol for networked hypermedia — replacing URLs, HTTP verbs, query languages, and rendering with one evaluable format.") - (dict :label "Scoped Effects" :href "/sx/(etc.(plan.scoped-effects))" - :summary "Algebraic effects as the unified foundation — spreads, islands, lakes, signals, and context are all instances of one primitive: a named scope with downward value, upward accumulation, and a propagation mode.") - (dict :label "Foundations" :href "/sx/(etc.(plan.foundations))" - :summary "The computational floor — from scoped effects through algebraic effects and delimited continuations to the CEK machine. Why three registers are irreducible, and the three-axis model (depth, topology, linearity).") - (dict :label "Deref as Shift" :href "/sx/(etc.(plan.cek-reactive))" - :summary "Phase B: replace explicit effect wrapping with implicit continuation capture. Deref inside reactive-reset performs shift, capturing the rest of the expression as the subscriber.") - (dict :label "Rust/WASM Host" :href "/sx/(etc.(plan.rust-wasm-host))" - :summary "Bootstrap the SX spec to Rust, compile to WASM, replace sx-browser.js. Shared platform layer for DOM, phased rollout from parse to full parity.") - (dict :label "Isolated Evaluator" :href "/sx/(etc.(plan.isolated-evaluator))" - :summary "Core/application split, shared sx-platform.js, isolated JS evaluator, Rust WASM via handle table. Only language-defining spec gets bootstrapped; everything else is runtime-evaluated .sx.") - (dict :label "Mother Language" :href "/sx/(etc.(plan.mother-language))" - :summary "SX as its own compiler. OCaml as substrate (closest to CEK), Koka as alternative (compile-time linearity), ultimately self-hosting. One language, every target."))) +(define reactive-examples-nav-items (list {:href "/sx/(geography.(reactive.(examples.counter)))" :label "Counter"} {:href "/sx/(geography.(reactive.(examples.temperature)))" :label "Temperature"} {:href "/sx/(geography.(reactive.(examples.stopwatch)))" :label "Stopwatch"} {:href "/sx/(geography.(reactive.(examples.imperative)))" :label "Imperative"} {:href "/sx/(geography.(reactive.(examples.reactive-list)))" :label "Reactive List"} {:href "/sx/(geography.(reactive.(examples.input-binding)))" :label "Input Binding"} {:href "/sx/(geography.(reactive.(examples.portal)))" :label "Portals"} {:href "/sx/(geography.(reactive.(examples.error-boundary)))" :label "Error Boundary"} {:href "/sx/(geography.(reactive.(examples.refs)))" :label "Refs"} {:href "/sx/(geography.(reactive.(examples.dynamic-class)))" :label "Dynamic Class"} {:href "/sx/(geography.(reactive.(examples.resource)))" :label "Resource"} {:href "/sx/(geography.(reactive.(examples.transition)))" :label "Transitions"} {:href "/sx/(geography.(reactive.(examples.stores)))" :label "Stores"} {:href "/sx/(geography.(reactive.(examples.event-bridge-demo)))" :label "Event Bridge"} {:href "/sx/(geography.(reactive.(examples.defisland)))" :label "defisland"} {:href "/sx/(geography.(reactive.(examples.tests)))" :label "Tests"} {:href "/sx/(geography.(reactive.(examples.coverage)))" :label "Coverage"} {:href "/sx/(geography.(reactive.(examples.cyst)))" :label "Cyst"} {:href "/sx/(geography.(reactive.(examples.reactive-expressions)))" :label "Reactive Expressions"})) -(define reactive-examples-nav-items (list - {:label "Counter" :href "/sx/(geography.(reactive.(examples.counter)))"} - {:label "Temperature" :href "/sx/(geography.(reactive.(examples.temperature)))"} - {:label "Stopwatch" :href "/sx/(geography.(reactive.(examples.stopwatch)))"} - {:label "Imperative" :href "/sx/(geography.(reactive.(examples.imperative)))"} - {:label "Reactive List" :href "/sx/(geography.(reactive.(examples.reactive-list)))"} - {:label "Input Binding" :href "/sx/(geography.(reactive.(examples.input-binding)))"} - {:label "Portals" :href "/sx/(geography.(reactive.(examples.portal)))"} - {:label "Error Boundary" :href "/sx/(geography.(reactive.(examples.error-boundary)))"} - {:label "Refs" :href "/sx/(geography.(reactive.(examples.refs)))"} - {:label "Dynamic Class" :href "/sx/(geography.(reactive.(examples.dynamic-class)))"} - {:label "Resource" :href "/sx/(geography.(reactive.(examples.resource)))"} - {:label "Transitions" :href "/sx/(geography.(reactive.(examples.transition)))"} - {:label "Stores" :href "/sx/(geography.(reactive.(examples.stores)))"} - {:label "Event Bridge" :href "/sx/(geography.(reactive.(examples.event-bridge-demo)))"} - {:label "defisland" :href "/sx/(geography.(reactive.(examples.defisland)))"} - {:label "Tests" :href "/sx/(geography.(reactive.(examples.tests)))"} - {:label "Coverage" :href "/sx/(geography.(reactive.(examples.coverage)))"})) +(define reactive-islands-nav-items (list (dict :label "Examples" :href "/sx/(geography.(reactive.(examples)))" :summary "Live interactive islands — click the buttons, type in the inputs." :children reactive-examples-nav-items))) -(define reactive-islands-nav-items (list - (dict :label "Examples" :href "/sx/(geography.(reactive.(examples)))" - :summary "Live interactive islands — click the buttons, type in the inputs." - :children reactive-examples-nav-items))) +(define marshes-examples-nav-items (list {:href "/sx/(geography.(marshes.hypermedia-feeds))" :label "Hypermedia Feeds State"} {:href "/sx/(geography.(marshes.server-signals))" :label "Server Writes to Signals"} {:href "/sx/(geography.(marshes.on-settle))" :label "sx-on-settle"} {:href "/sx/(geography.(marshes.signal-triggers))" :label "Signal-Bound Triggers"} {:href "/sx/(geography.(marshes.view-transform))" :label "Reactive View Transform"})) -(define marshes-examples-nav-items (list - {:label "Hypermedia Feeds State" :href "/sx/(geography.(marshes.hypermedia-feeds))"} - {:label "Server Writes to Signals" :href "/sx/(geography.(marshes.server-signals))"} - {:label "sx-on-settle" :href "/sx/(geography.(marshes.on-settle))"} - {:label "Signal-Bound Triggers" :href "/sx/(geography.(marshes.signal-triggers))"} - {:label "Reactive View Transform" :href "/sx/(geography.(marshes.view-transform))"})) +(define bootstrappers-nav-items (list (dict :label "Overview" :href "/sx/(language.(bootstrapper))") (dict :label "JavaScript" :href "/sx/(language.(bootstrapper.javascript))") (dict :label "Python" :href "/sx/(language.(bootstrapper.python))") (dict :label "Self-Hosting (py.sx)" :href "/sx/(language.(bootstrapper.self-hosting))") (dict :label "Self-Hosting JS (js.sx)" :href "/sx/(language.(bootstrapper.self-hosting-js))") (dict :label "Page Helpers" :href "/sx/(language.(bootstrapper.page-helpers))"))) -(define bootstrappers-nav-items (list - (dict :label "Overview" :href "/sx/(language.(bootstrapper))") - (dict :label "JavaScript" :href "/sx/(language.(bootstrapper.javascript))") - (dict :label "Python" :href "/sx/(language.(bootstrapper.python))") - (dict :label "Self-Hosting (py.sx)" :href "/sx/(language.(bootstrapper.self-hosting))") - (dict :label "Self-Hosting JS (js.sx)" :href "/sx/(language.(bootstrapper.self-hosting-js))") - (dict :label "Page Helpers" :href "/sx/(language.(bootstrapper.page-helpers))"))) +(define core-spec-items (list (dict :slug "parser" :filename "parser.sx" :title "Parser" :desc "Tokenization and parsing of SX source text into AST." :prose "The parser converts SX source text into an abstract syntax tree. It tokenizes the input into atoms, strings, numbers, keywords, and delimiters, then assembles them into nested list structures. The parser is intentionally minimal — s-expressions need very little syntax to parse. Special reader macros handle quasiquote (\\`), unquote (~), splice (~@), and the quote (') shorthand. The output is a tree of plain lists, symbols, keywords, strings, and numbers that the evaluator can walk directly.") (dict :slug "evaluator" :filename "evaluator.sx" :title "Evaluator" :desc "CEK machine evaluator." :prose "The evaluator walks the AST produced by the parser and reduces it to values. It implements lexical scoping with closures, special forms (define, let, if, cond, fn, defcomp, defmacro, quasiquote, set!, do), and function application. Macros are expanded at eval time. Component definitions (defcomp) create callable component objects that participate in the rendering pipeline. The evaluator delegates rendering expressions — HTML tags, components, fragments — to whichever adapter is active, making the same source renderable to DOM nodes, HTML strings, or SX wire format.") (dict :slug "primitives" :filename "primitives.sx" :title "Primitives" :desc "All built-in pure functions and their signatures." :prose "Primitives are the built-in functions available in every SX environment. Each entry declares a name, parameter signature, and semantics. Bootstrap compilers implement these natively per target (JavaScript, Python, etc.). The registry covers arithmetic, comparison, string manipulation, list operations, dict operations, type predicates, and control flow helpers. All primitives are pure — they take values and return values with no side effects. Platform-specific operations (DOM access, HTTP, file I/O) are provided separately via platform bridge functions, not primitives.") (dict :slug "special-forms" :filename "special-forms.sx" :title "Special Forms" :desc "All special forms — syntactic constructs with custom evaluation rules." :prose "Special forms are the syntactic constructs whose arguments are NOT evaluated before dispatch. Each form has its own evaluation rules — unlike primitives, which receive pre-evaluated values. Together with primitives, special forms define the complete language surface. The registry covers control flow (if, when, cond, case, and, or), binding (let, letrec, define, set!), functions (lambda, defcomp, defmacro), sequencing (begin, do, thread-first), quoting (quote, quasiquote), continuations (reset, shift), guards (dynamic-wind), higher-order forms (map, filter, reduce), and domain-specific definitions (defstyle, defhandler, defpage, defquery, defaction).") (dict :slug "renderer" :filename "render.sx" :title "Renderer" :desc "Shared rendering registries and utilities used by all adapters." :prose "The renderer defines what is renderable and how arguments are parsed, but not the output format. It maintains registries of known HTML tags, SVG tags, void elements, and boolean attributes. It specifies how keyword arguments on elements become HTML attributes, how children are collected, and how special attributes (class, style, data-*) are handled. All three adapters (DOM, HTML, SX wire) share these definitions so they agree on what constitutes valid markup."))) -;; Spec file registry — canonical metadata for spec viewer pages. -;; Python only handles file I/O (read-spec-file); all metadata lives here. -;; The :prose field is an English-language description shown alongside the -;; canonical s-expression source. +(define adapter-spec-items (list (dict :slug "adapter-dom" :filename "adapter-dom.sx" :title "DOM Adapter" :desc "Renders SX expressions to live DOM nodes. Browser-only." :prose "The DOM adapter renders evaluated SX expressions into live browser DOM nodes — Elements, Text nodes, and DocumentFragments. It mirrors the HTML adapter's logic but produces DOM objects instead of strings. This is the adapter used by the browser-side SX runtime for initial mount, hydration, and dynamic updates. It handles element creation, attribute setting (including event handlers and style objects), SVG namespace handling, and fragment composition.") (dict :slug "adapter-html" :filename "adapter-html.sx" :title "HTML Adapter" :desc "Renders SX expressions to HTML strings. Server-side." :prose "The HTML adapter renders evaluated SX expressions to HTML strings. It is used server-side to produce complete HTML pages and fragments. It handles void elements (self-closing tags like
, ), boolean attributes, style serialization, class merging, and proper escaping. The output is standard HTML5 that any browser can parse.") (dict :slug "adapter-sx" :filename "adapter-sx.sx" :title "SX Wire Adapter" :desc "Serializes SX for client-side rendering. Component calls stay unexpanded." :prose "The SX wire adapter serializes expressions as SX source text for transmission to the browser, where sx.js renders them client-side. Unlike the HTML adapter, component calls (~plans/content-addressed-components/name ...) are NOT expanded — they are sent to the client as-is, allowing the browser to render them with its local component registry. HTML tags ARE serialized as s-expression source. This is the format used for SX-over-HTTP responses and the page boot payload.") (dict :slug "adapter-async" :filename "adapter-async.sx" :title "Async Adapter" :desc "Async versions of HTML and SX wire adapters for server-side rendering with I/O." :prose "The async adapter provides async-aware versions of the HTML and SX wire rendering functions. It intercepts I/O operations (database queries, service calls, fragment fetches) during evaluation, awaiting them before continuing. Entry points: async-render (HTML output with awaited I/O), async-aser (SX wire format with awaited I/O). The bootstrapper emits async def and automatic await insertion for all define-async functions. This adapter is what makes server-side SX pages work with real data."))) -(define core-spec-items (list - (dict :slug "parser" :filename "parser.sx" :title "Parser" - :desc "Tokenization and parsing of SX source text into AST." - :prose "The parser converts SX source text into an abstract syntax tree. It tokenizes the input into atoms, strings, numbers, keywords, and delimiters, then assembles them into nested list structures. The parser is intentionally minimal — s-expressions need very little syntax to parse. Special reader macros handle quasiquote (\\`), unquote (~), splice (~@), and the quote (') shorthand. The output is a tree of plain lists, symbols, keywords, strings, and numbers that the evaluator can walk directly.") - (dict :slug "evaluator" :filename "evaluator.sx" :title "Evaluator" - :desc "CEK machine evaluator." - :prose "The evaluator walks the AST produced by the parser and reduces it to values. It implements lexical scoping with closures, special forms (define, let, if, cond, fn, defcomp, defmacro, quasiquote, set!, do), and function application. Macros are expanded at eval time. Component definitions (defcomp) create callable component objects that participate in the rendering pipeline. The evaluator delegates rendering expressions — HTML tags, components, fragments — to whichever adapter is active, making the same source renderable to DOM nodes, HTML strings, or SX wire format.") - (dict :slug "primitives" :filename "primitives.sx" :title "Primitives" - :desc "All built-in pure functions and their signatures." - :prose "Primitives are the built-in functions available in every SX environment. Each entry declares a name, parameter signature, and semantics. Bootstrap compilers implement these natively per target (JavaScript, Python, etc.). The registry covers arithmetic, comparison, string manipulation, list operations, dict operations, type predicates, and control flow helpers. All primitives are pure — they take values and return values with no side effects. Platform-specific operations (DOM access, HTTP, file I/O) are provided separately via platform bridge functions, not primitives.") - (dict :slug "special-forms" :filename "special-forms.sx" :title "Special Forms" - :desc "All special forms — syntactic constructs with custom evaluation rules." - :prose "Special forms are the syntactic constructs whose arguments are NOT evaluated before dispatch. Each form has its own evaluation rules — unlike primitives, which receive pre-evaluated values. Together with primitives, special forms define the complete language surface. The registry covers control flow (if, when, cond, case, and, or), binding (let, letrec, define, set!), functions (lambda, defcomp, defmacro), sequencing (begin, do, thread-first), quoting (quote, quasiquote), continuations (reset, shift), guards (dynamic-wind), higher-order forms (map, filter, reduce), and domain-specific definitions (defstyle, defhandler, defpage, defquery, defaction).") - (dict :slug "renderer" :filename "render.sx" :title "Renderer" - :desc "Shared rendering registries and utilities used by all adapters." - :prose "The renderer defines what is renderable and how arguments are parsed, but not the output format. It maintains registries of known HTML tags, SVG tags, void elements, and boolean attributes. It specifies how keyword arguments on elements become HTML attributes, how children are collected, and how special attributes (class, style, data-*) are handled. All three adapters (DOM, HTML, SX wire) share these definitions so they agree on what constitutes valid markup."))) +(define browser-spec-items (list (dict :slug "engine" :filename "engine.sx" :title "SxEngine" :desc "Pure logic for fetch, swap, history, SSE, triggers, morph, and indicators." :prose "The engine specifies the pure logic of the browser-side fetch/swap/history system. Like HTMX but native to SX. It defines trigger parsing (click, submit, intersect, poll, load, revealed), swap algorithms (innerHTML, outerHTML, morph, beforebegin, etc.), the morph/diff algorithm for patching existing DOM, history management (push-url, replace-url, popstate), out-of-band swap identification, Server-Sent Events parsing, retry logic with exponential backoff, request header building, response header processing, and optimistic UI updates. This file contains no browser API calls — all platform interaction is in orchestration.sx.") (dict :slug "orchestration" :filename "orchestration.sx" :title "Orchestration" :desc "Browser wiring that binds engine logic to DOM events, fetch, and lifecycle." :prose "Orchestration is the browser wiring layer. It binds the pure engine logic to actual browser APIs: DOM event listeners, fetch(), AbortController, setTimeout/setInterval, IntersectionObserver, history.pushState, and EventSource (SSE). It implements the full request lifecycle — from trigger through fetch through swap — including CSS tracking, response type detection (SX vs HTML), OOB swap processing, script activation, element boosting, and preload. Dependency is strictly one-way: orchestration depends on engine, never the reverse.") (dict :slug "boot" :filename "boot.sx" :title "Boot" :desc "Browser startup lifecycle: mount, hydrate, script processing." :prose "Boot handles the browser startup sequence and provides the public API for mounting SX content. On page load it: (1) initializes CSS tracking, (2) processes