Two related facts, both verified today.
main is unprotected
gh api repos/ChelseaKR/perimeter/rulesets returns an empty list.
gh api repos/ChelseaKR/perimeter/branches/main returns "protected": false.
gh api repos/ChelseaKR/perimeter/branches/main/protection returns 404,
"Branch not protected".
So main can be force-pushed, deleted, or pushed to directly with red CI. The
verify, secret-scan and sast jobs run and report; none of them blocks
anything.
.github/workflows/ci.yml opens with:
Least-privilege GITHUB_TOKEN, SHA-pinned actions, and the merge-blocking gates:
SAST, secret scan, and make verify ...
That sentence is not true of this repository. A reader who opens the workflow to
check the posture is told the opposite of what the server enforces, which is worse
than saying nothing.
Controls: CICD-13 (AUTO, required status checks: format, lint, type, test,
security + zizmor + codeql-actions), CICD-16 (AUTO, force-push to main blocked
via non_fast_forward), CICD-11 (AUTO, Scorecard Branch-Protection >= 8/10).
ledger's protect-main is the working reference in this portfolio.
Two gates named by CICD-13 have no implementation here at all: there is no zizmor
job and no CodeQL workflow, in a repo whose CI runs Node and Python and publishes
to GitHub Pages from a second workflow.
The repo was never onboarded
The portfolio conformance checker's FIX-02 discovery gate reports perimeter as
existing in the portfolio and not registered in its applicability manifest. Nothing
has ever decided which standards bind this repo, which is why the gaps below are
unrecorded rather than tracked:
| Control |
Gate |
Status here |
| FIX-02 |
AUTO |
No applicability-manifest entry |
| DOC-11 |
AUTO |
_readme_conformance_table reports "no 'Standards Conformance' section in README" |
| DOC-04 |
AUTO |
docs/adr/ exists and is empty; no 0000-record-architecture-decisions.md, no MADR template |
| DOC-01 |
AUTO |
No .standards-version and no pinned standards reference |
CITATION.cff, SECURITY.md, CONTRIBUTING.md, CHANGELOG.md and
.github/dependabot.yml are all present, so this is the last mile rather than the
first.
The docs/adr/ case deserves a note of its own: several genuinely
architectural decisions are already written up as prose in README.md and
docs/MARKERS.md (the three-state cell model, treating an out-of-domain value as
outside_published_domain rather than an error, the published-versus-inferred
marker split). An empty ADR directory beside that much recorded reasoning is a
filing problem, not a thinking one.
Done looks like
- A
protect-main ruleset requiring verify, secret-scan and sast by their
job names, plus non_fast_forward and deletion.
- zizmor and CodeQL (
language: actions) added and required, or each recorded as
a waiver with an owner and an expiry.
- An applicability-manifest entry created, via the standards program's
repo-registration script.
- A fifteen-row Standards Conformance table in
README.md and an ADR log with
0000 plus the decisions the README already argues for.
- The ci.yml header comment describes what is actually enforced.
Two related facts, both verified today.
mainis unprotectedgh api repos/ChelseaKR/perimeter/rulesetsreturns an empty list.gh api repos/ChelseaKR/perimeter/branches/mainreturns"protected": false.gh api repos/ChelseaKR/perimeter/branches/main/protectionreturns 404,"Branch not protected".
So
maincan be force-pushed, deleted, or pushed to directly with red CI. Theverify,secret-scanandsastjobs run and report; none of them blocksanything.
.github/workflows/ci.ymlopens with:That sentence is not true of this repository. A reader who opens the workflow to
check the posture is told the opposite of what the server enforces, which is worse
than saying nothing.
Controls: CICD-13 (AUTO, required status checks: format, lint, type, test,
security + zizmor + codeql-actions), CICD-16 (AUTO, force-push to
mainblockedvia
non_fast_forward), CICD-11 (AUTO, Scorecard Branch-Protection >= 8/10).ledger'sprotect-mainis the working reference in this portfolio.Two gates named by CICD-13 have no implementation here at all: there is no zizmor
job and no CodeQL workflow, in a repo whose CI runs Node and Python and publishes
to GitHub Pages from a second workflow.
The repo was never onboarded
The portfolio conformance checker's FIX-02 discovery gate reports
perimeterasexisting in the portfolio and not registered in its applicability manifest. Nothing
has ever decided which standards bind this repo, which is why the gaps below are
unrecorded rather than tracked:
_readme_conformance_tablereports "no 'Standards Conformance' section in README"docs/adr/exists and is empty; no0000-record-architecture-decisions.md, no MADR template.standards-versionand no pinned standards referenceCITATION.cff,SECURITY.md,CONTRIBUTING.md,CHANGELOG.mdand.github/dependabot.ymlare all present, so this is the last mile rather than thefirst.
The
docs/adr/case deserves a note of its own: several genuinelyarchitectural decisions are already written up as prose in
README.mdanddocs/MARKERS.md(the three-state cell model, treating an out-of-domain value asoutside_published_domainrather than an error, the published-versus-inferredmarker split). An empty ADR directory beside that much recorded reasoning is a
filing problem, not a thinking one.
Done looks like
protect-mainruleset requiringverify,secret-scanandsastby theirjob names, plus
non_fast_forwardanddeletion.language: actions) added and required, or each recorded asa waiver with an owner and an expiry.
repo-registration script.
README.mdand an ADR log with0000 plus the decisions the README already argues for.