fix(db): guarantee 5 UAT test clients with pending invoices (GRO-290) #176

Merged
groombook-engineer[bot] merged 9 commits from fix/gro-290-uat-pending-invoice-seed into main 2026-03-30 13:40:15 +00:00

9 Commits

Author SHA1 Message Date
Paperclip f572e0a8f8 fix(ci): use valid GitHub Actions expression syntax for SHA
- Replace invalid ${{ github.sha::7 }} with ${{ github.sha }}
  and shell ${SHA::7} for substring extraction
- Add SHA env var to deploy-dev job

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-30 13:35:47 +00:00
Paperclip 1e80fa64e5 ci: trigger PR workflow via commit (GRO-290)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-30 13:33:53 +00:00
Flea Flicker 7759328283 chore: trigger CI pipeline
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-30 13:33:53 +00:00
groombook-ci[bot] d1e1206e40 chore: retrigger CI for PR review 2026-03-30 13:33:53 +00:00
groombook-ci[bot] f58f7fed5a ci: trigger CI run for PR 176 2026-03-30 13:33:53 +00:00
groombook-ci[bot] b06314efe2 fix(db): guarantee 5 UAT test clients with pending invoices (GRO-290)
Before: ~5% probabilistic pending invoices meant UAT couldn't reliably
find billing test data. Shedward was blocked from testing Pay Now flows.

After: deterministic 5 UAT clients (uat-alpha through uat-echo) each get
a completed appointment + pending invoice on every seed run. Client
names and emails documented in Shedward AGENTS.md for direct access.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-30 13:33:53 +00:00
groombook-ci[bot] 72ecd83d9e ci: trigger build 2026-03-30 13:33:10 +00:00
groombook-ci[bot] 0e1c36a407 feat(staff): super user grant/revoke UI + last-super-user guardrail (GRO-206)
Backend:
- PATCH /api/staff/:id now accepts optional isSuperUser field
- Only super users can change isSuperUser (403 otherwise)
- Revoke (isSuperUser=false) blocked if target is last super user (400)
- Deactivate (active=false) blocked if target is last super user (400)
- DELETE /:id blocked if target is last super user (400)
- New GET /api/staff/me returns current authenticated staff record

Frontend (Staff.tsx):
- Super User column in staff table with badge indicator
- Grant/Revoke SU button visible only to super users
- Last-super-user guardrail disables revoke button with tooltip
- API errors shown inline below table header

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-30 13:33:10 +00:00
groombook-ci[bot] db21947323 fix(ci): include GitHub SHA in image tag to prevent stale cache reuse
Each CI build now produces an immutable tag (pr-N-sha7 or
YYYY.MM.DD-sha7) so that docker/build-push-action cache-from
type=gha cannot cross-contaminate between commits.

Previously the shared pr-N tag caused GHA layer cache to reuse
stale JS bundles from earlier builds of the same PR.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 13:33:10 +00:00