fix(biome-format): honor the kill switch on the SessionStart probe; bind notice to manifest - #5284
Conversation
…site probe The SessionStart row launched probe-prerequisite.sh with no option gate, so a plugin disabled through biome_format_enabled=false still printed the missing-biome notice. Launch the row with --run-if-unset-or-true BIOME_FORMAT_ENABLED, the form typos-format uses, so a closed gate exits 0 before bash is resolved. probe-prerequisite.sh stays byte-identical across biome-format, go-format and markdown-format. The suite now runs the hooks.json row as the harness spawns it, from an empty cwd on a PATH without biome: disabled prints nothing and exits 0; unset and true print the notice naming biome, /biome-format:check and the install line. A missing node fails the suite. Whether the probe may notify in a repo with no Biome config is left to the owner (#4240). Refs #4240 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB
…sites.json Assert the manifest has exactly one tool (biome, node_modules/.bin/biome) and that the hook's notice call and local-bin walk state its name, check and install strings, so the two cannot drift apart. Refs #4240 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB
…heck self-sufficient README Requirements names the two latch classes once, adds Node.js (every hook row launches through exec-bash.mjs, so a missing node is a launch error, not a skip notice) and describes the SessionStart probe. The setup check drops its own latch wording, names the probe as a separate resolver, adds a Node row and reports biome_format_lint_gitignored. The check skill states that setup's pre-computed rows are not rendered when it reads the file. Evals cover the new rows. Refs #4240 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB
|
PR body contract — issue linkage This PR body conforms to the issue-linkage contract. Nothing to do. |
…atch guidance to its recheck Reword the 0.7.2, 0.6.59 and 0.6.58 entries to a one-line shared launcher/library sync note, and name each edit in the 0.7.6 entry. Shorten the dispatch-completeness block in docs/formatter-path-probes.md to a pointer at #3549 and tie the timeout guidance to that issue's recheck. Refs #4240 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @kyle-sexton's task in 2m 51s —— View job Reviewing PR #5284
|
|
Claude finished @kyle-sexton's task in 58s —— View job Security review complete
No security issues found. This PR touches only test scripts, documentation, changelog wording, an eval fixture, a plugin manifest version bump, and a
No GitHub Actions files are touched, so zizmor's lane is not implicated here. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 309a7687e9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…rview frontmatter digest - setup check: Node.js stays FAIL when the toggle is off (the runner starts node before the gate runs) and a Bash PASS is scoped to Bash's PATH; the probe's walk limit and file tests are read from probe-prerequisite.sh instead of restated. - planning: re-pin the interview SKILL.md frontmatter digest. #5042 shortened the argument-hint key only (the two defenses are body prose, digested separately), and the stale digest fails test-linux on main. Same one-line change as #5239. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB
|
Claude finished @kyle-sexton's task in 47s —— View job Security review complete
No security issues found. Reviewed
No GitHub Actions files are touched, so zizmor's lane is not implicated. |
|
Claude finished @kyle-sexton's task in 3m 13s —— View job Reviewing PR #5284
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB
|
Claude finished @kyle-sexton's task in 1m 35s —— View job Security review complete
No security issues found. Reviewed
No GitHub Actions files are touched, so zizmor's lane is not implicated. |
|
Claude finished @kyle-sexton's task in 3m 24s —— View job Reviewing PR #5284
|
…rtability lint The planning digest repin is dropped from this branch: origin/main now carries the same pin (#5284). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB

Refs: #4240
Summary
Audit findings against
plugins/biome-formatfor #4240 (missing-tool prerequisites). The SessionStart probe ignored thebiome_format_enabledkill switch, the hook's notice text was not bound toprerequisites.json, and the README, setup skill and check skill disagreed on notice wording and left out Node and the probe. Coverage of the other five binary-probing plugins and the two owner questions on #4240 stay open, so this PR only refs the issue.Fix
hooks/hooks.json: the SessionStart row launches with--run-if-unset-or-true BIOME_FORMAT_ENABLED(the form typos-format uses).probe-prerequisite.shandexec-bash.mjsare untouched; the probe stays byte-identical across biome-format, go-format and markdown-format.hooks/biome-format.test.sh: runs the row as the harness spawns it, from an empty cwd on a PATH without biome. Disabled prints nothing; unset and true print the notice. A missing node fails the suite. A new case binds the hook's missing-binary notice (tool name, check, install line) and the tool's local bin path toprerequisites.json.setupandcheckskills, and their evals: the two latch classes are stated once, Node.js and the probe are documented, the setup check names the probe as a separate resolver, adds a Node row and reportsbiome_format_lint_gitignored, and the check skill runs every probe through Bash because setup's pre-computed rows are not rendered when it reads the file.plugins/planning/tests/interview-defenses.test.sh: re-pins the interviewSKILL.mdfrontmatter digest that feat(skills): argument-hint house style, gate, and fleet rewrite (#3542) #5042 (argument-hint only) left stale and that failedtest-linuxon main; planning 0.45.13. Same one-line change as fix(session-flow): audit remediation (observer flag gate, export records, unattended parsing) #5239.CHANGELOG.md, in-place corrections to released entries (each also named in the 0.7.6 entry): 0.7.2 said this plugin's hook rows were unchanged although 0.7.1, the same commit, changed them; 0.6.59 and 0.6.58 describedhook::shell_c_operandandhook::bash_parse_segments, which no hook here calls. All three now read "shared launcher/library sync; no change to this plugin's behavior" with their issue links kept. 0.7.3 stays:hook::begincallshook::repo_relative_path_to. No entry is renumbered or folded.docs/formatter-path-probes.md: the dispatch-completeness block is a pointer at No PostToolUse hook has completed on this machine since 2026-08-12 (formatters silently not running) #3549, and the "do not raisePostToolUsetimeouts" guidance is bound to the recheck (the Windowsclaude --debugresult on No PostToolUse hook has completed on this machine since 2026-08-12 (formatters silently not running) #3549) instead of standing as fleet guidance. The four-part record stays in this file.Not done, owner-reserved: whether the probe may notify in repos with no Biome config (Q1) and whether to keep the per-plugin check skills (Q2). No option is implemented.
Verification
bash plugins/biome-format/hooks/biome-format.test.sh: PASS=62 FAIL=0bash scripts/check-prerequisite-probes.test.sh: 18 cases, 0 failedbash scripts/check-changelog-parity.sh --check --check-order: passbash scripts/validate-plugins.sh: all manifests and the catalog validatedcheck-cross-plugin-source-drift.sh,check-hook-exec-form.sh,check-killswitch-hoist.sh,check-skill-leaf-names.sh,check-purged-em-dashes.sh,check-silent-skips.sh: no findings for this pluginRelated
.work/audit/REPORT.md: row 3b hooks: missing external tools are not surfaced to the user; add a model-invocable fleet-wide prerequisites check (no auto-install) #4240 (partial delivery); plugin-biome-format findings carried by hook-launcher (probe ignores toggle, setup check lacks node and gitignore option).exec-bash.mjs.biome.jsonopt-in gate on the probe is owner question Q1 on hooks: missing external tools are not surfaced to the user; add a model-invocable fleet-wide prerequisites check (no auto-install) #4240 and is not implemented); markdown-format (its probe is in the Q1 packet on hooks: missing external tools are not surfaced to the user; add a model-invocable fleet-wide prerequisites check (no auto-install) #4240, option C, and stays unchanged); context7 (noted on hooks: missing external tools are not surfaced to the user; add a model-invocable fleet-wide prerequisites check (no auto-install) #4240 with draft PR fix(context7): restore the lookup clause reserved by #4120 and add a model-invocable /context7:check #5252, plus the playwright gap); conventions (the twodocs/formatter-path-probes.mdedits above, with No PostToolUse hook has completed on this machine since 2026-08-12 (formatters silently not running) #3549 as the recheck carrier). The conventions request for the check-skill invocation-mode doc is held with Q2.🤖 Generated with Claude Code
https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB