Skip to content

v0.82.1: admin shell sidebar fixes + the pass-2.1 harvest

Choose a tag to compare

@glw907 glw907 released this 08 Jul 05:04

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.css now pins it position: fixed,
    the same mechanism the mobile overlay already used.
  • The sidebar no longer recedes when navigating to a deep custom-nav route. isDeskRoute treated
    any three-segment /admin path 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)

  • adminAction exempts a handler's ActionFailure (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 log admin.action.unaudited in production.
  • The build-time dev flag reads esm-env's DEV instead of import.meta.env.DEV in both engine
    call sites, clearing svelte-package's packaging warning.
  • /ambient now types App.Locals.auditSink, so wiring the audit-persistence seam in a site's
    hooks typechecks without a hand-written declare global block.
  • deriveExcerpt gained 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-local adminAction wrapper with a site-owned role precondition, why a layout guard alone
    can't gate a POST action, the auditSink + waitUntil persistence recipe, the navFilter
    section-hiding seam, and a note on sequencing site D1 migrations so REFERENCES targets land
    first.