Skip to content

Consensus nav, collapsible sections, and decision-first layout#9

Merged
msitarzewski merged 1 commit intomainfrom
consensus-nav-collapsible
Feb 18, 2026
Merged

Consensus nav, collapsible sections, and decision-first layout#9
msitarzewski merged 1 commit intomainfrom
consensus-nav-collapsible

Conversation

@msitarzewski
Copy link
Owner

Summary

  • Shared Disclosure primitive — reusable chevron + toggle component extracted from duplicated collapse logic across PhaseCard, TurnCard, ConsensusComplete, and DissentBanner
  • Sticky right-side navigationConsensusNav (live streaming) and ThreadNav (stored threads) show round/phase progress with individual challenger model names, click-to-scroll
  • Decision-first layoutConsensusComplete and thread final decision surface to the top when consensus is complete, collapsible via Disclosure
  • Per-challenger collapsibility — each individual challenger and contribution is its own Disclosure; nav shows short model names (e.g. gpt-4, gemini) in amber
  • DissentBanner refactored — uses Disclosure, parses [model:name]: prefix to extract model attribution and display ModelBadge with equal visual weight
  • Responsive — nav hidden on mobile (hidden lg:block), collapsible sections still work on all viewports

Files changed

Area Files Description
Shared Disclosure.tsx, shared/index.ts New reusable collapsible primitive
Consensus ConsensusNav.tsx, PhaseCard.tsx, ConsensusComplete.tsx, ConsensusPanel.tsx, DissentBanner.tsx, consensus/index.ts Nav, collapsible phases/challengers, decision-first, dissent
Threads ThreadNav.tsx, ThreadDetail.tsx, TurnCard.tsx, threads/index.ts Nav, collapsible turns/contributions, decision-first, dissent
Pages ConsensusPage.tsx, ThreadDetailPage.tsx Flex-row layout with sticky nav sidebar
Tests consensus-nav.test.tsx, thread-nav.test.tsx 40 new tests
Memory activeContext.md, progress.md Updated project state

Test plan

  • npm run build — TypeScript compiles, no errors
  • npm test — 166 Vitest tests pass (40 new)
  • Manual: idle state looks unchanged (nav not rendered)
  • Manual: during streaming, nav appears and grows, active phase pulsing
  • Manual: after completion, decision at top (collapsible), rounds collapsed, nav shows DECISION
  • Manual: individual challengers collapsible with model names in nav
  • Manual: dissent shows model badge, collapsible
  • Manual: thread detail view mirrors consensus page behavior
  • Manual: mobile (< 1024px) — nav hidden, collapsible sections still work

🤖 Generated with Claude Code

Add sticky right-side navigation and collapsible disclosure sections to
both the live consensus page and stored thread detail view. Decisions now
surface to the top when consensus is complete, with dissent getting equal
treatment via a refactored DissentBanner that parses model attribution.

Key changes:
- Shared Disclosure primitive (chevron + toggle) reused across all cards
- ConsensusNav/ThreadNav sticky sidebars with per-challenger model names
- ConsensusComplete and thread decisions collapsible, positioned at top
- DissentBanner parses [model:name]: prefix for proper ModelBadge display
- Individual challengers and contributions independently collapsible
- Responsive: nav hidden on mobile, collapsible sections still work
- 166 Vitest tests (40 new), build clean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@msitarzewski msitarzewski merged commit 28ec207 into main Feb 18, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant