From f38a8d40ee326410120929178a662d85eaa29daa Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Wed, 22 Apr 2026 12:42:10 -0700 Subject: [PATCH] chore(skill): harden post-accept carbonize cleanup so the agent can't skip it After an LLM-triggered session where the carbonize cleanup got skipped entirely (the instruction was buried as a single bullet among four cases in live.md, and `_acceptResult.handled: true` felt like a "done" signal), add three redundant reinforcements: 1. live-accept.mjs now emits a `todo` array on the event payload when carbonize is true, listing all five cleanup steps plus a pointer to reference/live.md. The agent reads this as part of the event JSON. 2. live-poll.mjs prints a loud multi-line stderr banner on every carbonize=true event. Even agents that parse only stdout JSON see stderr output and can't treat the event as handled without action. 3. reference/live.md pulls the carbonize branch out of the "Handle accept" bullet list into a dedicated "Required after accept (carbonize)" section with a numbered five-step checklist, a rationale paragraph for why skipping is bad, and an explicit "do not poll again until the file is clean" instruction. The three layers are deliberately redundant: a future LLM that ignores the reference text should still be caught by the stderr banner or the in-event todo, and vice versa. --- .agents/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .claude/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .cursor/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .gemini/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .github/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .kiro/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .kiro/skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .opencode/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .pi/skills/impeccable/reference/live.md | 24 +++++++++++++------ .pi/skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .pi/skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .rovodev/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .trae-cn/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ .trae/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .trae/skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ source/skills/impeccable/reference/live.md | 24 +++++++++++++------ .../skills/impeccable/scripts/live-accept.mjs | 15 ++++++++++++ .../skills/impeccable/scripts/live-poll.mjs | 20 ++++++++++++++++ 36 files changed, 624 insertions(+), 84 deletions(-) diff --git a/.agents/skills/impeccable/reference/live.md b/.agents/skills/impeccable/reference/live.md index 957ea2f0e..0cf0ab53a 100644 --- a/.agents/skills/impeccable/reference/live.md +++ b/.agents/skills/impeccable/reference/live.md @@ -233,16 +233,26 @@ Remove the wrapper you inserted in Step 2. Nothing else to do. Event: `{id, variantId, _acceptResult}`. The poll script already ran `live-accept.mjs` to handle the file operation deterministically; the browser DOM is already updated. - `_acceptResult.handled: true` and `carbonize: false` — nothing to do. Poll again. -- `_acceptResult.handled: true` and `carbonize: true` — the accepted variant has an inline `