Files
resolutionflow/.ai/HANDOFF.md
Michael Chihlas 5bee264d70 fix(suggested-fix-pending): apply PR #156 review fixes
- 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>
2026-04-30 23:02:46 -04:00

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:

  1. Page-level Resolve now treats applied_pending as a verifying state and patches the fix to applied_success before opening the resolution flow, avoiding provisional notes on a resolved session.
  2. Page-level Escalate intercept now catches applied_pending as 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."
  3. PendingBanner now includes a Dismiss action, matching the PR body and backend's allowed pending → dismissed transition.
  4. Real-looking pending examples were removed from resolution_note_generator and escalation_package_generator system 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 heads applied migration c0f3a4b7e91d cleanly.

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_reason Text column.
  • backend/app/schemas/session_suggested_fix.pyapplied_pending added to both FixStatus and FixOutcome literals; pending_reason on response model; updated docstring on SessionSuggestedFixOutcomeRequest.
  • backend/alembic/versions/71efd2102f49_add_pending_status_to_suggested_fixes.py — new migration (rev c0f3a4b7e91d, down 71efd2102f49).
  • backend/app/api/endpoints/session_suggested_fixes.pypatch_outcome accepts pending, requires notes, stamps applied_at only.
  • backend/app/services/{resolution_note,escalation_package}_generator.py — system-prompt handling for the new status; pending_reason line 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_reason on SessionSuggestedFix.
  • frontend/src/components/pilot/ProposalBanner.tsx'pending' BannerMode; PendingBanner component + 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 maps applied_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 use docker exec for 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 if alembic upgrade head complains — use upgrade heads (plural).
  • pending_reason is 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.md and AGENTS.md describing Docker exec commands. Those were not part of the feature fix but should be preserved.