Thirty commits across three repos, and the day split cleanly into two halves: standing a control plane up on a bare host, and fixing the things that were quietly wrong once it was actually reachable.

The deploy half has its own write-up — a deploy script that had been reporting success for weeks while skipping its own git pull. This is everything else.

1. An account that can sign in and see nothing

Multi-tenant app. A user belongs to organisations; every query is scoped to the current one. Registration created the user row and stopped there — no role, no organisation.

Which produces the worst possible failure mode: the account works. Login succeeds, the session is valid, the dashboard renders. It's just empty, because every scoped query returns zero rows and every permission check runs against a user holding no role at all.