feat(agents): one-chat Phase B — FastAgentPanel adopts the canonical answer#584
Merged
Conversation
…ntMessage for overlapping completed turns - adapters/canonicalAnswer.ts: eligibility gate (describeCanonicalAnswerFit) + honest packet mapping (buildCanonicalAnswerProps). Never fabricates verification states, trace steps, durations, costs, or router tiers. - PanelCanonicalAnswer.tsx: [data-redesign]-scoped mount that mirrors the host dark/light theme and imports the redesign stylesheets. - UIMessageBubble: opt-in preferCanonicalAnswer prop (default off — legacy anatomy + its contract tests unchanged); production panel call site opts in. - ChatAssistantMessage: strictly-optional additions only — variant="panel" (Sources visible for compact packets) + receiptTierLabel override. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…honesty 32 tests: canonical anatomy for overlapping completed turns, legacy anatomy preserved for opted-out callers / compact sidebar / streaming / markdown / domain / delegation / fusion / unbound-[N] turns, and adapter honesty pins (no fabricated verification, trace, durations, or router tiers). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…swer Renders PanelCanonicalAnswer through the real adapter chain over a fixture message (no Convex providers), served only by the Vite dev server, for Phase B screenshot evidence. Imported by nothing in the app. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…el scope (light/dark, collapsed/expanded) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…its root Evidence folder for the FastAgentPanel canonical-answer adoption (3 shots from the committed dev harness over the real adapter chain), replacing the agent's .oneshot-evidence scratch location. Also fixes the one red test on main (oraclePromptPackContract): the root ORACLE_LOOP.md became a pointer stub during doc consolidation but the test still asserted loop content on the stub. The test now asserts the stub points at the canonical doc and asserts content where it lives — and the pinned tsc command's invalid single-dash `-noEmit` flag is corrected to `--noEmit` in the canonical doc. 4/4 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
HomenShum
enabled auto-merge (squash)
July 18, 2026 20:21
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
PR size advisoryThis PR adds 999 lines of substantive change. CONTRIBUTING.md defines a soft limit of ~400 LOC. If the PR is genuinely cohesive (e.g. an architecture map, a generated migration, a deletion of a dead module), no action is needed. Otherwise consider:
This is advisory — it does not block the merge. |
✅ Dogfood Visual QA Gate: PASSED
ArtifactsDownload the Generated by Dogfood QA Gate |
|
Demo: walkthrough of the surfaces this PR changed is available as a workflow artifact ( |
This was referenced Jul 18, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Phase B of
docs/design/ONE_CHAT_INTERFACE.md: FastAgentPanel renders the canonicalChatAssistantMessagefor overlapping completed turns (plain prose + plain tool calls + URL sources), expand-contract style — its duplicate internals stay until Phase C.Honest-subset discipline (the point of this phase):
tracestays empty (no synthetic "how we got this answer"); receipt admitstelemetry not recorded[N]references are refused rather than bound to arbitrary sourcesdescribeCanonicalAnswerFit)Canonical component changes are strictly additive —
variant="panel"+receiptTierLabel; live/receipt behavior byte-identical (verified in diff review; all guard-pinned substrings intact).Also fixes the one red test on main:
oraclePromptPackContractasserted loop content on the rootORACLE_LOOP.mdpointer stub left by doc consolidation; the test now follows the stub to the canonical doc, and the doc's invalid single-dash-noEmittsc flag is corrected.Verification (orchestrator-independent)
tsc0 · build clean · redesign+convex 148/148 · agents suite green with +32 new scenario contracts (adoption gate + adapter honesty); the single prior failure was proven pre-existing on main and is fixed here (4/4)docs/design/ui-contract/20260718-one-chat-phase-b/— 3 shots from a committed dev harness mounting the real adapter chain (no anonymous full-panel path exists; the harness is the honest capture route)Phase C remaining (scoped in spec + manifest): retire duplicate bubble internals, markdown-prose decision, port/drop delete+read-aloud, default the adoption, fix the "0 steps" Reasoning-trigger nit.
🤖 Generated with Claude Code