27 changes:
- Two invisible columns, and a row of chips that ran off the panel
- Reading a sent message back: what it carried, and what came of it
- Web push: a notification on a device whose browser is closed
- The coverage gate reported 100% on a change that added an untested package
- Sending one account a message, on the channels it can actually receive
- Mass messages: an audience worth choosing, and push that reaches people
- The line the inbox shows, dark mode, and what DNS says about your mail
- Three MCP tools for the questions that were being answered by failing
- A log viewer in the DevPanel, at the address that used to 400
- The mail log grows without limit, and deleting it is the wrong fix
- The drift check's own false alarms, and the panel that had never worked
- The email preview's findings were taking a third of the width from the message
- Push had five parts and shipped four of them
- Every browser restart minted a session, and none of the old ones ever ended
- Nothing knew what kinds of mail an application sends
- Choosing who a mass message goes to, and seeing who that is
- The soft prompt was rendered on every page and never shown
- Nothing recorded a sent push
- The DevPanel had a second log viewer because of one hard-coded URL
- The database tab could not answer a developer's question about a database
- An unread message was something you had to go looking for
- Two development query logs that grew until the process died
- The database tab, again: chunks, and the half of the admin screen it still lacked
- Twenty-five forked PHP processes, for a constant
- The database tab, third time: copied rather than rewritten
- An unsubscribe is two records, and the second had nowhere to go
- The coverage gate, and the two bugs it found
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
4 changes:
- The toolbar finds the log endpoint itself
- The stream driver had the gap it was built to close
- The request body is back in the toolbar
- The Time tab starts answering the question in its name
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