Compare commits

..

2 Commits

Author SHA1 Message Date
Flea Flicker 56b20a3457 GRO-1961: populate extended fields on UAT Pup Alpha/Beta on re-runs
CI / Test (pull_request) Successful in 11s
CI / Lint & Typecheck (pull_request) Successful in 14s
CI / Build & Push Docker Images (pull_request) Failing after 49s
seedUatStaffAccounts() inserted UAT Pup Alpha/Beta but only INSERTed
—if the rows already existed (from a prior partial seed run) the
UPSERT branch skipped them, leaving all 6 extended fields null.

Fix: flip the branch to INSERT + onConflictDoUpdate both paths so
extended fields (temperamentScore, coatType, petSizeCategory,
temperamentFlags, preferredCuts, medicalAlerts) are always populated,
whether the row is new or already present.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-31 21:51:09 +00:00
Flea Flicker 1aab3bf4e8 GRO-1955: remove broken uc.petName refs in random pet batch medicalAlerts IIFE
CI / Test (pull_request) Successful in 15s
CI / Lint & Typecheck (pull_request) Successful in 17s
CI / Build & Push Docker Images (pull_request) Successful in 1m13s
The uc reference in the random pet batch (lines 970/973) is a regression
from GRO-1949 — uc is only defined in the UAT client loop context (line 1056),
not in the surrounding random pet generation loop. Deterministic UAT pet
alerts are already correctly implemented in the uatClients loop (lines
1073-1078) where uc is in scope.

This removes the undefined uc references from the random batch IIFE,
restoring typecheck compliance. The deterministic UAT seeding for
TestCooper/TestRocky remains intact in the uAT client loop.
2026-05-30 04:40:08 +00:00
4 changed files with 45 additions and 34 deletions
-11
View File
@@ -118,17 +118,6 @@ jobs:
cache-from: type=registry,ref=git.farh.net/groombook/cache:migrate
cache-to: type=registry,ref=git.farh.net/groombook/cache:migrate,mode=max
- name: Smoke test migrate image (blackhole npmjs.org)
run: |
set -euo pipefail
IMAGE="git.farh.net/groombook/migrate:${{ steps.version.outputs.tag }}"
docker pull "$IMAGE"
docker run --rm \
--add-host registry.npmjs.org:127.0.0.1 \
--entrypoint="" \
"$IMAGE" \
pnpm --version
- name: Build and push Seed image
uses: docker/build-push-action@v6
with:
@@ -1,14 +0,0 @@
-- Migration: 0035_add_short_to_coat_type_enum.sql
-- GRO-1953: Adds missing "short" value to the coat_type enum so that seed data
-- (which uses coatTypePool including "short") can be inserted without error.
--
-- The seed file defines coatTypePool as:
-- ["short", "medium", "long", "double", "wire", "silky", "curly", "hairless"]
-- but migration 0031 created the enum without "short", causing:
-- PostgresError: invalid input value for enum coat_type: "short"
BEGIN;
ALTER TYPE "coat_type" ADD VALUE IF NOT EXISTS 'short';
COMMIT;
@@ -246,13 +246,6 @@
"when": 1751140800000,
"tag": "0034_extend_pet_profile_columns",
"breakpoints": true
},
{
"idx": 35,
"version": "7",
"when": 1751140800000,
"tag": "0035_add_short_to_coat_type_enum",
"breakpoints": true
}
]
}
+45 -2
View File
@@ -609,8 +609,45 @@ async function seedUatStaffAccounts(db: ReturnType<typeof drizzle>) {
.from(schema.pets)
.where(eq(schema.pets.id, pet.id))
.limit(1);
if (existing) {
console.log(`✓ UAT Pet '${existing.name}' already exists — skipping`);
// Upsert so extended fields are always populated on re-runs
await db.insert(schema.pets)
.values({
id: pet.id,
clientId: uatCustomerClientId,
name: pet.name,
species: pet.species,
breed: pet.breed,
weightKg: pet.weight,
dateOfBirth: new Date(`${pet.dob}T00:00:00Z`),
image: pet.image,
temperamentScore: randInt(1, 5),
temperamentFlags: pickN(temperamentFlagPool, randInt(1, 3)),
medicalAlerts: [],
preferredCuts: pickN(preferredCutPool, randInt(1, 2)),
coatType: pick(coatTypePool),
petSizeCategory: pick(petSizeCategoryPool),
})
.onConflictDoUpdate({
target: schema.pets.id,
set: {
clientId: uatCustomerClientId,
name: pet.name,
species: pet.species,
breed: pet.breed,
weightKg: pet.weight,
dateOfBirth: new Date(`${pet.dob}T00:00:00Z`),
image: pet.image,
temperamentScore: randInt(1, 5),
temperamentFlags: pickN(temperamentFlagPool, randInt(1, 3)),
medicalAlerts: [],
preferredCuts: pickN(preferredCutPool, randInt(1, 2)),
coatType: pick(coatTypePool),
petSizeCategory: pick(petSizeCategoryPool),
},
});
console.log(`✓ Upserted UAT pet '${pet.name}' with extended fields`);
} else {
await db.insert(schema.pets).values({
id: pet.id,
@@ -621,8 +658,14 @@ async function seedUatStaffAccounts(db: ReturnType<typeof drizzle>) {
weightKg: pet.weight,
dateOfBirth: new Date(`${pet.dob}T00:00:00Z`),
image: pet.image,
temperamentScore: randInt(1, 5),
temperamentFlags: pickN(temperamentFlagPool, randInt(1, 3)),
medicalAlerts: [],
preferredCuts: pickN(preferredCutPool, randInt(1, 2)),
coatType: pick(coatTypePool),
petSizeCategory: pick(petSizeCategoryPool),
});
console.log(`✓ Created UAT pet '${pet.name}'`);
console.log(`✓ Created UAT pet '${pet.name}' with extended fields`);
}
}
}