Repository navigation
fix: PR #3 review follow-ups and outside-author CI blocker - #4
Merged
Merged
Conversation
…cide) - llms.txt run steps: drop the unpinned npx alternative; the user's request covers only the pinned clone. npx stays under ## Install. - CHANGELOG v2026.10.19.1: correct the prompt-pinning sentence. - Where you decide: only rules that keep a decision or sign-off with a person; quality-of-evidence rules drop out. New intro, boundary below the list, tests for both kinds of rule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex review r1: routing to HR, legal or a reviewer, agreeing a method with the reader, raising to an owner, and a NEVER line that routes to an acceptance decision now qualify. Tests cover each phrasing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mixed contact-and-send lines qualify; only pure keep-on-machine lines drop. Authority to accept and counsel's documented view qualify. A bare 'not legal advice' line drops unless it names who decides. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude Code reads plugin skills one level below each listed folder, so "./skills/" cannot replace the per-author entries (checked with claude plugin details in an isolated config: ./skills/, ./skills, globs and no key all expose 0 skills). The validator now notes an unlisted author on a PR and requires the listing only with --release, which release.yml runs on the tag. Test: a fork-mode PR adding skills/new-author/ passes both CI steps with no manifest change, and --release still asks for the entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
validate() returns notes on the no-skills/ early path (the CLI crashed); Where you decide also keeps rules that leave a call to the auditor, an owner, or the reader's answer before drafting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the three follow-ups from the independent review of #3, plus one CI blocker found tonight. No release, tag or deploy in this PR.
Owner: founder
Next: founder approves release v2026.10.19.2
1. llms.txt run steps: no unpinned npx (medium)
The "If you were asked to run grc-setup-review" steps offered
npx skills add ...next to the clone. That fetches and runs an npm package, while the user's request only covers the one pinned clone. Step 1 is now the pinned clone only; npx stays under## Install.site/tests/built.test.mjsandsite/tests/llms.test.mjsassert the run-steps section contains no npx, and that the pinned npx line is still under Install.2. CHANGELOG contradiction (low)
v2026.10.19.1 said "The site prompt now pins the release, as the README did." Now: "The prompt carries no release tag; llms.txt pins the release."
3. "Where you decide" narrowed (low)
decisionRules(site/scripts/content-lib.mjs) keeps only Rules lines that leave a decision or sign-off with a person: acting on someone's behalf, accepting, marking effective/approved, approving, signing, deciding, sending/submitting/contacting, changing live systems or records, or routing a call to a person (owner, reader, HR, legal, counsel, privacy lead, auditor). Evidence-quality rules ("never rate X on Y alone", "without the contract", "without checking") and data-handling rules drop out, even when they mention approval or effectiveness. The intro reads "From this skill's rules: where you decide". The draft-only boundary moved out of the list (it is not from the skill's rules); a skill with no qualifying rule shows the boundary alone.Spot-check of all 60 skills: 22 lines left, 25 came in (mostly routing lines that had been missed, plus sending and system-change lines), 3 skills now show only the boundary, because every rule they have is about evidence quality or data handling: first-gap-assessment, multi-framework-overlap-map, privacy-and-ai-control-applicability. Sample:
Dropped, for example: "Never ban a tool ... without naming the approved alternative", "Never mark a tool approved on the strength of vendor marketing alone", "Never create, backdate, re-sign or alter evidence", "Never present the review as legal advice" (no one named who decides).
Tests:
site/tests/content.test.mjshas a negative list (evidence-quality and data-handling lines must yield nothing) and a positive line per kind of call;built.test.mjschecks one<li>per rule, the boundary outside the list, and the intro only above a non-empty list.4. First-time outside author can pass CI (blocker)
tools/validate.mjsrequired everyskills/<author>/folder in.claude-plugin/plugin.json, and outside PRs may not touch.claude-plugin/, so a new outside author could never go green.Checked whether the manifest can point at the whole
skills/tree: Claude Code 2.1.303, isolatedCLAUDE_CONFIG_DIR, local marketplace install,claude plugin details:"./skills/","./skills","./skills/*/","./skills/**/"and noskillskey all expose 0 skills (discovery is one level below each listed folder). Listing./skills/tristan-roth/gives 60; adding a fixture./skills/new-author/gives 61 including the fixture skill. So per-author entries stay.Fix: on a PR, an unlisted author folder is a
note:on stdout, not an error.node tools/validate.mjs --releaserequires every author folder to be listed, andrelease.ymlnow runs it on the tag, so nothing ships with a new author missing from the plugin. Listed entries that do not exist are still errors on PRs. AGENTS.md says a maintainer adds the entry before the next release tag.Tests (
tools/validate.test.mjs): a fork-mode PR addingskills/new-author/author.mdplus one skill passes both CI steps (--changedguard and full validate on the candidate) with no manifest change, and--releaseon the same tree fails withplugin-skills; plus the PR-vs-release split on a unit fixture and a no-skills/CLI regression.Checks
node tools/validate.mjsand--release: ok, 60 skillsnode --test tools/*.test.mjs: 147 passnpm run build,tsc --noEmit,npm test: 43 passclaude plugin validate .claude-plugin/plugin.json: passes (the CLAUDE.md-at-root warning predates this PR)CODEX_REVIEW: Codex (read-only, sentinel verified each round), 4 rounds. r1 FIX-FIRST (missed routing phrasings), r2 FIX-FIRST (mixed send lines, counsel and authority lines, bare legal-advice lines), r3 FIX-FIRST (validator crashed on a checkout with no skills/ folder; three phrasings), r4 SHIP. All findings folded.
🤖 Generated with Claude Code