docs(ai): refresh handoff state after PR #153 merge
- CURRENT_TASK rolls forward — PR #153 closed out, no active task, with recommended next moves (promote e2e gate to required, pick from TODO). - HANDOFF rewritten — new home position is `main`; documents the e2e job's stub ANTHROPIC_API_KEY convention so future AI-touching e2e tests know what to expect. - SESSION_LOG entry extended with the CI env-var diagnosis, the fix, the merge, and pointers to the natural next pickups. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -2,54 +2,27 @@
|
||||
|
||||
# HANDOFF.md
|
||||
|
||||
**Last updated:** 2026-04-26 03:50 EDT
|
||||
**Last updated:** 2026-04-26 04:55 EDT
|
||||
|
||||
**Active task:** Ship PR #153 — the AssistantChatPage prefill `currentChatRef` bug fix. See [CURRENT_TASK.md](CURRENT_TASK.md).
|
||||
**Active task:** None — pick from [`TODO.md`](TODO.md). See [`CURRENT_TASK.md`](CURRENT_TASK.md) for recommended next moves.
|
||||
|
||||
**Branch:** `fix/tasklane-prefill-ref` → PR #153.
|
||||
**Branch:** `main` is the home position. Recent merges: PR #150 (CI recovery, `87bb20b`), PR #153 (prefill `currentChatRef` fix, `68fcdc6`).
|
||||
|
||||
## Current resume point
|
||||
## Where things stand
|
||||
|
||||
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.
|
||||
|
||||
CI was kicked off automatically on the rebased SHA. Watch:
|
||||
|
||||
- `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.
|
||||
|
||||
If all three go green, merge #153 into `main`.
|
||||
|
||||
## What this PR fixes
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
- 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)
|
||||
- CI is healthy on `main`: backend, frontend, and e2e all green on the latest commits.
|
||||
- Branch protection on `main`: PR-only merges, force-push blocked, **`CI / frontend (pull_request)` required**, **`CI / backend (pull_request)` required**, `CI / e2e (pull_request)` not yet required.
|
||||
- Two consecutive PR runs (#150, #153) finished green on e2e. The "promote e2e to required" gate from the prior task is now satisfiable.
|
||||
- Backend AI-gated endpoints (`POST /ai-sessions`, `/chat`, `/respond`, etc.) call `_require_ai_enabled()` and return 503 if no provider key is set. The e2e CI job now sets a stub `ANTHROPIC_API_KEY` so any future test that exercises those flows can rely on it; tests should still stub the actual AI calls in the browser via `page.route` so no real Anthropic traffic occurs.
|
||||
|
||||
## 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.
|
||||
1. (Optional, ops-only) Promote `CI / e2e (pull_request)` to required on `main` in Gitea branch protection.
|
||||
2. Pick the next backlog item from `TODO.md`. Top of "Up next" is the `data-testid` e2e-stability audit; the new `currentChatRef` silent-return audit (added to backlog in this session) is a natural pairing with the bug fix that just shipped.
|
||||
|
||||
## Useful breadcrumbs
|
||||
|
||||
- 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.
|
||||
- The fix that just landed: [`frontend/src/pages/AssistantChatPage.tsx`](../frontend/src/pages/AssistantChatPage.tsx) — `currentChatRef.current = session.session_id` after `setActiveChatId` in the dashboard prefill 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).
|
||||
- E2e env convention: [`.gitea/workflows/ci.yml`](../.gitea/workflows/ci.yml) — `ANTHROPIC_API_KEY` is stubbed in the e2e job env. Tests that exercise AI-gated endpoints should stub the actual AI calls in the browser, not rely on a real key.
|
||||
- Silent-return follow-up entry: [`.ai/TODO.md`](TODO.md), Backlog section.
|
||||
|
||||
Reference in New Issue
Block a user