Skip to content

fix(ci): select the manifest-reading suites when a plugin manifest changes - #13174

Merged
kyle-sexton merged 3 commits into
mainfrom
fix/affected-set-manifest-readers
Nov 4, 2026
Merged

kyle-sexton merged 3 commits into
mainfrom
fix/affected-set-manifest-readers

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

No related issue: hub ledger L268. Main went red at 2026-11-04T07:18Z after #13027 merged green: the merge group's affected set missed lib/view-settings.test.sh.

Summary

#13027 changed userConfig in plugins/architecture/.claude-plugin/plugin.json. lib/view-settings.test.mjs checks each lane's hasMediumOption against whether its plugin's manifest ships one, building each manifest path from its parts (line 235). The selector picks a suite for a manifest only through rules R1, R2 or R8, never through a file that mentions the manifest (scripts/affected-tests.sh:163-168). This suite had no R8 declaration, so the merge group never ran it. Only the 07:09Z full main run caught the failure.

Fix

  • lib/view-settings.test.sh:3: # test-scope: plugins/*/.claude-plugin/plugin.json. This is the existing R8 per-suite reads declaration (scripts/affected-tests.sh:133-144, parsed at :688-703) that lib/prerequisites.test.sh:6 already uses. No new mechanism.
  • scripts/check-data-root.test.sh:12: # test-scope: plugins/*/.claude-plugin/plugin.json plugins/*/README.md. It runs check-stamps.sh over every live plugin.json and every plugin README with the generated block (:104-111), and nothing selected it before either.
  • The other suites that read every manifest were already covered or use fixture trees: lib/prerequisites.test.sh, scripts/node-notice-rows.test.sh, and the user-experience and user-interface routing.test.sh. lib/view-registry.mjs already selects lib/view-settings.test.sh.
  • pr-require-checks.yml: the diff-base comment said a merge group touching a manifest tests the whole tree. scripts/resolve-diff-base.sh:13-18 scopes it to the group's own diff, so the comment now says that.

Verification

  • scripts/affected-tests-live.sh: two new read_pairs. They fail on main (37 passed, 2 failed: the architecture manifest selected neither suite) and pass here (39 passed).
  • scripts/affected-tests.test.sh 147 passing. lib/view-settings.test.sh 52/52; scripts/check-data-root.test.sh 18/18.
  • scripts/check-affected.sh --base origin/main --no-fetch: exit 0.
  • Left out: selection-audit.test.sh and check-affected.test.sh, which have no known-miss entries for these suites.

Related

🤖 Generated with Claude Code

kyle-sexton and others added 3 commits November 4, 2026 04:02
…anges

A change to plugins/<p>/.claude-plugin/plugin.json selected neither
lib/view-settings.test.sh nor scripts/check-data-root.test.sh. Both read
every plugin's manifest through a path built from parts, and the selector
maps manifests only through R1, R2 or a declared scope (R8). The merge
group for #13027 therefore skipped view-settings, and only the full main
run caught the break.

Both suites now declare `plugins/*/.claude-plugin/plugin.json` in a
`# test-scope:` header, as lib/prerequisites.test.sh already does.
check-data-root also declares `plugins/*/README.md`, which it reads the
same way. scripts/affected-tests-live.sh pins both selections.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton marked this pull request as ready for review November 4, 2026 09:08
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-04T09:12:03.320874Z db9665e Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

claude-security-review reviewed db9665e61674b95152bda6f392c34ec9d3bb8cc5: read 4 of 4 changed file(s); 0 finding(s), 0 as inline comments.

Security review: PR #13174

No security issues found. I read every hunk in all 4 changed files.

  • .github/workflows/pr-require-checks.yml (trusted path): only the comment above the Resolve the diff base step changed. The step, its env, its if: conditions, the permissions: and the ci-status hold steps are all untouched. The comment now says that scripts/resolve-diff-base.sh gives a release merge group a scoped base. I judged from the code alone, and nothing in this workflow's gating or merge holds changes.
  • lib/view-settings.test.sh and scripts/check-data-root.test.sh: each gains one # test-scope: comment, the existing R8 per-suite reads declaration. A manifest or README change can now select these suites, so more tests run. Nothing is excluded or narrowed.
  • scripts/affected-tests-live.sh: two new read_pairs fixture entries that assert those suites are selected. Data for the test only.

Trust controls checked:

  • Trusted-trigger check: not touched.
  • Lane token scope: not touched.
  • Kill switch: not touched.
  • Broker signer: not touched.
  • Merge holds: no hold step's logic changed.
  • Other .github/actions/*: not touched.

No plugin manifest changes, and no standing instruction is deleted, narrowed or softened.

No embedded directives in the PR context.

critical-findings: 0

@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

claude-review reviewed db9665e61674b95152bda6f392c34ec9d3bb8cc5: read 4 of 4 changed file(s); 0 finding(s), 0 as inline comments.

Code review: no findings

I read every hunk of all 4 changed files. Nothing reaches the reporting bar.

What the change does. It adds an R8 # test-scope: declaration to two test suites that build each plugin's manifest path from parts, so a merge group that changes a plugin manifest now runs them. The two suites are lib/view-settings.test.sh and scripts/check-data-root.test.sh. The change also adds two live checks to scripts/affected-tests-live.sh and corrects the diff-base comment in pr-require-checks.yml.

What I checked by reading the code:

  • The declarations are read. scope_declarations in scripts/affected-tests.sh:691-703 reads lines only until the first line that is neither a comment nor blank.
    • In lib/view-settings.test.sh, the new line 3 comes before set -euo pipefail.
    • In scripts/check-data-root.test.sh, lines 1-11 are all comments, so line 12 is read.
  • The globs match. R8 globs let * cross / (affected-tests.sh:140-141). plugins/*/.claude-plugin/plugin.json and plugins/*/README.md both match files in the tree, so the stale-glob check at affected-tests.sh:1294 will not fire.
  • The README glob is justified. check-data-root.test.sh:105-110 loops over plugins/*/README.md and plugins/*/.claude-plugin/plugin.json and passes them to check-stamps.sh.
  • The new live checks are well formed. The comment line inside the read_pairs array is valid bash. Each pair goes through the existing loop (affected-tests-live.sh:266-275), which needs the file to exist, exit 0, and the suite to be selected.
  • The workflow comment is now accurate. It matches scripts/resolve-diff-base.sh:13-18: a merge group, a release group included, diffs against the queue's base, not the whole tree.

Minor, not counted as a finding:

  • check-data-root.test.sh:108 also reads .changes/*/docs-12700-plugin-options-pointers-*.md, and the new declaration leaves that glob out. Those fragments are temporary changelog files, so declaring them could later fail the stale-glob check once they are gone. Leaving it out looks like a reasonable choice.

Unverified. I had no shell, so I ran nothing. The PR's Verification section is the author's claim and I did not confirm it: 37 passing and 2 failing on main, 39 passing here, 147 passing in affected-tests.test.sh, and check-affected.sh exiting 0.

Closing issue. There is none; the PR cites hub ledger L268. With no stated acceptance criteria, there is nothing to check against.

Spend. Any plugin manifest change will now also run these two suites in the PR and merge-group CI. That is a little more Actions time on existing runners and needs no hold.

@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 4, 2026
Merged via the queue into main with commit fe4ebb6 Nov 4, 2026
89 checks passed
@kyle-sexton
kyle-sexton deleted the fix/affected-set-manifest-readers branch November 4, 2026 09:27
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