ci: gate this repository on its own protocol - #3
Merged
Conversation
SCPE specifies how a project learns who signed a contribution and what they declared about AI use. This repository did not ask either question about its own pull requests. Measured before writing this, against reference/disclosure.py: PR #2 — opened by an agent, body reading "PR created automatically by Jules" — returned {'present': False, 'form': 'none'}. True, human-readable, and invisible to every tool that has to decide. That is the gap the spec describes, in this repo. - .github/workflows/scpe.yml: the untrusted half, running this repo's own Action at level 1 with require=true. A pull request with no AI-use disclosure now fails a check. - .github/workflows/scpe-seal.yml: the trusted half that posts the verdict. Two files because a workflow cannot name itself in workflow_run. - .github/pull_request_template.md: the five-second path for a human. - AGENTS.md: the binding rule for automated contributors, with the trailer they must emit and the measurement that shows why prose does not count. Level 1, not 2, and the file says why: level 2 anchors a signature to a forge-published key, and no coding agent has one today. Gating there would ban agent contributions rather than raise the bar. The switch is one line when that changes. Caught while building it, by _local/test-gate-level1.py: an example `Assisted-by:` line inside an HTML comment in the template satisfied the gate for every PR that left the template untouched. The lint reads the raw body and does not skip comments. Fixed, and the reason is recorded in the template. Assisted-by: claude-code
|
Strix is installed on this repository, but we couldn't run this PR security review because this workspace's trial has ended. Add a card to resume code reviews here. So far, Strix has reviewed 15 pull requests and surfaced 1 security issue across this workspace. |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 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. Comment |
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.
What this changes
SCPE specifies how a project learns who signed a contribution and what they declared about AI use. This repository did not ask either question about its own pull requests. After this, it does — as a failing check, not a comment.
Measured before writing a line, with this repo's own
reference/disclosure.py, against PR #2 (opened by an agent, body reading "PR created automatically by Jules"):True, human-readable, and invisible to every tool that has to make a decision. That is the gap the spec describes — here, in this repo.
Files
.github/workflows/scpe.yml— the untrusted half, running this repo's own Action atlevel: 1withrequire: "true". Two files, not one: a workflow cannot name itself inworkflow_run..github/workflows/scpe-seal.yml— the trusted half that posts the verdict. Never checks out or runs contributor code..github/pull_request_template.md— the five-second path for a human.AGENTS.md— the binding rule for automated contributors, with the exact trailer and the measurement showing why prose does not count.Why level 1 and not level 2
Level 2 anchors a signature to a key the forge publishes for the signing account, and no coding agent has one today. Gating there would not raise the bar — it would ban agent contributions and make this repository quieter and less honest. Level 1 asks the one thing an agent can do and a human can do in five seconds, and it is enforced. The switch to level 2 is a single line, and everything it needs (
fetch-depth: 0, the two-job split, the artifact hand-off) is already in place.A bug caught while building this
An example
Assisted-by:line inside an HTML comment in the template satisfied the gate for every PR that left the template untouched — the lint reads the raw PR body and does not skip comments. Caught by a local check before this ever became a pull request; fixed, and the reason recorded in the template so the next editor does not reintroduce it.Note on this PR
It will not receive a seal:
workflow_runonly fires for a workflow file already present on the default branch. The first sealed PR is the next one. PR #2 is the natural first test — as it stands today, it would fail the gate.AI use
Written with Claude Code; every claim above was measured against this repository before being written. The commit carries
Assisted-by: claude-code.Checks