- Sign-in has its own page at /login — one sentence, one field, one button — and the landing page ends with its pitch instead of carrying a second form
- Reordering works on a phone: a dedicated drag grip in the left gutter, the four moves reach a pointer that cannot drag, and fast reorders no longer flicker between placements
- Every sync mark now names its state on hover and to a screen reader
- Editing the same bullet on two devices conflicts instead of quietly overwriting, and deleting a bullet with children is refused unless the children are explicitly orphaned
- Exports include detached bullets — which is exactly what a delete produces — and an import now says what it discarded
- Settings is down to what you can actually set: appearance, and a placeholder for notifications
- Sessions expire on the server and cannot renew their own lifetime
- Fixed: the close-the-page warning no longer outlives the writing it guarded, a resync reload stops asking permission first, and a pasted paragraph keeps its newlines
- A folded subtree is no longer fetched or rendered, finding a bullet no longer scans the outline, and the database stops paying for two dead indexes, two triggers that fire for nothing, and an fsync on every commit
- Operational: an access log, a request id on every response, HTTP metrics that were always zero, a rebuild an operator can ask for, and a process that stops when it is told to
- The crawl policy is served from the address crawlers ask for, and the removal path reaches a mailbox