From 36596598ef9c5742665ad222507380c0da63dc5d Mon Sep 17 00:00:00 2001 From: Defame1297 Date: Mon, 17 Aug 2026 12:28:11 +0000 Subject: [PATCH] fix(tests): point the strict-mode dependency citation at README.md Why: this branch moved the prerequisites list out of AGENTS.md into README.md but left three references behind. The worst is run-tests.sh's --strict failure message, which a developer is handed at the exact moment a push gate fails and they need the dependency list: it named AGENTS.md, which no longer documents vale, apm or jq anywhere. 56cc173 re-anchored this same class of citation in .pre-commit-config.yaml, scripts/check-vale-style-sync.sh, scripts/sync-marketplace-mirror.sh and tests/test-check-vale-style-sync.sh -- tests/run-tests.sh was missed, and it is the only one a human actually reads. Implementation notes: - run-tests.sh:262 (user-visible), run-tests.sh:16 (header rationale) and test-run-tests.sh:395 all now cite README.md's Prerequisites table, verified to name vale, apm, jq, python3/PyYAML and the claude CLI. - Every assertion on this message greps for "a skip is a SETUP ERROR", which sits before the changed clause, so no test needed updating. - test-vale-wrap.sh's bash 3.2 citation is corrected in the same pass: it credited LESSONS.md and the script headers, but LESSONS.md's only mention of 3.2 is an aside inside an unrelated lesson, not a target declaration. It now cites scripts/lib/batch-run.sh and providers/claude-code/statusline-command.sh, which do declare it. The citation 56cc173 replaced was already false, so this finishes a half-fix rather than correcting a regression. Impact: forced the strict-failure path with vale removed from PATH and confirmed the corrected message printing -- 21 passed, 3 skipped, exit 1. Full suite with vale present: 24 passed, 0 skipped, 0 failed. Refs: #105 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01TmFqzpuExLJv3m114XVE9w --- tests/run-tests.sh | 13 +++++++------ tests/test-run-tests.sh | 9 +++++---- tests/test-vale-wrap.sh | 8 +++++--- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/tests/run-tests.sh b/tests/run-tests.sh index f6ea424..683b824 100755 --- a/tests/run-tests.sh +++ b/tests/run-tests.sh @@ -13,11 +13,12 @@ # dev binary, the other 15 suites still tell you something, and turning that # into a red run would just train people to ignore red. # * as a GATE (the run-tests pre-push hook): a skip is a SETUP ERROR, not a -# legitimate state. AGENTS.md documents vale, apm and jq as required pre-push -# dependencies, so a suite that cannot run on the machine doing the pushing -# means the machine is misconfigured -- and pre-commit prints NOTHING for a -# passing hook, so the skip list below is swallowed entirely. On a vale-less -# PATH that silently shipped a green gate having verified 15 of 17 suites. +# legitimate state. README.md's Prerequisites table documents vale, apm and +# jq as required pre-push dependencies, so a suite that cannot run on the +# machine doing the pushing means the machine is misconfigured -- and +# pre-commit prints NOTHING for a passing hook, so the skip list below is +# swallowed entirely. On a vale-less PATH that silently shipped a green +# gate having verified 15 of 17 suites. # Exactly the vacuous-pass class the rest of this file exists to close. # # Deliberately its own switch, NOT folded into @@ -258,7 +259,7 @@ fi # here (not just referenced) because this block goes to stderr and is what a # pre-push reader actually gets handed. if [[ "$STRICT" == true && ${#SKIPPED[@]} -gt 0 ]]; then - echo "Error: --strict and ${#SKIPPED[@]} suite(s) skipped. Run as a gate, a skip is a SETUP ERROR on this machine, not a legitimate state: AGENTS.md documents vale, apm and jq as required pre-push dependencies, so every suite is expected to be runnable here. Install what each suite names below and re-run; do not skip the hook." >&2 + echo "Error: --strict and ${#SKIPPED[@]} suite(s) skipped. Run as a gate, a skip is a SETUP ERROR on this machine, not a legitimate state: README.md's Prerequisites table documents vale, apm and jq as required pre-push dependencies, so every suite is expected to be runnable here. Install what each suite names below and re-run; do not skip the hook." >&2 sidx=0 for s in ${SKIPPED[@]+"${SKIPPED[@]}"}; do echo " $s" >&2 diff --git a/tests/test-run-tests.sh b/tests/test-run-tests.sh index 803424f..ec3fe0a 100644 --- a/tests/test-run-tests.sh +++ b/tests/test-run-tests.sh @@ -392,10 +392,11 @@ fi # --- 10. --strict turns a skip into a failure, and names the suite AND the reason --- # Graceful skipping is right for an ad-hoc run and wrong for a gate. At pre-push a -# suite exiting 77 means a dependency AGENTS.md documents as required is missing -# on the pushing machine -- and pre-commit prints nothing at all for a passing -# hook, so the skip list this script writes to stdout was swallowed whole. A -# vale-less PATH shipped a green gate having verified 15 of 17 suites. +# suite exiting 77 means a dependency README.md's Prerequisites table documents +# as required is missing on the pushing machine -- and pre-commit prints nothing +# at all for a passing hook, so the skip list this script writes to stdout was +# swallowed whole. A vale-less PATH shipped a green gate having verified 15 of +# 17 suites. # # The reason is asserted, not just the name: "something was skipped" leaves the # reader with no idea which binary to install, which is most of why the swallowed diff --git a/tests/test-vale-wrap.sh b/tests/test-vale-wrap.sh index 1421e86..1e7261a 100755 --- a/tests/test-vale-wrap.sh +++ b/tests/test-vale-wrap.sh @@ -451,9 +451,11 @@ fi # cover anything new: it omitted scripts/lib/batch-run.sh — the shared runner # this branch introduced, whose own header (batch-run.sh:9-11) documents it as # bash-3.2-safe — along with four other scripts/*.sh. Deriving the list means a -# new script is covered the moment it lands. LESSONS.md and the script headers -# name bash 3.2 as an explicit repo target, so the scope is four globs, each -# floor-asserted below: +# new script is covered the moment it lands. The script headers name bash 3.2 as +# an explicit repo target -- scripts/lib/batch-run.sh:10 ("all three callers are +# explicitly bash-3.2-safe") and providers/claude-code/statusline-command.sh:100 +# ("macOS's system bash, and an explicit repo target") -- so the scope is four +# globs, each floor-asserted below: # - scripts/**/*.sh — repo tooling and pre-commit hook scripts # - tests/*.sh — the runners and every regression test # - plugins/*/.apm/**/*.sh — the scripts plugins ship to users