Flea Flicker
1480a37de1
docs: add AGENTS.md and CONTRIBUTING.md (GRO-2381) ( #80 )
...
CI / Test (push) Successful in 24s
CI / Lint & Typecheck (push) Successful in 30s
CI / Build & Push Docker Image (push) Failing after 8s
Co-authored-by: Flea Flicker <22+gb_flea@noreply.git.farh.net >
Co-committed-by: Flea Flicker <22+gb_flea@noreply.git.farh.net >
2026-06-12 17:00:39 +00:00
Flea Flicker
f235dcad81
Promote uat → main (PROD): GRO-2359 OOBE portal-creation routing (web) ( #79 )
...
CI / Test (push) Successful in 18s
CI / Lint & Typecheck (push) Successful in 24s
CI / Build & Push Docker Image (push) Successful in 50s
Co-authored-by: Flea Flicker <22+gb_flea@noreply.git.farh.net >
Co-committed-by: Flea Flicker <22+gb_flea@noreply.git.farh.net >
2026-06-12 16:47:17 +00:00
Flea Flicker
661bd4f902
Promote uat → main (PROD): GRO-2358 logout on no-access screen ( #74 )
...
CI / Test (push) Successful in 18s
CI / Lint & Typecheck (push) Successful in 26s
CI / Build & Push Docker Image (push) Successful in 15s
Promote uat → main (PROD): GRO-2358 — restore logout on 'Portal access not configured' screen.
Squashed from uat-to-main/GRO-2358 (0d24fe0 ).
Cherry-pick of validated uat squash bfe3ccf .
Pre-merge gates green: CI (Lint+Typecheck 30s, Test 23s, Docker Build 11s); CTO Gitea review APPROVED (comment 13465); QA GRO-2362 done; UAT GRO-2363 4/4 PASS on git.farh.net/groombook/web:2026.06.11-bfe3ccf; Security GRO-2364 cleared.
Head branch uat-to-main/GRO-2358 retained for Flea's post-deploy verification.
Refs GRO-2358, GRO-2362, GRO-2363, GRO-2364, GRO-2367.
Co-authored-by: Flea Flicker <22+gb_flea@noreply.git.farh.net >
Co-committed-by: Flea Flicker <22+gb_flea@noreply.git.farh.net >
2026-06-11 15:43:32 +00:00
Flea Flicker
fe565861b9
Promote uat → main (PROD): GRO-2319 portal StatusBadge palette ( #71 )
...
CI / Test (push) Successful in 20s
CI / Lint & Typecheck (push) Successful in 25s
CI / Build & Push Docker Image (push) Successful in 20s
Co-authored-by: Flea Flicker <22+gb_flea@noreply.git.farh.net >
Co-committed-by: Flea Flicker <22+gb_flea@noreply.git.farh.net >
2026-06-10 08:57:46 +00:00
Scrubs McBarkley
7ef270312c
Merge pull request 'Promote uat → main (PROD): GRO-2160 route nav export + offline polish' ( #68 ) from flea/uat-to-main-gro-2160 into main
CI / Test (push) Successful in 19s
CI / Lint & Typecheck (push) Successful in 27s
CI / Build & Push Docker Image (push) Successful in 15s
2026-06-09 05:27:25 +00:00
Flea Flicker
f58a0e569b
Promote dev → uat: GRO-2160 route nav export + offline polish ( #67 )
CI / Test (push) Successful in 20s
CI / Lint & Typecheck (push) Successful in 26s
CI / Build & Push Docker Image (push) Successful in 10s
CI / Test (pull_request) Successful in 21s
CI / Lint & Typecheck (pull_request) Successful in 28s
CI / Build & Push Docker Image (pull_request) Successful in 14s
2026-06-09 04:40:32 +00:00
Scrubs McBarkley
2a401a4584
Merge pull request 'Promote uat → main (PROD): GRO-2159 drag-to-reorder + re-optimize + GRO-2236 price/duration display fix'
...
CI / Test (push) Successful in 18s
CI / Lint & Typecheck (push) Successful in 25s
CI / Build & Push Docker Image (push) Successful in 12s
CEO prod merge. All gates cleared: CTO Phase 4 review #4573 approved, CI green on e93017b , QA PASS (GRO-2281, GRO-2256), post-deploy UAT regression PASS (GRO-2283, GRO-2276), security PASS (GRO-2284). Merging GRO-2159 + GRO-2236 to main.
2026-06-09 04:00:43 +00:00
Flea Flicker
e93017b279
Promote dev → uat: GRO-2159 drag-to-reorder + re-optimize ( #64 )
CI / Test (push) Successful in 35s
CI / Lint & Typecheck (push) Successful in 44s
CI / Build & Push Docker Image (push) Successful in 11s
CI / Test (pull_request) Successful in 21s
CI / Lint & Typecheck (pull_request) Successful in 27s
CI / Build & Push Docker Image (pull_request) Successful in 12s
2026-06-09 03:10:17 +00:00
Scrubs McBarkley
27c59113e2
Merge pull request 'Promote uat → main (PROD): GRO-2158 route planner page' ( #62 ) from flea/uat-to-main-gro-2158 into main
...
CI / Test (push) Successful in 22s
CI / Lint & Typecheck (push) Successful in 27s
CI / Build & Push Docker Image (push) Failing after 9s
Promote uat → main (PROD): GRO-2158 route planner page
Merged by CEO (gb_scrubs) — board-gated prod merge.
Validated SHA: 980615b (GRO-2272/2273/2274 all PASS).
CTO review: APPROVED (review #4567 by gb_dogfather).
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-06-09 02:37:35 +00:00
Flea Flicker
db11e5f2bd
Merge pull request 'Promote dev → uat: GRO-2236 portal Book New service cards price + duration' ( #58 ) from flea/dev-to-uat-gro-2236 into uat
CI / Test (push) Successful in 24s
CI / Lint & Typecheck (push) Successful in 30s
CI / Build & Push Docker Image (push) Successful in 48s
2026-06-09 02:13:08 +00:00
Flea Flicker
980615b8e6
Promote dev → uat: GRO-2158 route planner page ( #61 )
CI / Test (push) Successful in 18s
CI / Lint & Typecheck (push) Successful in 27s
CI / Build & Push Docker Image (push) Successful in 14s
CI / Test (pull_request) Successful in 20s
CI / Lint & Typecheck (pull_request) Successful in 30s
CI / Build & Push Docker Image (pull_request) Successful in 41s
2026-06-09 02:00:55 +00:00
Flea Flicker
95c688764b
Merge pull request 'uat→main (PROD): GRO-2234 portal Book New fix + validated batch' ( #59 ) from flea/uat-to-main-gro-2234-web into main
CI / Test (push) Successful in 21s
CI / Lint & Typecheck (push) Successful in 27s
CI / Build & Push Docker Image (push) Successful in 16s
2026-06-09 00:37:47 +00:00
The Dogfather
f549101962
fix(GRO-2236): portal Book New service cards show price + duration ( #57 )
...
CI / Test (pull_request) Successful in 20s
CI / Lint & Typecheck (pull_request) Successful in 28s
CI / Build & Push Docker Image (pull_request) Successful in 14s
Co-authored-by: The Dogfather <20+gb_dogfather@noreply.git.farh.net >
Co-committed-by: The Dogfather <20+gb_dogfather@noreply.git.farh.net >
2026-06-08 23:32:19 +00:00
Flea Flicker
62dc85b560
Promote dev → uat: GRO-2211/2218/2207 + GRO-2234 portal Book New (cumulative) ( #56 )
CI / Lint & Typecheck (push) Successful in 28s
CI / Test (push) Successful in 28s
CI / Build & Push Docker Image (push) Successful in 41s
CI / Test (pull_request) Successful in 21s
CI / Lint & Typecheck (pull_request) Successful in 27s
CI / Build & Push Docker Image (pull_request) Successful in 47s
2026-06-08 19:58:43 +00:00
Flea Flicker
5bb8fbcb7d
Merge pull request 'Promote uat → main (atomic): GRO-2105/2094/2099/2089/2180/2213 portal bundle' ( #48 ) from uat into main
CI / Test (push) Successful in 19s
CI / Lint & Typecheck (push) Successful in 27s
CI / Build & Push Docker Image (push) Successful in 40s
2026-06-08 19:29:49 +00:00
Flea Flicker
bc21d6de09
Promote dev → uat: GRO-2213 portal booking preferredTime HH:MM:SS fix ( #52 )
CI / Test (push) Successful in 21s
CI / Test (pull_request) Successful in 22s
CI / Lint & Typecheck (push) Successful in 26s
CI / Lint & Typecheck (pull_request) Successful in 28s
CI / Build & Push Docker Image (push) Successful in 25s
CI / Build & Push Docker Image (pull_request) Successful in 20s
2026-06-08 17:36:16 +00:00
Flea Flicker
32ef3bca4d
Merge pull request 'Promote dev → uat: GRO-2180 portal Appointments ISO startTime fix' ( #50 ) from dev into uat
...
CI / Lint & Typecheck (pull_request) Failing after 10m47s
CI / Test (push) Failing after 10m51s
CI / Lint & Typecheck (push) Failing after 10m52s
CI / Build & Push Docker Image (push) Has been skipped
CI / Test (pull_request) Failing after 15m38s
CI / Build & Push Docker Image (pull_request) Has been skipped
Merge PR #50 : fix(GRO-2180) portal Appointments ISO startTime (dev → uat)
QA-approved (gb_lint); PR CI green after transient runner re-run.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-08 10:28:50 +00:00
Flea Flicker
2b494c01f8
fix(GRO-2180): portal Appointments handles ISO startTime shape ( #49 )
...
CI / Test (push) Successful in 17s
CI / Lint & Typecheck (push) Successful in 22s
CI / Build & Push Docker Image (push) Successful in 14s
CI / Test (pull_request) Successful in 20s
CI / Lint & Typecheck (pull_request) Successful in 26s
CI / Build & Push Docker Image (pull_request) Successful in 10s
Self-merge to dev after green CI (run #115 ). Phase 1 CI-only gate.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-06-08 08:26:27 +00:00
Flea Flicker
3397767a01
fix(GRO-2180): normalize portal appointments API shape so /appointments loads
...
CI / Test (pull_request) Successful in 21s
CI / Lint & Typecheck (pull_request) Successful in 28s
CI / Build & Push Docker Image (pull_request) Successful in 46s
The /api/portal/appointments endpoint returns ISO startTime/endTime plus
nested pet/service/staff objects, but the portal client Appointment type
expected flat date/time/petName fields. isUpcoming() read appt.date/appt.time
(both undefined), so parseTimeTo24Hour(undefined) threw a TypeError; the
useEffect try/catch set the error state and the success-path-only Book New
button became unreachable.
- Add normalizeAppointment() at the fetch boundary mapping the API shape to the
flat Appointment shape (derives display date/time from startTime, duration
from the start/end delta), tolerant of the legacy flat shape.
- Prefer absolute startTime in isUpcoming(); fall back to date/time.
- Harden parseTimeTo24Hour against blank/undefined input (no NaN).
- Add Appointment.startTime/endTime to the type.
- Tests: normalizeAppointment + isUpcoming(startTime) + parseTimeTo24Hour safety.
- Update UAT_PLAYBOOK.md §5.12.2 and new §5.12d regression cases.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-06-08 04:18:35 +00:00
Flea Flicker
47c29ecbc2
Promote to UAT: GRO-2105 BookingFlow/RescheduleFlow availability fix ( #47 )
CI / Test (push) Successful in 17s
CI / Lint & Typecheck (push) Successful in 23s
CI / Build & Push Docker Image (push) Successful in 19s
CI / Test (pull_request) Failing after 10m34s
CI / Lint & Typecheck (pull_request) Failing after 10m34s
CI / Build & Push Docker Image (pull_request) Has been skipped
2026-06-02 19:17:03 +00:00
Flea Flicker
f0c58c193c
fix(GRO-2105): include serviceId in BookingFlow/RescheduleFlow availability call ( #46 )
CI / Test (push) Successful in 22s
CI / Lint & Typecheck (push) Successful in 28s
CI / Test (pull_request) Successful in 25s
CI / Lint & Typecheck (pull_request) Successful in 27s
CI / Build & Push Docker Image (push) Successful in 11s
CI / Build & Push Docker Image (pull_request) Successful in 12s
2026-06-02 19:06:15 +00:00
The Dogfather
de7386e47a
Promote to UAT: GRO-2094 React bootstrap error instrumentation ( #45 )
...
CI / Test (push) Successful in 23s
CI / Lint & Typecheck (push) Successful in 30s
CI / Build & Push Docker Image (push) Successful in 13s
Co-authored-by: The Dogfather <20+gb_dogfather@noreply.git.farh.net >
Co-committed-by: The Dogfather <20+gb_dogfather@noreply.git.farh.net >
2026-06-02 18:42:25 +00:00
The Dogfather
4600dcf950
Merge pull request 'fix(GRO-2094): instrument bootstrap with global error + ErrorBoundary' ( #43 ) from fix/gro-2094-react-blank-mount into dev
CI / Test (push) Successful in 21s
CI / Lint & Typecheck (push) Successful in 32s
CI / Build & Push Docker Image (push) Successful in 15s
CI / Test (pull_request) Successful in 22s
CI / Lint & Typecheck (pull_request) Successful in 28s
CI / Build & Push Docker Image (pull_request) Successful in 14s
2026-06-02 18:32:21 +00:00
Flea Flicker
7daa9c480a
fix(GRO-2094): instrument bootstrap with global error + ErrorBoundary
...
CI / Test (pull_request) Successful in 20s
CI / Lint & Typecheck (pull_request) Successful in 26s
CI / Build & Push Docker Image (pull_request) Successful in 48s
The bundle at /login was executing but the React tree never painted —
no console errors, no fallback UI, just an empty <div id='root'>.
Add three layers of defense so a future failure of this shape is
captured instead of being silently swallowed:
1. window 'error' and 'unhandledrejection' listeners in main.tsx,
printing structured context to console.error so Playwright
sees the failure in the console log even if React unmounts
the tree.
2. A top-level <ErrorBoundary> in main.tsx that renders the
actual exception (name, message, stack) inside the DOM
instead of leaving <div id='root'> empty. The boundary also
logs to console.error via componentDidCatch.
3. New tests for the ErrorBoundary (renders children, surfaces
thrown errors visibly) and two new UAT_PLAYBOOK test cases
(TC-WEB-5.1.6 / 5.1.7) that explicitly assert the
'never-blank-root' invariant on UAT.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-06-02 17:48:29 +00:00
Scrubs McBarkley
746fad635f
Merge pull request 'fix(GRO-2099): show loading state during CustomerPortal SSO bridge bootstrap' ( #44 ) from flea/gro-2099-fix-authed-portal-nav into dev
CI / Test (push) Successful in 22s
CI / Lint & Typecheck (push) Successful in 25s
CI / Build & Push Docker Image (push) Successful in 14s
2026-06-02 16:38:03 +00:00
Flea Flicker
f1cf58dc56
fix(GRO-2099): show loading state during CustomerPortal SSO bridge bootstrap
...
CI / Test (pull_request) Successful in 24s
CI / Lint & Typecheck (pull_request) Successful in 29s
CI / Build & Push Docker Image (pull_request) Successful in 45s
Root cause: `Dashboard.tsx:194` runs its own `!sessionId && !isImpersonating &&
!getDevUser()` auth guard, redirecting to `/login` if `sessionId` is null. For
SSO customers, the CustomerPortal's useEffect has to call `/api/auth/get-session`
and then `/api/portal/session-from-auth` to populate `portalSessionId`. During
that bootstrap window (typically 100-300ms), `sessionId` is null and the guard
fires — redirecting the user to `/login` and breaking the post-sign-in flow.
App.tsx additionally returned `null` at `/login` for authenticated users
(`showCustomerPortal` is false at `/login`), leaving a blank React root even
if the redirect target was /login itself.
Fix:
- `CustomerPortal.tsx`: show a 'Loading…' state (`role=status`) while
`!initComplete`. The portal chrome and its child sections only mount once
the bootstrap has resolved, so child auth guards don't fire prematurely.
- `App.tsx`: at `/login` with a valid session, redirect to `/` so the
customer lands on the portal instead of seeing a blank page.
- `App.tsx`: only return `LoginPage` when at `/login` — other portal
routes defer the auth check to `CustomerPortal` (the customer SSO bridge
resolves `portalSessionId` on mount).
- `UAT_PLAYBOOK.md`: add §5.27 with 8 cases covering the bug, the loading
state, the /login auto-redirect, the unauth fallback, and the groomer /
impersonation non-regressions.
- `src/__tests__/portal.test.tsx`: add a regression test that asserts the
loading state is shown during the bridge and the portal nav is NOT in the
DOM mid-bootstrap.
Reproduction (Shedward, run b4ae0155; reproduced locally on UAT image
`2026.06.01-ec29f71`):
1. From `about:blank`, complete customer SSO as `uat-customer`.
2. `browser_navigate` to `/portal`.
3. Pre-fix: redirected to `/login` with blank React root.
4. Post-fix: URL stays at `/portal`, dashboard renders with customer name.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-06-02 16:35:16 +00:00
Flea Flicker
903ce2d675
fix(GRO-2089): correct Authentik customer credential source in UAT_PLAYBOOK §5.25 ( #42 )
...
CI / Test (push) Successful in 24s
CI / Lint & Typecheck (push) Successful in 29s
CI / Build & Push Docker Image (push) Successful in 15s
fix(GRO-2089): correct Authentik customer credential source in UAT_PLAYBOOK §5.25
2026-06-02 14:48:03 +00:00
Scrubs McBarkley
fdff0977ad
Merge pull request 'Promote uat → main: GRO-2012 RescheduleFlow portalSessionId fallback' ( #40 ) from uat into main
...
CI / Test (push) Successful in 23s
CI / Lint & Typecheck (push) Successful in 29s
CI / Build & Push Docker Image (push) Successful in 16s
Promote uat → main: GRO-2012 RescheduleFlow portalSessionId fallback
Gate checks:
- UAT: GRO-2023 done (CTO verified, ec29f719 )
- Security: GRO-2032 Barkley PASS
- UAT_PLAYBOOK.md: TC-WEB-5.26 present
Fix: CustomerPortal.tsx:329 sessionId={session?.id ?? portalSessionId}
Fix commit: f29f1828c8
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-06-01 19:10:08 +00:00
The Dogfather
ec29f71974
Merge pull request 'Promote to UAT: GRO-2012 RescheduleFlow portalSessionId fallback' ( #39 ) from dev into uat
CI / Test (push) Successful in 21s
CI / Lint & Typecheck (push) Successful in 30s
CI / Build & Push Docker Image (push) Successful in 10s
CI / Test (pull_request) Successful in 21s
CI / Lint & Typecheck (pull_request) Successful in 28s
CI / Build & Push Docker Image (pull_request) Successful in 13s
2026-06-01 17:46:35 +00:00
Flea Flicker
f29f1828c8
fix(GRO-2012): pass portalSessionId to RescheduleFlow for SSO bridge customers ( #38 )
...
CI / Test (push) Successful in 22s
CI / Lint & Typecheck (push) Successful in 28s
CI / Build & Push Docker Image (push) Successful in 14s
CI / Test (pull_request) Successful in 20s
CI / Lint & Typecheck (pull_request) Successful in 26s
CI / Build & Push Docker Image (pull_request) Successful in 11s
fix(GRO-2012): pass portalSessionId to RescheduleFlow for SSO bridge customers (closes #38 )
- src/portal/CustomerPortal.tsx:329 - use portalSessionId fallback for RescheduleFlow
- src/__tests__/portal.test.tsx - new regression test
- UAT_PLAYBOOK.md §5.26 - new test cases
cc @cpfarhood
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-06-01 17:28:43 +00:00
The Dogfather
bd2a0d9516
Merge pull request 'Promote dev -> uat: GRO-2011 login-blank fix (+ GRO-1867)' ( #37 ) from dev into uat
CI / Test (push) Successful in 19s
CI / Lint & Typecheck (push) Successful in 23s
CI / Build & Push Docker Image (push) Successful in 10s
2026-06-01 16:38:14 +00:00
Lint Roller
3d7b247562
fix(GRO-2011): /login renders blank — always fetch setup/status for unauth users ( #36 )
...
CI / Test (push) Successful in 21s
CI / Lint & Typecheck (push) Successful in 27s
CI / Build & Push Docker Image (push) Successful in 12s
CI / Test (pull_request) Successful in 20s
CI / Lint & Typecheck (pull_request) Successful in 26s
CI / Build & Push Docker Image (pull_request) Successful in 11s
Co-authored-by: Lint Roller <23+gb_lint@noreply.git.farh.net >
Co-committed-by: Lint Roller <23+gb_lint@noreply.git.farh.net >
2026-06-01 16:36:44 +00:00
Flea Flicker
198053fa31
feat(GRO-1867): bridge Better Auth session to CustomerPortal ( #34 )
CI / Test (push) Successful in 25s
CI / Lint & Typecheck (push) Successful in 31s
CI / Build & Push Docker Image (push) Successful in 14s
2026-06-01 15:47:41 +00:00
The Dogfather
0e5e9d1f16
Merge pull request 'chore: promote dev → uat (GRO-1829 SW fix)' ( #32 ) from dev into uat
...
CI / Test (push) Successful in 13s
CI / Lint & Typecheck (push) Successful in 23s
CI / Build & Push Docker Image (push) Successful in 15s
Merge: promote dev → uat (GRO-1829 SW fix)
2026-05-27 02:27:32 +00:00
Scrubs McBarkley
228a3d746c
Merge pull request 'fix(GRO-1829): add skipWaiting/clientsClaim to VitePWA workbox config' ( #31 ) from gro-1829-swpwa-fix into dev
CI / Lint & Typecheck (push) Successful in 17s
CI / Test (push) Successful in 17s
CI / Build & Push Docker Image (push) Successful in 31s
CI / Test (pull_request) Successful in 14s
CI / Lint & Typecheck (pull_request) Successful in 17s
CI / Build & Push Docker Image (pull_request) Successful in 15s
2026-05-27 02:22:25 +00:00
Flea Flicker
ad9a178c89
fix: add skipWaiting/clientsClaim to VitePWA workbox config
...
CI / Test (pull_request) Successful in 15s
CI / Lint & Typecheck (pull_request) Successful in 17s
CI / Build & Push Docker Image (pull_request) Successful in 33s
Root cause: SW remained in waiting phase after redeploy, serving stale
precached assets. Without skipWaiting/clientsClaim the old SW persisted
and controlled the page even after a new SW was installed.
Fixes blank-page regression where React never mounted on login.
2026-05-27 02:22:01 +00:00
The Dogfather
9a3b5d88c8
Merge pull request 'fix(GRO-1822): add role check before /admin redirect — customers access portal' ( #30 ) from fix/gro-1822-role-based-redirect into dev
CI / Test (push) Successful in 20s
CI / Lint & Typecheck (push) Successful in 28s
CI / Build & Push Docker Image (push) Successful in 34s
2026-05-27 01:01:59 +00:00
Flea Flicker
4e487db6f1
fix(GRO-1822): add role check before /admin redirect — customers access portal
...
CI / Test (pull_request) Failing after 14s
CI / Lint & Typecheck (pull_request) Failing after 17s
CI / Build & Push Docker Image (pull_request) Has been skipped
App.tsx lines 389-393 redirected ALL authenticated users to /admin,
breaking customer portal access after SSO login.
Now checks `session.user.role === "staff"` before redirecting.
Customers (role !== "staff") can access the portal at /.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-05-27 01:01:28 +00:00
The Dogfather
3b4d0f15f6
Merge pull request 'chore: promote dev → uat (GRO-1795 StatusBadge)' ( #28 ) from dev into uat
...
CI / Lint & Typecheck (push) Successful in 17s
CI / Test (push) Successful in 13s
CI / Build & Push Docker Image (push) Successful in 34s
Merge PR #28 : promote dev → uat (GRO-1795 StatusBadge)
2026-05-26 13:23:52 +00:00
The Dogfather
736535a24c
Merge pull request 'feat(portal): add StatusBadge to appointment cards (GRO-1795)' ( #26 ) from feature/gro-1165e-booking-status-badge into dev
...
CI / Test (push) Successful in 15s
CI / Lint & Typecheck (push) Successful in 17s
CI / Lint & Typecheck (pull_request) Successful in 18s
CI / Test (pull_request) Successful in 19s
CI / Build & Push Docker Image (push) Successful in 53s
CI / Build & Push Docker Image (pull_request) Successful in 47s
Merge PR #26 : feat(portal): add StatusBadge to appointment cards (GRO-1795)
2026-05-26 13:23:30 +00:00
The Dogfather
87939e5413
Merge pull request 'chore: promote dev → uat (GRO-1794 booking analytics)' ( #27 ) from dev into uat
...
CI / Test (push) Successful in 19s
CI / Lint & Typecheck (push) Successful in 22s
CI / Build & Push Docker Image (push) Successful in 12s
Merge dev → uat: GRO-1794 booking funnel analytics events
2026-05-26 13:16:39 +00:00
The Dogfather
33a1b3ed7a
Merge pull request 'feat(GRO-1794): booking funnel analytics events' ( #24 ) from feature/gro-1165d-booking-analytics into dev
...
CI / Test (push) Successful in 23s
CI / Lint & Typecheck (push) Successful in 30s
CI / Test (pull_request) Successful in 15s
CI / Lint & Typecheck (pull_request) Successful in 16s
CI / Build & Push Docker Image (push) Successful in 32s
CI / Build & Push Docker Image (pull_request) Successful in 52s
Merge PR #24 : feat(GRO-1794): booking funnel analytics events
CTO-approved. QA passed. All CI green.
2026-05-26 13:16:06 +00:00
Flea Flicker
65686c8563
fix(GRO-1795): restore fireEvent and waitFor imports
...
CI / Test (pull_request) Successful in 15s
CI / Lint & Typecheck (pull_request) Successful in 17s
CI / Build & Push Docker Image (pull_request) Successful in 35s
QA regression: PR #26 removed fireEvent and waitFor from the
@testing-library/react import, breaking 21 test cases and typecheck.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-05-26 13:12:59 +00:00
Flea Flicker
112c61ab1c
fix: add non-null assertion on listener.mock.calls[0] (TS strict mode)
...
CI / Lint & Typecheck (pull_request) Successful in 16s
CI / Test (pull_request) Successful in 2m26s
CI / Build & Push Docker Image (pull_request) Successful in 59s
Lines 28 and 40 access mock.calls[0] which is possibly undefined under
strict TypeScript. Adding ! to satisfy TS2532.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-05-26 13:06:07 +00:00
Flea Flicker
106d31a95e
feat(portal): add StatusBadge to appointment cards
...
CI / Test (pull_request) Failing after 13s
CI / Lint & Typecheck (pull_request) Failing after 16s
CI / Build & Push Docker Image (pull_request) Has been skipped
Add a StatusBadge component that renders human-readable labels
(Confirmed, Pending, Waitlisted, etc.) with semantic color classes
for appointment cards in the portal. Replaces raw status strings.
- Added STATUS_LABELS map for human-readable status labels
- Updated STATUS_COLORS to use accessible amber/blue tones
- Exported StatusBadge for testing
- Added unit tests for all 7 badge states plus fallback
- Updated UAT_PLAYBOOK.md §5.12c with status badge test cases
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-26 13:04:02 +00:00
The Dogfather
4e3a038bf3
Merge pull request 'Promote dev → uat (GRO-1793: dynamic time slots)' ( #25 ) from dev into uat
...
CI / Test (push) Successful in 14s
CI / Lint & Typecheck (push) Successful in 16s
CI / Build & Push Docker Image (push) Failing after 6s
Promote dev → uat: GRO-1793 dynamic portal time slots (#25 )
2026-05-26 13:02:16 +00:00
Flea Flicker
7e5a851d9c
fix: add missing vi import and fix getByText exact match assertions
...
CI / Test (pull_request) Successful in 13s
CI / Lint & Typecheck (pull_request) Failing after 20s
CI / Build & Push Docker Image (pull_request) Has been skipped
- analytics.test.ts: add vi to vitest import (was used at lines 24, 37, 66)
- BookingError.test.tsx: use regex matchers so phone/email assertions
match partial text in combined <p> element
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-05-26 12:57:43 +00:00
The Dogfather
88ba9915c6
Merge pull request 'GRO-1793: Dynamic portal time slots (replace hardcoded)' ( #23 ) from feature/gro-1165c-dynamic-timeslots into dev
...
CI / Test (push) Successful in 14s
CI / Lint & Typecheck (push) Successful in 18s
CI / Build & Push Docker Image (push) Successful in 9s
CI / Test (pull_request) Successful in 18s
CI / Lint & Typecheck (pull_request) Successful in 2m33s
CI / Build & Push Docker Image (pull_request) Successful in 8s
GRO-1793: Dynamic portal time slots (replace hardcoded) (#23 )
Replaces hardcoded time slot arrays in portal BookingFlow and RescheduleFlow with API-fetched dynamic availability.
2026-05-26 12:56:25 +00:00
Flea Flicker
26cdd69a49
fix(GRO-1793): remove unused act import and add aria-label to date inputs
...
CI / Test (pull_request) Successful in 14s
CI / Lint & Typecheck (pull_request) Successful in 23s
CI / Build & Push Docker Image (pull_request) Successful in 34s
QA review pointed out:
- Lint error: 'act' imported but never used in test file
- 6 test failures: date input lacked accessible label
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-26 12:48:55 +00:00
Flea Flicker
3bccb1ac01
docs(UAT_PLAYBOOK.md): add §5.24 booking funnel analytics test cases
...
CI / Test (pull_request) Failing after 23s
CI / Lint & Typecheck (pull_request) Failing after 26s
CI / Build & Push Docker Image (pull_request) Has been skipped
Gro-1794 required UAT test cases for the booking funnel analytics events.
Covers all 6 events × both flows (public/portal), plus PII audit and
no-op-safety checks.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-05-26 12:40:49 +00:00