Skip to content

feat(scanner): reject plugin checksum files without a sibling signature - #1175

Draft
seonghobae wants to merge 13 commits into
feat/claude-plugin-hosted-deploy-1099from
feat/claude-plugin-unsigned-checksum-1099
Draft

feat(scanner): reject plugin checksum files without a sibling signature#1175
seonghobae wants to merge 13 commits into
feat/claude-plugin-hosted-deploy-1099from
feat/claude-plugin-unsigned-checksum-1099

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Successor of #1174 / issue #1099. Does not Close those. Checksum mismatch stays #1169. Hosted deploy stays #1174. Pass is not Noema admission.

Unique delta

Fail closed when a first-party checksum file lists digest rows but has no sibling signature artifact (claude-plugin-unsigned-checksum, CWE-347):

  • matching SHA256SUMS / *.sha256 without .sig, .asc, .gpg, .bundle, or cosign.bundle fails admission
  • a non-empty sibling signature file is not this class
  • a zero-byte .sig or a symlink .sig is not a signature
  • missing checksum files and comment-only checksum files stay not-this-class
  • digest mismatch stays claude-plugin-checksum-mismatch and can fire with this class
  • Cosign/GPG network verification is not performed; snippets are checksum filenames

#1169 remains owner of digest disagreement.

Evidence

  • RED 5a7abb3 then GREEN eb2389e

  • tests/test_claude_plugin_unsigned_checksum.py plus sibling mismatch lock

  • predecessor checksum plugin coverage suite 416 passed on Python 3.13

  • no hosted workflow is created on this stacked custom base; keep Draft until stacked integration evidence is available

  • Normal two-parent descendant aa5128fb115668ce8abf869dd1d711e72fe09baa integrates feat(scanner): fail closed on plugin terraform apply and helm install #1173 command-context RED/GREEN without force-push; compare to current parent d8f5f76400f9... is 4 ahead / 0 behind and preserves this PR's unique delta.

  • Candidate source AST passes; the final stacked detector preserves 3/3 negative command-context and 2/2 later-real-command probes. Custom-base hosted workflow evidence remains absent, so Draft stays required.

Relates to #1099. Relates to #1174.

Current quoted-command context repair

This descendant inherits #1173 RED d7384e53d44a426356a73e24b2b9cc3fe153de27 and final canonical repair 3a5b14771cc7abb6553fa1ec9bcd8b62acc947ac without copying a leaf workaround. Exact head: 77f7ffa03cc97670ae66e329b6b811e6264867a4; current parent: 2967d093985f96dd0830cd600b86f7f07c7235df; 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: 29011cca6f465dbd988465c6ff67fe7caa18223b; current parent: 8b1965da8972a627d40fb7b1866b6828007a4a13; 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 c069e93ed7ca0b82fd19179a6b68f671c3d0be20; exact head is bb9cd1dd6af007f2b1e85978974150480da3fad6. GitHub compare reports behind_by=0, ahead_by=13; 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 first-party checksum digest rows without a sibling Cosign or
GPG signature file. Keep missing checksums, comment-only files,
and non-empty .sig/.asc/cosign.bundle on their existing classes.
Relates to #1099.
Fail closed when a first-party checksum lists digests but has no
non-empty sibling .sig, .asc, .gpg, .bundle, or cosign.bundle as
claude-plugin-unsigned-checksum. Network Cosign/GPG verify is not
performed. Mismatch stays its own class. 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 03:09 UTC records Draft #1175 `eb2389e` stacked on #1174.
- Checksum digest rows without a sibling signature fail closed.
- Remaining leftover: deep directory recursion.

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

Tests:
- documentation-only; detector evidence lives on #1175 (416 passed)
seonghobae added a commit that referenced this pull request Sep 8, 2026
Exact head 815e55d stacked on #1175 fails closed on plugin trees and
archives nested past 32 path components. Relates to #1099.
…ssor

Preserve #1175 checksum/signature delta while integrating #1174 RED e257d90 and GREEN 746501e through a normal two-parent merge. No force update.
seonghobae added a commit that referenced this pull request Sep 8, 2026
Preserve #1176 path-depth delta while merging current #1175, including #1174 manifest-command precision. Normal two-parent merge; no force update.
@seonghobae seonghobae added enhancement New feature or request priority: high type: feature New or expanded product capability labels Sep 8, 2026 — with ChatGPT Codex Connector
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