Files
pbakaus_impeccable/.impeccable/config.json
T
Paul Bakaus 3600edc5e9 Live: polling rework, source locks, preflight scaffolding, Vue previews
Carved out of #371, minus progressive publication. Everything here works
against real project source the way main's Live already does: the agent
writes variants into the file the browser loaded, HMR fires, Accept
promotes and carbonizes. Nothing is staged anywhere.

Poll lanes. Events now carry an explicit priority: accept/discard/exit
ahead of manual_edit_apply/steer/carbonize_cleanup ahead of generate. A
long generate can no longer sit in front of the Accept the user just
clicked. leaseEvent claims its lease before awaiting, so a slow prepare
cannot hand the same event to two pollers.

Source locks. A per-file mutex around every accept and discard path, keyed
on a digest of the absolute path. Staleness is decided by owner-pid
liveness rather than mtime, so a wedged lock clears when its owner dies
instead of after an arbitrary timeout, and a slow-but-live accept is never
stolen from. Only the owning process can release a lock.

Preflight scaffolding. The server runs live-wrap (or live-insert) before
the poll returns and hands the result back as event.scaffold. That walk is
measured at ~7.6s on a large repo; moving it off the agent's critical path
removes a deterministic tool round trip without touching the generated
design. Falls back cleanly to the agent running the helper itself.

Vue previews. previewMode: "vue-component" for Nuxt/Vue targets, matching
the existing Svelte component path: variants compile as real SFCs from a
dev-only directory so the route is never rewritten during generation, and
Vite mounts them without invalidating page state. Accept is the only route
write. Includes a Vue attr tokenizer that normalizes shorthand bindings
(@x, :x, #x) to their canonical forms.

Accept hardening. Every thrown failure now returns mode: 'error' rather
than an ambiguous unhandled result, so a real failure is never classified
as a deliberate manual handoff and silently dropped. The marker search
skips node_modules/.git/dist/build/.impeccable.

Shared CLI arg parsing extracted to scripts/lib/cli-args.mjs.

Assisted-by: Claude Code
2026-07-18 14:11:07 -07:00

85 lines
2.4 KiB
JSON

{
"detector": {
"ignoreRules": [],
"ignoreFiles": [
"tests/fixtures/**",
"tests/detect-antipatterns.test.js",
"site/pages/slop/**",
"site/data/anti-patterns-catalog.js",
"site/pages/shader-lab/**",
"site/scripts/demos/commands/**",
"site/styles/skill-demos.css",
"site/styles/slop-kinpaku.css"
],
"ignoreValues": [
{
"rule": "bounce-easing",
"value": "bounce-ball",
"createdAt": "2026-06-15T04:15:03.164Z",
"reason": "User confirmed ball bounce animation is intentional"
},
{
"rule": "design-system-color",
"value": "*",
"files": [
"site/styles/home-rebuild.css"
],
"createdAt": "2026-06-15T23:37:38.170Z",
"reason": "AURELIA hotel picker is intentionally a foreign boutique-hotel palette inside the live picker demo"
},
{
"rule": "design-system-color",
"value": "*",
"files": [
"site/styles/main.css"
],
"createdAt": "2026-06-15T23:37:38.170Z",
"reason": "Generic AI slop card intentionally uses off-system colors for the before-state comparison"
},
{
"rule": "design-system-color",
"value": "*",
"files": [
"site/styles/home-kinpaku.css"
],
"createdAt": "2026-06-15T23:37:38.170Z",
"reason": "Homepage before-state slop demo intentionally uses off-system purple/magenta colors"
},
{
"rule": "design-system-color",
"value": "*",
"files": [
"site/styles/design-system.css"
],
"createdAt": "2026-06-15T23:37:38.170Z",
"reason": "Design-system comparison intentionally shows an off-system before-state"
},
{
"rule": "design-system-color",
"value": "*",
"files": [
"site/styles/workflow.css"
],
"createdAt": "2026-06-15T23:37:38.170Z",
"reason": "Generic slop card intentionally uses off-system purple colors for the before-state comparison"
},
{
"rule": "design-system-font",
"value": "*",
"files": [
"site/styles/workflow.css"
],
"createdAt": "2026-06-15T23:37:38.170Z",
"reason": "Generic slop card intentionally uses Inter for the before-state comparison"
}
]
},
"hook": {
"enabled": true,
"limits": {
"maxFindings": 5,
"maxChars": 8000
}
}
}