v0.2.1 — adopter-CI trust boundary fix
Security hardening of the reusable adopter CI plus honest-signal fixes, from two external reviews of v0.2.0. No adoption-schema changes; existing registers validate identically. See CHANGELOG.md for the full list.
Canonical pin for adopters: v0.2.1 @ 6de26c28573bd1d145dad75529debb8a89d0d5d2 (this tag's commit).
Security
- The reusable workflow no longer checks out the validator from a repository named in the pull-request-mutable adoption file: the validator always comes from the canonical upstream, the declared repository is validated as data, and the caller's
@reference must equalupstream.commit(now enforced). This closes a code-execution vector where a pull request could point CI at attacker-controlled validator code. permissions: contents: read,persist-credentials: false, full-SHA action pins, and a universal hash-pinned dependency lock in both workflows.- All pre-v0.2.1 releases carry the CI issue — re-pin before running the reusable workflow on a repository that accepts external pull requests (see SECURITY.md).
Upgrade actions when re-pinning
- Update
upstream.version,upstream.commit, and the caller workflow's@reference to the SHA above in the same change; the PR description needs anAssurance policy change: <why>line (the new policy regression check flags every pin move). - Required-check rename:
assurance / conformance→assurance / declared-stage. - Recommended caller
on:update:pull_requesttypes[opened, synchronize, reopened, edited, ready_for_review](docs/ADOPTION.md §3.4).
Also in this release
CONFORMANTenforces the mechanically checkable subset of PROFILE §17 (criticalOPENresiduals,CONTRADICTEDentries, evidence-freeVERIFIEDcriticals,RESTRICTED/EMBARGOEDmaterial).- Pull-request policy regression gate: stage downgrades, component removal/narrowing, and pin moves require explicit acknowledgment.
- Impact routing precision: rename-safe change detection; a component is satisfied only when the added lines of the assurance diff reference its invariant IDs (token-boundary matched); findings surface as annotations and a job-summary table.
- Lite envelope schema rejects unknown top-level keys and empty prose fields (
extensionsnamespace for local keys). - 42-case validator regression suite, run on a Python 3.10/3.12/3.13 matrix.