Skip to content

feat(scanner): reject plugin npm twine and cargo publish - #1180

Draft
seonghobae wants to merge 14 commits into
feat/claude-plugin-object-store-1099from
feat/claude-plugin-registry-publish-1099
Draft

feat(scanner): reject plugin npm twine and cargo publish#1180
seonghobae wants to merge 14 commits into
feat/claude-plugin-object-store-1099from
feat/claude-plugin-registry-publish-1099

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Successor of #1179 / issue #1099. Does not Close those. Object-store s3/containerapp stay #1179. Cloud deploy stays #1177. Pass is not Noema admission.

Unique delta

Fail closed when a plugin hook or manifest runs remaining registry publish writes that #1179 left as inventory:

  • npm publish as claude-plugin-npm-publish-command (CWE-269)
  • twine upload (including python -m twine upload) as claude-plugin-pypi-upload-command (CWE-250)
  • cargo publish as claude-plugin-cargo-publish-command (CWE-269)
  • npm pack, cargo check, and pip install stay inventory
  • unquoted # comments, echo/printf lookalikes, and marketplace description prose are not this class
  • README npm wording is not a hook command
  • aws s3 sync stays claude-plugin-aws-s3-write-command
  • snippets are command labels, not tokens or secrets

#1179 remains owner of s3 writes and containerapp up.

Evidence

  • Original RED 3253383 then GREEN ffcb8ef.
  • Normal two-parent descendant af45351edc214136780b66ed3a96ad15acca036c integrates current feat(scanner): reject plugin s3 writes and containerapp up #1179 3073ffdb..., including S3 direction RED/GREEN and the download-before-later-upload regression, without changing this PR's five-file registry-publish delta.
  • Compare to current feat(scanner): reject plugin s3 writes and containerapp up #1179 is 5 ahead / 0 behind. Exact candidate AST passes; S3 direction probes 3/3 and npm/twine/cargo detector identities 3/3 pass.
  • No hosted workflow is created on this custom stacked base; keep Draft pending stacked integration evidence.

Relates to #1099. Relates to #1179.

Current quoted-command context repair

This descendant inherits #1173 RED d7384e53d44a426356a73e24b2b9cc3fe153de27 and final canonical repair 3a5b14771cc7abb6553fa1ec9bcd8b62acc947ac without copying a leaf workaround. Exact head: e835a8fc4e050bb6f960ed04686717b5773bc63f; current parent: f8372ece60fdf2db61a0fbd733414083ea09d3f1; Git compare is 0 behind and preserves this PR's unique detector/test delta. The top #1183 source AST and extracted helper probes pass quoted/reporting negatives while preserving direct and command-substitution positives. This custom-base PR stays Draft until its own hosted integration and independent review are terminal.

Current assignment-value context repair — 2026-09-08

This normal two-parent descendant inherits canonical #1173 RED 90ae232e852b3d01463d978f9bccd9157c341fe7 and GREEN 1e6a3eb43a5bc2d146656af13e7fa6cad2a77315 without a leaf workaround. Exact head: 167a0ba7cc538bb2d3d56679ddc7d24fc71ef32d; current parent: 10c0a34a14200f6013bd904e5bf205487e4b80e8; Git compare is 0 behind and preserves this PR's unique detector/test delta. Assignment-value negatives and environment-prefix/direct/substitution positives are present in the exact tree. This custom-base PR remains Draft until its own hosted integration and independent current-head review are terminal. Earlier head strings in this body are historical evidence only.

Current heredoc-safe restack — 2026-09-08

Canonical #1173 exact head 184b4b4f55906284ac1d8059e46cec8f0d9cfc9a fixes closed literal here-document payload false positives with RED 6f6be77d... → GREEN 12faf2f.... This branch was integrated non-destructively on parent 730d42926d383c59e9f01a12df625b32c3824285; exact head is ecc7a1c883cd06d80a9431b35aa152282c7a5f9e. GitHub compare reports behind_by=0, ahead_by=14; the PR's unique detector delta remains in the tree. Exact-head hosted integration and independent review are not terminal, so this PR remains Draft. Earlier head strings are historical evidence only.

Lock executable npm publish, twine upload, and cargo publish.
Keep npm pack, cargo check, comments, echo lookalikes, and s3
writes on their existing classes. Relates to #1099.
Fail closed on executable npm publish as
claude-plugin-npm-publish-command, twine upload as
claude-plugin-pypi-upload-command, and cargo publish as
claude-plugin-cargo-publish-command. Reads, comments, and echo
lookalikes stay inventory. Relates to #1099.
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

seonghobae added a commit that referenced this pull request Sep 8, 2026
Summary:
- Snapshot 2026-09-08 05:11 UTC records Draft #1180 `ffcb8ef` stacked on #1179.
- Executable npm publish, twine upload, and cargo publish fail closed.
- Remaining leftover: pnpm/yarn/uv/poetry publish.

Rationale:
- #999 is the single writer of the product-technical gap baseline.
- Do not Close #1099 or #1179.

Tests:
- documentation-only; detector evidence lives on #1180 (465 passed)
@seonghobae seonghobae added the type: feature New or expanded product capability label Sep 8, 2026 — with ChatGPT Codex Connector
seonghobae added a commit that referenced this pull request Sep 8, 2026
Exact head e933579 stacked on #1180 fails closed on pnpm, uv, and
poetry publish. yarn npm publish stays npm. Relates to #1099.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: high type: feature New or expanded product capability

Projects

Status: Backlog

Development

Successfully merging this pull request may close these issues.

1 participant