promote(api): dev → uat — /health/ready readiness probe (GRO-2689) #234
Closed
Flea Flicker
wants to merge 0 commits from
dev-to-uat-gro-2689 into uat
pull from: dev-to-uat-gro-2689
merge into: groombook:uat
groombook:main
groombook:promote/uat-to-main-gro-2745
groombook:uat
groombook:dev
groombook:flea/gro-2721-schema-safe-reset
groombook:fix/gro-2692-readyz-auth-bypass
groombook:fix/gro-2687-readyz-auth-bypass
groombook:revert/gro-2689-health-ready
groombook:fix/remove-gro2689-from-uat
groombook:fix/gro-2672-drizzle-kit-migrate
groombook:fix/GRO-2652-auth-promise-reset
groombook:fix/GRO-2652-ci-yml-corruption
groombook:feature/GRO-2652-boot-econnreset-resilience
groombook:promote/uat-to-main-gro-2586
groombook:promote/GRO-2586-cors-to-uat
groombook:feature/GRO-2586-cors-origin-reflection
groombook:frozen/gro-2425-uat-to-main
groombook:feature/GRO-2425-comma-split-cors-origin
groombook:gro-2381-agents-contributing
groombook:flea/uat-to-main-gro-2359-api
groombook:release/main-GRO-2342-api
groombook:release/main-GRO-2319-api
groombook:flea/promote-main-gro-2311
groombook:promote/GRO-2319-api-to-uat
groombook:feat/GRO-2319-portal-waitlist-surfacing
groombook:flea/promote-main-gro-2172
groombook:dev-to-uat-gro-2311
groombook:flea/gro-2311-seed-portal-statusbadge-appts
groombook:promote/gro-2172-pets-to-uat
groombook:fix/gro-2172-pet-extended-fields
groombook:uat-to-main-gro-2299
groombook:flea/promote-main-gro-2294
groombook:promote/dev-to-uat-gro-2299
groombook:gro-2299-redact-patch-settings
groombook:flea/promote-gro-2294-uat
groombook:flea/gro-2294-route-opt-hardening
groombook:flea/uat-to-main-gro-2157-frozen
groombook:promote/dev-to-uat-gro-2225
groombook:flea/gro-2157-navigation-export
groombook:flea/gro-2235-waitlist-duplicate-409
groombook:feat/gro-2225-uat-seed-route-cohort
groombook:flea/uat-to-main-gro-2234-api
groombook:flea/dev-to-uat-gro-2156
groombook:flea-flicker/gro-2234-portal-session-sliding-ttl
groombook:release/main-6120b96
groombook:flea/gro-2156-travel-buffer-reorder
groombook:release/main-eb92f99
groombook:fix/gro-2214-portal-waitlist-validation
groombook:fix/gro-2203-portal-pet-patch-uuid-validation
groombook:dev-to-uat-gro-2155
groombook:feat/gro-2155-route-optimize-endpoints-dev
groombook:fix/gro-2163-migrate-pre-dns-wait
groombook:fix/gro-2187-portal-photokey-hijack
groombook:dev-to-uat-gro-2154
groombook:feat/gro-2154-geocoding-endpoints-dev
groombook:flea-flicker/gro-2197-ci-api-gate
groombook:dev-to-uat-gro-2153
groombook:dev-to-uat-gro-2187
groombook:fix/gro-2187-portal-pets-patch
groombook:dev-to-uat-gro-2129
groombook:flea-flicker/gro-2123-cleanup-stale-seed-duplicate
groombook:dev-to-uat-gro-2123
groombook:flea-flicker/gro-2123-seed-advisory-lock
groombook:promote/dev-to-uat-gro-2100
groombook:flea/gro-2100-uat-groomer-pet-linkage
groombook:flea/gro-2062-owner-bypass-audit
groombook:flea/gro-2052-rbac-betterauth-user-autoprovision
groombook:dogfather/gro-2013-promote-uat
groombook:flea/gro-2013-owner-bypass-deployed-tree
groombook:flea/gro-2033-idempotent-pet-profile-migrations
groombook:fix/gro-2014-profile-summary-error-handling
groombook:flea/gro-2000-uat-password-source-doc
groombook:fix/gro-1999-uat-seed-extra-large
groombook:fix/gro-1983-seed-pnpm-baked
groombook:fix/GRO-1979-coat-type-pet-size-enum-fix
groombook:fleaflicker/GRO-1962-deterministic-testcoopper-rocky
groombook:flea/gro-1977-seed-idempotency
groombook:fix/GRO-1977-seed-credential-idempotency
groombook:promote/dev-to-uat-gro-1971
groombook:fix/gro-1971-coat-type-enum-missing-short
groombook:fix/GRO-1962-uat-seed-pet-medicalalerts
groombook:flea/GRO-1955-fix-uc-undefined-seed
groombook:fix/GRO-1909-migrate-corepack-offline
groombook:fix/GRO-1953-coat-type-short-missing
groombook:fleaflicker/gro-medical-alert-types-behavioral-skin
groombook:fleaflicker/gro-1921-uat-reset-full-seed
groombook:flea/GRO-1945-pets-visitcount-hotfix
groombook:fix/GRO-1935-uat-customer-client-seed
groombook:fix/GRO-1914-seed-typeof
groombook:feature/GRO-1898-extended-pet-profile-seed
groombook:seed/extended-profile-fields-gro-1898
groombook:fix/gro-1889-reset-demo-data-pnpm
groombook:promote/dev-to-uat-gro-1866
groombook:fix/gro-1866-qa-fixes
groombook:fix/gro-1866-sso-bridge
groombook:fix/gro-1850-pet-profile-migration
groombook:promote/dev-to-uat-gro-1790
groombook:flea-flicker/pet-profile-summary
groombook:ff/gro-1765-trigger-ci
groombook:promo/gro-1764-uat
groombook:ci/gro-1757-build
groombook:fix/gro-1757-sso-auto-provision
groombook:fix/gro-1754-uat-ci
groombook:fix/gro-1754-trigger-ci-v2
groombook:fix/gro-1752-factories-v2
groombook:fix/gro-1752-factories-only
groombook:fix/gro-1746-apply-uat-seed-to-root-src
groombook:fix/gro-1752-extended-pet-profile-fields
groombook:promo/gro-1749-uat
groombook:fix/gro-1749-uat-seed-sync
groombook:fix/gro-1743-uat-seed-data
groombook:fix/gro-1480-portal-pets-patch
groombook:fix/gro-1678-econnreset-robustness
groombook:fix/gro-1576-ci-provenance-false
groombook:fix/gro-1575-ci-provenance
groombook:fix/gro-1566-api-health-auth-bypass
groombook:fix/gro-1544-api-health-endpoint
groombook:fix/gro-1533-migration-0031-coat-type
groombook:fix/gro-1533-missing-migration-0032
groombook:fix/gro-1533-missing-migration-journal
groombook:revert/gro-1533-dockerfile-fix
groombook:fix/gro-1533-revert-dockefile-build-change
groombook:flea-flicker/gro-1531-seed-db-filter
groombook:fix/gro-1522-ci-images-node22
groombook:pr-44
groombook:flea-flicker/gro-1509-better-auth-account-not-linked
groombook:flea-flicker/gro-1162-pet-buffer-time
groombook:fix/gro-1461-uat-playbook-auto-provision
groombook:flea-flicker/pet-profile-editor
groombook:fix/gro-1441-remove-duplicate-coat-props
groombook:fix/gro-1390-pets-test-mock-hoisting
groombook:fix/gro-1395-drizzle-orm-root-dep
groombook:gitea/migrate-workflows
groombook:flea-flicker/fix-gro-1370-ts-and-test-errors
groombook:fix/api/add-devdep-drizzle-orm-fix-vitest
groombook:pr-19
groombook:flea-flicker/uat-email-password-seed
groombook:fleaflicker/gro-1272-v2
groombook:fleaflicker/gro-1272-auto-provision-staff
groombook:add-renovate-config
groombook:flea-flicker/gro-1231-pnpm-workspace-dockerfile
groombook:fix/GRO-1202-rate-limit-override
groombook:fix/typescript-errors
groombook:flea-flicker/pet-profile-extended-fields
groombook:fix/uat-tester-oidc-sub
groombook:flea-flicker/fix-authprovider-mock-path
groombook:flea-flicker/auto-create-staff-oauth-users-v2
groombook:flea-flicker/auto-create-staff-oauth-users
groombook:docs/GRO-1099-uat-playbook-api
groombook:flea-flicker/fix-ci-install-deps-v2
groombook:flea-flicker/fix-ci-install-deps
Labels
Clear labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Good for newcomers
Extra attention is needed
This doesn't seem right
Further information is requested
This will not be worked on
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
ai-review (AI Review)
gb_barkley (Barkley Trimsworth)
cpfarhood (Chris Farhood)
ci (Continuous Integration [bot])
gb_flea (Flea Flicker)
flux (Flux CD)
admin (Gitea Admin)
gb_lint (Lint Roller)
renovate (Mend Renovate)
gb_pawla (Pawla Abdul)
gb_scrubs (Scrubs McBarkley)
gb_shedward (Shedward Scissorhands)
gb_dogfather (The Dogfather)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: groombook/api#234
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "dev-to-uat-gro-2689"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Promotion: dev → uat
Promotes the
GET /health/readyDB-touching readiness probe from dev to uat.Changes included
feat(api): add DB-touching /health/ready readiness probe (GRO-2678)— merged via PR feat(api): add DB-touching /health/ready readiness probe (GRO-2678) (#233)What to test (QA)
GET /health/ready→ 200{"status":"ready"}when DB + schema are presentGET https://api.groombook.dev/health/readyUAT Playbook
No user-facing behaviour changes — probe is infrastructure-only.
Related
cc @cpfarhood
- Register GET /api/readyz after /api/health in src/index.ts (before authMiddleware) - Runs `getDb().select({id: staff.id}).from(staff).limit(1)` inside try/catch - Success → 200 {"status":"ready"}; failure → 503 {"status":"degraded","check":"db"} - Raw driver error is console.error'd but never leaked to the response body - /health and /api/health are unchanged (K8s probes remain DB-less per CTO decision) - New unit tests: mock getDb to resolve → assert 200/ready; throw → assert 503/degraded - Updated UAT_PLAYBOOK.md §4.0 with TC-API-0.2 and TC-API-0.3 Co-Authored-By: Paperclip <noreply@paperclip.ing>Register GET /health/ready before the /api/* auth middleware so it is public and reachable by K8s readinessProbe on port 3000 without auth. On success → 200 {"status":"ready"}; on any DB/schema failure → 503 {"status":"degraded"}. Logs the pg error code; never leaks SQL in body. A dropped schema (42P01) surfaces as non-200, closing the /health mask that allowed the GRO-2678 incident to go undetected for ~43h. Add health-ready.test.ts covering the 200 success path, 503 on schema drop (42P01), and 503 on connection error; all assert no SQL leakage. Co-Authored-By: Paperclip <noreply@paperclip.ing>QA review — GRO-2691 (dev → uat, /health/ready GRO-2689)
Requesting changes: this PR is empty — there is nothing to promote. Please close it as already-promoted (do not merge an empty PR).
Finding: empty diff
changed_files: 0,additions: 0,deletions: 0; the files/diff APIs return nothing.compare uat...dev-to-uat-gro-2689→ 0 commits, 0 files. Head (d7bb314, =devhead) is already an ancestor of uat (0c8e943)./health/readycommit was swept into uat as part of the earlier GRO-2687/api/readyzpromotion (uat head0c8e943). Merging #234 would be a no-op / empty merge.Code criteria — already satisfied in uat (
src/index.ts@0c8e943)The probe is present and correct on the uat branch:
{"status":"ready"}on success.getDb().select({ id: staff.id }).from(staff).limit(1); returns503 {"status":"degraded"}on DB/schema failure (correct for a readiness probe).d7bb314is green (Lint & Typecheck, Test, Build — push + pull_request).readyz/health-readytests present.UAT_PLAYBOOK
No update required — a health/readiness probe is infrastructure-only, not user-facing. Agreed with the PR description.
Requested action
Close #234 as superseded / already promoted (the code is in uat as of
0c8e943). No code change is needed.Out of scope for this code-review gate
Acceptance criterion #3 —
GET https://api.groombook.dev/health/readyresponding live on the uat domain — is a runtime/deploy verification (uat must be redeployed on an image built from0c8e943). That belongs to UAT regression (Shedward), not the code-review gate. Flagging so it isn't assumed done just because the code is merged.cc @cpfarhood
Closing as superseded. QA (Lint Roller) confirmed the
/health/readycommit was already swept intouatas part of the GRO-2687/api/readyzpromotion — this diff is empty.Code criteria already satisfied in
uat@0c8e943:200 {"status":"ready"}on success,503 {"status":"degraded"}on DB failurereadyz/health-readytests presentRemaining open item (live domain check) is being handed to Shedward as a UAT regression task.
cc @cpfarhood
Pull request closed