promote: dev → uat (GRO-1369 types sync) #428

Merged
The Dogfather merged 19 commits from dev into uat 2026-05-21 20:53:20 +00:00

19 Commits

Author SHA1 Message Date
Flea Flicker 526251b63a fix: resolve lint errors and xlarge mismatch for dev→uat promotion
CI / Test (push) Successful in 26s
CI / Lint & Typecheck (push) Successful in 27s
CI / E2E Tests (push) Failing after 3m27s
CI / Update Infra Image Tags (push) Has been skipped
CI / Build (push) Successful in 24s
CI / Build & Push Docker Images (push) Has been skipped
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
- Remove unused gte/lt/ne imports from cascade.ts
- Prefix unused params originalEndTime, originalStartTime, newStartTime
  with underscore in cascade.ts and appointments.ts callers
- Remove unused petCoatType query param from book.ts availability route
- Align xlarge value: Book.tsx now uses "xlarge" (no hyphen) everywhere
  to match the Zod booking schema

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 20:28:43 +00:00
The Dogfather 3aa7631519 Merge pull request 'fix(GRO-1369): add missing sizeCategory/coatType/bufferMinutes to @groombook/types' (#427) from fix/gro-1369-types-sync into dev
CI / Test (pull_request) Successful in 25s
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Test (push) Successful in 25s
CI / Lint & Typecheck (pull_request) Failing after 23s
CI / E2E Tests (pull_request) Has been skipped
CI / Build (pull_request) Has been skipped
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Lint & Typecheck (push) Failing after 22s
CI / E2E Tests (push) Has been skipped
CI / Build (push) Has been skipped
CI / Build & Push Docker Images (push) Has been skipped
CI / Update Infra Image Tags (push) Has been skipped
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
CI / Web E2E (Dev) (pull_request) Has been cancelled
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled
Merge PR #427: fix(GRO-1369): add missing sizeCategory/coatType/bufferMinutes to @groombook/types

Approved by CTO (review #3463) and QA (review #3469).
Resolves GRO-1369.
2026-05-21 20:00:40 +00:00
The Dogfather 511bdf0d7d Merge pull request 'fix(GRO-1368): remove unused getDb import from consent.ts' (#426) from fix/gro-1368-consent-ts into dev
CI / Lint & Typecheck (push) Failing after 22s
CI / E2E Tests (push) Has been skipped
CI / Build (push) Has been skipped
CI / Build & Push Docker Images (push) Has been skipped
CI / Test (push) Successful in 23s
CI / Update Infra Image Tags (push) Has been skipped
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
feat(GRO-106): STOP/HELP compliance + consent log (#426)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 19:51:09 +00:00
Flea Flicker de3877b28d docs(app): add UAT_PLAYBOOK.md section 4.20 for STOP/HELP consent handler
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Lint & Typecheck (pull_request) Failing after 24s
CI / Test (pull_request) Successful in 25s
CI / E2E Tests (pull_request) Has been skipped
CI / Build (pull_request) Has been skipped
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled
CI / Web E2E (Dev) (pull_request) Has been cancelled
Adds 12 test cases covering:
- STOP/START/HELP flows and their auto-reply verification
- Alias keywords (STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT / UNSTOP, YES, SUBSCRIBE, INFO)
- Idempotency for double STOP and double START
- Case-insensitivity and whitespace trimming
- Non-keyword message rejection
- Consent event audit log verification

Refs: GRO-1205, GRO-1469, PR #426

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 19:50:37 +00:00
Chris Farhood 7d3adeae98 fix(GRO-1368): remove unused getDb import from consent.ts
getDb was imported but never used — db is passed as a parameter to
handleConsentKeyword. This was the primary TypeScript/lint error
flagged by QA.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 19:49:33 +00:00
Chris Farhood 1fbe670751 feat(GRO-106): STOP/HELP compliance + consent log
- Add detectKeyword() and handleConsentKeyword() in consent.ts
- Wire keyword detection into handleMessageReceived() in inbound.ts
- Add 24-unit test suite for consent.ts covering all keywords,
  case insensitivity, whitespace tolerance, idempotency, and
  help keyword state preservation

Fixes from QA review:
- Use getDb() instead of non-existent db export; import Db type
- Destructure clientId from findOrCreateConversation result
- Rename staffId → sentByStaffId in sendMessage call
- Remove messagingHelpReply query (column not yet in schema)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 19:49:33 +00:00
Flea Flicker f265d61475 fix(GRO-1388): correct petSizeCategory enum from "x-large" to "xlarge"
CI / Build (push) Has been skipped
CI / Lint & Typecheck (push) Failing after 21s
CI / Test (push) Successful in 24s
CI / E2E Tests (push) Has been skipped
CI / Build & Push Docker Images (push) Has been skipped
CI / Update Infra Image Tags (push) Has been skipped
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
The DB schema enum only accepts "xlarge", but the Zod schema and runtime
checks used "x-large". Changed all occurrences to match the schema.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 00:54:12 +00:00
The Dogfather 7d8d7535a5 Merge pull request 'fix(ci): Docker push auth + E2E DinD networking for Gitea' (#423) from fix/ci-e2e-dind-networking-registry-auth into dev
CI / Lint & Typecheck (push) Failing after 18s
CI / Test (push) Successful in 23s
CI / E2E Tests (push) Has been skipped
CI / Build (push) Has been skipped
CI / Build & Push Docker Images (push) Has been skipped
CI / Update Infra Image Tags (push) Has been skipped
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled
test merge
2026-05-21 00:43:08 +00:00
Chris Farhood da14866abe fix(ci): remove GitHub-specific permissions block (Gitea doesn't use them)
CI / Lint & Typecheck (pull_request) Failing after 20s
CI / Test (pull_request) Successful in 23s
CI / E2E Tests (pull_request) Has been skipped
CI / Build (pull_request) Has been skipped
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Web E2E (Dev) (pull_request) Has been cancelled
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 00:36:34 +00:00
groombook-engineer[bot] cc45692564 fix(ci): add PLAYWRIGHT_BASE_URL for DinD networking in E2E tests
CI / Lint & Typecheck (pull_request) Failing after 20s
CI / Test (pull_request) Successful in 25s
CI / Build (pull_request) Has been skipped
CI / E2E Tests (pull_request) Has been skipped
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Web E2E (Dev) (pull_request) Has been cancelled
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-21 00:33:04 +00:00
Chris Farhood cc0259975b fix(GRO-1369): add missing sizeCategory/coatType/bufferMinutes to @groombook/types
CI / Lint & Typecheck (pull_request) Successful in 22s
CI / Test (pull_request) Successful in 23s
CI / Build (pull_request) Successful in 23s
CI / E2E Tests (pull_request) Failing after 3m25s
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Web E2E (Dev) (pull_request) Has been cancelled
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled
Pet interface: added sizeCategory and coatType (nullable strings).
Service interface: added defaultBufferMinutes.
Appointment interface: added bufferMinutes.

These fields are referenced by Book.tsx, cascade.ts, buffer.ts, appointment
routes, and other type-annotated consuming code. Without them, any file that
imports these interfaces and accesses the fields causes a TypeScript error.

cc @cpfarhood

Co-Authored-By: Flea Flicker <noreply@paperclip.ing>
2026-05-20 15:44:08 +00:00
Chris Farhood 8e7a0b22e0 fix(GRO-1367): remove GitHub-specific upload-artifact and workflow_dispatch inputs
CI / Lint & Typecheck (pull_request) Failing after 19s
CI / Test (pull_request) Successful in 23s
CI / E2E Tests (pull_request) Has been skipped
CI / Build (pull_request) Has been skipped
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Web E2E (Dev) (pull_request) Has been cancelled
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled
- Remove workflow_dispatch.inputs block (GitHub-specific manual trigger args)
- Remove actions/upload-artifact@v4 from e2e job (not available in Gitea Actions)
- Remove actions/upload-artifact@v4 from web-e2e job (not available in Gitea Actions)

tibdex/github-app-token was already removed in prior commits.
2026-05-20 14:46:20 +00:00
Chris Farhood c4268a923e fix(GRO-1367): replace github.com noreply email with Gitea address
CI / E2E Tests (pull_request) Has been skipped
CI / Build (pull_request) Has been skipped
CI / Lint & Typecheck (pull_request) Failing after 20s
CI / Test (pull_request) Successful in 24s
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Web E2E (Dev) (pull_request) Has been cancelled
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled
Replace git config user.email from noreply.github.com to groombook-engineer@farh.net.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 14:42:01 +00:00
Chris Farhood 12ee1f054b fix(ci): Docker push auth + E2E DinD networking for Gitea
CI / Lint & Typecheck (pull_request) Failing after 19s
CI / Test (pull_request) Successful in 22s
CI / E2E Tests (pull_request) Has been skipped
CI / Build (pull_request) Has been skipped
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Web E2E (Dev) (pull_request) Has been cancelled
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled
- Use git.farh.net registry with REGISTRY_TOKEN instead of ghcr.io/GITHUB_TOKEN
- Migrate all image tags from ghcr.io/groombook/* to git.fars.net/groombook/*
- Replace GHA cache with OCI registry cache (type=registry)
- Replace tibdex/github-app-token with oauth2+REGISTRY_TOKEN for infra clone
- Replace gh pr create/merge with Gitea API curl calls
- Replace actions/github-script@v7 Comment on PR with Gitea issues API curl
- Remove permissions: blocks from deploy-dev and cd jobs (Gitea-native)
- Update deploy-dev kubectl image refs to git.farh.net/groombook/*

Refs: GRO-1344
2026-05-20 11:38:07 +00:00
Chris Farhood 3063fde870 docs: add UAT test cases for size/coat booking and cascading delay
Updated UAT_PLAYBOOK.md §4.5 with TC-APP-4.5.7 through TC-APP-4.5.13
covering the booking wizard dropdowns, buffer-aware duration, cascade
trigger/shift/notification, day-boundary guard rail, and status guards.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 16:19:15 +00:00
Chris Farhood a7b3dc2f02 fix: restore missing columns to pets table
The schema edit that added sizeCategory/coatType accidentally removed
other existing columns (dateOfBirth, healthAlerts, groomingNotes, etc.).
Restoring them now.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-16 16:13:24 +00:00
Chris Farhood 90af76f222 feat(appointments): cascading delay prevention for appointment overruns
When a PATCH /appointments/:id extends endTime beyond the original, detect
and automatically shift downstream same-groomer appointments by the overrun
delta plus buffer. Only affects scheduled/confirmed appointments; appointments
that would shift outside business hours are flagged for manual review.

Clients receive email notification of rescheduled times.

GRO-1175: GRO-1162-G

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-16 16:08:05 +00:00
Chris Farhood 0c7cd96130 fix: resolve duplicate 'end' variable declaration in book.ts
Using `let end` so the buffer-aware recalculation can reassign the
variable rather than redeclaring it in a nested scope.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-16 15:59:24 +00:00
Chris Farhood 4bcc78f1e6 feat: add pet size/coat to booking flow with buffer-aware availability
- Add petSizeCategory and petCoatType dropdowns to booking wizard
  (after breed field, optional but encouraged)
- Pass selected values to GET /availability as query params
- large/x-large pets add service.defaultBufferMinutes to slot calculation
  and appointment end time (buffer never shown to client)
- POST /appointments saves size/coat to pet record
- Confirmation step shows total duration (service + buffer if applicable)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-16 15:53:56 +00:00