URL restructure, 404 page, trailing slash normalization, layout fixes
- Rename /reactive-islands/ → /reactive/, /reference/ → /hypermedia/reference/, /examples/ → /hypermedia/examples/ across all .sx and .py files - Add 404 error page (not-found.sx) working on both server refresh and client-side SX navigation via orchestration.sx error response handling - Add trailing slash redirect (GET only, excludes /api/, /static/, /internal/) - Remove blue sky-500 header bar from SX docs layout (conditional on header-rows) - Fix 405 on API endpoints from trailing slash redirect hitting POST/PUT/DELETE - Fix client-side 404: orchestration.sx now swaps error response content instead of silently dropping it - Add new plan files and home page component Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -12,10 +12,10 @@
|
||||
(dict :label "Server Rendering" :href "/docs/server-rendering")))
|
||||
|
||||
(define reference-nav-items (list
|
||||
(dict :label "Attributes" :href "/reference/attributes")
|
||||
(dict :label "Headers" :href "/reference/headers")
|
||||
(dict :label "Events" :href "/reference/events")
|
||||
(dict :label "JS API" :href "/reference/js-api")))
|
||||
(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")))
|
||||
|
||||
(define protocols-nav-items (list
|
||||
(dict :label "Wire Format" :href "/protocols/wire-format")
|
||||
@@ -26,33 +26,33 @@
|
||||
(dict :label "Future" :href "/protocols/future")))
|
||||
|
||||
(define examples-nav-items (list
|
||||
(dict :label "Click to Load" :href "/examples/click-to-load")
|
||||
(dict :label "Form Submission" :href "/examples/form-submission")
|
||||
(dict :label "Polling" :href "/examples/polling")
|
||||
(dict :label "Delete Row" :href "/examples/delete-row")
|
||||
(dict :label "Inline Edit" :href "/examples/inline-edit")
|
||||
(dict :label "OOB Swaps" :href "/examples/oob-swaps")
|
||||
(dict :label "Lazy Loading" :href "/examples/lazy-loading")
|
||||
(dict :label "Infinite Scroll" :href "/examples/infinite-scroll")
|
||||
(dict :label "Progress Bar" :href "/examples/progress-bar")
|
||||
(dict :label "Active Search" :href "/examples/active-search")
|
||||
(dict :label "Inline Validation" :href "/examples/inline-validation")
|
||||
(dict :label "Value Select" :href "/examples/value-select")
|
||||
(dict :label "Reset on Submit" :href "/examples/reset-on-submit")
|
||||
(dict :label "Edit Row" :href "/examples/edit-row")
|
||||
(dict :label "Bulk Update" :href "/examples/bulk-update")
|
||||
(dict :label "Swap Positions" :href "/examples/swap-positions")
|
||||
(dict :label "Select Filter" :href "/examples/select-filter")
|
||||
(dict :label "Tabs" :href "/examples/tabs")
|
||||
(dict :label "Animations" :href "/examples/animations")
|
||||
(dict :label "Dialogs" :href "/examples/dialogs")
|
||||
(dict :label "Keyboard Shortcuts" :href "/examples/keyboard-shortcuts")
|
||||
(dict :label "PUT / PATCH" :href "/examples/put-patch")
|
||||
(dict :label "JSON Encoding" :href "/examples/json-encoding")
|
||||
(dict :label "Vals & Headers" :href "/examples/vals-and-headers")
|
||||
(dict :label "Loading States" :href "/examples/loading-states")
|
||||
(dict :label "Request Abort" :href "/examples/sync-replace")
|
||||
(dict :label "Retry" :href "/examples/retry")))
|
||||
(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")))
|
||||
|
||||
(define cssx-nav-items (list
|
||||
(dict :label "Overview" :href "/cssx/")
|
||||
@@ -200,22 +200,26 @@
|
||||
(dict :label "Async Eval Convergence" :href "/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"
|
||||
:summary "Compile SX to bytecode, run in a Rust/WASM VM. Compact wire format, no parse overhead, near-native speed, DOM via JS bindings.")))
|
||||
: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"
|
||||
: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"
|
||||
: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-islands/"
|
||||
(dict :label "Overview" :href "/reactive/"
|
||||
:summary "Architecture, four levels (L0-L3), and current implementation status.")
|
||||
(dict :label "Demo" :href "/reactive-islands/demo"
|
||||
(dict :label "Demo" :href "/reactive/demo"
|
||||
:summary "Live demonstration of signals, computed, effects, batch, and defisland — all transpiled from spec.")
|
||||
(dict :label "Event Bridge" :href "/reactive-islands/event-bridge"
|
||||
(dict :label "Event Bridge" :href "/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-islands/named-stores"
|
||||
(dict :label "Named Stores" :href "/reactive/named-stores"
|
||||
:summary "Page-level signal containers via def-store/use-store — persist across island destruction/recreation.")
|
||||
(dict :label "Plan" :href "/reactive-islands/plan"
|
||||
(dict :label "Plan" :href "/reactive/plan"
|
||||
:summary "The full design document — rendering boundary, state flow, signal primitives, island lifecycle.")
|
||||
(dict :label "Marshes" :href "/reactive-islands/marshes"
|
||||
(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-islands/phase2"
|
||||
(dict :label "Phase 2" :href "/reactive/phase2"
|
||||
:summary "Input binding, keyed lists, reactive class/style, refs, portals, error boundaries, suspense, transitions.")))
|
||||
|
||||
(define bootstrappers-nav-items (list
|
||||
@@ -322,19 +326,21 @@
|
||||
(define sx-nav-tree
|
||||
{:label "sx" :href "/"
|
||||
:children (list
|
||||
{:label "Reactive" :href "/reactive/" :children reactive-islands-nav-items}
|
||||
{:label "Hypermedia" :href "/hypermedia/"
|
||||
: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 "Reference" :href "/reference/" :children reference-nav-items}
|
||||
{:label "Protocols" :href "/protocols/" :children protocols-nav-items}
|
||||
{:label "Examples" :href "/examples/" :children examples-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 "/reactive-islands/" :children reactive-islands-nav-items})})
|
||||
{:label "Plans" :href "/plans/" :children plans-nav-items})})
|
||||
|
||||
;; Resolve a URL path to a nav trail + children.
|
||||
;; Returns {:trail [{:node N :siblings S} ...] :children [...] :depth N}
|
||||
|
||||
Reference in New Issue
Block a user