Commit Graph
14 Commits
Author SHA1 Message Date
Paul BakausandClaude Opus 4.6 f339796b2b Extend action-specific diversity rules to all live actions
Previously only bolder/quieter/animate/colorize/typeset/layout had
variant diversity rules. Added the same level of guidance for distill,
polish, adapt, delight, and overdrive so every live action has a
clear "each variant must differ on THIS axis" rule.

Also noted that overdrive should skip its reference's "propose and ask"
step in live mode (it's non-interactive — the user picks from variants).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:09:31 -07:00
Paul BakausandClaude Opus 4.6 7386b3033f Force variant diversity and mandatory reference loading in live mode
Two failure modes observed:
1. Claude generates N near-identical variants (small shade/size tweaks)
   instead of meaningfully different design directions
2. When a sub-command like /bolder is chosen in the picker, Claude skips
   loading reference/bolder.md and generates generic variants

Fixes:
- "Load reference file" is now a MANDATORY Step 2a, separate and
  non-negotiable, called out as a critical failure to skip
- Added Step 2b "Plan 3+ distinctly different directions" with 7
  structural axes variants must differ on (hierarchy, layout topology,
  typography system, color strategy, density, tone, decomposition)
- Added action-specific diversity rules (bolder = different dimensions,
  animate = different motion vocabulary, colorize = different hues, etc.)
- Freeform prompt guidance: honor the prompt direction but explore
  meaningfully different interpretations, not three near-copies

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:07:23 -07:00
Paul BakausandClaude Opus 4.6 996c9af78c Add live.mjs combined entry point for fast startup
Previously, starting live mode required ~5-6 sequential bash calls:
read .impeccable.md, start server, check config, read reference, inject
tag, verify. The new live.mjs does all of this in a single command
(~340ms cold, ~90ms when reusing a running server) and returns everything
the agent needs in one JSON blob.

Workflow is now:
  1. node live.mjs        # start + inject + load context (1 bash call)
  2. navigate browser     # optional MCP call
  3. node live-poll.mjs   # enter poll loop

Reference doc collapsed to a single "Start Live Mode" section with the
one-command path plus a first-time config creation fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:56:20 -07:00
Paul BakausandClaude Opus 4.6 8030bc226a Add live-inject.mjs: per-project config for instant script tag management
First live run: agent auto-detects framework and writes a small config.json
(file, insertBefore/insertAfter anchor, comment syntax). Every subsequent
run: live-inject.mjs handles insert/remove deterministically, no LLM needed.

The config lives at {scripts_path}/config.json and is gitignored — it's a
per-project cache that wipes on skill update and regenerates on next use.

- New live-inject.mjs: --port (insert), --remove, --check modes
- Idempotent insert: re-running with a different port replaces cleanly
- Reference doc: one-time detection step, then instant insert/remove

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:44:26 -07:00
Paul BakausandClaude Opus 4.6 f397b9f123 Fix keyboard nav and click-to-deselect in live mode picker
- Arrow keys now pass through to element picker when the freeform input
  is empty, instead of being swallowed by stopPropagation
- Arrow nav works in both PICKING and CONFIGURING states, so you can
  change your element selection while the config bar is open
- Clicking outside the selected element and bar returns to PICKING mode,
  matching the expected deselect behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:31:03 -07:00
Paul BakausandClaude Opus 4.6 830fe8e5fc Instant accept/discard for live mode, SSE heartbeats, background server startup
Accept and discard in live variant mode are now handled by a deterministic
script (live-accept.mjs) that runs inside the poller before returning to
the agent. The browser updates the DOM instantly on click (fire-and-forget)
so the user is never blocked waiting for LLM-driven file cleanup.

Key changes:
- New live-accept.mjs: deterministic accept/discard file operations
- Poller auto-runs accept script for accept/discard events (_acceptResult)
- Browser handleAccept() now commits DOM change instantly, no SAVING state
- CSS+HTML colocated in one write (style tag inside variant wrapper)
- SSE heartbeat every 30s prevents silent connection drops
- Poll timeout increased from 2min to 10min
- EventSource onopen resets retry counter for reliable reconnection
- Server --background flag for clean single-command startup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:06:03 -07:00
Paul BakausandClaude Opus 4.6 9b573de1fb Add ADR for live variant mode architecture
Comprehensive architecture decision record covering the live variant
mode: context, key decisions (source modification over DOM patching,
SSE over WebSocket, self-contained skill scripts, HTTP long-poll for
agent), full architecture diagram with message flows, variant wrapper
format, browser UI states, session persistence, security model,
server resilience, performance optimizations, test coverage, known
limitations, and future work.

Also picks up improvements from parallel thread: poll timeout bumped
to 10 min, SSE heartbeat every 30s, and other minor fixes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 14:16:07 -07:00
Paul BakausandClaude Opus 4.6 4092ee5f22 Move PID file to project root (.impeccable-live.json)
os.tmpdir() returns /var/folders/.../T/ on macOS, not /tmp/. The skill
reference was telling the agent to cat /tmp/impeccable-live.json which
didn't exist. Moving the PID file to the project root makes it
predictable across platforms and project-scoped (multiple projects can
run independent live sessions).

Changed in: live-server.mjs, live-poll.mjs, live.md reference.
Added .impeccable-live.json to .gitignore.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 12:32:42 -07:00
Paul BakausandClaude Opus 4.6 3d0400cbd3 Fix CI: use bun run test to split unit/fixture tests correctly
CI was running `bun test` which ran jsdom fixture tests in bun, causing
timeouts. Now uses `bun run test` which runs unit tests in bun and fixture
tests in node.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 18:36:48 -07:00
Paul BakausandClaude Opus 4.6 bb5ba2f305 feat: add Pi provider support, fix community health files, recategorize /onboard
- Add first-class Pi (pi.dev) provider with transformer, tests, and build integration
- Fix CODEOWNERS username (@paulbakaus → @pbakaus)
- Add missing providers to issue/PR templates (Copilot, Kiro, OpenCode, Pi)
- Add Pi and OpenCode logos to homepage hero and install sections
- Move /onboard from "system" to "enhancement" category
- Update README and DEVELOP.md with all supported providers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:21:09 -07:00
Paul BakausandGitHub 599df3bb81 Merge pull request #18 from VaishnavGunjari/improvements
chore: add GitHub community health files
2026-03-12 09:56:16 -07:00
Vaishnav Gunjari 38fdc991c5 chore: remove FUNDING.yml and ci.yml, fix PR template checklist 2026-03-11 10:42:54 +05:30
JasonOA888 ad5ba06d55 feat(ci): add GitHub Actions CI workflow
- Run tests on push and PR to main
- Build project and upload artifacts
- Use Bun for fast JavaScript runtime

This ensures code quality and prevents regressions.
2026-03-10 13:17:55 +08:00
Vaishnav Gunjari 610425e662 chore: add GitHub community health files 2026-03-08 23:03:15 +05:30