Context
The backend verified the Supabase token and then dropped the identity at the process boundary. Every row-level security policy reads auth.uid(), which nothing on that path was setting, so the only boundary between users was a where user_id in repository code. That closed today.
What the factory did
- Carried the signed-in user onto the database connection. A caller scope opens a transaction, sets the JWT claims and the
authenticatedrole inside it, and an interceptor refuses to open a connection that no scope was opened for. - Served the time-category screens and the notification-device endpoints over authenticated HTTP.
- Made
Na tento denhold only ad hoc items, and offered the day’s outstanding reservations inside the axis gaps. - Gave the design system a slider with a two-layer track, and a text rung for the two lanes with the contrast computed in a test.
- Made navigation a whole -
NavigationBarabove the item - and took the screen’s header as an input of the shell. - Kept a rejected edit on screen, where the form used to lose it.
- Took the state nothing ever wrote out of the rolling layers.
- Filed a task from an approved candidate: the component index publishes camelCase token names wrong.
What I did
- Reviewed the caller-scope change against the live database instead of its own claims: 26 tables owned by
postgreswith force RLS off, 91 policies writtento authenticated,Skipped: 0in CI. One defect stands -request.jwt.claim.subwins thecoalescewhile nothing sets it. - Removed the experimental CRUD surface from the application.
- Put the unreachable half of the backend on the board, and promoted the P1 drafts nothing was blocking.
- Landed the rolling and habit decisions in the glossary.
- Made the detached bot start leave the session job object, so a desktop update stops killing the bot with it.
- Gave the day journal a skill of its own.
- Mapped the Smart Diary migration into Lifalign. The target topology is settled; the open question is which database the test writes go to.
Notes
- Twelve of the eighteen merged pull requests came off the board without me.
- The migration has an ordering trap: every merge to
maindeploys the dev backend against the database that is about to hold real history, so the dev database has to exist before the first migration run.