fix(GRO-2652): restore ci.yml from double-base64 corruption + UAT_PLAYBOOK §4.20 clients-from-auth #224

Merged
Flea Flicker merged 2 commits from fix/GRO-2652-ci-yml-corruption into dev 2026-08-05 09:29:17 +00:00
Member

Problem

QA (PR #223 review by @gb_lint) identified two blockers in the dev→uat promotion:

Blocker 1 — .gitea/workflows/ci.yml double-base64-encoded

The file on dev (and the merged feature branch feature/GRO-2652-boot-econnreset-resilience) contained a single 8316-byte base64 string instead of YAML. Gitea Actions could not parse it as a workflow, causing PR #223 to show zero CI checks (total_count: 0).

Root cause: the previous run wrote the file using mcp__gitea__create_or_update_file which received a base64-encoded content field — but the field was already the base64-encoding of the intended YAML. Result: the file stored on disk was base64(yaml) instead of yaml.

Fix: decoded the double-encoded content, applied the typo fix (outpudsoutputs on the migrate image tag line), and wrote the correct YAML directly.

Blocker 2 — Missing UAT_PLAYBOOK coverage for POST /api/portal/clients-from-auth (GRO-2359)

GRO-2359 landed on dev without adding UAT_PLAYBOOK test cases for the new OOBE registration endpoint. This PR adds §4.20 Portal OOBE — Create Client from Auth (TC-API-20.1–20.8) covering:

  • 201 create (name only, all optional fields)
  • 400 Zod validation failures (missing name, empty name)
  • 401 no Better Auth session
  • 409 existing email
  • 409 concurrent insert race
  • 503 auth not configured

Changes

  • .gitea/workflows/ci.yml — restored as proper YAML; outpudsoutputs typo fixed on migrate image tag; all four cache-to: lines retain ignore-error=true
  • UAT_PLAYBOOK.md — §4.20 added for clients-from-auth (GRO-2359)

Updated UAT_PLAYBOOK sections

  • §4.20 (new): Portal OOBE — Create Client from Auth

cc @cpfarhood

## Problem QA ([PR #223](https://git.farh.net/groombook/api/pulls/223) review by @gb_lint) identified two blockers in the dev→uat promotion: ### Blocker 1 — `.gitea/workflows/ci.yml` double-base64-encoded The file on `dev` (and the merged feature branch `feature/GRO-2652-boot-econnreset-resilience`) contained a single 8316-byte base64 string instead of YAML. Gitea Actions could not parse it as a workflow, causing PR #223 to show zero CI checks (`total_count: 0`). **Root cause:** the previous run wrote the file using `mcp__gitea__create_or_update_file` which received a base64-encoded `content` field — but the field was already the base64-encoding of the intended YAML. Result: the file stored on disk was base64(yaml) instead of yaml. **Fix:** decoded the double-encoded content, applied the typo fix (`outpuds` → `outputs` on the migrate image tag line), and wrote the correct YAML directly. ### Blocker 2 — Missing UAT_PLAYBOOK coverage for `POST /api/portal/clients-from-auth` (GRO-2359) GRO-2359 landed on `dev` without adding UAT_PLAYBOOK test cases for the new OOBE registration endpoint. This PR adds **§4.20 Portal OOBE — Create Client from Auth** (TC-API-20.1–20.8) covering: - 201 create (name only, all optional fields) - 400 Zod validation failures (missing name, empty name) - 401 no Better Auth session - 409 existing email - 409 concurrent insert race - 503 auth not configured ## Changes - `.gitea/workflows/ci.yml` — restored as proper YAML; `outpuds` → `outputs` typo fixed on migrate image tag; all four `cache-to:` lines retain `ignore-error=true` - `UAT_PLAYBOOK.md` — §4.20 added for `clients-from-auth` (GRO-2359) ## Updated UAT_PLAYBOOK sections - **§4.20** (new): Portal OOBE — Create Client from Auth cc @cpfarhood
Flea Flicker added 2 commits 2026-08-05 09:20:26 +00:00
Co-Authored-By: Paperclip <noreply@paperclip.ing>
docs(GRO-2359): add UAT_PLAYBOOK §4.20 clients-from-auth test cases
CI / Lint & Typecheck (pull_request) Successful in 19s
CI / Test (pull_request) Successful in 21s
CI / Build & Push Docker Images (pull_request) Successful in 1m9s
61f23e47f1
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Flea Flicker merged commit f98c5ccaf7 into dev 2026-08-05 09:29:17 +00:00
Sign in to join this conversation.