feat(ui): private board restrictions + scheme B assistant/user bubbles #19

Merged
fischer merged 3 commits from feat/private-board-restrictions-scheme-b-bubbles into main 2026-07-03 01:58:19 +08:00
Owner

Summary

Implements U1-U4 from plan docs/plans/2026-07-02-001-feat-private-board-restrictions-and-scheme-b-bubbles-plan.md

U1: ChatInput @board button blocks existing-conversation board creation

  • @board button click in existing conversation shows modal explaining constraint
  • User can cancel or create new conversation
  • Enforces one board per conversation rule

U2: BoardBannerCard simplified

  • Reduced from 138-line heavy card to 37-line plain text
  • Only shows 私董会 topic + round meta
  • Removed icons, borders, purple bars, progress bars, expert chips

U3: MessageShell assistant bubble (scheme B neutral grayscale)

  • Added --bg-message-bubble token (decoupled from --bg-secondary)
  • F4-A: 10 card-bearing types excluded from bubble
  • G1: isAssistantBubbleEmpty replaces :empty selector

U4: UserBubble dark text bubble

  • Plain text messages get dark bubble
  • Command cards and file attachments keep light background

Code Review Fixes

  • P1: UserBubble focus-visible --accent-primary to --color-primary
  • P2: CARD_BEARING_TYPES adds error type
  • P2: Remove dead expertColor prop
  • P0/P1: Extract bubbleUtils.ts pure functions + add 42 tests

Test Results

  • Typecheck: clean
  • Unit tests: 180/181 pass (1 pre-existing tauri-auth failure unrelated)
  • New tests: 42 added (bubbleUtils 36, BoardBannerCard 6)

Files Changed

  • 12 files, +459/-131 lines
  • 3 new files: bubbleUtils.ts, bubbleUtils.test.ts, BoardBannerCard.test.ts
## Summary Implements U1-U4 from plan docs/plans/2026-07-02-001-feat-private-board-restrictions-and-scheme-b-bubbles-plan.md ### U1: ChatInput @board button blocks existing-conversation board creation - @board button click in existing conversation shows modal explaining constraint - User can cancel or create new conversation - Enforces one board per conversation rule ### U2: BoardBannerCard simplified - Reduced from 138-line heavy card to 37-line plain text - Only shows 私董会 topic + round meta - Removed icons, borders, purple bars, progress bars, expert chips ### U3: MessageShell assistant bubble (scheme B neutral grayscale) - Added --bg-message-bubble token (decoupled from --bg-secondary) - F4-A: 10 card-bearing types excluded from bubble - G1: isAssistantBubbleEmpty replaces :empty selector ### U4: UserBubble dark text bubble - Plain text messages get dark bubble - Command cards and file attachments keep light background ## Code Review Fixes - P1: UserBubble focus-visible --accent-primary to --color-primary - P2: CARD_BEARING_TYPES adds error type - P2: Remove dead expertColor prop - P0/P1: Extract bubbleUtils.ts pure functions + add 42 tests ## Test Results - Typecheck: clean - Unit tests: 180/181 pass (1 pre-existing tauri-auth failure unrelated) - New tests: 42 added (bubbleUtils 36, BoardBannerCard 6) ## Files Changed - 12 files, +459/-131 lines - 3 new files: bubbleUtils.ts, bubbleUtils.test.ts, BoardBannerCard.test.ts
fischer added 2 commits 2026-07-03 01:49:05 +08:00
981a794a54 docs(plan): private-board restrictions + scheme B bubbles plan ready
Plan document finalized after 4 rounds of ce-doc-review:
- F4-A exclusion list extended from 5 to 9 card-bearing types
- Verified root class names for all 9 card components
- Corrected chrome description (2 full chrome + 7 partial chrome)
- Added U1 modal focus restoration note (WAI-ARIA)
- Documented R4-DA1/R4-A3/R4-A4 as Open Questions for implementation
Test / backend-test (pull_request) Has been cancelled Details
Test / frontend-unit (pull_request) Has been cancelled Details
Test / api-e2e (pull_request) Has been cancelled Details
Test / frontend-e2e (pull_request) Has been cancelled Details
cc6634b2ab
feat(ui): private board restrictions + scheme B assistant/user bubbles
U1: ChatInput @board button blocks existing-conversation board creation
    with modal — enforces "one board per conversation" constraint.
U2: BoardBannerCard simplified to plain title + round meta
    (no icons/bars/progress/expert chips).
U3: MessageShell assistant bubble (方案B neutral grayscale) with
    F4-A card-type exclusion + G1 empty-bubble hide.
U4: UserBubble dark text bubble for plain text
    (command card/file keep light bg).

Code review fixes (ce-code-review step 5):
- P1: UserBubble focus-visible --accent-primary → --color-primary
  (dark mode visibility fix).
- P2: CARD_BEARING_TYPES adds 'error' (ErrorCard double-bubble regression).
- P2: Remove dead expertColor prop (scheme B leftover).
- P0/P1: Extract bubbleUtils.ts pure functions + add 42 tests
  covering G1/F4-A/U4/U2 key decisions.

Tests: 180/181 pass (1 pre-existing tauri-auth failure unrelated).
Typecheck: clean.
fischer added 1 commit 2026-07-03 01:58:04 +08:00
Test / backend-test (pull_request) Has been cancelled Details
Test / frontend-unit (pull_request) Has been cancelled Details
Test / api-e2e (pull_request) Has been cancelled Details
Test / frontend-e2e (pull_request) Has been cancelled Details
e04e2868c3
docs(compound): message bubble empty-content and card-type exclusion pattern
Documents the G1 (:empty never matches Vue root), F4-A (card-bearing type
exclusion via messageType prop + Set), and pure-function extraction pattern
for testability without @vue/test-utils.
fischer merged commit 76c9c08756 into main 2026-07-03 01:58:19 +08:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: fischer/fischer-agentkit#19
No description provided.