Skip to content

Cut release qualification over to v2 evidence - #36

Merged
vriesd merged 2 commits into
mainfrom
codex/eval-phase-5
Aug 25, 2026
Merged

Cut release qualification over to v2 evidence#36
vriesd merged 2 commits into
mainfrom
codex/eval-phase-5

Conversation

@vriesd

@vriesd vriesd commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Phase 5 removes summary-only evidence from release authority and switches scheduled eval and publication safety to explicit v2 inputs.

  • Qualifier requires explicit report, catalog, and measured artifact paths.
  • Strict parsing and atomic analysis produce VERIFIED, NOT VERIFIED, or INCONCLUSIVE records for every run.
  • Decision records bind report, full artifact, evaluator, catalog/policy, actors, analyzer, expected provenance, and decision inputs.
  • Host configuration expectations are per attempt for multi-model campaigns.
  • Runner persists exact catalog and measured artifact in each campaign.
  • Scheduled workflow uploads the real report-ID decision handoff under evals/decisions.
  • Release is tag-only, scans committed decisions, and verifies the full rebuilt artifact identity.
  • Publication remains deliberately blocked by canary-not-enabled until Phase 9.
  • The seven current release cases share a single v2 policy registry; uncalibrated cases remain report-only.

Verification: actionlint and bun run check pass 473 tests, one intentional skip, zero failures. Four-model Interrogate found no unresolved blocker. Contribution preflights passed; optional gitleaks scan unavailable.

@vriesd
vriesd merged commit 2e2dc1b into main Aug 25, 2026
6 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fc62d89274

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

return {
kind: "release",
artifact,
evaluator: first.evaluator,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Bind the supplied catalog to evaluator provenance

When the qualifier is given a valid but different catalog with the same case IDs, this copies the evaluator identity directly from the report, so provenance comparison is tautological and never checks that evaluator.policyCatalogSha256 matches the explicitly supplied catalog. Because that catalog controls release, minProviders, minScoredAttempts, and minPassRate, accidentally swapping in—or deliberately supplying—a weaker catalog can produce VERIFIED for evidence evaluated under another policy; recompute and compare the catalog provenance digest before deriving the decision.

Useful? React with 👍 / 👎.

Comment on lines +123 to +126
if (
expectedArtifact &&
canonicalJson(entry.artifact) !== canonicalJson(expectedArtifact)
) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Make committed decisions compatible with rebuilt artifacts

When a VERIFIED decision is generated at commit C and then committed for release at commit D, this full-object comparison can never succeed: inspectArtifact records the current Git HEAD as sourceCommit, so the committed record names C while the release tarball rebuilt from D names D (and committing the decision also changes the source-tree digest). Since the release workflow only scans committed decisions, every major release will reject every legitimately generated decision before reaching the canary; the comparison needs an artifact identity that can remain stable across the evidence-record commit, or another non-circular handoff.

Useful? React with 👍 / 👎.

Comment on lines 144 to +147
- name: Apply release-qualification thresholds
if: steps.matrix.outputs.models != ''
run: bun run qualify
id: qualify
if: always() && steps.matrix.outputs.models != '' && steps.run.outputs.report != ''
continue-on-error: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Propagate the qualifier failure after uploading evidence

In the scheduled/dispatch matrix-evals job, a NOT VERIFIED or INCONCLUSIVE result exits this step nonzero, but continue-on-error: true converts that into a successful conclusion and the following upload step normally succeeds; the eval-run step is also allowed to fail, and there is no final step that re-raises either outcome. Consequently a failed release qualification leaves the workflow green, masking regressions from the schedule; retain the continuation for artifact publication but add a final gate that fails from the recorded qualifier outcome.

Useful? React with 👍 / 👎.

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