Maintainer guide for shipping Open Verification Kernel. Current readiness: CURRENT_RELEASE_STATUS.md. Authoritative audit: DEEP_AUDIT_2026-07-23_R2.md. Engineering program: ENGINEERING_PROGRAM_2026-07-23_R2.md. Historical: VISION_AUDIT_2026-07-22.md.
Package version: 1.2.1.
Release judgment: release candidate. The five bounded evidence lanes, artifact chain, CLI, MCP surface, and composite Action are implemented. Backend routing remains advisory, external tagged-consumer validation remains pending, and the current source commit must pass all gates below before publication.
- Generic backend routing does not yet control lane compilation or execution.
- Authorization, infrastructure, workflow, and deployment diff extraction remains conservative and heuristic.
- OPA and Z3 have native semantic paths; CBMC checks explicit or template harnesses; Cedar and six other external adapters do not yet perform native policy/proof execution.
- The 100-template catalog is broader than the production-executable property set.
- Auto-collected branch-protection metadata cannot reconstruct a removed required check without trusted before/after data.
- FormalPR-Bench is an internal curated regression suite, not an independent accuracy estimate.
- Current external-validation workflows use in-repository dogfooding; independent tagged consumers are still required.
Run these gates on the exact non-[skip ci] source commit intended for release:
pip install -e '.[dev]'
pytest
ruff check ovk tests benchmarks scripts
python scripts/check_release_metadata.py
python scripts/validate_templates.py
python scripts/validate_capabilities.py
ovk release-preflight
ovk bench --expanded --leaderboard .verification/formal-pr-bench-leaderboard.json
ovk pilot
python scripts/external_smoke_checklist.pyRequired evidence:
- core CI job is green on the source SHA;
- package job builds and installs the wheel outside the checkout;
- automatic-diff Action dogfood is green;
- strict known-bad Action dogfood produces
blockand the expected nonzero result; - OPA, Z3, and CBMC native-execution checks are green;
- Cedar toolchain probe and deterministic-evidence honesty checks are green;
- full expanded benchmark and preflight artifacts are retained;
- complete release-bundle validation is green;
- current source SHA and workflow links are recorded in
CURRENT_RELEASE_STATUS.md.
The Publish workflow rejects a GitHub release whose tag does not equal ovk.__version__ after removing an optional leading v.
Before tagging:
-
pyproject.toml,ovk.__version__, andovk/core/release_metadata.pyagree; -
SUPPORTED_COMMANDSmatches the Typer command surface; - consumer examples reference the intended immutable release tag or commit;
- release notes describe actual backend execution semantics from BACKENDS.md;
- package classifier remains Beta until the production gate in the vision audit is met;
- benchmark and adoption summaries are regenerated from the release source.
Tag and create the release only after the source gates are attributable:
git tag -s v1.2.1 <VERIFIED_SOURCE_SHA>
git push origin v1.2.1
gh release create v1.2.1 \
--verify-tag \
--title "OVK v1.2.1" \
--notes-file docs/RELEASE_NOTES_v1.2.1.mdNote: v1.2.0 already exists as an immutable tag on an earlier commit without the protected Publish Sigstore path. Do not move that tag.
The release-triggered Publish workflow (.github/workflows/publish.yml):
- verifies release-tag/package-version equality;
- synchronizes package data;
- runs tests, preflight, pilots, and the expanded benchmark;
- builds and checks the sdist and wheel;
- installs the wheel in an isolated environment outside the checkout;
- validates packaged templates, capabilities, MCP discovery, and
ovk doctor; - keyless-signs distributions with cosign in the protected
sigstoreenvironment (id-token: write); - verifies signatures in the same workflow against the exact identity + OIDC issuer, runs a tamper test, and retains cosign bundles;
- publishes to PyPI only after the protected
pypienvironment permits it (skipped onworkflow_dispatchdry-run).
PyPI configuration:
- prefer trusted publishing with an environment-bound OIDC policy;
- otherwise configure
PYPI_API_TOKENin the protectedpypienvironment; - require maintainer review for the environment;
- retain the built distributions and verification artifacts.
After this workflow is on main:
gh workflow run Publish.yml --ref main -f dry_run=true
gh run watchworkflow_dispatch never publishes to PyPI and skips the full release-gate suite so keyless signing can be exercised while unrelated CI failures exist on main. It still builds the sdist/wheel, signs with cosign, verifies, tampers, and retains bundles. Dry-run signatures are bound to @refs/heads/main (or the dispatched branch). They are not a production pin. Production consumers must verify against an immutable tag identity (below). Full release events still run the complete verify suite before signing and PyPI publish.
Set OVK_SIGNING_KEY only in a controlled internal environment. Any consumer verifying the HMAC must possess the same secret. A signed envelope fails verification when the key is unavailable or different.
Explicit Sigstore signing fails closed. The protected Publish sigstore job has id-token: write and signs with cosign sign-blob (no long-lived keys in git or secrets).
Exact OIDC issuer (GitHub Actions):
https://token.actions.githubusercontent.com
Exact workflow identity (production / immutable tag):
https://github.com/fraware/open-verification-kernel/.github/workflows/publish.yml@refs/tags/vX.Y.Z
Example for v1.2.1:
export OVK_SIGSTORE_SIGNING=1
export OVK_COSIGN_IDENTITY='https://github.com/fraware/open-verification-kernel/.github/workflows/publish.yml@refs/tags/v1.2.1'
export OVK_COSIGN_ISSUER='https://token.actions.githubusercontent.com'Consumer verification of a retained bundle:
cosign verify-blob \
--bundle path/to/artifact.cosign.bundle.json \
--certificate-identity "https://github.com/fraware/open-verification-kernel/.github/workflows/publish.yml@refs/tags/v1.2.1" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
path/to/artifact.whlPolicy:
- Trust only the Publish workflow path above; do not accept arbitrary workflows in this repository.
- Trust only immutable
refs/tags/v*identities for production artifacts. - The
sigstoreGitHub Environment should require maintainer reviewers (same class of protection aspypi). - Cosign bundles and
ovk-sigstore-summary.jsonare retained as workflow artifacts (90 days) and attached to the GitHub Release onreleaseevents. - Same-workflow steps: sign → verify with exact identity/issuer → mutate a copy and expect verify failure (
scripts/sigstore_release.py).
Required signing evidence:
- unsigned bundle validates;
- HMAC-signed bundle validates with the correct key and fails with the wrong or missing key;
- Sigstore-signed bundle validates with the trusted identity and issuer on a protected
workflow_dispatchdry-run (run 30008891551; identity@refs/heads/main, environmentsigstorewith required reviewers, retainedovk-sigstore-bundles); - tampered evidence, manifest, statement, and envelope each fail validation (unit / release verifier); same-workflow artifact tamper test exercised in the dry-run above;
- signature and transparency artifacts retained as workflow artifacts on the dry-run above;
- Immutable-tag protected release E2E: GitHub Release
v1.2.1(release; Publish run 30010876652) —verifygreen, keyless cosign with--require-immutable-tag, identity.../publish.yml@refs/tags/v1.2.1, issuerhttps://token.actions.githubusercontent.com, cosign bundles attached to the Release. Production consumers must pin that tag identity (not@refs/heads/main).
Independent tagged consumers for v1.2.1 (Action + cosign-verified Release wheel):
| Consumer | URL |
|---|---|
| FastAPI + Terraform | https://github.com/fraware/ovk-consumer-fastapi-terraform |
| Express + GitHub Actions | https://github.com/fraware/ovk-consumer-express-actions |
Checklist and ledger schema: CONSUMER_VALIDATION_CHECKLIST.md, schemas/pilot.ledger.schema.json. Optional OVK workflow: .github/workflows/consumer-pin-verification.yml (workflow_dispatch).
Before describing the release as production-stable:
- create separate fixture repositories (two independent consumers above);
- invoke
fraware/open-verification-kernel@v1.2.1, neveruses: ./; - automate advisory allow/block, strict block, malformed abstraction, comment/check-run contracts, release bundle, wheel install, cache reuse, policy change, backend unavailable, native timeout, and generated regression artifacts;
- document fork-PR reduced permissions with a dry simulation (
pull_request, notpull_request_target); - install the Release wheel independently with cosign verify-blob (PyPI still optional until published);
- complete a true cross-fork PR adjudication in each consumer ledger;
- complete 30 human-adjudicated PRs per independent consumer (automated_scenario seeds do not count);
- complete additional adjudicated advisory pilots according to EXTERNAL_PILOT_PLAYBOOK.md.
name: OVK
on:
pull_request:
permissions:
contents: read
checks: write
pull-requests: write
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- uses: fraware/open-verification-kernel@v1.2.1
with:
mode: advisory
use-check: "true"
emit-check: "true"
post-comment: "true"When changed-files is omitted, the Action materializes the pull-request diff automatically. Start advisory, adjudicate results, then enable strict mode only for calibrated lanes with trusted inputs.
| Version | Changelog |
|---|---|
| v1.2.1 | RELEASE_NOTES_v1.2.1.md |
| v1.2.0 | RELEASE_NOTES_v1.2.0.md |
| v1.1.0 | RELEASE_NOTES_v1.1.0.md |
| v1.0.0 | RELEASE_NOTES_v1.0.0.md |
Upgrade paths: MIGRATION.md.