Keep master's quiet system/rate_limit_event handlers while preserving
the story-62 permission_request handler (the core feature).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds an opus-tier coder agent for complex tasks requiring deep
architectural understanding (80 max turns, $20 budget).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolves conflict in AgentPanel.test.tsx between story 73 (fade-out)
and story 74 (lozenge fly animation) - kept both the assertion and
the comment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
waitFor's internal polling setInterval is itself faked when vi.useFakeTimers()
is active, causing it to hang indefinitely. Replace the affected assertions
with act + multiple Promise.resolve() to flush React state updates, and a
direct assertion after act+vi.advanceTimersByTime instead of a second waitFor.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements Story 74: agent lozenges now animate as fixed-position overlays
that fly from the roster badge in AgentPanel to the story slot in StagePanel
(and back when the agent is removed), satisfying all acceptance criteria.
Key changes:
- LozengeFlyContext.tsx (new): coordinates FLIP animations via React context.
LozengeFlyProvider tracks pipeline changes, hides slot lozenges during
fly-in (useLayoutEffect before paint), then creates a portal-rendered
fixed-position clone that transitions from roster → slot (or reverse).
z-index 9999 ensures the clone travels above all other UI elements.
- AgentPanel.tsx: RosterBadge registers its DOM element with the context
so fly animations know the correct start/end coordinates.
- StagePanel.tsx: AgentLozenge registers its DOMRect on every render via
useLayoutEffect (for fly-out) and reads pendingFlyIns to stay hidden
while a fly-in clone is in flight. Added align-self: flex-start so the
lozenge maintains its intrinsic width and never stretches in the panel.
- Chat.tsx: right-column panels wrapped in LozengeFlyProvider.
- LozengeFlyContext.test.tsx (new): 10 tests covering fixed width,
fly-in/fly-out clone creation, portal placement, opacity lifecycle,
and idle vs active visual distinction.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>