- CURRENT_TASK.md rolled forward — the CI-recovery task is complete
(PR #150 merged as 87bb20b; backend gate is in required checks).
Active task is now landing PR #153.
- HANDOFF.md rewritten — new resume point is watching CI on the
rebased SHA 1559feb and merging when all three checks are green.
- SESSION_LOG.md gains a 2026-04-26 entry covering the prefill bug
diagnosis, fix, regression test, and the rebase off post-#150 main.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -2,63 +2,54 @@
|
||||
|
||||
# HANDOFF.md
|
||||
|
||||
**Last updated:** 2026-04-25 16:41 EDT
|
||||
**Last updated:** 2026-04-26 03:50 EDT
|
||||
|
||||
**Active task:** Land PR #150 (the consolidated CI-recovery PR), then enable backend and eventually e2e gates on `main`. See [CURRENT_TASK.md](CURRENT_TASK.md).
|
||||
**Active task:** Ship PR #153 — the AssistantChatPage prefill `currentChatRef` bug fix. See [CURRENT_TASK.md](CURRENT_TASK.md).
|
||||
|
||||
**Branch:** `fix/ci-workflow-config` -> PR #150. PRs #151 and #152 were closed and consolidated into this branch.
|
||||
**Branch:** `fix/tasklane-prefill-ref` → PR #153.
|
||||
|
||||
## Current resume point
|
||||
|
||||
Latest PR #150 CI had backend and frontend green, but `CI / e2e (pull_request)` failed on the resume smoke test.
|
||||
PR #150 is merged. Branch `fix/tasklane-prefill-ref` has been rebased onto the new `main` (HEAD `1559feb`) and force-pushed; that pulled in the workflow fixes from #150, so the prior backend port-conflict and frontend upload-artifact failures are gone structurally.
|
||||
|
||||
The failure was not product behavior. Playwright was using:
|
||||
CI was kicked off automatically on the rebased SHA. Watch:
|
||||
|
||||
```ts
|
||||
page.locator('.bg-card').filter({ hasText: tree.name }).first()
|
||||
```
|
||||
- `CI / backend (pull_request)` — should pass now that postgres uses the docker-network DNS name `postgres:5432` (no host port race).
|
||||
- `CI / frontend (pull_request)` — should pass now that the `actions/upload-artifact@v4` step is removed.
|
||||
- `CI / e2e (pull_request)` — runs on its own postgres + builds frontend inline. Includes the new `e2e/assistant-chat-prefill.spec.ts` regression test, which stubs `/ai-sessions/*/chat` with `page.route` and is independent of Anthropic.
|
||||
|
||||
On the session history page this matched the tree filter `<select>` first because the select options contain the same flow name, then the test waited forever for a `Resume` button inside the select.
|
||||
If all three go green, merge #153 into `main`.
|
||||
|
||||
This session fixed that properly by adding stable test IDs to repeated cards and moving e2e tests off `.bg-card` selectors:
|
||||
## What this PR fixes
|
||||
|
||||
- `flow-session-card` in `SessionHistoryPage.tsx`
|
||||
- `tree-card` in `TreeGridView.tsx` and `TreeListView.tsx`
|
||||
- `share-card` in `MySharesPage.tsx`
|
||||
Reported symptom: in a troubleshooting (chat) session, after answering a subset of the task-lane questions and clicking *Send N of M Responses*, no AI response appeared.
|
||||
|
||||
The workflow was also hardened:
|
||||
Root cause: the dashboard prefill effect in `AssistantChatPage` set `activeChatId` after creating a new session but never updated `currentChatRef.current`. The `currentChatRef.current !== sentForChatId` guard inside `handleSend` and `handleTaskSubmit` then bailed silently on every later request and discarded the AI's reply.
|
||||
|
||||
- Postgres service healthchecks now run `pg_isready -U postgres` instead of checking as `root`.
|
||||
- The e2e frontend build now bakes `VITE_API_URL="${PLAYWRIGHT_API_ORIGIN}"`, matching the Playwright backend origin.
|
||||
Fix is a single line: assign `currentChatRef.current = session.session_id` immediately after `setActiveChatId(session.session_id)` in the prefill effect, mirroring `handleNewChat` and `handleResumeNew`.
|
||||
|
||||
## Verification completed
|
||||
|
||||
- `git diff --check`
|
||||
- Confirmed no remaining `.bg-card` selectors in `frontend/e2e/*.ts`.
|
||||
- `docker exec -w /app resolutionflow_frontend npm run build`
|
||||
- Ran migrations and test-user seed in the dev backend container.
|
||||
- Focused Playwright verification in an Actions-like Ubuntu container:
|
||||
- First `e2e/resume.spec.ts` passed.
|
||||
- Then `e2e/history.spec.ts e2e/library.spec.ts e2e/library-start.spec.ts e2e/resume.spec.ts e2e/shares.spec.ts --project=chromium --workers=1` passed: `6 passed (1.3m)`.
|
||||
|
||||
## Immediate next steps
|
||||
|
||||
1. Push the WIP commit from this session to PR #150.
|
||||
2. Watch PR #150 CI on the new SHA. Expected result: backend, frontend, and e2e all green.
|
||||
3. Merge PR #150 when green.
|
||||
4. Enable `CI / backend (pull_request)` as a required status check on `main`.
|
||||
5. After at least one reliable green PR run, consider adding `CI / e2e (pull_request)` as required too.
|
||||
- New regression test `frontend/e2e/assistant-chat-prefill.spec.ts` drives the real dashboard prefill flow against the real backend, stubs `/ai-sessions/*/chat` for deterministic turn-1/turn-2 responses, asserts the second AI message renders. Confirmed it fails on unfixed code at the exact assertion (`Got it — based on your answer…` never appears) and passes once the fix is restored.
|
||||
- `tsc -b` clean. No new lint errors. Adjacent specs (`flowpilot-chat`) still pass.
|
||||
|
||||
## Branch protection on main (current)
|
||||
|
||||
- PR-only merges
|
||||
- `CI / frontend (pull_request)` required
|
||||
- `CI / backend (pull_request)` required (added during PR #150 close-out)
|
||||
- Force-push blocked
|
||||
- No review required (solo)
|
||||
|
||||
## Immediate next steps
|
||||
|
||||
1. Watch PR #153 CI on `1559feb`.
|
||||
2. Merge PR #153 when all three checks are green.
|
||||
3. After merge, decide whether to promote `CI / e2e (pull_request)` to required (would make this two consecutive green PR e2e runs in a row, the threshold from the prior CURRENT_TASK).
|
||||
4. Pick next item from `.ai/TODO.md` — top "Up next" is the `data-testid` audit; the `currentChatRef` silent-return follow-up is in Backlog and is a natural pairing with this fix.
|
||||
|
||||
## Useful breadcrumbs
|
||||
|
||||
- `.gitea/workflows/ci.yml` contains the parallel backend/frontend/e2e workflow.
|
||||
- `backend/scripts/seed_phase9_qa_fixtures.py` pre-bakes Phase 9 QA fixtures.
|
||||
- `.gstack/qa-reports/phase9-20260424-232700/REPORT.md` has the FlowPilot QA report.
|
||||
- Per-worker test DBs accumulate on the Postgres service. Cheap to leave around; cleanup if needed.
|
||||
- Bug fix: [`frontend/src/pages/AssistantChatPage.tsx`](../frontend/src/pages/AssistantChatPage.tsx) around line 258 — the `currentChatRef.current = session.session_id` line in the prefill `sendPrefill` effect.
|
||||
- Regression test: [`frontend/e2e/assistant-chat-prefill.spec.ts`](../frontend/e2e/assistant-chat-prefill.spec.ts).
|
||||
- TODO entry tracking the broader silent-return audit: [`.ai/TODO.md`](TODO.md).
|
||||
|
||||
Reference in New Issue
Block a user