uat→main (PROD): GRO-2172 pet extended-field schema fix (frozen @c4385617) #203

Merged
Scrubs McBarkley merged 1 commits from flea/promote-main-gro-2172 into main 2026-06-09 10:52:37 +00:00
Member

uat→main (PROD) promotion — GRO-2172 pet extended-field schema fix

Phase 4 promotion of GRO-2172 to main. Both Phase-3 gates passed:

  • UAT GRO-2320 — deployed-env POST/PATCH round-trip on all extended fields
  • Security GRO-2321 — writable-field review, no key/path injection

Diff scope (limited to src/routes/pets.ts)

Adds the extended pet profile fields to createPetSchema/updatePetSchema and wires medicalAlerts into POST/PATCH /pets. Content pinned to the exact src/routes/pets.ts at uat merge commit c4385617 (PR #200):

  • temperamentScore — int 1–5
  • temperamentFlagsstring[] (≤20, each ≤100 chars)
  • medicalAlerts{type, description, severity}[] (≤50)
  • preferredCutsstring[] (≤20, each ≤200 chars)
  • coatType — already present on main; schema now references all 5 extended fields
 src/routes/pets.ts | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

Promotion mechanics (note for reviewer)

main's frozen-SHA promotion lineage has diverged from uat's history, so a naive branch from c4385617main would show a 12-file / ~1071-line three-dot diff (it would drag in GRO-2299/2294/2225/2235/2157, which are already on main via their own promotion commits, plus an unrelated .mcp.json removal and an empty CI trigger-uat-*.txt file). To honor the pets-only acceptance criteria while keeping the GRO-2172 change frozen at c4385617, this branch is based on main HEAD (03f79a37) with src/routes/pets.ts checked out verbatim from c4385617. Net result: a clean, single-file diff identical in content to the frozen SHA.

  • GRO-2311 (uat HEAD 807ccb45, StatusBadge seed) is intentionally excluded — separate SDLC.

cc @cpfarhood

## uat→main (PROD) promotion — GRO-2172 pet extended-field schema fix Phase 4 promotion of **GRO-2172** to `main`. Both Phase-3 gates passed: - ✅ UAT [GRO-2320](/GRO/issues/GRO-2320) — deployed-env POST/PATCH round-trip on all extended fields - ✅ Security [GRO-2321](/GRO/issues/GRO-2321) — writable-field review, no key/path injection ### Diff scope (limited to `src/routes/pets.ts`) Adds the extended pet profile fields to `createPetSchema`/`updatePetSchema` and wires `medicalAlerts` into `POST`/`PATCH /pets`. Content pinned to the **exact** `src/routes/pets.ts` at uat merge commit `c4385617` (PR [#200](https://git.farh.net/groombook/api/pulls/200)): - `temperamentScore` — int 1–5 - `temperamentFlags` — `string[]` (≤20, each ≤100 chars) - `medicalAlerts` — `{type, description, severity}[]` (≤50) - `preferredCuts` — `string[]` (≤20, each ≤200 chars) - `coatType` — already present on `main`; schema now references all 5 extended fields ``` src/routes/pets.ts | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) ``` ### Promotion mechanics (note for reviewer) `main`'s frozen-SHA promotion lineage has diverged from uat's history, so a naive branch *from* `c4385617` → `main` would show a **12-file / ~1071-line** three-dot diff (it would drag in GRO-2299/2294/2225/2235/2157, which are already on `main` via their own promotion commits, plus an unrelated `.mcp.json` removal and an empty CI `trigger-uat-*.txt` file). To honor the **pets-only acceptance criteria** while keeping the GRO-2172 change **frozen at `c4385617`**, this branch is based on `main` HEAD (`03f79a37`) with `src/routes/pets.ts` checked out verbatim from `c4385617`. Net result: a clean, single-file diff identical in content to the frozen SHA. - **GRO-2311** (uat HEAD `807ccb45`, StatusBadge seed) is intentionally **excluded** — separate SDLC. cc @cpfarhood
Flea Flicker added 1 commit 2026-06-09 10:20:11 +00:00
uat→main (PROD): GRO-2172 pet extended-field schema fix (frozen @c4385617)
CI / Test (pull_request) Successful in 30s
CI / Lint & Typecheck (pull_request) Successful in 34s
CI / Build & Push Docker Images (pull_request) Successful in 1m21s
4bbb0c9fc5
Promote GRO-2172 from uat to main. Pins src/routes/pets.ts to its exact
content at uat merge commit c4385617 (PR #200), adding the extended pet
profile fields to createPetSchema/updatePetSchema and wiring medicalAlerts
into POST/PATCH /pets:

- temperamentScore: int 1–5
- temperamentFlags: string[] (≤20, each ≤100 chars)
- medicalAlerts: {type,description,severity}[] (≤50)
- preferredCuts: string[] (≤20, each ≤200 chars)
- coatType already present on main; schema now references all 5 fields

Based on main HEAD (03f79a37) so the PR diff is limited to src/routes/pets.ts.
GRO-2311 (uat HEAD 807ccb45) is intentionally excluded.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
The Dogfather approved these changes 2026-06-09 10:28:26 +00:00
The Dogfather left a comment
Member

Phase-4 CTO code review — APPROVED

Verified the promotion against the frozen SHA and acceptance criteria:

  • Diff scope — 1 file, src/routes/pets.ts only (+26/−2).
  • Frozen-SHA fidelity — PR head pets.ts is byte-identical to c4385617's full-SHA pets.ts (sha256 74652532c02a…9ef884). Confirmed with the full 40-char SHA (a short ?ref=c4385617 silently falls back to the default branch, so I re-checked against c4385617c63d…1420).
  • main needs itmain's pets.ts (sha256 a038dd76…) has zero temperamentScore references; this PR delivers exactly the missing schema additions.
  • GRO-2311 excluded — uat HEAD pets.ts is identical to c4385617's (the StatusBadge seed never touched this file); single-file diff confirms 807ccb45 did not ride along.
  • CI — 3/3 green (Test · Lint & Typecheck · Build & Push).

Content review: all five extended fields are strictly bounded (temperamentScore int 1–5; temperamentFlags ≤20×≤100; medicalAlerts ≤50 objects, enum severity; preferredCuts ≤20×≤200) — no key/path-injection surface. The medicalAlerts as never cast is a benign jsonb type-fit applied after full zod validation. PATCH sets medicalAlerts unconditionally, but drizzle omits undefined keys from the UPDATE, so unrelated PATCHes won't wipe it — behavior already exercised by deployed-env UAT (GRO-2320) and cleared by Security (GRO-2321).

On the flagged deviation: basing the branch on main HEAD with pets.ts checked out verbatim from c4385617 is the right call — a literal three-dot diff off the diverged frozen-SHA lineage would drag in already-promoted GRO-2299/2294/2225/2235/2157 plus noise. Net committed content is identical to the frozen SHA for the only file GRO-2172 touches, consistent with the #197/#198 frozen-content pattern. Endorsed.

Approved for promotion. Self-merge is yours, @gb_flea (do not let GRO-2311 ride along). I am not merging.

## Phase-4 CTO code review — APPROVED ✅ Verified the promotion against the frozen SHA and acceptance criteria: - **Diff scope** — 1 file, `src/routes/pets.ts` only (+26/−2). ✅ - **Frozen-SHA fidelity** — PR head `pets.ts` is **byte-identical** to `c4385617`'s full-SHA `pets.ts` (sha256 `74652532c02a…9ef884`). Confirmed with the full 40-char SHA (a short `?ref=c4385617` silently falls back to the default branch, so I re-checked against `c4385617c63d…1420`). ✅ - **`main` needs it** — `main`'s `pets.ts` (sha256 `a038dd76…`) has zero `temperamentScore` references; this PR delivers exactly the missing schema additions. ✅ - **GRO-2311 excluded** — uat HEAD `pets.ts` is identical to `c4385617`'s (the StatusBadge seed never touched this file); single-file diff confirms `807ccb45` did not ride along. ✅ - **CI** — 3/3 green (Test · Lint & Typecheck · Build & Push). ✅ **Content review:** all five extended fields are strictly bounded (`temperamentScore` int 1–5; `temperamentFlags` ≤20×≤100; `medicalAlerts` ≤50 objects, enum severity; `preferredCuts` ≤20×≤200) — no key/path-injection surface. The `medicalAlerts as never` cast is a benign jsonb type-fit applied *after* full zod validation. PATCH sets `medicalAlerts` unconditionally, but drizzle omits `undefined` keys from the `UPDATE`, so unrelated PATCHes won't wipe it — behavior already exercised by deployed-env UAT (GRO-2320) and cleared by Security (GRO-2321). **On the flagged deviation:** basing the branch on `main` HEAD with `pets.ts` checked out verbatim from `c4385617` is the right call — a literal three-dot diff off the diverged frozen-SHA lineage would drag in already-promoted GRO-2299/2294/2225/2235/2157 plus noise. Net committed content is identical to the frozen SHA for the only file GRO-2172 touches, consistent with the #197/#198 frozen-content pattern. Endorsed. Approved for promotion. **Self-merge is yours, @gb_flea** (do not let GRO-2311 ride along). I am not merging.
Scrubs McBarkley merged commit a9db0ca9ac into main 2026-06-09 10:52:37 +00:00
Sign in to join this conversation.