Conversation
Replace allowBuilds and the family of per-capability settings that would follow it with a single package-keyed permissions field, holding capability grants but not content modifications. allowBuilds folds in as the build capability, using the legacy-clearing write that already handles onlyBuiltDependencies. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Denials are the majority of what an approval writes, so a list of granted capabilities cannot express the common case without an escape character that collides with YAML tag syntax. Block style rather than flow so that granting a permission is an added line in review, not a rewritten entry. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a
State that per-capability commands are compatibility surface, not a pattern new capabilities extend, and that the shared prompt dispatches per capability afterwards. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a
One install produces one pending set, so it gets one section keyed by package. Replaces the Ignored build scripts wording, which describes the wrong thing for a skill, while ERR_PNPM_IGNORED_BUILDS keeps its code. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a
pnpm already qualifies approval by what is approved, as stage approve does, so a bare pnpm approve would be the only unqualified one. Keep the verb and add the namespace. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a
The namespace keeps listing and approval together, but the approval prompt is the most-travelled path and should not be longer to type than the approve-builds it replaces. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a
Give the scope rule a general test: package-major for facts about a package, feature-major for parameters of a feature that name packages. That settles the policy exemptions, which want a minimumReleaseAge section rather than a place in permissions. Also state that a grant is written before its action runs, and that a failing action fails the command without rolling it back. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a
Settles the open question: a pending grant appears in the shared section without failing the install, and strictDepBuilds stays specific to build scripts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a
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.
allowBuildsrecords which packages may run lifecycle scripts. It is the first of a family: a package can now also ship agent skills, and MCP servers are the obvious next case. Each new capability otherwise means another top-level setting with the same shape, the same lifecycle, its own approval command and its own line of install output.allowBuildsfolds in as thebuildcapability, reusing the legacy-clearing write that already handlesonlyBuiltDependencies.Scope rule:
permissionsholds capability grants, not content modifications. The general test, now that pnpm has two grouping shapes, is which question a setting answers. Package-major, like this field, for facts about a package: "what may esbuild do" is a question about esbuild. Feature-major, like theupdate:andaudit:sections, for parameters of a feature that happen to name packages: "why is@babel/*not being delayed" is a question about the release-age check. That also explains the key shapes — a permission is granted to a package identity somebody reviewed, so keys are exact, while a policy exemption covers a class of packages, so keys are globs.One pending set, one section, one command. A single install produces one list of packages awaiting approval, keyed by package rather than split per capability, and
pnpm permissions approve— aliased topnpm approve— resolves all of it.pnpm approve-buildsandpnpm ignored-buildsremain asbuild-filtered aliases, but as compatibility surface rather than a pattern new capabilities extend. This replaces theIgnored build scripts:wording, which describes the wrong thing for a skill;ERR_PNPM_IGNORED_BUILDSkeeps its code.Why now rather than later: if the skills capability ships as
allowSkillsfirst, a consolidation migrates two settings instead of one.Left open deliberately:
minimumReleaseAgeExcludeandtrustPolicyExcludeare deliberately not folded in — they fail the test above — but they have their own consolidation waiting: a feature-majorminimumReleaseAge: { minutes, exclude, excludePrune }, which also puts the prune flag next to what it prunes. Separate and smaller than this RFC.strictDepBuildsgeneralises. A skipped build script can break an install; an unapproved skill only means an agent does not receive it, so the same severity may not be warranted.Related: the agent skills RFC (pnpm/rfcs PR 35) depends on this and defines the
skillscapability.Written by an agent (Claude Code, claude-opus-5).
🤖 Generated with Claude Code
https://claude.ai/code/session_01Bm9EF4jd7FuyxUH7UkCZ3a