Reference
Contract-to-CI Governance
Project contract-owned verification into stable CI and merge-gate truth.
operateplatform teamsadvancedstable2026-07-31
Recommended next
Inspect, render, check, and sync
Provider-neutral projectionbash
ota ci projection --workflow verify --mode container --target-os linux --jsonGitHub adapterbash
ota ci github render --workflow verify --target-os linuxota ci github check --workflow verify --target-os linux --output .github/workflows/ota-governance.yml --caller .github/workflows/ci.ymlota ci github sync --workflow verify --target-os linux --output .github/workflows/ota-governance.yml --caller .github/workflows/ci.ymlDrift and merge-check identity
- projection identity is canonical and excludes provider YAML formatting and local file paths
- the provider adapter binds canonical projection identity, adapter version, generated content, and caller reference
- managed-file checks fail when contract-owned workflow content becomes stale or manually drifts
- required verification lanes have stable Ota-owned check identity instead of relying on brittle workflow display names
- provider execution re-evaluates observed input and claim evidence in its own checkout; render-time state is not execution proof
Refusal canaries belong in CI
A positive verification check proves one lane still runs. A refusal canary proves the safety gate still refuses a selected unsafe lane.
- declare the canary in the contract
- run it through the same agent boundary using
--expect-refusal - make the generated canary check merge-required when the organization needs the gate to be non-optional
- do not imitate refusal with a shell condition; that tests the workflow, not Ota's runner boundary
Boundaries
Read the design argument
Why contract-owned merge truth is stronger than maintaining two workflow authorities.
GitHub Action details
Install, workflow, drift-gate, and action-specific behavior.
- Ota does not replace GitHub Actions, GitLab CI, Bitbucket Pipelines, or another provider
- Ota does not own branch protection until the provider is configured to require the generated check
- projection does not prove the contract claim is correct; Contract-Claim Assurance remains a separate input
- bidirectional synchronization is intentionally rejected because it would create competing authority