Uncategorized

  • An admin panel that was a security boundary

    /admin on the same hostname, behind a login form. A support engineer with the same session cookie as a customer.

  • Vite 3 moved the dev server port

    The default port changed from 3000 to 5173, which breaks every script, proxy rule and README that had the old one written down. strictPort is the setting worth…

  • ETags give you optimistic concurrency for free

    The read side saves a response body when clients cooperate; the write side prevents a lost update whether they cooperate or not. Making If-Match mandatory rather than optional…

  • Vue 2.7 exists so you do not have to migrate yet

    July, and the Composition API backported to the 2.x line. 214 components and no appetite for a big-bang rewrite.

  • Bootstrap 5.2 exposes custom properties on the components

    July’s release moves component styling onto CSS variables, which makes runtime theming possible without a Sass fork. A fork that had to be rebased on every patch release…

  • Backups and erasure have no clean answer

    A backup is an immutable snapshot by design, and deleting one row from one is either impossible or defeats the purpose of having it. The third option is…

  • A Lua script blocks every other client while it runs

    Atomicity is implemented by not running anything else, which is exactly why a script is useful and exactly why a slow one is an outage. The lua-time-limit behaviour…

  • A named volume for anything the host never reads

    A named volume is managed by Docker and has no ownership relationship with the host, which removes the permission problem entirely for directories nobody edits. Masking vendor and…

  • A factory state is what makes an explicit fixture short

    A test that creates its own data is only maintainable if creating it is one line, and a state is what makes it one line. Without states the…

  • Certificate expiry measured across the chain, not the leaf

    Every expiry check looks at the leaf certificate, and a chain contains intermediates and roots with their own dates. earliest_cert_expiry is one word different from the metric everybody…