From 6656ebdead02d784d4032abf932a838ef5f62365 Mon Sep 17 00:00:00 2001 From: Michael Chihlas Date: Sat, 25 Apr 2026 15:55:08 -0400 Subject: [PATCH] =?UTF-8?q?docs(ai):=20reflect=20PR=20consolidation=20?= =?UTF-8?q?=E2=80=94=20#151/#152=20merged=20into=20#150?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .ai/HANDOFF.md | 61 ++++++++++++++------------------------------------ 1 file changed, 17 insertions(+), 44 deletions(-) diff --git a/.ai/HANDOFF.md b/.ai/HANDOFF.md index 26edc7a1..67716245 100644 --- a/.ai/HANDOFF.md +++ b/.ai/HANDOFF.md @@ -4,64 +4,37 @@ **Last updated:** 2026-04-25 (America/New_York) -**Active task:** Land three open CI PRs (#150 + #151 + #152), then enable backend + e2e gates on `main`. See [CURRENT_TASK.md](CURRENT_TASK.md). +**Active task:** Land PR #150 (the consolidated CI-recovery PR), then enable backend + e2e gates on `main`. See [CURRENT_TASK.md](CURRENT_TASK.md). -**Branches:** Three open PRs, all independent of each other for correctness: -- `fix/ci-workflow-config` → PR #150 -- `fix/ci-pytest-xdist` → PR #151 (stacked on #150 for context but mergeable on its own) -- `fix/e2e-test-selectors` → PR #152 +**Branch:** `fix/ci-workflow-config` → PR #150. PRs #151 and #152 were closed and consolidated into this branch — one PR is easier to land than three stacked ones, and the user got tired of waiting on serial CI runs of intermediate states. -**Runner setup:** Three Gitea Actions agents are now registered on the homelab box, so `backend` / `frontend` / `e2e` jobs run truly in parallel instead of serializing on a single agent. Combined with PR #151's xdist parallelization, the previous 1h 14m wall-clock should drop to ~6–10 min. +**Runner setup:** Three Gitea Actions agents are registered on the homelab box, so `backend` / `frontend` / `e2e` jobs run in parallel instead of serializing on a single agent. Combined with the xdist parallelization in this PR, the previous 1h 14m wall-clock should drop to ~9–12 min. -## Three open PRs +## What's on PR #150's branch (consolidated) -### PR #150 — `fix/ci-workflow-config` → main +Eight commits, all CI-recovery work that landed together because they were inter-dependent: -Carries: -- The Codex commit (`49f8856 wip(handoff): restore backend suite to green`) — fixes 54 backend test failures. -- Workflow fixes: `DATABASE_TEST_URL` env, `actions/upload-artifact` v3 pin. -- Most-recent commit (`e976fb4`): - - Mocks `_extract_template_parameters` in `test_record_decision_persists_and_bumps_state_version` (last test failing on CI; needed an AI provider key the runner doesn't have). Verified locally — passes. - - pip + npm caches in all three jobs. - - Drops `--cov-report=term-missing` (the custom "Display coverage summary" step prints the same info from JSON). - - Adds `--maxfail=10` so structural breakage fails fast. - -**Expected CI on this PR:** all three jobs green for the first time in months. - -### PR #151 — `fix/ci-pytest-xdist` → main (stacked on #150) - -Carries (on top of #150): -- `pytest-xdist==3.6.1` in `requirements-dev.txt`. -- `conftest.py` adds `_worker_db_url` + `_ensure_worker_db_exists`. Each xdist worker gets its own DB (`resolutionflow_test_gw0`, `gw1`, …) so the per-test `DROP SCHEMA public CASCADE` doesn't race across workers. -- Workflow's pytest invocation gains `-n auto`. - -**Measured locally:** backend suite goes from `22m 27s` (serial, 1076 passed) → `4m 28s` (8 workers, 1076 passed). Same exit code, same test count. - -### PR #152 — `fix/e2e-test-selectors` → main - -Carries: five Playwright e2e selector updates against the current UI. The drift was inherited from the FlowPilot/PSA migration: - -- `Sessions` → `Session History` (page heading) -- `Account Settings` → `Account Management` (page heading) -- `/assistant` → `/pilot` (Phase 1 route rename; redirect still works) -- Flow-session filtering and the Resume button moved behind the "Flow Sessions" tab on `/sessions` (default tab is "AI Sessions") -- `resume.spec.ts` no longer starts at `/trees` — Resume button rendering moved to the session card on `/sessions` - -No product-code changes. Pure test updates. +1. **Codex's `49f8856 wip(handoff): restore backend suite to green`** — fixes the 54 real backend test failures left after #149. +2. **Workflow correctness:** `DATABASE_TEST_URL` env, `actions/upload-artifact` v3 pin (Gitea Actions doesn't support v4+). +3. **Test-fix + cheap CI wins (`e976fb4`):** mocks `_extract_template_parameters` in `test_record_decision_persists_and_bumps_state_version` so it doesn't need an AI provider key; pip + npm caches; `--cov-report=term-missing` dropped (the custom display step parses JSON); `--maxfail=10` so structural breakage exits fast. +4. **Postgres port-collision fix (`1bd43ab`):** dropped `ports: 5432:5432` host mapping. With three Gitea runner agents now active, two parallel jobs would race on `0.0.0.0:5432`. Tests connect via the `postgres` service-DNS hostname, not the host, so the mapping wasn't actually needed. +5. **pytest-xdist with per-worker DBs (`7f71436`):** `pytest-xdist==3.6.1` added; `conftest.py` derives a per-worker DB URL from `PYTEST_XDIST_WORKER` and creates it synchronously on first import. Verified on PR #151's CI run before consolidation: 22m serial → 9m37s on the 4-core runner. +6. **Five e2e selector updates (`69f2a37`):** drift from the FlowPilot/PSA migration. `Sessions` → `Session History`, `Account Settings` → `Account Management`, `/assistant` accepts `/pilot`, "Flow Sessions" tab clicks for ticket/client filtering and Resume on `/sessions`. ## Immediate next steps -1. **Merge PR #152 first.** Smallest, lowest risk, no shared file with the other two PRs. -2. **Merge PR #150 next.** Backend test suite should be fully green (1076 passed, 0 failed, 0 errors). -3. **Merge PR #151 last.** Backend job time drops to ~4–6 min on the runner. -4. **Enable backend gate** on `main` branch protection — append `"CI / backend (pull_request)"` to `status_check_contexts`: +1. **Watch PR #150's CI** on its latest sha (`69f2a37`). Backend should run ~9 min via xdist; frontend ~6 min; e2e ~5 min with the selector fixes. +2. **Merge PR #150** when all three jobs are green. +3. **Enable backend gate** on `main` branch protection — append `"CI / backend (pull_request)"` to `status_check_contexts`: ```bash curl -X PATCH -H "Authorization: token $GITEA_TOKEN" \ "https://gitea.resolutionflow.com/api/v1/repos/chihlasm/resolutionflow/branch_protections/main" \ -H "Content-Type: application/json" \ -d '{"status_check_contexts": ["CI / frontend (pull_request)", "CI / backend (pull_request)"]}' ``` -5. **Then enable `CI / e2e (pull_request)`** — same PATCH, append to the list. Verify e2e is reliably green for at least one PR run before locking it in. +4. **Then enable `CI / e2e (pull_request)`** — same PATCH, append to the list. Verify e2e is reliably green for at least one PR run before locking it in. + +PRs #151 (`fix/ci-pytest-xdist`) and #152 (`fix/e2e-test-selectors`) were closed as superseded by this PR. ## Uncommitted state