;; SX docs app — declarative page definitions ;; All content dispatched via case + direct component references. ;; Navigation built from SX data (nav-data.sx), no Python intermediaries. ;; --------------------------------------------------------------------------- ;; Home page ;; --------------------------------------------------------------------------- (defpage home :path "/" :auth :public :layout :sx :content (~sx-home-content)) ;; --------------------------------------------------------------------------- ;; Docs section ;; --------------------------------------------------------------------------- (defpage docs-index :path "/docs/" :auth :public :layout (:sx-section :section "Docs" :sub-label "Docs" :sub-href "/docs/introduction" :sub-nav (~section-nav :items docs-nav-items :current "Introduction") :selected "Introduction") :content (~docs-introduction-content)) (defpage docs-page :path "/docs/" :auth :public :layout (:sx-section :section "Docs" :sub-label "Docs" :sub-href "/docs/introduction" :sub-nav (~section-nav :items docs-nav-items :current (find-current docs-nav-items slug)) :selected (or (find-current docs-nav-items slug) "")) :content (case slug "introduction" (~docs-introduction-content) "getting-started" (~docs-getting-started-content) "components" (~docs-components-content) "evaluator" (~docs-evaluator-content) "primitives" (~docs-primitives-content :prims (~doc-primitives-tables :primitives (primitives-data))) "special-forms" (~docs-special-forms-content :forms (~doc-special-forms-tables :forms (special-forms-data))) "server-rendering" (~docs-server-rendering-content) :else (~docs-introduction-content))) ;; --------------------------------------------------------------------------- ;; Reference section ;; --------------------------------------------------------------------------- (defpage reference-index :path "/reference/" :auth :public :layout (:sx-section :section "Reference" :sub-label "Reference" :sub-href "/reference/" :sub-nav (~section-nav :items reference-nav-items :current "") :selected "") :content (~reference-index-content)) (defpage reference-page :path "/reference/" :auth :public :layout (:sx-section :section "Reference" :sub-label "Reference" :sub-href "/reference/" :sub-nav (~section-nav :items reference-nav-items :current (find-current reference-nav-items slug)) :selected (or (find-current reference-nav-items slug) "")) :data (reference-data slug) :content (case slug "attributes" (~reference-attrs-content :req-table (~doc-attr-table-from-data :title "Request Attributes" :attrs req-attrs) :beh-table (~doc-attr-table-from-data :title "Behavior Attributes" :attrs beh-attrs) :uniq-table (~doc-attr-table-from-data :title "Unique to sx" :attrs uniq-attrs)) "headers" (~reference-headers-content :req-table (~doc-headers-table-from-data :title "Request Headers" :headers req-headers) :resp-table (~doc-headers-table-from-data :title "Response Headers" :headers resp-headers)) "events" (~reference-events-content :table (~doc-two-col-table-from-data :intro "sx fires custom DOM events at various points in the request lifecycle." :col1 "Event" :col2 "Description" :items events-list)) "js-api" (~reference-js-api-content :table (~doc-two-col-table-from-data :intro "The client-side sx.js library exposes a public API for programmatic use." :col1 "Method" :col2 "Description" :items js-api-list)) :else (~reference-attrs-content :req-table (~doc-attr-table-from-data :title "Request Attributes" :attrs req-attrs) :beh-table (~doc-attr-table-from-data :title "Behavior Attributes" :attrs beh-attrs) :uniq-table (~doc-attr-table-from-data :title "Unique to sx" :attrs uniq-attrs)))) (defpage reference-attr-detail :path "/reference/attributes/" :auth :public :layout (:sx-section :section "Reference" :sub-label "Reference" :sub-href "/reference/" :sub-nav (~section-nav :items reference-nav-items :current "Attributes") :selected "Attributes") :data (attr-detail-data slug) :content (if attr-not-found (~reference-attr-not-found :slug slug) (~reference-attr-detail-content :title attr-title :description attr-description :demo attr-demo :example-code attr-example :handler-code attr-handler :wire-placeholder-id attr-wire-id))) (defpage reference-header-detail :path "/reference/headers/" :auth :public :layout (:sx-section :section "Reference" :sub-label "Reference" :sub-href "/reference/" :sub-nav (~section-nav :items reference-nav-items :current "Headers") :selected "Headers") :data (header-detail-data slug) :content (if header-not-found (~reference-attr-not-found :slug slug) (~reference-header-detail-content :title header-title :direction header-direction :description header-description :example-code header-example :demo header-demo))) (defpage reference-event-detail :path "/reference/events/" :auth :public :layout (:sx-section :section "Reference" :sub-label "Reference" :sub-href "/reference/" :sub-nav (~section-nav :items reference-nav-items :current "Events") :selected "Events") :data (event-detail-data slug) :content (if event-not-found (~reference-attr-not-found :slug slug) (~reference-event-detail-content :title event-title :description event-description :example-code event-example :demo event-demo))) ;; --------------------------------------------------------------------------- ;; Protocols section ;; --------------------------------------------------------------------------- (defpage protocols-index :path "/protocols/" :auth :public :layout (:sx-section :section "Protocols" :sub-label "Protocols" :sub-href "/protocols/wire-format" :sub-nav (~section-nav :items protocols-nav-items :current "Wire Format") :selected "Wire Format") :content (~protocol-wire-format-content)) (defpage protocol-page :path "/protocols/" :auth :public :layout (:sx-section :section "Protocols" :sub-label "Protocols" :sub-href "/protocols/wire-format" :sub-nav (~section-nav :items protocols-nav-items :current (find-current protocols-nav-items slug)) :selected (or (find-current protocols-nav-items slug) "")) :content (case slug "wire-format" (~protocol-wire-format-content) "fragments" (~protocol-fragments-content) "resolver-io" (~protocol-resolver-io-content) "internal-services" (~protocol-internal-services-content) "activitypub" (~protocol-activitypub-content) "future" (~protocol-future-content) :else (~protocol-wire-format-content))) ;; --------------------------------------------------------------------------- ;; Examples section ;; --------------------------------------------------------------------------- (defpage examples-index :path "/examples/" :auth :public :layout (:sx-section :section "Examples" :sub-label "Examples" :sub-href "/examples/click-to-load" :sub-nav (~section-nav :items examples-nav-items :current "Click to Load") :selected "Click to Load") :content (~example-click-to-load)) (defpage examples-page :path "/examples/" :auth :public :layout (:sx-section :section "Examples" :sub-label "Examples" :sub-href "/examples/click-to-load" :sub-nav (~section-nav :items examples-nav-items :current (find-current examples-nav-items slug)) :selected (or (find-current examples-nav-items slug) "")) :content (case slug "click-to-load" (~example-click-to-load) "form-submission" (~example-form-submission) "polling" (~example-polling) "delete-row" (~example-delete-row) "inline-edit" (~example-inline-edit) "oob-swaps" (~example-oob-swaps) "lazy-loading" (~example-lazy-loading) "infinite-scroll" (~example-infinite-scroll) "progress-bar" (~example-progress-bar) "active-search" (~example-active-search) "inline-validation" (~example-inline-validation) "value-select" (~example-value-select) "reset-on-submit" (~example-reset-on-submit) "edit-row" (~example-edit-row) "bulk-update" (~example-bulk-update) "swap-positions" (~example-swap-positions) "select-filter" (~example-select-filter) "tabs" (~example-tabs) "animations" (~example-animations) "dialogs" (~example-dialogs) "keyboard-shortcuts" (~example-keyboard-shortcuts) "put-patch" (~example-put-patch) "json-encoding" (~example-json-encoding) "vals-and-headers" (~example-vals-and-headers) "loading-states" (~example-loading-states) "sync-replace" (~example-sync-replace) "retry" (~example-retry) :else (~example-click-to-load))) ;; --------------------------------------------------------------------------- ;; Essays section ;; --------------------------------------------------------------------------- (defpage essays-index :path "/essays/" :auth :public :layout (:sx-section :section "Essays" :sub-label "Essays" :sub-href "/essays/" :sub-nav (~section-nav :items essays-nav-items :current "") :selected "") :content (~essays-index-content)) (defpage essay-page :path "/essays/" :auth :public :layout (:sx-section :section "Essays" :sub-label "Essays" :sub-href "/essays/" :sub-nav (~section-nav :items essays-nav-items :current (find-current essays-nav-items slug)) :selected (or (find-current essays-nav-items slug) "")) :content (case slug "sx-sucks" (~essay-sx-sucks) "why-sexps" (~essay-why-sexps) "htmx-react-hybrid" (~essay-htmx-react-hybrid) "on-demand-css" (~essay-on-demand-css) "client-reactivity" (~essay-client-reactivity) "sx-native" (~essay-sx-native) "tail-call-optimization" (~essay-tail-call-optimization) "continuations" (~essay-continuations) "reflexive-web" (~essay-reflexive-web) "server-architecture" (~essay-server-architecture) "separation-of-concerns" (~essay-separation-of-concerns) "sx-and-ai" (~essay-sx-and-ai) "no-alternative" (~essay-no-alternative) "zero-tooling" (~essay-zero-tooling) "react-is-hypermedia" (~essay-react-is-hypermedia) :else (~essays-index-content))) ;; --------------------------------------------------------------------------- ;; Philosophy section ;; --------------------------------------------------------------------------- (defpage philosophy-index :path "/philosophy/" :auth :public :layout (:sx-section :section "Philosophy" :sub-label "Philosophy" :sub-href "/philosophy/" :sub-nav (~section-nav :items philosophy-nav-items :current "") :selected "") :content (~philosophy-index-content)) (defpage philosophy-page :path "/philosophy/" :auth :public :layout (:sx-section :section "Philosophy" :sub-label "Philosophy" :sub-href "/philosophy/" :sub-nav (~section-nav :items philosophy-nav-items :current (find-current philosophy-nav-items slug)) :selected (or (find-current philosophy-nav-items slug) "")) :content (case slug "sx-manifesto" (~essay-sx-manifesto) "godel-escher-bach" (~essay-godel-escher-bach) "wittgenstein" (~essay-sx-and-wittgenstein) "dennett" (~essay-sx-and-dennett) "existentialism" (~essay-s-existentialism) :else (~philosophy-index-content))) ;; --------------------------------------------------------------------------- ;; CSSX section ;; --------------------------------------------------------------------------- (defpage cssx-index :path "/cssx/" :auth :public :layout (:sx-section :section "CSSX" :sub-label "CSSX" :sub-href "/cssx/" :sub-nav (~section-nav :items cssx-nav-items :current "Overview") :selected "Overview") :content (~cssx-overview-content)) (defpage cssx-page :path "/cssx/" :auth :public :layout (:sx-section :section "CSSX" :sub-label "CSSX" :sub-href "/cssx/" :sub-nav (~section-nav :items cssx-nav-items :current (find-current cssx-nav-items slug)) :selected (or (find-current cssx-nav-items slug) "")) :content (case slug "patterns" (~cssx-patterns-content) "delivery" (~cssx-delivery-content) "async" (~cssx-async-content) "live" (~cssx-live-content) "comparisons" (~cssx-comparison-content) "philosophy" (~cssx-philosophy-content) :else (~cssx-overview-content))) ;; --------------------------------------------------------------------------- ;; Specs section ;; --------------------------------------------------------------------------- (defpage specs-index :path "/specs/" :auth :public :layout (:sx-section :section "Specs" :sub-label "Specs" :sub-href "/specs/" :sub-nav (~section-nav :items specs-nav-items :current "Architecture") :selected "Architecture") :content (~spec-architecture-content)) (defpage specs-page :path "/specs/" :auth :public :layout (:sx-section :section "Specs" :sub-label "Specs" :sub-href "/specs/" :sub-nav (~section-nav :items specs-nav-items :current (find-current specs-nav-items slug)) :selected (or (find-current specs-nav-items slug) "")) :content (case slug "core" (~spec-overview-content :spec-title "Core Language" :spec-files (map (fn (item) (dict :title (get item "title") :desc (get item "desc") :prose (get item "prose") :filename (get item "filename") :href (str "/specs/" (get item "slug")) :source (read-spec-file (get item "filename")))) core-spec-items)) "adapters" (~spec-overview-content :spec-title "Adapters & Engine" :spec-files (map (fn (item) (dict :title (get item "title") :desc (get item "desc") :prose (get item "prose") :filename (get item "filename") :href (str "/specs/" (get item "slug")) :source (read-spec-file (get item "filename")))) adapter-spec-items)) "browser" (~spec-overview-content :spec-title "Browser" :spec-files (map (fn (item) (dict :title (get item "title") :desc (get item "desc") :prose (get item "prose") :filename (get item "filename") :href (str "/specs/" (get item "slug")) :source (read-spec-file (get item "filename")))) browser-spec-items)) "extensions" (~spec-overview-content :spec-title "Extensions" :spec-files (map (fn (item) (dict :title (get item "title") :desc (get item "desc") :prose (get item "prose") :filename (get item "filename") :href (str "/specs/" (get item "slug")) :source (read-spec-file (get item "filename")))) extension-spec-items)) :else (let ((spec (find-spec slug))) (if spec (~spec-detail-content :spec-title (get spec "title") :spec-desc (get spec "desc") :spec-filename (get spec "filename") :spec-source (read-spec-file (get spec "filename")) :spec-prose (get spec "prose")) (~spec-not-found :slug slug))))) ;; --------------------------------------------------------------------------- ;; Bootstrappers section ;; --------------------------------------------------------------------------- (defpage bootstrappers-index :path "/bootstrappers/" :auth :public :layout (:sx-section :section "Bootstrappers" :sub-label "Bootstrappers" :sub-href "/bootstrappers/" :sub-nav (~section-nav :items bootstrappers-nav-items :current "Overview") :selected "Overview") :content (~bootstrappers-index-content)) (defpage bootstrapper-page :path "/bootstrappers/" :auth :public :layout (:sx-section :section "Bootstrappers" :sub-label "Bootstrappers" :sub-href "/bootstrappers/" :sub-nav (~section-nav :items bootstrappers-nav-items :current (find-current bootstrappers-nav-items slug)) :selected (or (find-current bootstrappers-nav-items slug) "")) :data (bootstrapper-data slug) :content (if bootstrapper-not-found (~spec-not-found :slug slug) (if (= slug "python") (~bootstrapper-py-content :bootstrapper-source bootstrapper-source :bootstrapped-output bootstrapped-output) (~bootstrapper-js-content :bootstrapper-source bootstrapper-source :bootstrapped-output bootstrapped-output)))) ;; --------------------------------------------------------------------------- ;; Isomorphism section ;; --------------------------------------------------------------------------- (defpage isomorphism-index :path "/isomorphism/" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Roadmap") :selected "Roadmap") :content (~plan-isomorphic-content)) (defpage bundle-analyzer :path "/isomorphism/bundle-analyzer" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Bundle Analyzer") :selected "Bundle Analyzer") :data (bundle-analyzer-data) :content (~bundle-analyzer-content :pages pages :total-components total-components :total-macros total-macros :pure-count pure-count :io-count io-count)) (defpage routing-analyzer :path "/isomorphism/routing-analyzer" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Routing Analyzer") :selected "Routing Analyzer") :data (routing-analyzer-data) :content (~routing-analyzer-content :pages pages :total-pages total-pages :client-count client-count :server-count server-count :registry-sample registry-sample)) (defpage data-test :path "/isomorphism/data-test" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Data Test") :selected "Data Test") :data (data-test-data) :content (~data-test-content :server-time server-time :items items :phase phase :transport transport)) (defpage async-io-demo :path "/isomorphism/async-io" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Async IO") :selected "Async IO") :content (~async-io-demo-content)) (defpage streaming-demo :path "/isomorphism/streaming" :auth :public :stream true :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Streaming") :selected "Streaming") :shell (~streaming-demo-layout (~suspense :id "stream-fast" :fallback (~stream-skeleton)) (~suspense :id "stream-medium" :fallback (~stream-skeleton)) (~suspense :id "stream-slow" :fallback (~stream-skeleton))) :data (streaming-demo-data) :content (~streaming-demo-chunk :stream-label stream-label :stream-color stream-color :stream-message stream-message :stream-time stream-time)) (defpage affinity-demo :path "/isomorphism/affinity" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Affinity") :selected "Affinity") :data (affinity-demo-data) :content (~affinity-demo-content :components components :page-plans page-plans)) (defpage optimistic-demo :path "/isomorphism/optimistic" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Optimistic") :selected "Optimistic") :data (optimistic-demo-data) :content (~optimistic-demo-content :items items :server-time server-time)) (defpage offline-demo :path "/isomorphism/offline" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current "Offline") :selected "Offline") :data (offline-demo-data) :content (~offline-demo-content :notes notes :server-time server-time)) ;; Wildcard must come AFTER specific routes (first-match routing) (defpage isomorphism-page :path "/isomorphism/" :auth :public :layout (:sx-section :section "Isomorphism" :sub-label "Isomorphism" :sub-href "/isomorphism/" :sub-nav (~section-nav :items isomorphism-nav-items :current (find-current isomorphism-nav-items slug)) :selected (or (find-current isomorphism-nav-items slug) "")) :content (case slug "bundle-analyzer" (~bundle-analyzer-content :pages pages :total-components total-components :total-macros total-macros :pure-count pure-count :io-count io-count) "routing-analyzer" (~routing-analyzer-content :pages pages :total-pages total-pages :client-count client-count :server-count server-count :registry-sample registry-sample) :else (~plan-isomorphic-content))) ;; --------------------------------------------------------------------------- ;; Plans section ;; --------------------------------------------------------------------------- (defpage plans-index :path "/plans/" :auth :public :layout (:sx-section :section "Plans" :sub-label "Plans" :sub-href "/plans/" :sub-nav (~section-nav :items plans-nav-items :current "") :selected "") :content (~plans-index-content)) (defpage plan-page :path "/plans/" :auth :public :layout (:sx-section :section "Plans" :sub-label "Plans" :sub-href "/plans/" :sub-nav (~section-nav :items plans-nav-items :current (find-current plans-nav-items slug)) :selected (or (find-current plans-nav-items slug) "")) :data (case slug "theorem-prover" (prove-data) :else nil) :content (case slug "status" (~plan-status-content) "reader-macros" (~plan-reader-macros-content) "reader-macro-demo" (~plan-reader-macro-demo-content) "theorem-prover" (~plan-theorem-prover-content) "self-hosting-bootstrapper" (~plan-self-hosting-bootstrapper-content) "js-bootstrapper" (~plan-js-bootstrapper-content) "sx-activity" (~plan-sx-activity-content) "predictive-prefetch" (~plan-predictive-prefetch-content) "content-addressed-components" (~plan-content-addressed-components-content) "fragment-protocol" (~plan-fragment-protocol-content) "glue-decoupling" (~plan-glue-decoupling-content) "social-sharing" (~plan-social-sharing-content) "sx-ci" (~plan-sx-ci-content) "live-streaming" (~plan-live-streaming-content) :else (~plans-index-content))) ;; --------------------------------------------------------------------------- ;; Reactive Islands section ;; --------------------------------------------------------------------------- (defpage reactive-islands-index :path "/reactive-islands/" :auth :public :layout (:sx-section :section "Reactive Islands" :sub-label "Reactive Islands" :sub-href "/reactive-islands/" :sub-nav (~section-nav :items reactive-islands-nav-items :current "Overview") :selected "Overview") :content (~reactive-islands-index-content)) (defpage reactive-islands-page :path "/reactive-islands/" :auth :public :layout (:sx-section :section "Reactive Islands" :sub-label "Reactive Islands" :sub-href "/reactive-islands/" :sub-nav (~section-nav :items reactive-islands-nav-items :current (find-current reactive-islands-nav-items slug)) :selected (or (find-current reactive-islands-nav-items slug) "")) :content (case slug "demo" (~reactive-islands-demo-content) "event-bridge" (~reactive-islands-event-bridge-content) "named-stores" (~reactive-islands-named-stores-content) "plan" (~reactive-islands-plan-content) "phase2" (~reactive-islands-phase2-content) :else (~reactive-islands-index-content))) ;; --------------------------------------------------------------------------- ;; Testing section ;; --------------------------------------------------------------------------- (defpage testing-index :path "/testing/" :auth :public :layout (:sx-section :section "Testing" :sub-label "Testing" :sub-href "/testing/" :sub-nav (~section-nav :items testing-nav-items :current "Overview") :selected "Overview") :data (run-modular-tests "all") :content (~testing-overview-content :server-results server-results :framework-source framework-source :eval-source eval-source :parser-source parser-source :router-source router-source :render-source render-source :deps-source deps-source :engine-source engine-source)) (defpage testing-page :path "/testing/" :auth :public :layout (:sx-section :section "Testing" :sub-label "Testing" :sub-href "/testing/" :sub-nav (~section-nav :items testing-nav-items :current (find-current testing-nav-items slug)) :selected (or (find-current testing-nav-items slug) "")) :data (case slug "eval" (run-modular-tests "eval") "parser" (run-modular-tests "parser") "router" (run-modular-tests "router") "render" (run-modular-tests "render") "deps" (run-modular-tests "deps") "engine" (run-modular-tests "engine") "orchestration" (run-modular-tests "orchestration") :else (dict)) :content (case slug "eval" (~testing-spec-content :spec-name "eval" :spec-title "Evaluator Tests" :spec-desc "81 tests covering the core evaluator and all primitives — literals, arithmetic, comparison, strings, lists, dicts, predicates, special forms, lambdas, higher-order functions, components, macros, threading, and edge cases." :spec-source spec-source :framework-source framework-source :server-results server-results) "parser" (~testing-spec-content :spec-name "parser" :spec-title "Parser Tests" :spec-desc "39 tests covering tokenization and parsing — integers, floats, strings, escape sequences, booleans, nil, keywords, symbols, lists, dicts, whitespace, comments, quote sugar, serialization, and round-trips." :spec-source spec-source :framework-source framework-source :server-results server-results) "router" (~testing-spec-content :spec-name "router" :spec-title "Router Tests" :spec-desc "18 tests covering client-side route matching — path splitting, pattern parsing, segment matching, parameter extraction, and route table search." :spec-source spec-source :framework-source framework-source :server-results server-results) "render" (~testing-spec-content :spec-name "render" :spec-title "Renderer Tests" :spec-desc "23 tests covering HTML rendering — elements, attributes, void elements, boolean attributes, fragments, escaping, control flow, and component rendering." :spec-source spec-source :framework-source framework-source :server-results server-results) "deps" (~testing-spec-content :spec-name "deps" :spec-title "Dependency Analysis Tests" :spec-desc "33 tests covering component dependency analysis — scan-refs, scan-components-from-source, transitive-deps, components-needed, scan-io-refs, and component-pure? classification." :spec-source spec-source :framework-source framework-source :server-results server-results) "engine" (~testing-spec-content :spec-name "engine" :spec-title "Engine Tests" :spec-desc "37 tests covering engine pure functions — parse-time, parse-trigger-spec, default-trigger, parse-swap-spec, parse-retry-spec, next-retry-ms, and filter-params." :spec-source spec-source :framework-source framework-source :server-results server-results) "orchestration" (~testing-spec-content :spec-name "orchestration" :spec-title "Orchestration Tests" :spec-desc "17 tests covering Phase 7c+7d orchestration — page data cache, optimistic cache update/revert/confirm, offline connectivity, offline queue mutation, and offline-aware routing." :spec-source spec-source :framework-source framework-source :server-results server-results) "runners" (~testing-runners-content) :else (~testing-overview-content :server-results server-results)))