Repository navigation
M27: View migration - #4
Merged
Merged
Conversation
9 new components under apps/desktop/src/components/ripley/ — AlertCard, EcosystemIcon, WeightBar, TimestampCell, EmptyState, LoadingSkeleton, ErrorPane, DataTable (TanStack Table + Virtual, virtualizes >200 rows, column resize/sort/global-filter), KeyValueGrid. All co-located Vitest specs cover happy + edge cases and assert DESIGN.md tokens. Adds global afterEach(cleanup) in test setup so RTL renders don't leak between specs. 53 Vitest tests passing; eslint --max-warnings 0 clean. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds the Alerts route (M27.2): empty / 1 / virtualized-50 / error states backed by useAlerts → commands.listAlerts, which opens the advisory DB cache, parses lockfiles under the project path, and runs the existing matcher. AlertSummary is serialised with string ecosystem/severity so the existing ripley_core::types enums stay free of specta bindings. Also fills in the two missing M27.1 specs (SeverityBadge, RuleMatchList) so the shared library verify passes its full spec, and marks M27.1 + M27.2 [x] in PLAN.md. Co-Authored-By: Claude <noreply@anthropic.com>
Adds the GuardLog route (M27.3): DataTable over guard.jsonl with decision filter chips, severity badges, ISO timestamp cells, and Previous/Next pagination at PAGE_SIZE=50. Backed by commands.listGuardLog(offset, limit) -> GuardLogPage which reads data_dir/guard.jsonl in reverse-chronological order and tolerates malformed lines. Co-Authored-By: Claude <noreply@anthropic.com>
Adds Tauri commands run_audit_report, run_harden_report, run_deep_scan, and list_monitor_events with DTO mapping at the IPC boundary. Wires React routes backed by TanStack Query hooks and a shared TrafficLightDot. Closes M27.4. Co-Authored-By: Claude <noreply@anthropic.com>
Adds a Cmd+K palette built on Base UI Dialog with match-sorter fuzzy search, persisted recency via Zustand, and a declarative command registry. Closes M27.5. Co-Authored-By: Claude <noreply@anthropic.com>
Adds a Tauri command pair (read_settings/write_settings) backed by ripley_core::config::save_config, plus a React form covering General, Monitor, Guard, and Posture sections. Closes M27.6. Co-Authored-By: Claude <noreply@anthropic.com>
Adds a disposition table at the top of DESIGN_ISSUES.md mapping every cross-cutting / per-view / missing-component finding to Resolved (Tauri), Deferred (notes), or Obsolete (stack), and records the deferred items in apps/desktop/DESIGN_NOTES.md with rationale. Closes M27.7. Co-Authored-By: Claude <noreply@anthropic.com>
Add Playwright specs per migrated route under tests/browser/views/ that assert axe-clean rendering, severity-token computed colors, and Tab reachability where interactive elements exist. Wire route stubs through the in-browser React Query cache via __ripleyQueryClient so views render without a Tauri runtime. Add hash-based routing in App.tsx, expose test handles in main.tsx, gate the guard-event listener on __TAURI_INTERNALS__ so Vite preview doesn't crash. WCAG AA contrast bumps in theme.css and mirrored into DESIGN.md: - severity-critical: #f85149 -> #ff7b72 (5.92:1 on #322227 vs 4.49:1) - text-muted (dark): #484f58 -> #8b949e (5.4:1 on #1c2128 vs 1.95:1) - text-muted (light): #818b98 -> #59636e (AA on white) Restructure CommandPalette as a combobox-with-listbox: input owns keyboard via aria-activedescendant, options no longer wrap a focusable button. Settings now wraps its form in <section data-testid="settings-view"> so the route testid is stable across all four render states. Co-Authored-By: Claude <noreply@anthropic.com>
Document the canonical 8-step agent-only loop (new_page -> navigate -> take_snapshot -> take_screenshot -> list_console_messages -> list_network_requests -> lighthouse_audit -> close_page) for PR self-review of any view touching DESIGN.md tokens, KEYMAP, or tauri-specta bindings. Per-view checklists cover the seven migrated routes plus the command palette. Anti-patterns spell out that MCP is not a CI gate and not a substitute for the native macOS cold-path latency measurement on real WKWebView. Co-Authored-By: Claude <noreply@anthropic.com>
All M27.1-M27.9 sub-milestones merged; M27 Gate verifies clean on darwin
(other OS runners via CI):
- pnpm test:browser: 28 passed / 8 skipped (Lighthouse gated on LIGHTHOUSE=1)
- pnpm vitest run --coverage: 95 tests passing, statements 86.37%, lines 87.82%
- cargo test --workspace: 531 passed / 0 failed
- pnpm lint: clean
- pnpm typecheck: clean
- rg '#[0-9a-f]{3,8}' apps/desktop/src/ --glob '!**/theme.css': empty
- No iced refs in apps/desktop/src-tauri/
Adds vitest coverage config with thresholds (statements/lines ≥80%,
branches ≥75%) excluding generated bindings.ts so the merge gate is
machine-checkable.
Co-Authored-By: Claude <noreply@anthropic.com>
Vitest v8 coverage writes HTML/JSON reports under apps/desktop/coverage/ when --coverage is on; not a source artifact. Co-Authored-By: Claude <noreply@anthropic.com>
Cross-OS font and antialiasing rendering makes per-OS pixel baselines either 3x maintenance cost on every UI change or so loose the assertion is meaningless. Darwin baselines provide regression detection on the developer platform; axe, Lighthouse, DESIGN.md token checks, and per-view interaction specs cover the cross-OS signal we actually need. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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 6 M27 — migrate every Phase 1-5 iced view into the Tauri 2 + React 19 shell with Cmd+K command palette, browser-runnable verification suite, and Chrome DevTools MCP recipe for agent self-review.
What's in the branch
apps/desktop/src/components/ripley/(AlertCard, DataTable, EmptyState, ErrorPane, LoadingSkeleton, TimestampCell, SeverityBadge, TrafficLightDot, EcosystemIcon, KeyValueGrid, FilterChip).list_alertsIPC.list_guard_logIPC.Cmd+K) withmatch-sorterfuzzy search + persisted recency inlocalStorage.ripley_core::config::save.apps/desktop/DESIGN_NOTES.mdM27.7.apps/desktop/tests/browser/views/with axe + computed-style severity-token + Tab-reachability assertions; visual baselines per OS undertests/browser/visual/__snapshots__/; Lighthouse per-view harness (gated onLIGHTHOUSE=1). WCAG AA contrast bumps (severity-critical#f85149→#ff7b72;text-muted#484f58→#8b949edark,#818b98→#59636elight). CommandPalette rebuilt as a combobox-with-listbox (input owns keyboard viaaria-activedescendant, options no longer wrap focusable buttons).apps/desktop/docs/mcp-verification.md— canonical 8-step loop, per-view checklists, anti-patterns.M27 Gate (all green locally on darwin; other OS via CI)
apps/desktop/src/tests/browser/views/with axe + Lighthouse + computed-style token assertionsripley/no-raw-hexESLint rule still passes — no raw hex literals inapps/desktop/src/**outsidetheme.cssapps/desktop/docs/mcp-verification.mdM27: View migrationVerification on darwin
Test plan
ubuntu-22.04,windows-latest,macos-14🤖 Generated with Claude Code