Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .loopdeck/execution.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
schema_version: 1
revision: 2
queue: []
history:
- id: selasar-revamp/visual-pass-in-light-dark-and-system-auto-against-every-existing
title: Visual pass in light, dark, and system-auto against every existing
origin:
epic: selasar-revamp
prd: prd-rebrand-tokens
phase: Phase 3 — Verification
outcome: completed
started_at: 2026-08-05T11:12:34.730540Z
completed_at: 2026-08-05T11:23:24.646485Z
attempt: 1
43 changes: 43 additions & 0 deletions .loopdeck/run-plan.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
id: run-e40096a5-5f97-4a58-a061-d188d566b577
project: /Users/supriyantop/Workspace/others/loopdeck
created: 2026-08-05T10:56:59.735262Z
consent:
draft_pr_authorized: true
budgets:
per_phase_token_cap: 500000
per_phase_wall_clock_secs: 5400
total_run_wall_clock_secs: 28800
environment:
worktree_kept: false
wall_clock_secs: 652
stall_policy: continue_independent
phases:
- execution_id: selasar-revamp/visual-pass-in-light-dark-and-system-auto-against-every-existing
status: completed
interview:
- question: How should the system-auto theme mode be tested? In "auto", the app follows the real OS appearance via window.matchMedia, so verifying auto requires changing macOS's actual appearance setting — a system-wide side effect on your machine that may not restore if the run dies mid-way.
answer: Emulate, don't touch OS
- question: If the visual pass finds a contrast regression or visual defect, what should the run do? This loop is Phase 3 verification — it's unclear whether the agent should fix or just report when something fails.
answer: Fix and re-verify
- question: How should "no contrast regression" be judged with no human present? You can't eyeball the screenshots overnight, so the pass needs a defined verdict mechanism.
answer: Skip this, let me validate manually
- question: How deep should "every existing screen" go? Destructive/warning/focus states (delete-confirm dialogs, error banners, keyboard focus rings) only appear after driving the UI — the run must decide how much interaction to perform.
answer: skipp this as well, let human verify
interview_status: answered
depends_on: []
park_payload: 'draft PR: https://github.com/suprie/loopdeck/pull/79'
token_usage: 205057
wall_clock_secs: 324
- execution_id: selasar-revamp/npx-tsc-noemit-clean-manual-smoke-confirming-selasar-appears-in
status: completed
interview:
- question: The acceptance criteria say 'manual smoke confirming "Selasar" appears in the window title bar,' but the run is unattended — no human present to do the manual part. What should the run do for the smoke step?
answer: Static check, defer eyeball
- question: If `npx tsc --noEmit` is not clean, or the "Selasar" title check fails, what should the run do?
answer: Fix and re-verify
interview_status: answered
depends_on:
- selasar-revamp/visual-pass-in-light-dark-and-system-auto-against-every-existing
park_payload: 'draft PR: https://github.com/suprie/loopdeck/pull/79'
token_usage: 205057
wall_clock_secs: 324
3 changes: 2 additions & 1 deletion src/components/detail/EpicsPanel.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -294,7 +294,8 @@ export function EpicsPanel({ projectPath }: EpicsPanelProps) {
// refresh it so toggling doesn't leave a stale discrepancy warning.
loadProgress();
} catch (err) {
toast.error("Failed to toggle", { description: String(err) });
const appErr = err as AppError;
toast.error("Failed to toggle", { description: appErr.message ?? String(err) });
} finally {
setToggling(null);
}
Expand Down
4 changes: 3 additions & 1 deletion src/components/detail/LoopsPanel.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,6 +16,7 @@ import type {
HistoryLoop,
QueuedLoop,
MigrationPreview,
AppError,
} from "../../types";
import * as api from "../../lib/tauri";
import { LoadingSpinner } from "../shared/LoadingSpinner";
Expand DownExpand Up@@ -288,7 +289,8 @@ export function LoopsPanel({ projectPath }: LoopsPanelProps) {
: prev,
);
} catch (err) {
toast.error("Failed to toggle step", { description: String(err) });
const appErr = err as AppError;
toast.error("Failed to toggle step", { description: appErr.message ?? String(err) });
} finally {
setToggling(null);
}
Expand Down
7 changes: 4 additions & 3 deletions src/components/detail/MigrationCard.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,10 +3,10 @@ import {
ArrowRightLeft,
AlertTriangle,
ChevronDown,
Loader2,
Loader2,
} from "lucide-react";
import { toast } from "sonner";
import type { MigrationPreview } from "../../types";
import type { MigrationPreview, AppError } from "../../types";
import * as api from "../../lib/tauri";

interface MigrationCardProps {
Expand DownExpand Up@@ -49,7 +49,8 @@ export function MigrationCard({
});
onMigrated();
} catch (err) {
toast.error("Migration failed", { description: String(err) });
const appErr = err as AppError;
toast.error("Migration failed", { description: appErr.message ?? String(err) });
} finally {
setMigrating(false);
setConfirming(false);
Expand Down