Complete implementation of 7 slices addressing E2E testing gaps: Slice 0+1: Wire Actions + ReasonPrompt - FocusView now uses useActions hook instead of direct act() calls - Added pendingAction state pattern for skip/defer/complete actions - ReasonPrompt integration with proper confirm/cancel flow - Tags support in DecisionEntry interface Slice 2: Drag Reorder UI - Installed @dnd-kit (core, sortable, utilities) - QueueView with DndContext, SortableContext, verticalListSortingStrategy - SortableQueueItem wrapper component using useSortable hook - pendingReorder state with ReasonPrompt for reorder reasons - Cmd+Up/Down keyboard shortcuts for accessibility - Fixed: Store item ID in PendingReorder to avoid stale queue reference Slice 3: System Tray Integration - tray.rs with TrayState, setup_tray, toggle_window_visibility - Menu with Show/Quit items - Left-click toggles window visibility - update_tray_badge command updates tooltip with item count - Frontend wiring in AppShell Slice 4: E2E Test Updates - Fixed test selectors for InboxView, Queue badge - Exposed inbox store for test seeding Slice 5: Staleness Visualization - Already implemented in computeStaleness() with tests Slice 6: Quick Wiring - onStartBatch callback wired to QueueView - SyncStatus rendered in nav area - SettingsView renders Settings component Slice 7: State Persistence - settings-store with hydrate/update methods - Tauri backend integration via read_settings/write_settings - AppShell hydrates settings on mount Bug fixes from code review: - close_bead now has error isolation (try/catch) so decision logging and queue advancement continue even if bead close fails - PendingReorder stores item ID to avoid stale queue reference E2E tests for all ACs (tests/e2e/followup-acs.spec.ts): - AC-F1: Drag reorder (4 tests) - AC-F2: ReasonPrompt integration (7 tests) - AC-F5: Staleness visualization (3 tests) - AC-F6: Batch mode (2 tests) - AC-F7: SyncStatus (2 tests) - ReasonPrompt behavior (3 tests) Tests: 388 frontend + 119 Rust + 32 E2E all passing Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
116 lines
3.2 KiB
Markdown
116 lines
3.2 KiB
Markdown
# AGENTS.md - Mission Control Agent Swarm
|
|
|
|
## Project Overview
|
|
|
|
Mission Control is an ADHD-centric personal productivity hub built with Tauri 2.0 + React 19. It unifies GitLab activity (via `lore` CLI) and beads task tracking (via `br` CLI) into a single native interface.
|
|
|
|
**Core principle:** Surface THE ONE THING you should be doing right now.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
Frontend (React 19 + Vite) Backend (Tauri/Rust)
|
|
| |
|
|
|---- IPC (invoke) ----------->|
|
|
| |
|
|
| CLI Traits (mockable)
|
|
| |
|
|
| lore --robot (GitLab)
|
|
| br (beads tasks)
|
|
| bv --robot-* (triage)
|
|
```
|
|
|
|
## Key Files
|
|
|
|
| Path | Purpose |
|
|
|------|---------|
|
|
| `src/App.tsx` | Main React component |
|
|
| `src-tauri/src/lib.rs` | Tauri app setup |
|
|
| `src-tauri/src/data/lore.rs` | Lore CLI trait + types |
|
|
| `src-tauri/src/data/beads.rs` | Beads CLI trait + types |
|
|
| `src-tauri/src/commands/mod.rs` | Tauri IPC commands |
|
|
| `PLAN.md` | Full implementation plan |
|
|
| `CLAUDE.md` | Project-specific Claude instructions |
|
|
|
|
## Agent Coordination
|
|
|
|
### Team Name
|
|
`purrfect-beaming-lynx`
|
|
|
|
### Beads Task Management
|
|
|
|
Use `br` and `bv` for task coordination:
|
|
|
|
```bash
|
|
# Get triage recommendations
|
|
bv --robot-triage | jq '.triage.quick_ref.top_picks'
|
|
|
|
# List all beads
|
|
br list --json
|
|
|
|
# Claim a task
|
|
br update <bead-id> --status in_progress
|
|
|
|
# Complete a task
|
|
br close <bead-id> --reason "Completed: <summary>"
|
|
|
|
# Show bead details
|
|
br show <bead-id> --json
|
|
```
|
|
|
|
### Communication
|
|
|
|
Use SendMessage tool for agent-to-agent coordination:
|
|
- Message teammates directly by name
|
|
- Use broadcast sparingly (only for critical team-wide issues)
|
|
- Check task list after completing each task
|
|
|
|
### Current Status
|
|
|
|
**Completed:**
|
|
- Phase 0: Test infrastructure (Vitest, Playwright, Rust mocks)
|
|
- Phase 1: Tauri scaffold, React shell, CLI traits
|
|
- Phase 2: Bridge + Data Layer (GitLab-Beads sync, state persistence)
|
|
- Phase 3: UI Components (FocusView, QueueView, InboxView, Settings, Debug)
|
|
- Phase 4: Navigation + keyboard shortcuts (Cmd+1-4, Cmd+,)
|
|
- Phase 5: TanStack Query data layer, error boundaries
|
|
- bv triage integration (get_triage, get_next_pick commands)
|
|
|
|
**In Progress:**
|
|
- UI polish and edge case handling
|
|
- Decision log analysis features
|
|
|
|
## Development Commands
|
|
|
|
```bash
|
|
# Run dev (frontend + backend)
|
|
npm run tauri:dev
|
|
|
|
# Frontend only
|
|
npm run dev
|
|
|
|
# Run tests
|
|
npm run test # Vitest
|
|
npm run test:e2e # Playwright
|
|
cargo test # Rust
|
|
|
|
# Lint
|
|
npm run lint
|
|
cargo clippy -- -D warnings
|
|
```
|
|
|
|
## Visual Verification
|
|
|
|
Playwright MCP tools can connect to `http://localhost:1420` for UI inspection:
|
|
- `browser_navigate` - Load pages
|
|
- `browser_snapshot` - Get accessibility tree
|
|
- `browser_take_screenshot` - Visual verification
|
|
|
|
## Critical Constraints
|
|
|
|
1. **CLI over libraries** - Shell out to `lore`/`br`/`bv`, don't import them
|
|
2. **Trait-based mocking** - All CLI interactions via traits for testability
|
|
3. **TDD** - Write failing test first, then implement
|
|
4. **No `any`** - Use `unknown` with type guards in TypeScript
|
|
5. **jj for VCS** - Use jj, not git (see global CLAUDE.md)
|