Skip to content

validate-agent.sh: don't abort at the first warning (set -e + ((x++))) and stop false-flagging valid agents - #89404

Open
bcherny wants to merge 1 commit into
mainfrom
boris/triage-fix-83803
Open

validate-agent.sh: don't abort at the first warning (set -e + ((x++))) and stop false-flagging valid agents#89404
bcherny wants to merge 1 commit into
mainfrom
boris/triage-fix-83803

Conversation

@bcherny

@bcherny bcherny commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Fixes public issue #83803

The plugin-dev skill's validate-agent.sh failed on plugin-dev's own agent files. Three root causes, all set -euo pipefail interactions:

  1. Abort at the first warning. ((warning_count++)) / ((error_count++)) evaluate the arithmetic expression, and ((expr)) returns a nonzero exit status when the expression's value is 0 — so the first increment from 0 killed the script under set -e, mid-run, with exit 1. All increments now use count=$((count + 1)), which is an assignment and always returns 0.

  2. Abort on any absent frontmatter field. Extractions like TOOLS=$(echo "$FRONTMATTER" | grep '^tools:' | ...) propagate grep's exit 1 (no match) into the assignment, aborting the script instead of reporting the missing field. Each extraction now ends in || true.

  3. False "missing <example> blocks" warning. DESCRIPTION was extracted with grep '^description:', which only captures the first physical line — but plugin-dev's own agents use multi-line descriptions whose <example> blocks sit on later lines, so valid agents were flagged. The extraction now captures the full multi-line value (from description: up to the next top-level agent key).

Verification (all three plugin-dev agents previously died at the first warning with exit 1):

  • agents/agent-creator.md, agents/plugin-validator.md, agents/skill-reviewer.md → all checks pass, exit 0
  • A valid agent file that only triggers warnings → runs to the summary, exit 0
  • An intentionally invalid file (bad name, missing color) → all 3 errors reported, exit 1

New validate-agent.test.sh next to the script covers all three cases as a regression test.

Fixed validate-agent.sh aborting at the first warning and rejecting valid agent files

🤖 Generated with Claude Code

…) and stop false-flagging valid agents

Two defects made the validator fail on plugin-dev's own agent files
(#83803):

1. Under `set -e`, `((warning_count++))` / `((error_count++))` return a
   nonzero status when the counter was 0, so the script died at the first
   warning or error instead of finishing the run. Increments now use
   `count=$((count + 1))`, which always returns 0.

2. Field extractions like `TOOLS=$(... | grep '^tools:' ...)` aborted the
   script under `set -e` when the field was absent (grep exits 1 on no
   match), instead of reporting the missing field. They now end in
   `|| true`.

3. The description check only read the first physical line of the
   `description:` value, so multi-line descriptions with <example> blocks
   (as in plugin-dev's own agents) were false-flagged as missing examples.
   The extraction now captures the full multi-line value.

Adds validate-agent.test.sh: plugin-dev's own agents must exit 0, a
warning-only file must complete with exit 0, and an invalid file must
still exit 1 with all errors reported.

No-Verification-Needed: standalone shell script in the public repo; driven end-to-end directly plus new regression harness
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.

1 participant