(defcomp ()
  (~docs/page :title "Resolver I/O"
    (~docs/section :title "Async I/O primitives" :id "primitives"
      (p (~tw :tokens "text-stone-600")
        "The sx resolver identifies I/O nodes in the render tree, groups them, executes them in parallel via asyncio.gather(), and substitutes results back in.")
      (p (~tw :tokens "text-stone-600")
        "I/O primitives:")
      (ul (~tw :tokens "space-y-2 text-stone-600")
        (li (span (~tw :tokens "font-mono text-violet-700") "frag") " — fetch a cross-service fragment")
        (li (span (~tw :tokens "font-mono text-violet-700") "query") " — read data from another service")
        (li (span (~tw :tokens "font-mono text-violet-700") "action") " — execute a write on another service")
        (li (span (~tw :tokens "font-mono text-violet-700") "current-user") " — resolve the current authenticated user")))
    (~docs/section :title "Execution model" :id "execution"
      (p (~tw :tokens "text-stone-600")
        "The render tree is walked to find I/O nodes. All nodes at the same depth are gathered and executed in parallel. Results replace the I/O nodes in the tree. The walk continues until no more I/O nodes are found. This typically completes in 1-2 passes."))))
