- Page-level Resolve patches applied_pending → applied_success before opening the resolution flow, so resolved sessions don't carry a provisional pending fix. - Page-level Escalate intercept now catches applied_pending in addition to verifying/partial; intercept copy generalized from "Verifying state" to "still needs an outcome." - PendingBanner gains a Dismiss action, matching the PR body and the backend's allowed pending → dismissed transition. - resolution_note_generator and escalation_package_generator system prompts no longer include real-looking pending examples (anti-parrot guardrail compliance). Verified via Docker: prompt anti-parrot 2/2, suggested-fix outcome suite 21/21, frontend tsc -b clean, npm run build clean. Co-Authored-By: Codex <noreply@openai.com>
4.5 KiB
4.5 KiB
HANDOFF.md
Last updated: 2026-05-01 (session 5 — PR #156 review fixes applied)
Active task: Suggested-fix applied_pending outcome. Branch: feat/fix-pending-verification. PR #156 open; review fixes applied locally and ready for browser QA, then commit/merge.
Just-merged: PR #155 (Escalation Mode wedge) merged into main as ac42f97.
Where this session ended
PR #156 was reviewed for missed bugs and three fixes were applied:
- Page-level Resolve now treats
applied_pendingas a verifying state and patches the fix toapplied_successbefore opening the resolution flow, avoiding provisional notes on a resolved session. - Page-level Escalate intercept now catches
applied_pendingas well as verifying/partial, so a pending fix cannot bypass outcome capture before handoff. Intercept copy was generalized from "Verifying state" to "still needs an outcome." PendingBannernow includes a Dismiss action, matching the PR body and backend's allowed pending → dismissed transition.- Real-looking pending examples were removed from
resolution_note_generatorandescalation_package_generatorsystem prompts to stay aligned with the prompt anti-parrot guardrail.
Validation on PR #156:
docker exec resolutionflow_backend pytest --override-ini="addopts=" tests/test_prompt_anti_parrot.py -q✅ 2/2 pass.docker exec resolutionflow_backend pytest --override-ini="addopts=" tests/test_fix_outcome_endpoint.py -q✅ 21/21 pass.docker exec -w /app resolutionflow_frontend npx tsc -b✅ exit 0.docker exec -w /app resolutionflow_frontend npm run build✅ exit 0; only existing Vite large-chunk warning.git diff --check✅ clean.- Previous session also verified
alembic upgrade headsapplied migrationc0f3a4b7e91dcleanly.
Resume point — DO THIS NEXT
Browser QA on PR #156 (see CURRENT_TASK.md "Resume point" for the checklist). Include the new review-fix paths: PendingBanner Dismiss, page-level Resolve from pending, and Escalate from pending. Then commit local fixes, push, and merge when QA is green.
Key files for PR #156
backend/app/models/session_suggested_fix.py— CHECK constraint extended;pending_reasonText column.backend/app/schemas/session_suggested_fix.py—applied_pendingadded to bothFixStatusandFixOutcomeliterals;pending_reasonon response model; updated docstring onSessionSuggestedFixOutcomeRequest.backend/alembic/versions/71efd2102f49_add_pending_status_to_suggested_fixes.py— new migration (revc0f3a4b7e91d, down71efd2102f49).backend/app/api/endpoints/session_suggested_fixes.py—patch_outcomeaccepts pending, requires notes, stamps applied_at only.backend/app/services/{resolution_note,escalation_package}_generator.py— system-prompt handling for the new status;pending_reasonline in input bundle; real-looking examples removed.backend/tests/test_fix_outcome_endpoint.py— 4 new tests.frontend/src/api/sessionSuggestedFixes.ts— types updated;pending_reasononSessionSuggestedFix.frontend/src/components/pilot/ProposalBanner.tsx—'pending'BannerMode;PendingBannercomponent + Dismiss; "Waiting to verify…" overflow option; nudge "Still checking" wired to record pending.frontend/src/components/pilot/EscalateInterceptDialog.tsx— copy generalized for pending/partial/verifying outcome capture.frontend/src/pages/AssistantChatPage.tsx— banner-mode derivation mapsapplied_pending → 'pending'; Resolve/Escalate paths now handle pending.
Watch-outs
- Dev stack: backend
:8000, frontend:5173, postgres:5433(docker-compose). HMR works. On this host usedocker execfor Python/npm commands; see.ai/PROJECT_CONTEXT.md. - Test users (Acme MSP, password
TestPass123!):engineer@resolutionflow.example.com,teamadmin@resolutionflow.example.com. - Multi-head alembic state on main is pre-existing (heads
070,c0f3a4b7e91d,024); not introduced by this work but worth knowing ifalembic upgrade headcomplains — useupgrade heads(plural). pending_reasonis preserved as audit trail when an engineer advances pending → success/failed/dismissed; it is not auto-cleared. Intentional.- Working tree also has documentation edits in
.ai/PROJECT_CONTEXT.mdandAGENTS.mddescribing Docker exec commands. Those were not part of the feature fix but should be preserved.