From a47ce073264a9b57489c2e5d6d92985cf627acc1 Mon Sep 17 00:00:00 2001 From: Michael Chihlas Date: Thu, 23 Apr 2026 17:42:51 -0400 Subject: [PATCH] docs(pilot): fix Phase 8 column + commit-SHA references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correct the FLOWPILOT-MIGRATION.md stale references to a non-existent ai_sessions.fix_outcome column — the actual implementation added six columns to session_suggested_fixes. Also fix a stale first-commit SHA (6721b84 → cdd8bb0, the former was amended away). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../FLOWPILOT-MIGRATION.md | 8 +- .../mockups/05-resolve-cta-merge.html | 679 ++++++++++++++ .../mockups/06-slide-up-banner.html | 849 ++++++++++++++++++ .../mockups/07-verify-states.html | 805 +++++++++++++++++ 4 files changed, 2337 insertions(+), 4 deletions(-) create mode 100644 docs/FlowAssist_Migration/mockups/05-resolve-cta-merge.html create mode 100644 docs/FlowAssist_Migration/mockups/06-slide-up-banner.html create mode 100644 docs/FlowAssist_Migration/mockups/07-verify-states.html diff --git a/docs/FlowAssist_Migration/FLOWPILOT-MIGRATION.md b/docs/FlowAssist_Migration/FLOWPILOT-MIGRATION.md index 73fd3b89..eab4e541 100644 --- a/docs/FlowAssist_Migration/FLOWPILOT-MIGRATION.md +++ b/docs/FlowAssist_Migration/FLOWPILOT-MIGRATION.md @@ -2,7 +2,7 @@ > **Target:** Transform `/assistant` (ResolutionAssist) into the new unified `/pilot` (FlowPilot) surface. > **Audience:** Claude Code (implementation) and Codex (review) reviewed by Michael (owner). -> **Status:** Phases 0–8 implemented. Phase 8 replaced the task-lane `SuggestedFix` card CTA with a chat-composer-anchored `ProposalBanner`, added `ai_sessions.fix_outcome` column, `PATCH /outcome` endpoint, `[FIX_OUTCOME]` marker, and `EscalateInterceptDialog`. `tsc -b` and `npm run build` both clean. +> **Status:** Phases 0–8 implemented. Phase 8 replaced the task-lane `SuggestedFix` card CTA with a chat-composer-anchored `ProposalBanner`, added six columns to `session_suggested_fixes` (`status`, `applied_at`, `verified_at`, `partial_notes`, `failure_reason`, `ai_outcome_proposal`), `PATCH /api/v1/ai-sessions/{session_id}/suggested-fixes/{fix_id}/outcome` endpoint, `[FIX_OUTCOME]` marker, and `EscalateInterceptDialog`. `tsc -b` and `npm run build` both clean. > **Last updated:** April 23, 2026 (Phase 8 — Fix Outcome Banner — committed; handoff and migration spec updated) --- @@ -900,15 +900,15 @@ git commit -m "feat(pilot): visual polish, empty/loading states, keyboard shortc **What this phase does:** Removes the `SuggestedFix` card as the primary interaction point for fix application. Replaces it with a chat-composer-anchored slide-up banner (`ProposalBanner`) that stays visible at the bottom of the conversation column regardless of task-lane scroll depth. Addresses the user-reported discoverability problem: *"the task lane fills up pretty quick … the suggested fix … is easily missed."* **Key backend additions:** -- `ai_sessions.fix_outcome` VARCHAR column (values: `null` / `accepted` / `dismissed` / `escalated`) -- `PATCH /api/v1/ai-sessions/{id}/outcome` endpoint to record the engineer's decision +- Six new columns on `session_suggested_fixes`: `status`, `applied_at`, `verified_at`, `partial_notes`, `failure_reason`, `ai_outcome_proposal` +- `PATCH /api/v1/ai-sessions/{session_id}/suggested-fixes/{fix_id}/outcome` endpoint to record the engineer's decision - `[FIX_OUTCOME]` marker in the FlowPilot system prompt, parsed by `unified_chat_service.py` to trigger the banner **Key frontend additions:** - `ProposalBanner` component (`frontend/src/components/pilot/ProposalBanner.tsx`) — slide-up banner anchored above the chat composer; shows fix title, confidence, and Accept / Dismiss / Escalate actions; auto-collapses after session resolves - `EscalateInterceptDialog` — intercepts the Escalate action when a fix proposal is active, asking whether the engineer wants to note that the fix was attempted before escalating -**Commit range:** `6721b84` (Phase 8 Task 1 start) through `8582d24` +**Commit range:** `cdd8bb0` (Phase 8 Task 1 start) through `8582d24` ``` git commit -m "feat(pilot): Phase 8 — fix outcome banner replaces task-lane SuggestedFix CTA" diff --git a/docs/FlowAssist_Migration/mockups/05-resolve-cta-merge.html b/docs/FlowAssist_Migration/mockups/05-resolve-cta-merge.html new file mode 100644 index 00000000..e952bdf0 --- /dev/null +++ b/docs/FlowAssist_Migration/mockups/05-resolve-cta-merge.html @@ -0,0 +1,679 @@ + + + + +FlowPilot — Suggested Fix → Resolve CTA merge (Option A) + + + + + +
+ + + +
+ + +
+
+
+
Today
+
Baseline
+
+
+ + +
+ +
+ +
+
User cannot authenticate to Outlook; repeated 401s from Exchange Online.
+
promoted 14:02 · from ticket
+
+
+
+ +
+
Cached credentials in Credential Manager reference a prior tenant the user migrated off six months ago.
+
promoted 14:07 · from chat
+
+
+
+ +
+
MFA prompt appears then fails silently — no authenticator notification, no error code surfaced to the user.
+
promoted 14:11 · from chat
+
+
+
+ +
+
Other devices under same account authenticate successfully, isolating the problem to this workstation.
+
promoted 14:14 · from chat
+
+
+
+ +
+
Office 365 client last updated three weeks ago; local profile not recreated since migration.
+
promoted 14:18 · from chat
+
+
+
+ + +
+ +
+ +
+
Clear cached credentials + rebuild Outlook profile
+
Remove stale entries from Credential Manager referencing the prior tenant, then rebuild the local Outlook profile so the client re-authenticates cleanly against the current tenant.
+
✓ Matches an existing Script Library template — click to use
+
+ +
+
+ +
+ +
+
+ + +
+
+
+ +
+ Baseline problem. The Suggested Fix card sits after What-we-know. With 5+ facts (common by mid-session) it's below the fold. The generic Resolve button at the bottom doesn't surface what would be resolved, so the engineer has to scroll up, read the card, then scroll back down to act. +
+
+ + +
+
+
+
Option A — armed
+
Proposal ready
+
+
+ + +
+ +
+ +
+
User cannot authenticate to Outlook; repeated 401s from Exchange Online.
+
promoted 14:02 · from ticket
+
+
+
+ +
+
Cached credentials in Credential Manager reference a prior tenant the user migrated off six months ago.
+
promoted 14:07 · from chat
+
+
+
+ +
+
MFA prompt appears then fails silently — no authenticator notification, no error code surfaced to the user.
+
promoted 14:11 · from chat
+
+
+
+ +
+
Other devices under same account authenticate successfully, isolating the problem to this workstation.
+
promoted 14:14 · from chat
+
+
+
+ +
+
Office 365 client last updated three weeks ago; local profile not recreated since migration.
+
promoted 14:18 · from chat
+
+
+
+ + + +
+ +
+
+ + +
+
+
+ +
+ What changes. The Suggested Fix card is gone. Its content moved onto the Resolve button, which is always in view. One click = accept the fix + open the existing ResolutionNotePreview popover pre-filled. No card-then-button two-step. +
+
+ + +
+
+
+
Option A — waiting
+
No proposal yet
+
+
+ +
+ +
+ +
+
User cannot authenticate to Outlook; repeated 401s from Exchange Online.
+
promoted 14:02 · from ticket
+
+
+
+ +
+
Cached credentials in Credential Manager reference a prior tenant.
+
promoted 14:07 · from chat
+
+
+
+ +
+ +
+
+ + +
+
+
+ +
+ Before confidence threshold. Same slot, disabled state. Amber pulse signals the AI is still reasoning. Below threshold or no proposal yet → same visual — the engineer can still use Escalate at any time. +
+
+ +
+ + +
+
+

Why this helps discoverability

+
    +
  • Proposal is in the place the engineer looks to act, not in the scrolling lane above.
  • +
  • Resolve bar is already sticky at the bottom — no new sticky patterns needed (preserves the 8879f96 fix).
  • +
  • Accepting a fix and resolving the session collapse into one click instead of two.
  • +
+
+
+

What you give up

+
    +
  • No space for secondary info on the button (reasoning, alternative fixes). Would need an expand/chevron or hover tooltip.
  • +
  • No standalone "dismiss this fix" affordance — need to decide where dismiss/reject lives (chevron menu? secondary button?).
  • +
  • If the AI proposes multiple candidates, only the top one fits the button. Need a "▾ 2 other candidates" menu.
  • +
+
+
+ +
+ + + diff --git a/docs/FlowAssist_Migration/mockups/06-slide-up-banner.html b/docs/FlowAssist_Migration/mockups/06-slide-up-banner.html new file mode 100644 index 00000000..74785e9e --- /dev/null +++ b/docs/FlowAssist_Migration/mockups/06-slide-up-banner.html @@ -0,0 +1,849 @@ + + + + +FlowPilot — Suggested Fix as slide-up composer banner + + + + + +
+ + + + +
+ +
+
+
+
Outlook won't authenticate after tenant migration
+
ticket #48213 · in progress · 14:22
+
+
+ + +
+
+ +
+
+
AI
+
+
+ A few things we know line up with a stale-credential pattern rather than an MFA or network issue. Can you confirm whether the user has other Microsoft 365 services (Teams, SharePoint) working on the same workstation? +
+
14:16
+
+
+ +
+
+
Teams works fine. SharePoint in browser is fine too. It's just Outlook.
+
14:17
+
+
ME
+
+ +
+
AI
+
+
+ That narrows it to the Outlook profile specifically. Given Credential Manager still has entries pointing at the prior tenant, the cleanest path is to clear those entries and rebuild the local Outlook profile — the client will re-auth against the current tenant from scratch. +
+
14:22
+
+
+
+ + +
+ +
+
+ +
+
+
+ Suggested Fix + 94% confidence +
+
Clear cached credentials + rebuild Outlook profile
+
+ Remove stale Credential Manager entries referencing the prior tenant, then rebuild the local Outlook profile so the client re-authenticates cleanly against the current tenant. +
+
+ + Matches an existing Script Library template — one-click apply +
+
+
+ + + +
+
+ +
+
Ask a follow-up, paste an error, drop a screenshot…
+ +
+ +
+
+ + +
+
+
Task lane
+
+
+
+ +
+
User cannot authenticate to Outlook; repeated 401s from Exchange Online.
+
promoted 14:02 · from ticket
+
+
+
Credential Manager still references the prior tenant from six months ago.
+
promoted 14:07 · from chat
+
+
+
MFA prompt appears but fails silently — no authenticator notification.
+
promoted 14:11 · from chat
+
+
+
Other devices under same account authenticate successfully.
+
promoted 14:14 · from chat
+
+
+
Teams + SharePoint work on same workstation — isolated to Outlook.
+
promoted 14:22 · from chat
+
+
+
+
+ + +
+
+ +
+ +
+ How it reads. Proposal arrives with a 320ms slide-up from below the composer, docks as a persistent banner until applied, dismissed, or replaced. Apply is amber (not accent-blue) so it visually belongs to the proposal, not the chat send button. Resolve in the task lane stays generic — there's no false-resolve risk because the two actions are spatially and visually separate. +
+ + +
Banner states
+
What the same region looks like in the other three states — collapsed to save chat space, after the engineer dismisses it, and when a new proposal replaces an existing one.
+ +
+ + +
+
Collapsed (saves chat space)
+
+
…earlier messages…
+ +
+
Type a message…
+ +
+
+
+ ~28px strip. Auto-collapses after 30s of no interaction, or when the engineer clicks the chevron. Title + confidence still visible. Click strip → expands. Apply still reachable via the expanded state. +
+
+ + +
+
Dismissed — parked in the task lane
+
+
chat unobstructed · banner gone
+
+
Type a message…
+ +
+
+
+ +
+ + Clear cached credentials… + restore ↺ +
+
+
+ Recoverable, out of the way. Dismissing the banner parks the proposal as a pill in the task lane. Clicking restore → banner slides back in. Prevents accidental loss. +
+
+ + +
+
Replaced — new proposal overrides old
+
+
+ previous: "Rebuild Outlook profile" — didn't resolve, new proposal below +
+
+
+ +
+
+
+ New suggested fix + 78% +
+
Reset Autodiscover registry entries for this user
+
+ +
+
+
Type a message…
+ +
+
+
+ Old proposal cross-fades out, new one slides in. 200ms cross-fade, same slot. A tiny footnote in chat ("previous didn't resolve") preserves the audit trail without re-stacking banners. +
+
+ +
+ +
+ + + diff --git a/docs/FlowAssist_Migration/mockups/07-verify-states.html b/docs/FlowAssist_Migration/mockups/07-verify-states.html new file mode 100644 index 00000000..90dd94f6 --- /dev/null +++ b/docs/FlowAssist_Migration/mockups/07-verify-states.html @@ -0,0 +1,805 @@ + + + + +FlowPilot — Post-apply outcome states + + + + + +
+ + + + +
+ +
+
+
+
Outlook won't authenticate after tenant migration
+
ticket #48213 · in progress · 14:26
+
+
+ +
+
+
AI
+
+
Given Credential Manager still has entries for the prior tenant, the cleanest path is to clear those and rebuild the local Outlook profile.
+
14:22
+
+
+
+
+
Okay, I'll run the script now.
+
14:24
+
+
ME
+
+
+
+
+
Applied fix: Clear cached credentials + rebuild Outlook profile — script completed without errors at 14:24.
+
+
+
+ + +
+ + +
+
Tell the AI what happened — or click an outcome above
+ +
+
+
+ + +
+
+
Task lane
+
+
+
+ +
+
User cannot authenticate to Outlook; repeated 401s from Exchange Online.
+
promoted 14:02 · from ticket
+
+
+
Credential Manager still references the prior tenant from six months ago.
+
promoted 14:07 · from chat
+
+
+
Teams + SharePoint work on same workstation — isolated to Outlook.
+
promoted 14:22 · from chat
+
+
+
+
+ + +
+
+ +
+ +
+ How Verifying works. Clicking Apply transitions the banner into this state instead of dismissing it. No timeout — the banner stays pinned until the engineer marks Worked, Didn't work, or Partial (overflow). If they ignore it and keep chatting, the Nudge state (panel D below) appears after a few messages. If they hit the task lane's Resolve button without clicking either outcome, we auto-stamp applied_success. If they hit Escalate, panel C intercepts. +
+ + +
Outcome branches
+
Four paths from Verifying to a final status. Each one writes to session_suggested_fixes.status so the AI's next turn has ground truth about what's been tried.
+ +
+ + +
+
A. Partial apply — "I did some of it"
+
+
…engineer picked "Mark partial…" from the verify banner's overflow menu
+ +
+
Type a message…
+ +
+
+
+ Status: applied_partial, with partial_notes free-text. Not terminal — banner stays pinned until engineer marks a terminal outcome, or clicks Finish it to re-run the remainder and flip back to Verifying. AI treats partial as "tried but uncertain" — doesn't re-propose, but doesn't assume failure either. +
+
+ + +
+
B. AI-inferred outcome — from chat
+
+
+
Engineer: "yep that fixed it, thanks"
+
14:31 · user message triggered [FIX_OUTCOME]
+
+ +
+
Type a message…
+ +
+
+
+ Triggered by the new [FIX_OUTCOME fix_id=… outcome=success] marker from the system prompt. Engineer stays in the loop — the AI proposes the outcome, doesn't set it. One-click accept fires the normal Resolve flow. Works for failure too ("still broken" → No, didn't work pre-selected, with the AI's reasoning shown). +
+
+ + +
+
C. Escalate-intercept — capture outcome before handoff
+
+
+
+
Before escalating — what happened with the fix?
+
"Clear cached credentials" is still in the Verifying state. Tag its outcome so the senior picking this up knows what's been tried.
+
+ + + +
+
+
+
+ + +
+
+
+ Fires when engineer clicks Escalate while a fix is in Verifying (or Partial). Defaults to Didn't work on Enter — common case. Escalating for another reason preserves success; Never applied flips to dismissed. Takes 1s and makes the escalation narrative honest for whoever picks it up. +
+
+ + +
+
D. Nudge — passive prompt after a few messages
+
+
+
"user is rebooting"
+
"okay it's back up, signing in now"
+
"going to try opening Outlook"
+
+ +
+
Type a message…
+ +
+
+
+ Appears after ~3 post-apply engineer messages with no outcome click. Collapses the verify banner into this thin nudge strip above it so chat space isn't eaten. Passive — never auto-marks anything. Still checking silences the nudge for another 3 messages. Yes/No route to the normal Success / Failed flows. +
+
+ +
+ +
+ + +