# Distro composition manifest — single source of truth for "what files make a # deployable distro". Consumed by: # - lian-build/build_directives.ncl (image_only → what the runtime image bakes) # - provisioning/content.nu (content_hot → incremental PV hot-updates) # - just distro (site_tree + image_only → local tarball) # # Two layers, mapping the Build-Time vs Runtime tension (ADR-006): # # site_tree Capa B — delivered to the PV at /var/www/site/. Identical for # both render profiles, independent of the binary, updatable # without a rebuild. website.css under public/styles/ must be # freshly built (uno) before packing — that is an assembly step, # not a Dockerfile concern (the runtime image is content-agnostic). # # image_only Capa A — baked into the runtime image, per profile. The Leptos # WASM pkg/ is version-matched to the binary by construction: # baked to /usr/local/share/website/pkg/ and bootstrap-copied # into the PV. htmx-ssr ships no WASM, so its image bakes nothing # beyond the binary. # # content_hot Subset of site_tree that content.nu ships to a running pod with # no rebuild (markdown / locales / static assets). FTL changes # still require a restart; new routes require a full rebuild # (build.nu). Equivalent mechanism for both profiles — htmx-ssr # simply has a larger hot surface (no hydration tree to keep in # sync with the binary). { site_tree = [ "site/content", "site/config", "site/i18n", "site/templates", "site/public", "site/rbac.ncl", ], image_only = { "leptos-hydration" = ["target/site/pkg"], "htmx-ssr" = [], }, content_hot = [ "site/content", "site/i18n/locales", "site/public", ], }