Release and dependency policy
OptiFlow is an organization trust-policy class R2 command-line application.
Its current adoption state is piloting: repository checks and the immutable
release path are enforced by their workflows. The public v0.1.1 release is
complete; promotion to conformant still waits for organization ruleset
evidence.
| Adoption field | Value |
|---|---|
| Repository | egohygiene/optiflow |
| Class | R2 versioned distributable software |
| Accountable owner | szmyty |
| Organization policy | egohygiene/.github trust policy at b415c8029bf2fb5d474f367e7129791588ba3860 |
| Relay profile | binary from Relay v1.5.0, pinned to 1eada5142f7fc7da7862f335589e3b8f5884ffaf |
| Effective state | piloting from 2026-09-12 |
| Latest public release | v0.1.1 from b82599a2231e997d42fd9f26f4b59587f4ae14cf |
| Bot exemptions | Dependabot-authored lockfile and immutable action-pin updates; review and checks remain required |
| Active exceptions | None |
The organization policy defines the trust outcome. OptiFlow owns its binaries, SBOM, provenance, signing identity, support boundary, and release decision. Relay validates and publishes the reviewed bundle without inheriting that authority.
Dependency admission
Every new direct dependency or feature expansion must be justified in its pull request. Reviewers evaluate:
- whether the capability belongs in OptiFlow and can be implemented safely without another runtime dependency;
- maintenance activity, security history, publisher identity, and the size of the resolved transitive graph;
- license compatibility with MIT distribution;
- default features, native build code, unsafe code, network behavior, and platform impact; and
- reproducibility under the minimum supported Rust version and
--locked.
Released builds use crates.io dependencies resolved by committed lockfiles. Mutable Git branches and undeclared registries are forbidden. Path dependencies are permitted only for components released from this repository and must not cross into a sibling checkout. Default features should be disabled when they introduce unused capability or hidden network behavior.
deny.toml is the machine-enforced admission policy. It denies yanked crates,
unknown registries, unknown Git sources, wildcard requirements, and licenses
outside the reviewed allowlist. A policy exception must be narrow, identify the
crate and requirement, link evidence, name an owner, and include an expiry date.
There are currently no exceptions.
Updates and vulnerability response
Dependabot proposes Cargo and GitHub Actions updates weekly. Patch and minor updates may be grouped but still require the full pull-request checks. Major updates receive an explicit compatibility review. Lockfile-only changes are reviewed as executable supply-chain changes, not treated as generated noise.
An advisory affecting a reachable runtime path blocks a release. The preferred response is an updated or removed dependency. If no fixed version exists, the release remains blocked unless a time-limited documented exception demonstrates that the vulnerable path is unreachable. Suppression without evidence is not an accepted response.
Automated security gates
The Security and dependency policy workflow runs on pull requests, main, a
weekly schedule, and manual dispatch.
| Gate | Enforcement |
|---|---|
| Licenses | cargo-deny validates the explicit SPDX allowlist |
| Vulnerabilities | RustSec advisories and yanked versions fail cargo-deny |
| Secrets | TruffleHog scans changed Git history and fails for verified or unknown findings |
| Supply chain | GitHub dependency review blocks high-severity additions; Cargo sources and release evidence are checked separately |
| Release evidence | Deterministic archive, SPDX SBOM, SLSA provenance, checksum, and tamper tests run at Rust 1.85 |
New release workflow actions are pinned to full commit SHAs. Updates must retain the adjacent human-readable version comment and review the upstream change. The release path uses only the permissions required by each job; OIDC authority exists only while signing the release-subject manifest, and release write authority exists only in Relay's publication job.
Supported artifacts
The v0.1.x binary release supports these exact targets:
| Target | Support boundary |
|---|---|
x86_64-unknown-linux-gnu |
64-bit Linux with glibc 2.35 or newer |
x86_64-apple-darwin |
Intel macOS supported by the current stable Rust toolchain |
aarch64-apple-darwin |
Apple silicon macOS supported by the current stable Rust toolchain |
ffprobe remains optional and is not bundled. Other operating systems,
architectures, libc implementations, package managers, installers, and code
signing/notarization channels are unsupported until they appear in this table
and in the release workflow.
When present, ffprobe media evidence records the exact discovered executable
path, version, and binary digest. The release does not claim compatibility with
every ffprobe build merely because the executable starts; each bounded result
must also satisfy the current semantic evidence contract.
Each platform archive contains one executable named optiflow plus LICENSE. The signed
bundle also contains:
release-subjects.sha256, covering every platform archive plus the SBOM, provenance, and (fromv0.1.1) pilot qualification;signature.json, a keyless Sigstore/Cosign bundle for that subject manifest;sbom.spdx.json, an SPDX 2.3 inventory of the resolved Cargo graph bound to every archive digest;provenance.json, SLSA v1 provenance binding every archive to the repository, commit, lockfile, targets, and release workflow;pilot-qualification.json(fromv0.1.1), complete native trial receipts for all three targets, bound to the source revision and the exact installed archive and executable digests; andSHA256SUMS, covering every other file in the Relay input bundle.
The archive writer fixes member order, ownership, permissions, and timestamps. The provenance timestamp derives from the source commit. Identical binaries, qualification receipts, source, and timestamp produce identical unsigned bundle bytes. Fresh pilot trials record new measurements, so a new trial is not expected to reproduce an earlier receipt or its signed manifest byte for byte. The builder copies the exact qualified native archives into the bundle; it never repackages a different archive after qualification.
Release procedure
- Update
Cargo.tomlto the exact intended version, refreshCargo.lock, and completeCHANGELOG.mdthrough a reviewed pull request. - Require CI, adversarial, documentation, and security workflows to pass on the final default-branch commit. Resolve every vulnerability, secret, and release-evidence failure before continuing.
- From the Actions page, dispatch Publish signed binary release on
mainwith the matching unusedvMAJOR.MINOR.PATCHvalue. - The workflow builds the three supported targets from the locked graph and
requires execution on matching native Linux, Intel macOS, and Apple silicon
macOS hosts. Each host clean-installs its archive and runs the
bounded pilot, including
upgrade and rollback against signature-verified
v0.1.0. Missing, failed, cross-target, or mismatched receipts block bundle preparation and signing. It then prepares the SBOM and provenance, signs and verifiesrelease-subjects.sha256, and uploads one complete bundle. - Relay's full-SHA-pinned
binaryprofile revalidates the bundle and current default-branch identity before creating an annotated immutable tag and GitHub Release. A moved branch, reused contradictory tag, bad digest, unexpected file, invalid signature, or incomplete evidence fails closed. - Download the published assets and perform the independent verification below before announcing or distributing the release.
The release workflow does not publish crates.io packages, Homebrew formulas, installers, or mutable “latest” aliases.
The current qualification contract is read-only and accepts only the
already published v0.1.0 and v0.1.1 source/version pairs. The
authorization job and bundle builder reject any new source or version,
including v0.1.2 and v0.2.0; a version bump or a valid historical receipt
cannot bypass that gate.
Before enabling a mutation release, qualify the exact archives on native
targets and disposable real volumes using the
mutation pilot, and introduce distinct,
versioned release receipts with fail-closed bundle verification. Linux-only
synthetic transaction smoke is useful development evidence but does not meet
APFS, removable-media or three-target release criteria. Do not dispatch a
v0.2.0 release while those gates remain open.
Preparing a pull request does not require an agent to poll hosted CI. Release
publication is a separate maintainer checkpoint on merged main. The #89
native qualification, signed publication, and independent download checks
completed for v0.1.1; retain the verification record.
For later releases, update the README, install examples, and changelog only
after equivalent evidence exists.
Independent verification
Install GitHub CLI and Cosign, then verify the outer Relay artifact and inner OptiFlow bundle. Replace the version as needed.
release_version="v0.1.1"
gh release download "${release_version}" \
--repo "egohygiene/optiflow" \
--pattern "binary-${release_version}.tar.gz" \
--pattern "release-asset.sha256" \
--pattern "release-evidence.json"
sha256sum --check "release-asset.sha256"
mkdir "optiflow-release"
tar --extract --gzip \
--file "binary-${release_version}.tar.gz" \
--directory "optiflow-release"
cd "optiflow-release"
sha256sum --check "SHA256SUMS"
cosign verify-blob \
--bundle "signature.json" \
--certificate-identity "https://github.com/egohygiene/optiflow/.github/workflows/release.yml@refs/heads/main" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
"release-subjects.sha256"
Also inspect release-evidence.json, provenance.json, and sbom.spdx.json.
Their repository, source revision, release version, workflow identity, and
archive digests must agree with the release you intended to install.
For v0.1.1, also inspect the signed pilot-qualification.json: all three
targets must pass and name this same source revision and these archive digests.
Rollback and correction
Published tags, assets, signatures, SBOMs, and provenance are immutable historical evidence. Do not delete, overwrite, or retarget them.
For a bad release:
- stop any mutable distribution or announcement channel and publish a security advisory when confidentiality or user safety requires it;
- identify the affected immutable version, artifact digests, impact, and safe workaround without exposing secrets;
- revert or fix the source through normal review, advance the patch version, and publish a new signed release; and
- link the corrective release from the affected release notes while retaining all original evidence for audit and incident review.
Distribution rollback withdraws the recommendation of the affected version and publishes a corrective successor; it never rewrites a release. Local operator rollback is separate: stop OptiFlow, retain the upgraded state, restore the complete pre-upgrade state backup at its original path, and use the retained verified old binary. Artifact references can contain absolute paths. Do not point an older binary at newly migrated state and assume compatibility. The pilot guide gives the tested procedure; it never changes source media.