|
| 1 | +# Exact-revision evidence lifecycle |
| 2 | + |
| 3 | +This is the authoritative operational contract for process evidence. Evidence |
| 4 | +JSON is data, never proof of its own producer. Canonical policy defines required |
| 5 | +predicates and producer classes; a platform adapter verifies transport identity |
| 6 | +and supplies a separate trust index. |
| 7 | + |
| 8 | +## Sequence and storage |
| 9 | + |
| 10 | +```text |
| 11 | +push H -> trusted diff(base,H) -> classification(H, process P) |
| 12 | + -> CI/authenticated verdicts(H,P,repository) -> immutable artifact store |
| 13 | + -> readiness joins artifacts + verified provenance -> merge status |
| 14 | + -> merge creates M (H is stale) -> deployment-release(M,P) in release store |
| 15 | +``` |
| 16 | + |
| 17 | +The manifest, lock, and policy are source controlled. Pre-merge classification, |
| 18 | +test, specialist, review, approval, and readiness evidence are not committed: |
| 19 | +GitHub stores them as immutable workflow artifacts or attestations keyed by |
| 20 | +repository, head SHA, process revision, workflow run and attempt. Equivalent |
| 21 | +platforms may use an external store with the same keys. Deployment evidence is |
| 22 | +post-merge evidence and is retained separately from the readiness join. |
| 23 | + |
| 24 | +`readiness` reads predicates from downloaded artifacts. Authenticated/trusted |
| 25 | +status comes only from a verified transport index outside the checkout. It maps |
| 26 | +each evidence content digest to repository, target revision, capability, |
| 27 | +producer class, and platform identity. GitHub records also carry workflow, |
| 28 | +run/attempt, and job identity. Repository-authored producer fields cannot elevate |
| 29 | +evidence. |
| 30 | + |
| 31 | +## Ordering, invalidation, and recovery |
| 32 | + |
| 33 | +1. Resolve immutable base/head commits and classify their complete Git diff. |
| 34 | +2. Publish classification before dependent jobs; every producer uses that exact |
| 35 | + head and locked process revision. |
| 36 | +3. Collect all predicates and provenance, then run the readiness join. |
| 37 | +4. Any new head is a different key and immediately invalidates prior readiness. |
| 38 | + Merge and post-merge release commits require their own evidence. |
| 39 | + |
| 40 | +A rerun creates a new immutable attempt. Any failing or conflicting verdict in a |
| 41 | +selected collection fails the join; success does not erase failure. Resolve a |
| 42 | +contradiction with a clean run and an explicitly selected, auditable attempt. A |
| 43 | +missing, expired, malformed, inaccessible, or unverifiable artifact fails closed: |
| 44 | +restore/fetch it or rerun; never copy evidence to a new SHA. Retention follows |
| 45 | +the platform policy and for Protected work should cover merge plus the audit |
| 46 | +period. Expired evidence requires rerun. |
| 47 | + |
| 48 | +Fork runs may create asserted diagnostics, but receive neither secrets nor trusted |
| 49 | +status. Protected readiness runs in the base repository after authorization, |
| 50 | +against the fork head SHA, with read-only source permissions. Human and agent |
| 51 | +verdicts enter through authenticated reviews, protected workflow dispatch, or an |
| 52 | +external service preserving actor/event audit identity; committed JSON remains |
| 53 | +an assertion. |
| 54 | + |
| 55 | +## Threat model |
| 56 | + |
| 57 | +- Contributors can create, replace, and replay repository JSON, but cannot create |
| 58 | + authenticated/trusted provenance that way. |
| 59 | +- Workflow authors can alter repository workflows. Protected trusted CI is |
| 60 | + restricted to approved workflow identities/refs and environment or ruleset; |
| 61 | + workflow changes themselves classify Protected. |
| 62 | +- Platform administrators are inside the platform trust boundary. Audit logs and |
| 63 | + artifact attestations reduce replacement risk. |
| 64 | +- Compromised credentials may impersonate their holder. Adapters require least |
| 65 | + privilege, OIDC issuer/audience checks, and short-lived credentials. |
| 66 | +- Repository, exact SHA, process revision, content digest and run identity prevent |
| 67 | + replay. Wrong repository/workflow/job and unauthorized capability fail. |
| 68 | + |
| 69 | +Lean v1 evidence remains proportionate and may be `asserted` where policy allows. |
| 70 | +Standard and Protected progressively require authenticated/trusted provenance per |
| 71 | +`policy/evidence/producer-authorization.yaml`. No self-declared v1 field is ever |
| 72 | +upgraded to trusted status. |
| 73 | + |
| 74 | +## Process upgrades and bootstrap trust |
| 75 | + |
| 76 | +The executable revision changes only through `engineering-process upgrade`, which |
| 77 | +updates the manifest, lock, generated workflow and snapshot together. Generated |
| 78 | +and reusable workflows install the exact 40-character lock SHA and pass it back |
| 79 | +to validation. Missing, floating, unavailable, or mismatched revisions fail. |
| 80 | +The initial checkout, Git host, and action runner are bootstrap trust assumptions. |
0 commit comments