Skip to content

[codex] address release governance and audit findings - #263

Merged
Navi Bot (project-navi-bot) merged 1 commit into
mainfrom
codex/release-governance-approver-gates
Jun 19, 2026
Merged

[codex] address release governance and audit findings#263
Navi Bot (project-navi-bot) merged 1 commit into
mainfrom
codex/release-governance-approver-gates

Conversation

@Fieldnote-Echo

@Fieldnote-Echo Fieldnote-Echo commented Jun 19, 2026

Copy link
Copy Markdown
Member

Summary

  • document and audit the two-approver crates-io / pypi GitHub Environment gate: Fieldnote-Echo + toadkicker, self-review prevention, 30-minute wait timer, and stable release tag policy
  • expose the calibration-profile byte limit in the ordvec-manifest Python bindings, default resource limits, exports, and verifier/create keyword arguments
  • align .ovfs / OVFS security and provenance docs with the public FastScan loader and fuzz target
  • refresh threat-model maintenance-budget language for the two-approver model and clarify the C ABI empty-candidate contract
  • hide the SubsetScratch::capacities_for_test helper behind test-utils, fix stale FastScan/docs.rs and b=8 rustdoc wording, and remove a duplicate Python doc paragraph
  • update formalization links and release invariants after ordvec-formalization moved under Project-Navi

Why

A pre-release audit found one published Python manifest API parity gap, several stale security/governance/provenance docs, and small API/docs hygiene issues. The live release environments and transferred formalization repo also needed the checked-in release surfaces to match current external state.

Validation

  • bash -n tests/release_environment_settings.sh
  • bash tests/release_environment_settings.sh
  • cargo fmt --check
  • cargo check -p ordvec-manifest-python --locked
  • cargo test -p ordvec-manifest-python --locked
  • cargo clippy -p ordvec-manifest-python --all-targets --locked -- -D warnings
  • maturin build --release --manifest-path ordvec-manifest-python/Cargo.toml --out /tmp/ordvec-manifest-python-dist
  • uv run --with pytest --with /tmp/ordvec-manifest-python-dist/ordvec_manifest-0.5.0-cp310-abi3-manylinux_2_34_x86_64.whl python -m pytest ordvec-manifest-python/tests -q
  • cargo test --locked
  • cargo test --locked --features test-utils batched_into_is_allocation_free_after_warmup
  • python3 tests/release_publish_invariants.py
  • cargo clippy --all-targets --all-features --locked -- -D warnings
  • cargo clippy -p ordvec-python --all-targets --locked -- -D warnings
  • cargo build -p ordvec-ffi --locked
  • cargo test -p ordvec-ffi --locked
  • git diff --check

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Document dual-approver release environment gates and audit checks
📝 Documentation ⚙️ Configuration changes 🧪 Tests 🕐 40+ Minutes

Grey Divider

Description

• Document two-approver crates-io/pypi environment protections (no self-review, 30-minute wait).
• Update the pre-tag environment audit to assert reviewer set, wait timer, and tag policy.
• Refresh threat model residual risk from single-approver compromise to compromise/collusion.
Diagram

graph TD
  A["Tag push (vX.Y.Z)"] --> B["GitHub Actions: release.yml"] --> C["Guard checks"] --> D{"Env gate: crates-io"} --> F["Publish to registries"]
  C --> E{"Env gate: pypi"} --> F
  G["Environment audit script"] --> D
  G --> E
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use a GitHub Team as required reviewer (vs individual accounts)
  • ➕ Easier rotation/onboarding without doc/script changes
  • ➕ Avoids coupling release policy to specific usernames
  • ➖ Requires extra team governance and careful membership management
  • ➖ May reduce individual accountability if team is too broad
2. Manage environment protections as IaC (GitHub API/Terraform)
  • ➕ Makes the critical environment settings drift-resistant and reviewable in PRs
  • ➕ Can enforce reviewer set, no-self-review, and wait timer automatically
  • ➖ Adds tooling/credentials complexity
  • ➖ Still limited by GitHub’s partial support for environment-as-code features
3. Split publishing into a separate manually-dispatched workflow
  • ➕ Clearer separation between build/attest and publish authorization
  • ➕ Manual dispatch can enforce different permission boundaries
  • ➖ More operational steps and potential for process errors
  • ➖ Doesn’t inherently replace environment-level protections for OIDC minting

Recommendation: The PR’s approach (documenting the environment protections and strengthening the audit script) is the right baseline because GitHub Environment settings remain out-of-band from workflow code. Consider switching required reviewers to a tightly-scoped GitHub Team if reviewer rotation becomes common; otherwise the current explicit dual-approver documentation is clear and auditable.

Files changed (7) +95 / -54

Tests (1) +23 / -9
release_environment_settings.shAudit environments for dual reviewers, no self-review, and wait timer +23/-9

Audit environments for dual reviewers, no self-review, and wait timer

• Extends the GitHub API audit to assert two required reviewers (sorted), 'prevent_self_review=true', presence/value of a wait_timer rule (30 minutes), and keeps enforcing the stable tag pattern policy.

tests/release_environment_settings.sh

Documentation (5) +66 / -40
CHANGELOG.mdAdd security note about dual-approver environment gates +9/-0

Add security note about dual-approver environment gates

• Introduces an '[Unreleased]' Security entry documenting the two required reviewers, self-review prevention, and 30-minute wait timer for registry publishing environments.

CHANGELOG.md

CONTRIBUTING.mdDocument release gating behavior for contributors +4/-3

Document release gating behavior for contributors

• Updates contributor-facing release notes to specify the two required reviewers, self-review prevention, and the 30-minute environment wait timer before registry publishes proceed.

CONTRIBUTING.md

GOVERNANCE.mdRecord environment protections as a governance control +4/-0

Record environment protections as a governance control

• Adds governance-level documentation that release publishes are gated by 'crates-io'/'pypi' environments with two approvers, self-review blocked, and a wait timer.

GOVERNANCE.md

RELEASING.mdExpand release procedure to match current environment protections +29/-17

Expand release procedure to match current environment protections

• Rewrites the environment protection section to include dual reviewers, prevent self-review behavior, and the 30-minute wait timer; updates the pre-tag audit checklist and operator guidance for approvals.

RELEASING.md

THREAT_MODEL.mdUpdate supply-chain residual risk for dual-approver release gates +20/-20

Update supply-chain residual risk for dual-approver release gates

• Reframes THREAT-SUPPLY-001 residual from single-maintainer compromise to approver compromise/collusion and updates the threat table and roadmap notes accordingly.

THREAT_MODEL.md

Other (1) +6 / -5
release.ymlClarify manual environment gate requirements for publish jobs +6/-5

Clarify manual environment gate requirements for publish jobs

• Updates release workflow comments and environment annotations to reflect the dual-approver gate, prevent-self-review setting, and 30-minute wait timer for 'crates-io' and 'pypi' environments.

.github/workflows/release.yml

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Qodo Logo

@project-navi-bot
Navi Bot (project-navi-bot) merged commit 9a1dd37 into main Jun 19, 2026
31 checks passed
@project-navi-bot
Navi Bot (project-navi-bot) deleted the codex/release-governance-approver-gates branch June 19, 2026 22:32
@Fieldnote-Echo Nelson Spence (Fieldnote-Echo) changed the title [codex] update release governance gates [codex] address release governance and audit findings Jun 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants