v0.82.1: admin shell sidebar fixes + the pass-2.1 harvest
Two engine windows and a rewritten guide, all additive. No consumer action required.
Admin shell sidebar fixes
- The persistent desktop sidebar no longer drifts with the page scroll. It rode DaisyUI's
position: sticky, whose pre-stick travel picks up the host page's default body margin under
cairn's no-Preflight embed-anywhere default;cairn-admin.cssnow pins itposition: fixed,
the same mechanism the mobile overlay already used. - The sidebar no longer recedes when navigating to a deep custom-nav route.
isDeskRoutetreated
any three-segment/adminpath as an open document; a site's own section route
(/admin/club/events) is just as deep without being one. The check now also requires a real
content-concept segment. Both fixes carry component tests plus a pixel-identity e2e.
Pass 2.1 harvest (the extension seams' first production workout)
adminActionexempts a handler'sActionFailure(fail()) return from the required-audit
check: a rejected request mutated nothing and owes no audit. The exemption assumes
reject-before-mutate; a handler that writes and then rejects must still emit. Successful
zero-emit handlers still throw in dev and logadmin.action.unauditedin production.- The build-time dev flag reads
esm-env'sDEVinstead ofimport.meta.env.DEVin both engine
call sites, clearing svelte-package's packaging warning. /ambientnow typesApp.Locals.auditSink, so wiring the audit-persistence seam in a site's
hooks typechecks without a hand-writtendeclare globalblock.deriveExcerptgained exact-fit and no-space edge-case tests; no behavior change.
Docs
- The "Add a custom admin screen" guide is rewritten around a production club-admin section: the
site-localadminActionwrapper with a site-owned role precondition, why a layout guard alone
can't gate a POST action, theauditSink+waitUntilpersistence recipe, thenavFilter
section-hiding seam, and a note on sequencing site D1 migrations soREFERENCEStargets land
first.