docs(exemptions): add Layer 5 census scope for the 23 vendored workflow copies - #1039
Merged
Merged
Conversation
An estate census walks paths, not runtimes. Repositories that vendor a
complete project skeleton into a subdirectory — a stub, a satellite, a
scaffolding template — carry that skeleton's .github/workflows/*.yml as
ordinary files, and every path-based census finds them. GitHub Actions
dispatches a workflow only from .github/workflows/ at the repository
ROOT, so these copies are never registered and never run.
Measured 2026-09-23: 23 vendored copies across 5 repositories, each
carrying a github/codeql-action pin that the standards#1005 re-pin
census flagged. Of the 23 paths, 0 are at a repository root and 23 sit
under a directory prefix. A stale pin in one cannot produce a
startup_failure, cannot pull a vulnerable action, and cannot consume a
runner; repairing them is churn against files that cannot execute.
ssg-collection 10 stubs/{8}, ssg-fixes/jtv-playground, variants/befunge
polystack 8 poly-ssg/satellites/{8}-ssg
wordpress-tools 3 journal-theme (2), resurrect
jtv-lang 1 playground
reposystem 1 total-upgrade
The exemption is conditional on the directory staying vendored, and the
re-check trigger is PROMOTION, not a date. stubs/ and satellites/ exist
so a skeleton can become a repository of its own; the moment one is
extracted, its workflows become live and every excused pin becomes a
real defect, silently, with no gate firing. Any PR extracting a skeleton
must re-pin it as part of the extraction.
Retracts one rationale rather than carrying it forward: the earlier
statement of this exemption claimed some copies are "compared
byte-for-byte by tests". That is false — ssg-collection/tests contains
only fuzz/ — so it is recorded as withdrawn. The exemption rests on
non-execution alone.
Also corrects the preamble, which said "Three concentric exemption
layers" while Layer 4 already existed; adding Layer 5 would have made
the miscount worse.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
Contributor
|
Warning Review limit reachedNext included review available in 15 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (1)
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
Adds Layer 5: Census scope to
docs/EXEMPTION-MECHANISMS.adoc, documenting the 23vendored workflow copies that the standards#1005 codeql-action re-pin census surfaced, and
records the basis on which they are out of scope.
Also corrects the preamble, which said "Three concentric exemption layers" while Layer 4
already existed. Adding Layer 5 would have made that miscount worse, so it is fixed here
rather than left.
Why this is a different kind of exemption
Layers 1–4 all answer "this finding is real, and we are choosing not to act on it."
Layer 5 answers "is this file in scope at all?" — a question the existing document had no
home for, which is why the population had no recorded disposition.
An estate census walks paths, not runtimes. GitHub Actions dispatches a workflow only from
.github/workflows/at the repository root. A file atstubs/cpt/.github/workflows/scorecard.ymlis an ordinary file in the tree: neverregistered, never dispatched.
The population, measured 2026-09-23
23 copies across 5 repositories. 0 at a repository root; 23 under a directory prefix.
ssg-collectionstubs/{cpt,dei,reliquary,tiamat,tripos,tyrano,ultimatum,vladik}/,ssg-fixes/jtv-playground/,variants/befunge/polystackpoly-ssg/satellites/{…}-ssg/wordpress-toolsjournal-theme/(2),resurrect/jtv-langplayground/reposystemtotal-upgrade/A stale pin in one of these cannot produce a
startup_failure, cannot pull a vulnerableaction, and cannot consume a runner. Re-pinning them is churn against files that cannot run.
The condition, which is the part worth reviewing
The exemption is conditional on the directory staying vendored, and the re-check trigger is
promotion, not a date.
stubs/andsatellites/exist precisely so a skeleton can become arepository of its own. The moment one is extracted, its
.github/workflows/becomes live andevery pin this exemption excused becomes a real defect — silently, with no gate firing and no
census entry changing. The section states that any PR extracting a skeleton must re-pin it as
part of the extraction.
A rationale I am retracting rather than carrying forward
The earlier statement of this exemption also claimed that some copies are "compared
byte-for-byte by tests", implying a second independent justification. That is false.
ssg-collection/testscontains onlyfuzz/; no such comparison exists anywhere in the estate.It is recorded in the document as withdrawn, because the difference matters to whoever
revisits this: the exemption is narrow and rests on non-execution alone, not doubly justified.
What the section explicitly refuses
why", never "0 found". An exemption you cannot see is one you cannot audit.
still registered, or one edit from it, and stays in scope. The discriminator is the path.
Acceptance criteria
asciidoctorrenders clean (rc=0, no warnings); both table blocks balanced.Follow-up, deliberately not in this PR: the document still references
bot_exclusion_registry.a2mlandDebtfile.a2ml, and A2ML is retired. That is anestate-wide rename tracked separately; doing it here would bury a 23-path scope decision
inside a doctrine migration.
🤖 Generated with Claude Code
https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm