Add an optional branch_evidence field to posture-claims
Standard
posture-claims
Change type
- Add new standard
- Modify existing standard (prose only)
- Modify existing standard's check.sh (add, remove, or change an assertion)
- Modify existing standard's templates
- Status transition: introduced -> enforcing
- Status transition: enforcing -> archived
- Retire / archive
What does this MR do and why?
I want a claim to name what a branch pipeline checks, because a branch pipeline builds no release and a release-file claim fails there every time.
- A claim may carry
branch_evidence:, shaped likeevidence:, which the verifier reads when$CI_COMMIT_TAGis unset. - A claim without it reports
SKIP. Checkingevidence:there fails predictably, and an advisory job that always warns gets ignored. - GitLab sets expiry per job, so the template splits into a tag job keeping its report forever, for the release link, and a branch job, on merge requests and default-branch pushes, keeping it a week.
- The script keys on
$CI_COMMIT_TAG. Keyed on$CI_COMMIT_BRANCH, which a merge request pipeline leaves unset, it would readevidence:there. - The template installs
gettext-envsubst, without which every evidence URL expanded to an empty string.
flowchart LR
A["claim"] --> B{"CI_COMMIT_TAG set?"}
B -->|yes| C["EVIDENCE_URL from evidence:"]
B -->|no| D{"branch_evidence: present?"}
D -->|no| S["SKIP"]
D -->|yes| E["EVIDENCE_URL from branch_evidence:"]
C --> V["run verify:, PASS or FAIL"]
E --> VFailure mode this addresses
periscope's branch job passes all four claims on main with this field. Its earlier single job kept every report forever.
Assertion deltas
None. check.sh asserts the four keys and ignores any other.
Consumer impact
periscope still passes just check-one STANDARD=posture-claims. One private project has a claims file but no verifier job.
Status transition
None.
Test plan
-
just guardpasses (assertions use only closed primitives) -
just check-one STANDARD=<name>passes against this repo - Ran check.sh against at least one consumer repo of each applicable shape (binary-shipping, lab); results match expectations
- CHANGELOG updated
just ship reports 21 standard(s) passed, 0 exempt, 0 failed. CI lint accepts the template once stages: lists verify. A since-deleted GitLab.com project ran it in branch and tag pipelines: URLs expanded, the branch run wrote SKIP, and reports expire in a week and never.
Reviewer checklist
- SKILL.md frontmatter is valid YAML (name, description, status, [enforced_since])
- check.sh sources
../../_lib.shcorrectly - check.sh calls
reportat the end - Templates/ directory present where applicable
- Standard appears in README's contracts table
- Standard appears in the rendered site's
/standards/index
An AI tool wrote this change and ran the checks above.