Skip to content

Performance

27 August 2026

52 changes:

  • A select and a pager that need no form around them
  • Four legacy input classes become one
  • One search box over many entities
  • A model save cost 1358 milliseconds
  • Two flags that keep a migration honest
  • reset() left the page where the next request would find it
  • The form field now uses the controls
  • Nine readers of a stream that can only be read once
  • An API endpoint's status code was untestable
  • A flash that worked once per process
  • A permanent cache entry was deleted by the next sweep
  • The dashboard's JSON endpoints returned a web page too
  • The backup codes a user saved were never the stored ones
  • Adding a member to an organization was impossible
  • Any signed-in account could rewrite the system settings
  • The lockout settings configured nothing
  • The tailwind scaffold theme is a daisyUI theme
  • A view directory you half-own rendered a page shell
  • An argument a method does not declare is dropped silently
  • The datatable search that could not be slowed down, and the columns that were all searched the same way
  • Every page after a sign-in page lost its header
  • Seventy-nine queries had lost the table prefix
  • The Redis cache listing read a key nothing writes
  • Vendored assets that were still remote
  • A page could not call its own API
  • One palette, every UI system
  • The administration area has its own directory
  • Six filings from one project, all small and all silent
  • The palette moves under app/themes/
  • Two guides that had become their own history
  • A generated screen the vanilla stacks could not reach
  • Every breadcrumb in the area pointed at /adminusers
  • URL is the administration area, sURL is the site
  • Organizations had no way to look at one
  • A column filter per column, on the lists that need one
  • What a usertype means, and how an application changes it
  • Row actions are icons, and the row is a link
  • The log viewer's own endpoints 404'd inside its iframe
  • Everything the framework knows about a user, on the user's screen
  • Per-user settings, and permissions edited where the user is
  • A screen for the message templates the framework already had
  • New-sign-in alerts got a site policy
  • A login left the previous session's token valid for a month
  • One definition of the guard every admin screen opens with
  • What each usertype may do, written down and on a screen
  • A correct password was refused, and bcrypt had been dropping characters
  • No language was ever selected
  • The administration area may be in another language than the site
  • A second factor that needs nothing set up in advance
  • A new device can be made to prove something, not just reported
  • A second factor an application can bring its own of
  • Seven account-security switches, every one off until asked for

14 August 2026

39 changes:

  • The server now says where its own time went
  • An API request is not a browser session
  • auth:unlock — lifting a lockout you gave yourself
  • The toolbar answers "who am I, and until when"
  • A parent class for services, and a tab that admits they exist
  • An Errors tab, for what the browser threw
  • A Client tab: what the browser thinks the world is
  • The page outranks the toolbar
  • An API playground in the toolbar — and a doubled slash it found
  • A WebSocket daemon that can read a Redis stream
  • The body of a DELETE request
  • A ? in a raw fragment now binds where it was written
  • init will not scaffold over your application
  • Debug data for an application that does not use the API layer
  • The other way to lose a page
  • The toolbar injects through the response, not an output buffer
  • Two build settings that failed quietly
  • Three dead stubs, and four corrections to older posts
  • scaffold:spa — a front end for an application that already exists
  • The MCP server says which project it is
  • Typed endpoints, generated from the document
  • Where the suite's fifteen minutes actually go
  • A shared document, seven eight-second tests, and a ? in the bar
  • A scaffolded application was set up to learn it the hard way
  • The suite was running composer update sixty-one times
  • The test database was afraid of losing data
  • TRUNCATE is slower than dropping the table
  • The comment said // product 1 = Apple
  • The same change made PostgreSQL slower
  • A suite that only passed in one order
  • The guide described an API nobody had built
  • The widget area that rendered nothing
  • maxRuntime was a range, and it read like a number
  • An empty ban list is still a ban list
  • The ingest dropped the id it had just read
  • Which rule said no
  • Four corrections from the other side of the boundary
  • "Minor variable name changes"
  • A blank page is not an error

12 August 2026

14 changes:

  • Late writes into compressed chunks no longer have to be lost
  • print replaces the pdf document type, which had not worked for years
  • MariaDB stops pretending to be MySQL
  • The toolbar now sees what a page does after it renders, and can be opened on a live server
  • Nine queries per request, most of them avoidable
  • The SPA debug panel now says it exists
  • The docs now say when you would need them
  • The toolbar's hide button now hides the toolbar
  • spa:dev / spa:build, and a service container that actually exists
  • One toolbar, delivered two ways — and the SPA panel gains every tab
  • A name for every request, and the log lines it wrote
  • The server-rendered toolbar now uses the one renderer too
  • Settings read every key one at a time on PostgreSQL, and said nothing
  • SSE events published during a reconnect are no longer lost