Skip to content

Tell the agent a skipped render gate is not a pass, in every skill that runs one - #29

Closed
civilian7 wants to merge 1 commit into
plugin87:mainfrom
civilian7:fix/skills-require-browser
Closed

civilian7 wants to merge 1 commit into
plugin87:mainfrom
civilian7:fix/skills-require-browser

Conversation

@civilian7

Copy link
Copy Markdown

CLAUDE.md rule 8 (from #16) says a render gate with no browser prints SKIPPED and exits 0, and that the agent must set DS_REQUIRE_BROWSER=1 to trust a single gate. On a plugin install the kit's CLAUDE.md is not in the user's context, so the skill is the only instruction the agent reads before it runs the gate. design-screen carries the rule; nine other skills name render gates and did not.

Found while vendoring a11y-audit into a project on its own: the skill told the agent to run measure_render.mjs and verify_states.mjs, and nothing in what it read said a SKIPPED exit 0 is not a pass.

Change

  • The same three-line note after the Step 0 block in a11y-audit, critique, data-dashboard, design-code, design-component, design-qa, gate, image-to-code and ship. No script default changes.
  • A guard test in tests/meta/guards.test.mjs: every SKILL.md that names a browser gate (the same BROWSER_GATES list the file already derives) must mention DS_REQUIRE_BROWSER.

Output

On main (skills unchanged, test added):

not ok 11 - every skill that names a browser gate tells the agent a skip is not a pass
    skills run a render gate without DS_REQUIRE_BROWSER: a11y-audit, critique, data-dashboard, design-code, design-component, design-qa, gate, image-to-code, ship

With the fix, node --test tests/meta/guards.test.mjs under PYTHONUTF8=1:

# pass 11
# fail 0

PYTHONUTF8=1 is needed only because two existing guards fail on a Korean-locale Windows machine; that is a separate fix, sent as its own PR. scripts/check_no_emoji.py passes. I did not run accuracy_report.mjs: this machine has no Playwright browser, and the change touches no gate.

🤖 Generated with Claude Code

…at runs one

CLAUDE.md rule 8 says a render gate with no browser prints SKIPPED and exits 0,
and that the agent must set DS_REQUIRE_BROWSER=1 to trust a single gate. On a
plugin install the kit's CLAUDE.md is not in the user's context, so the skill
is the only instruction the agent reads before it runs the gate. design-screen
carries the rule; nine other skills name render gates and did not.

- The same three-line note after the Step 0 block in a11y-audit, critique,
  data-dashboard, design-code, design-component, design-qa, gate,
  image-to-code and ship.
- A guard test: every SKILL.md that names a browser gate must mention
  DS_REQUIRE_BROWSER. It lists all nine skills on main and passes with the fix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@plugin87

Copy link
Copy Markdown
Owner

Thanks for this. The problem is real, and the next release fixes it in a different place: instead of a note in each skill, scripts/gate.mjs forces DS_REQUIRE_BROWSER=1 for every render gate, so a missing browser fails rather than printing SKIPPED, and the skill validator rejects a skill that runs a render gate without going through it. A note asks the model to remember; the runner takes the choice away. This branch also edits the same nine skill files, so it would conflict with that change. Closing for those two reasons.

@plugin87 plugin87 closed this Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants