From 37c1a364a4335f0e4bfa38ce277d600dd6f7d017 Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Wed, 22 Apr 2026 13:16:41 -0700 Subject: [PATCH] fix(live): Escape in PICKING also resets the global bar's Pick button Previously Escape while picking just hid the highlight and set state to IDLE, leaving the global bar's Pick button visually active. Next pick attempt fell into a broken state where the button looked on but no picker ran. Route through togglePick() so the flag, the button, the UI, and the state all flip together. Small copy fix on Why panel 04: Figma stamp now reads "last touched Q3 2025" (was 2024; should reflect closer to the current calendar). --- .agents/skills/impeccable/scripts/live-browser.js | 8 +++++++- .claude/skills/impeccable/scripts/live-browser.js | 8 +++++++- .cursor/skills/impeccable/scripts/live-browser.js | 8 +++++++- .gemini/skills/impeccable/scripts/live-browser.js | 8 +++++++- .github/skills/impeccable/scripts/live-browser.js | 8 +++++++- .kiro/skills/impeccable/scripts/live-browser.js | 8 +++++++- .opencode/skills/impeccable/scripts/live-browser.js | 8 +++++++- .pi/skills/impeccable/scripts/live-browser.js | 8 +++++++- .rovodev/skills/impeccable/scripts/live-browser.js | 8 +++++++- .trae-cn/skills/impeccable/scripts/live-browser.js | 8 +++++++- .trae/skills/impeccable/scripts/live-browser.js | 8 +++++++- public/index.html | 2 +- source/skills/impeccable/scripts/live-browser.js | 8 +++++++- 13 files changed, 85 insertions(+), 13 deletions(-) diff --git a/.agents/skills/impeccable/scripts/live-browser.js b/.agents/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.agents/skills/impeccable/scripts/live-browser.js +++ b/.agents/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.claude/skills/impeccable/scripts/live-browser.js b/.claude/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.claude/skills/impeccable/scripts/live-browser.js +++ b/.claude/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.cursor/skills/impeccable/scripts/live-browser.js b/.cursor/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.cursor/skills/impeccable/scripts/live-browser.js +++ b/.cursor/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.gemini/skills/impeccable/scripts/live-browser.js b/.gemini/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.gemini/skills/impeccable/scripts/live-browser.js +++ b/.gemini/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.github/skills/impeccable/scripts/live-browser.js b/.github/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.github/skills/impeccable/scripts/live-browser.js +++ b/.github/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.kiro/skills/impeccable/scripts/live-browser.js b/.kiro/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.kiro/skills/impeccable/scripts/live-browser.js +++ b/.kiro/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.opencode/skills/impeccable/scripts/live-browser.js b/.opencode/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.opencode/skills/impeccable/scripts/live-browser.js +++ b/.opencode/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.pi/skills/impeccable/scripts/live-browser.js b/.pi/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.pi/skills/impeccable/scripts/live-browser.js +++ b/.pi/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.rovodev/skills/impeccable/scripts/live-browser.js b/.rovodev/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.rovodev/skills/impeccable/scripts/live-browser.js +++ b/.rovodev/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.trae-cn/skills/impeccable/scripts/live-browser.js b/.trae-cn/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.trae-cn/skills/impeccable/scripts/live-browser.js +++ b/.trae-cn/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/.trae/skills/impeccable/scripts/live-browser.js b/.trae/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/.trae/skills/impeccable/scripts/live-browser.js +++ b/.trae/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty) diff --git a/public/index.html b/public/index.html index 4e3fa63f7..2e1714ea8 100644 --- a/public/index.html +++ b/public/index.html @@ -404,7 +404,7 @@
Checkout v7 (final) final FINAL.fig
- shipped Q3 2024 + last touched Q3 2025
diff --git a/source/skills/impeccable/scripts/live-browser.js b/source/skills/impeccable/scripts/live-browser.js index 109d0d58e..c943ede91 100644 --- a/source/skills/impeccable/scripts/live-browser.js +++ b/source/skills/impeccable/scripts/live-browser.js @@ -1747,7 +1747,13 @@ if (state === 'CONFIGURING') { hideBar(); stopScrollTracking(); hideAnnotOverlay(); clearAnnotations(); state = 'PICKING'; return; } if (state === 'CYCLING') { handleDiscard(); return; } if (state === 'SAVING' || state === 'CONFIRMED') return; // don't interrupt - if (state === 'PICKING') { hideHighlight(); state = 'IDLE'; return; } + if (state === 'PICKING') { + // Use togglePick so the "Pick" button in the global bar also flips + // off, otherwise the bar stays lit while nothing else is active. + if (pickActive) togglePick(); + else { hideHighlight(); state = 'IDLE'; } + return; + } } // Arrow/Enter nav works in PICKING (hover) and CONFIGURING (selected, input empty)