{"slug":"dot-palette","total":3,"limit":100,"offset":0,"since":null,"commits":[{"hash":"9fc1f03","date":"2026-09-17 07:34:23 -0700","author":"Steve Abrams","subject":"dot-palette: guard IPC calls so the palette degrades gracefully without the preload bridge (TK-11877)","body":"Empirically seeded by cycle-1 screenrecord: opening index.html in a plain browser\n(no Electron preload) threw uncaught 'Cannot read properties of undefined (reading\nmove/quit)' on grip-drag + close. window.palette?.move?.() / ?.quit?.() no-op when\nthe bridge is absent; identical in Electron where preload defines window.palette.\nIsolated screenrecord re-test: 10 error-bearing records -> 0 (5 passes clean).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017wvstRQCpemptApArrjQRg"},{"hash":"bc3244f","date":"2026-09-17 07:32:18 -0700","author":"Steve Abrams","subject":"dot-palette: side-effect-free test seam + selftest + safe-by-default screenrecord (TK-11877)","body":"Hardening pass (Cody FIX-FIRST gated). server.js gains 4 test seams\n(DOTPALETTE_ENGINE/_BIN/_TTY_OVERRIDE/_PORT_FILE) each with a || fallback, so\nthe full HTTP->engine path can be exercised on an ephemeral port with a mock\nengine + fake tty, never touching a real iTerm2 tab or the live :9791 palette.\n\nProduction isolation is CODE-enforced, not assumed: start.command unsets the\nseams and electron-main.js strips them from the spawned server.js env, so a\nstray seam in the shell can never leak in to mock the engine or mis-target a tty.\n\nselftest.js: 7/7 incl 2 NEGATIVE cases (reddens on injected engine failure +\nunresolvable tty) per CLAUDE.md TK-11431 amд3. screenrecord/run.js: was hitting\nthe LIVE palette (repainting the focused tab, 5x); now boots its own isolated\ninstance by default, live only on explicit --live.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017wvstRQCpemptApArrjQRg"},{"hash":"2629bec","date":"2026-09-16 16:51:12 -0700","author":"Steve","subject":"dot-palette: always-on-top click palette to set the current iTerm2 tab's status dot","body":""}]}