Skip to content

Fix durable ShakaPerf release evidence reuse - #4833

Merged
justin808 merged 20 commits into
mainfrom
jg-codex/fix-4812-shakaperf-evidence
Aug 4, 2026
Merged

justin808 merged 20 commits into
mainfrom
jg-codex/fix-4812-shakaperf-evidence

Conversation

@justin808

@justin808 justin808 commented Aug 1, 2026

Copy link
Copy Markdown
Member

Why

Stable releases could repeat ShakaPerf dispatch and publication work even when the canonical release tracker already contained verified schema-v2 evidence for the exact release candidate. Recovery also needed to distinguish natural invalidation from unknown or integrity-sensitive failures, while keeping every unrelated release gate intact.

Fixes #4812.

What changed

  • Reuse canonical, verified schema-v2 ShakaPerf evidence from the exact release tracker and exact workflow attempt, including the historical Release gate: react_on_rails 17.0.1 #4806 / run 30417447319 replay, without dispatching or publishing.
  • Add strict run selection and typed recovery: authoritative stale, missing, cancelled, failed, or runtime-divergent observations may rediscover automatically; explicit selectors and unknown, spoofed, edited, conflicting, permission, API, digest, and identity failures remain fail-closed.
  • Add a stable-final-only schema-v2 ShakaPerf observation/infrastructure waiver bound to tracker, SHA, version, run attempt, reason, and authorized maintainer. Waivers are immutable/idempotent and cannot bypass assertions or unrelated gates.
  • Validate the exact pnpm toolchain, frozen dependency state, and all publishable package builds before checkout, auth, remote checks, confirmation, or OTP handling; deterministic build failures cannot consume publish retries.
  • Harden npm publish retry classification and output redaction, and revalidate live evidence and release readiness at each publication boundary.
  • Document the recovery, selection, waiver, and clean-clone behavior and add a changelog entry. Local JSON remains cache-only.

Safety boundaries

  • No package publication, tag, OTP entry, live waiver, or release mutation was performed.
  • No GitHub Actions workflow files changed.
  • Automatic reuse preserves every non-ShakaPerf release gate; there is no blanket preflight skip.

Validation

  • release-helper specification: 889 examples, 0 failures
  • forward-port specification: 140 examples, 0 failures
  • preview/help/workflow contracts: 11 examples, 0 failures
  • focused adversarial replay: 73 examples, 0 failures
  • same-run conflict cases: 12/12 rejected as expected
  • CI-equivalent OSS RuboCop: 248 files, 0 offenses
  • scoped RuboCop: 3 files, 0 offenses
  • Ruby syntax, formatting, and diff checks: passed
  • hosted CI: 51 passing checks, 1 expected selector skip, 0 failures or pending checks
  • exact-head independent adversarial QA: satisfied at a0d51d81a394d9780b4dc4bcd66273933ae0ac3f

The exact #4806 / run 30417447319 fixture replayed verified evidence reuse without dispatch or publication. No live release mutation was invoked.

Review and decision log

Multiple skeptical review waves exercised tracker spoofing/editing, stale and missing evidence, API ambiguity, selector precedence, live workflow identity, exact target/version binding, retry classification, clean-clone ordering, waiver authorization/scope/attempt binding, multi-gate bypass attempts, and post-pull freshness. Confirmed findings were fixed and independently replayed; the current head has zero unresolved review threads.

Process-gap disposition: script. The release helper now enforces and replays clean-clone readiness before any remote/auth/publish boundary. Non-goal: bypassing ShakaPerf assertions or any unrelated release gate.

Hosted validation class

This changes release and publication logic, so force-full hosted CI was run and passed for the current head.

Merge qualification

Release-mode gate: main is beta phase; the active tracker is strict RC mode, so standard merge qualification applies. Current-head CI, configured reviewers, independent QA, security preflight, stage dependency, unresolved-thread, and strict-ledger gates are satisfied.

Confidence note:

  • Validated: current-head local matrix (889 + 140 + 11 + 73 examples, 12/12 negative cases), OSS/scoped RuboCop, syntax/diff checks, and force-full hosted CI.
  • Evidence: Fix durable ShakaPerf release evidence reuse #4833 (comment) and current-head GitHub checks for a0d51d81a394d9780b4dc4bcd66273933ae0ac3f.
  • UNKNOWN: parent host metadata is unexposed; no exact-parent policy applies, and checker identity is separately bound.
  • Residual risk: release-helper behavior is infrastructure-sensitive, but no publishing was exercised; code-only rollback or forward recovery is established.

Labels: ready-for-hosted-ci, force-full-hosted-ci — full hosted validation completed for the release/publication surface.

Benchmarks: not applicable.

Summary by CodeRabbit

  • Release Process

    • Added stricter release readiness and verification gates.
    • Improved ShakaPerf evidence tracking, exact-run reuse, validation, and waiver handling.
    • Added stronger checks for commits, artifacts, tags, repositories, and release trackers.
    • Improved npm publication retries with transient-error handling and secure OTP treatment.
    • Added fail-closed checks when verification or artifact validation cannot be completed.
  • Documentation

    • Expanded guidance for readiness checks, evidence, accelerated releases, promotion rules, retries, and troubleshooting.
  • Tests

    • Added comprehensive coverage for release verification, evidence reuse, waivers, tracker validation, readiness checks, and publication failures.

Copilot AI review requested due to automatic review settings August 1, 2026 00:20
@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The release workflow adds durable tracker-bound ShakaPerf evidence reuse, fail-closed verification, stable-only observation waivers, target-specific tracker validation, npm readiness checks, and classified publication retries. Documentation, fixtures, and release-helper tests cover the new behavior.

Changes

Release controls

Layer / File(s) Summary
Verification verdicts and contracts
rakelib/release.rake, react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb
Git, runtime, ShakaPerf, and npm outcomes now use structured verification and rejection results.
ShakaPerf evidence discovery and reuse
rakelib/release.rake, react_on_rails/spec/react_on_rails/fixtures/*, react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb, internal/contributor-info/releasing.md
The release gate verifies exact runs, artifacts, identities, tracker associations, durable persistence, reuse, and watcher outcomes.
Tracker validation and final promotion
rakelib/release.rake, react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb, internal/contributor-info/releasing.md
Promotion validates canonical target-specific trackers, strict-final evidence, observation waivers, selectors, and publication boundaries.
npm readiness and publication retries
rakelib/release.rake, react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb, internal/contributor-info/releasing.md
Release execution checks pnpm, lockfiles, package builds, and commit identity before publication. npm retries classify OTP, transient, lifecycle, authentication, and deterministic failures.
Release documentation and changelog
CHANGELOG.md, internal/contributor-info/releasing.md, rakelib/release.rake
Release procedures document evidence reuse, waiver handling, readiness checks, and npm retry behavior.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseTask
  participant GitHub
  participant ShakaPerf
  participant NpmRegistry
  ReleaseTask->>GitHub: validate tracker, commit, and workflow evidence
  ReleaseTask->>ShakaPerf: select or reuse verified run
  ShakaPerf-->>ReleaseTask: return validated result or observation error
  ReleaseTask->>NpmRegistry: publish with classified retry handling
  NpmRegistry-->>ReleaseTask: return publication result
Loading

Possibly related issues

  • shakacode/react_on_rails#4812 — The PR adds explicit exact-run selection, durable ShakaPerf association, verification, reuse, and documentation.
  • shakacode/react_on_rails#4755 — The PR adds machine-validated release-candidate evidence and waiver controls.

Possibly related PRs

Suggested labels: documentation

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The pull request also adds broad npm readiness, publication retry, and unrelated release-gate changes beyond the ShakaPerf evidence objectives in #4812. Separate the npm publication and unrelated release-gate changes into focused pull requests, or link issues that explicitly require them.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes implement verified exact-commit ShakaPerf evidence persistence and reuse, fail-closed validation, idempotency, tests, and documentation required by #4812.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the pull request's main change: durable reuse of ShakaPerf release evidence.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jg-codex/fix-4812-shakaperf-evidence

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Aug 1, 2026

Copy link
Copy Markdown

Greptile Summary

This PR expands the release workflow’s ShakaPerf evidence persistence, recovery, and waiver handling while adding npm readiness and publication hardening.

  • Adds durable schema-v2 tracker associations and strict selection of reusable ShakaPerf runs.
  • Adds a stable-release observation waiver tied to the tracker, candidate, workflow run, and attempt.
  • Adds pre-release pnpm, lockfile, and package-build validation plus stricter npm retry classification.
  • Extends release documentation, fixtures, and helper specifications for the new behavior.

Confidence Score: 4/5

The publication-boundary observation failure must be fixed before merging because a waived stable release can continue without revalidating the exact ShakaPerf run attempt.

The new waiver flow deliberately tolerates observation outages, but its final boundary check also suppresses an unavailable live lookup and ignores the failed validation, allowing immutable publication after the run state has become unknown.

Files Needing Attention: rakelib/release.rake

Important Files Changed

Filename Overview
rakelib/release.rake Adds extensive release evidence, waiver, readiness, and retry logic; the waiver boundary incorrectly permits publication when live run revalidation fails.
react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb Greatly expands coverage for release evidence and publication behavior but does not prevent the boundary observation-error bypass.
internal/contributor-info/releasing.md Documents the new durable evidence, recovery, waiver, readiness, and retry contracts.
react_on_rails/spec/react_on_rails/fixtures/release/shakaperf_issue_4806_run_30417447319.json Adds historical workflow-run evidence used to exercise durable tracker replay.
CHANGELOG.md Records the release workflow hardening and durable ShakaPerf evidence behavior.

Sequence Diagram

sequenceDiagram
  participant Release as Release task
  participant Tracker as Release tracker
  participant GitHub as GitHub Actions API
  participant Boundary as Publication boundary
  participant Registry as Package registry
  Release->>Tracker: Load saved run and waiver
  Release->>GitHub: Observe exact run attempt
  GitHub--xRelease: Observation unavailable
  Release->>Tracker: Persist/reuse observation waiver
  Release->>Boundary: Revalidate before tag/package publication
  Boundary->>GitHub: Fetch exact run attempt
  GitHub--xBoundary: Observation still unavailable
  Boundary-->>Release: Current code treats error as nil
  Release->>Registry: Publication may continue
Loading

Reviews (1): Last reviewed commit: "Reject noncanonical ShakaPerf associatio..." | Re-trigger Greptile

Comment thread rakelib/release.rake

Copilot AI 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.

Pull request overview

This PR updates the React on Rails unified rake release tooling to avoid redundant ShakaPerf work by reusing maintainer-verified, tracker-bound schema-v2 evidence when available, while hardening selection/recovery rules and adding a narrowly scoped stable-release-only observation waiver path.

Changes:

  • Adds durable ShakaPerf evidence discovery/reuse via canonical release tracker comments, plus strict run selection and fail-closed handling for unknown/edited/spoofed states.
  • Adds stable-final-only, tracker/SHA/attempt-bound ShakaPerf observation waiver support and publication-boundary revalidation.
  • Adds pre-auth/pre-mutation npm readiness verification (pinned pnpm + frozen lock + build for publishable packages) and hardens npm publish retry classification and output redaction; updates docs and changelog accordingly.

Reviewed changes

Copilot reviewed 3 out of 5 changed files in this pull request and generated no comments.

File Description
react_on_rails/spec/react_on_rails/fixtures/release/shakaperf_issue_4806_run_30417447319.json Adds a fixture representing tracker-bound ShakaPerf evidence for replay/verification tests.
rakelib/release.rake Implements ShakaPerf durable evidence selection/reuse/waiver logic, npm readiness preflight, and classified npm publish retries with redaction.
internal/contributor-info/releasing.md Documents the new readiness preflight, durable ShakaPerf association reuse, and stable-only observation waiver workflow.
CHANGELOG.md Adds a user-visible changelog entry describing the release-tooling hardening and evidence reuse behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (1)
rakelib/release.rake (1)

9496-9496: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Reuse release_tracker_input for the later tracker reads.

Lines 9622 and 9778 read ENV.fetch("RELEASE_TRACKER", nil) again. The task already captured that value here. Use the local variable at both call sites so the release task has one source for the tracker input.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@rakelib/release.rake` at line 9496, Reuse the existing release_tracker_input
variable at the later tracker-read call sites instead of calling
ENV.fetch("RELEASE_TRACKER", nil) again, ensuring both locations use the single
captured tracker value.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Line 54: Update the changelog entry for Issue 4812 to include the repository’s
standard canonical pull-request link and author attribution format, retaining
the issue link only as supplementary context if appropriate.

In `@rakelib/release.rake`:
- Around line 1870-1878: Update apply_final_shakaperf_observation_waiver! to
explicitly reject a nil error.run before calling
exact_final_shakaperf_waiver_run!, aborting with a clear fail-closed message
that explains a waiver cannot apply without an observed run. Preserve the
existing validation and waiver flow when error.run is present.
- Around line 8779-8805: The dependency readiness check in
validate_npm_release_readiness! must not compare pnpm-lock.yaml and
node_modules/.pnpm/lock.yaml byte-for-byte. Replace that comparison with a
pnpm-supported resolved-state validation or existing release-tooling check,
while still rejecting missing or genuinely stale installed dependencies and
preserving the current abort message behavior.

In `@react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb`:
- Around line 4748-4750: Clean up the globally installed
trusted_shakaperf_release_tracker_records! method after the example defining it
via Object.send(:define_method, ...). Add example-scoped ensure/after removal
with Object.send(:remove_method, :trusted_shakaperf_release_tracker_records!),
or replace the global patch with an RSpec allow(...).to receive(...) stub.

---

Nitpick comments:
In `@rakelib/release.rake`:
- Line 9496: Reuse the existing release_tracker_input variable at the later
tracker-read call sites instead of calling ENV.fetch("RELEASE_TRACKER", nil)
again, ensuring both locations use the single captured tracker value.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9c59712b-8fa2-49a1-8639-3475e6afce66

📥 Commits

Reviewing files that changed from the base of the PR and between 4dfadb2 and da1c463.

📒 Files selected for processing (5)
  • CHANGELOG.md
  • internal/contributor-info/releasing.md
  • rakelib/release.rake
  • react_on_rails/spec/react_on_rails/fixtures/release/shakaperf_issue_4806_run_30417447319.json
  • react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb

Comment thread CHANGELOG.md
Comment thread rakelib/release.rake
Comment thread rakelib/release.rake
Comment thread react_on_rails/spec/react_on_rails/release_rake_helpers_spec.rb
Comment thread rakelib/release.rake
Comment thread rakelib/release.rake
Comment thread rakelib/release.rake
Comment thread CHANGELOG.md
@claude

claude Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Review summary

Reviewed the diff (gh pr diff 4833, 6006+/435- across rakelib/release.rake, its spec, CHANGELOG.md, internal/contributor-info/releasing.md, and a new JSON fixture) and traced the highest-risk logic paths in rakelib/release.rake (waiver validation, evidence-reuse/run-selection, and npm publish retry classification) end to end against the base commit.

What holds up well

  • Waiver validation (apply_final_shakaperf_observation_waiver!) correctly requires stable-only releases, exact tracker/run identity, non-terminal run state, and consistent checks at all call sites.
  • Canonical JSON re-encoding + byte comparison in the evidence parsers closes off whitespace/key-order spoofing of embedded JSON payloads.
  • OTP handling: OTP is validated as digits-only before use, and all new subprocess calls use array-form Open3/sh(*args) rather than interpolated shell strings — no injection risk found.
  • Fail-closed behavior: non-natural rejections (identity mismatch, digest mismatch, spoofed/edited evidence) are treated as fatal (abort) rather than silently falling back to rediscovery, matching the PR's stated design.
  • Pre-publish readiness validation (validate_npm_release_readiness!) genuinely runs before checkout, git pull --rebase, auth, and OTP handling, as claimed.
  • Test coverage is solid, not superficial — spot-checked the fail-closed-on-edited-evidence, digest/fingerprint mutation, waiver creation/idempotency, and OTP-redaction tests; they exercise real production methods and assert on outcomes that would actually fail on regression, not tautological mocks.
  • Docs: env vars referenced in internal/contributor-info/releasing.md (RELEASE_SHAKAPERF_RUN, RELEASE_FINAL_SHAKAPERF_WAIVER_REASON, RELEASE_TRACKER) all exist verbatim in the code.

Issues found (see inline comments for details)

  1. Redaction gap (rakelib/release.rake:9218-9224, medium) — sanitized_npm_publish_output only redacts OTP-shaped substrings, not registry auth tokens, despite the PR description claiming redaction covers "OTP/tokens." If npm ever echoes a token (misconfigured .npmrc, credential-embedded registry URL, verbose proxy error), it leaks into CI logs unredacted.
  2. Publish retry can hard-fail after an actual successful publish (rakelib/release.rake:9290-9320, medium) — npm_package_already_published? is only checked once before the retry loop. A transient network error on a publish that actually succeeded, followed by a :registry_rejection ("previously published") on retry, aborts the release with a scary hard error even though publication succeeded, since :registry_rejection is unconditionally a hard-failure category.
  3. Evidence-reuse candidate filter has no SHA defense-in-depth (rakelib/release.rake:1163-1179, low-medium) — for :association entries, the candidate filter accepts any SHA and falls back to all associations when none exactly match head_sha; correctness currently depends entirely on a later ancestor/runtime-fingerprint check several call-levels away. Not currently exploitable (verified the call chain reaches that check), but risky to reason about locally in spoof-sensitive code.
  4. CHANGELOG entry is too dense/jargon-heavy for a user-facing changelog (CHANGELOG.md:27-52, medium/polish) — ~26 lines of internal-terminology prose ("schema-v2", "strict-final verification") where 2-4 plain-language sentences would do; the mechanism detail is already covered in releasing.md.

Structural concern (no single bug, but worth raising)

This PR adds ~2,455 lines to an already 10,000+ line single .rake file, structured as long chains of similarly-named single-purpose predicate/rejection helpers (shakaperf_release_tracker_identity_rejection_workflow_rejection_run_reference_rejection_result_rejection_freshness_rejection, etc.). Verifying invariants requires tracing 5-6 call levels by hand (see finding #3). Given this logic is release-safety-critical and explicitly designed to resist spoofing/replay, it would be more maintainable and independently testable as a proper lib/ module/class hierarchy rather than living entirely as private top-level methods in a rakefile. Not a blocker, but worth considering as a follow-up refactor.

Minor

  • shakaperf_release_tracker_entry_matches? (rakelib/release.rake:1165) excludes waiver/legacy-waiver entries only via an incidental nil mismatch on version_field lookup, not an explicit guard — fragile if a future field rename introduces a real "release" key collision.
  • The new JSON fixture (shakaperf_issue_4806_run_30417447319.json) matches production field mapping but omits created_at, so it isn't a byte-faithful capture of a real API response (doesn't affect the tests that use it).

No security-critical exploit or data-corruption path was found; the issues above are about defense-in-depth, operator experience on retry, and changelog polish rather than a broken release.

Copilot AI review requested due to automatic review settings August 1, 2026 00:31

Copilot AI 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.

Pull request overview

Copilot reviewed 3 out of 5 changed files in this pull request and generated no new comments.

Comment thread rakelib/release.rake
Comment thread rakelib/release.rake
Comment thread rakelib/release.rake
@claude

claude Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Review summary

What this PR does: Extends rakelib/release.rake's release automation with (1) durable reuse of maintainer-verified ShakaPerf performance-gate evidence recorded as append-only, schema-versioned comments on a "release tracker" GitHub issue, selectable via RELEASE_SHAKAPERF_RUN/RELEASE_TRACKER, with strict re-verification of run identity, evidence digests, and runtime-tree fingerprints before trusting a saved record; (2) a narrow, stable-only waiver path (RELEASE_FINAL_SHAKAPERF_WAIVER_REASON) for when GitHub observation itself fails, which explicitly cannot mark a run as successful or bypass other gates; (3) upfront pnpm-version/lockfile/build readiness checks before any release-checkout/remote/publish work; (4) more precise npm-publish retry classification (transient vs. hard failure) with OTP redaction from captured output.

Security: All new Open3.capture2e/gh invocations use array-form argv (no shell interpolation of user input — verified across every new call site), and none of RELEASE_SHAKAPERF_RUN/RELEASE_TRACKER/RELEASE_FINAL_SHAKAPERF_WAIVER_REASON flow into a shell string. The waiver reason is validated against control characters and HTML-comment delimiters so it can't forge a second marker inside the re-parsed comment. OTP values are consistently redacted from both the success and exception paths in run_npm_publish_attempt!.

Correctness: The core trust chain held up under scrutiny — I specifically checked whether an :association record for the wrong candidate SHA could be reused (it can pass the initial identity filter, but shakaperf_release_gate_evidence_runtime_rejection's runtime-tree-fingerprint check re-binds evidence to the real head_sha before anything is trusted, so it isn't exploitable). Left a few inline notes on smaller robustness/consistency gaps and one narrow OTP-classification ordering concern — see inline comments.

Test coverage: The spec file is extensive (22k+ lines) and covers most of the new paths well. One gap I didn't find covered: resolve_shakaperf_release_tracker_candidate_conflict!/preferred_shakaperf_release_tracker_candidates with multiple conflicting :association records for the same exact candidate SHA (different run IDs) — the "replace an association with a newer verified run" scenario the docs describe.

Code quality / maintainability: rakelib/release.rake is now 10,131 lines with a correspondingly huge (22,558-line) spec file for what is fundamentally a maintainer-run release script. The new code follows the file's existing style (small single-purpose functions returning typed ShakaperfVerificationResult/ShakaperfEvidenceRejection objects rather than bare strings/booleans, which is a real improvement over the previous ad-hoc nil-means-unknown pattern it replaces), and the strictness is clearly intentional given this gates real package publication. That said, the sheer size and the amount of near-duplicated rejection-checking boilerplate across shakaperf_release_tracker_*_rejection functions make this file increasingly difficult for a human reviewer to fully verify by inspection — worth keeping in mind for future changes here, perhaps by splitting ShakaPerf-evidence logic into its own required file.

Overall: no blocking issues found. The three inline comments below are suggestions/hardening opportunities rather than confirmed exploitable bugs — the safety-critical verification chain (evidence digest + runtime-tree fingerprint binding to the real release SHA) appears sound.

Copilot AI review requested due to automatic review settings August 2, 2026 04:49

Copilot AI 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.

Pull request overview

Copilot reviewed 3 out of 5 changed files in this pull request and generated no new comments.

@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: b07b1700e1

ℹ️ 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".

Comment thread rakelib/release.rake
Copilot AI review requested due to automatic review settings August 2, 2026 05:19

Copilot AI 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.

Pull request overview

Copilot reviewed 3 out of 5 changed files in this pull request and generated no new comments.

@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: 2cfbb85c11

ℹ️ 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".

Comment thread rakelib/release.rake Outdated
Copilot AI review requested due to automatic review settings August 2, 2026 05:43

Copilot AI 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.

Pull request overview

Copilot reviewed 3 out of 5 changed files in this pull request and generated no new comments.

Suppressed comments (1)

internal/contributor-info/releasing.md:233

  • The docs say live ShakaPerf association is “blocked until the repository-owned release wrapper … exists,” but the code path for RELEASE_SHAKAPERF_RUN persists a verified association to the tracker during a live (non-dry-run) release via persist_verified_shakaperf_release_tracker_evidence!/post_release_tracker_comment! (see rakelib/release.rake around select_and_verify_shakaperf_release_gate_run!). This sentence appears to be outdated and could mislead maintainers about what a live release will actually do.
This preview validates the target and tracker inputs but does not fetch or persist the selected run. Live
association remains blocked until the repository-owned release wrapper described in the execution boundary exists.

@justin808

Copy link
Copy Markdown
Member Author

QA Evidence v2 — final refreshed head

  • Status: SATISFIED
  • Tested at: PR Fix durable ShakaPerf release evidence reuse #4833 head 8df1ae5e92fad11aa6faaa1ae3397e381d129c2a
  • Trusted base/merge-base: 8d08075a0f63a44e0eaf9efce8621d1b32dc7bd1 (origin/main)
  • Tool binding: Codex GPT-5.6 Sol / xhigh
  • Release-blocking QA findings: none remaining

Independent, read-only adversarial QA verified the complete issue #4812 release-integrity surface. Same-run conflicts now fail closed at all three layers: digest/runtime-fingerprint identity, candidate SHA before preference, and repository/branch/target version before requested-identity filtering. The direct replay rejected all 12 field/order combinations.

Checks:

  • Auth-scrubbed complete release-helper suite: 889 examples, 0 failures
  • Release forward-port suite: 140 examples, 0 failures
  • Preview/help/ShakaPerf workflow contracts: 11 examples, 0 failures
  • Focused adversarial matrix: 73 examples, 0 failures
  • Direct every-order same-run conflict replay: 12/12 expected rejections
  • Full OSS RuboCop: 245 files, 0 offenses
  • Scoped RuboCop: 3 files, 0 offenses
  • Ruby syntax: 3 files, all OK
  • git diff --check: passed
  • Detached exact-head worktree: clean

Adversarial coverage included typed association provenance, fresh discovery remaining unassociated, association loss/mutation/spoof rejection, stale and naturally invalidated evidence, missing run/artifact and API failure behavior, immutable waiver authorization/run-attempt/scope/identity bounds, terminal-result and unrelated-gate bypass attempts, and TOCTOU revalidation at tag-push and package-publication boundaries. The issue #4806 fixture replay for run 30417447319 reused verified evidence without dispatching or publishing.

All 19 review threads were inspected and are resolved. Current-head Copilot review produced no new comment; current-head CodeRabbit and Claude checks completed successfully. Required CI readiness is READY; remaining full hosted jobs were still non-required/pending at evidence time, so this QA result does not claim overall merge-ledger completion. GitHub reviewDecision is not required/null, and this comment is QA evidence—not a formal approval review.

No tag, package publication, OTP entry, live waiver, release dispatch, hosted-CI request, or release override occurred during QA. UI evidence is not applicable because this is CLI-only release automation.

Process-gap disposition: script. The durable regression suite now mechanizes each discovered conflict/provenance/boundary failure. Non-goal: broadening any waiver or weakening unrelated release gates.

@justin808

Copy link
Copy Markdown
Member Author

QA Evidence v2 — final refreshed head

  • Status: SATISFIED
  • Tested at: PR Fix durable ShakaPerf release evidence reuse #4833 head 8df1ae5e92fad11aa6faaa1ae3397e381d129c2a
  • Trusted base/merge-base: 8d08075a0f63a44e0eaf9efce8621d1b32dc7bd1 (origin/main)
  • Tool binding: Codex GPT-5.6 Sol / xhigh
  • Release-blocking QA findings: none remaining

Independent, read-only adversarial QA verified the complete issue #4812 release-integrity surface. Same-run conflicts now fail closed at all three layers: digest/runtime-fingerprint identity, candidate SHA before preference, and repository/branch/target version before requested-identity filtering. The direct replay rejected all 12 field/order combinations.

Checks:

  • Auth-scrubbed complete release-helper suite: 889 examples, 0 failures
  • Release forward-port suite: 140 examples, 0 failures
  • Preview/help/ShakaPerf workflow contracts: 11 examples, 0 failures
  • Focused adversarial matrix: 73 examples, 0 failures
  • Direct every-order same-run conflict replay: 12/12 expected rejections
  • Full OSS RuboCop: 245 files, 0 offenses
  • Scoped RuboCop: 3 files, 0 offenses
  • Ruby syntax: 3 files, all OK
  • git diff --check: passed
  • Detached exact-head worktree: clean

Adversarial coverage included typed association provenance, fresh discovery remaining unassociated, association loss/mutation/spoof rejection, stale and naturally invalidated evidence, missing run/artifact and API failure behavior, immutable waiver authorization/run-attempt/scope/identity bounds, terminal-result and unrelated-gate bypass attempts, and TOCTOU revalidation at tag-push and package-publication boundaries. The issue #4806 fixture replay for run 30417447319 reused verified evidence without dispatching or publishing.

All 19 review threads were inspected and are resolved. Current-head Copilot review produced no new comment; current-head CodeRabbit and Claude checks completed successfully. Required CI readiness is READY; remaining full hosted jobs were still non-required/pending at evidence time, so this QA result does not claim overall merge-ledger completion. GitHub reviewDecision is not required/null, and this comment is QA evidence—not a formal approval review.

No tag, package publication, OTP entry, live waiver, release dispatch, hosted-CI request, or release override occurred during QA. UI evidence is not applicable because this is CLI-only release automation.

Process-gap disposition: script. The durable regression suite now mechanizes each discovered conflict/provenance/boundary failure. Non-goal: broadening any waiver or weakening unrelated release gates.

…kaperf-evidence

* origin/main:
  Docs: add missing content — release notes, upgrade guide, config, API references (#4843) (#4844)
  Fix incorrect docs: helper names, defaults, requirements, runtime refs (#4836)
  Scroll-priority streaming: candidate architecture evaluation (#4835) (#4841)
  Fix generated server config lint cleanup (#4840)

# Conflicts:
#	CHANGELOG.md
Copilot AI review requested due to automatic review settings August 3, 2026 20:14

Copilot AI 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.

Pull request overview

Copilot reviewed 3 out of 5 changed files in this pull request and generated no new comments.

@justin808

Copy link
Copy Markdown
Member Author

QA Evidence v2 — recovered refreshed exact head

  • Status: SATISFIED
  • Tested at: PR Fix durable ShakaPerf release evidence reuse #4833 head a0d51d81a394d9780b4dc4bcd66273933ae0ac3f
  • Trusted base: aafe072758e250a670eefb0b8d5b8ccedb533451 (main)
  • Prior functional head: 8df1ae5e92fad11aa6faaa1ae3397e381d129c2a
  • Tool binding: Codex GPT-5.6 Sol / xhigh
  • Release-blocking QA findings: none

Fresh independent read-only QA at the refreshed head verified the full issue #4812 release-integrity surface. All non-CHANGELOG PR files are byte-identical to the prior functional head, while the merge resolution preserves the exact PR #4840 main entry and PR #4833 entry in newest-first order.

Checks:

  • Auth-scrubbed complete release-helper suite: 889 examples, 0 failures
  • Release forward-port suite: 140 examples, 0 failures
  • Preview/help/ShakaPerf workflow contracts: 11 examples, 0 failures
  • Focused ShakaPerf adversarial matrix: 73 examples, 0 failures
  • Direct every-order same-run conflict replay: 12/12 expected rejections
  • Full OSS RuboCop: 248 files, 0 offenses
  • Scoped RuboCop: 3 files, 0 offenses
  • Ruby syntax: 3 files, all OK
  • Exact-base and prior-head git diff --check: passed
  • Non-CHANGELOG byte identity and two-parent changelog preservation: passed
  • Hosted checks: 51 passed, 1 expected skip, 0 pending/failing
  • Review threads: 19/19 resolved
  • Detached exact-head worktree: clean

Adversarial coverage included spoofed and mismatched repository/workflow/event/branch identities; edited, duplicate-family, stale, naturally invalidated, missing-run, missing-artifact, API/permission, digest, runtime-fingerprint, candidate-SHA, repository, branch, target-version, global-conflict, order, authorization, run-attempt, scope, terminal-result, TOCTOU, irreversible-boundary, and unrelated-gate/multi-gate bypass cases. The guarded issue #4806 fixture replay for run 30417447319 reused verified evidence without dispatching or publishing. The direct replay rejected digest, runtime fingerprint, candidate SHA, repository, branch, and target version conflicts in both record orders.

The canonical security preflight was SECURITY_PREFLIGHT_OK. Its longstanding Copilot review comment remains an untrusted advisory queue item and was not treated as instruction; metadata-only GitHub Actions comments likewise did not widen scope.

No tag, package publication, OTP entry, live waiver, release dispatch, hosted-CI request, release override, PR code edit, commit, push, or merge occurred during QA. UI, interaction, and visual-fix evidence are not applicable because this is CLI-only release automation.

Process-gap disposition: script. The release helper and regression suite mechanize the evidence, identity, recovery, ordering, and irreversible-boundary controls. Non-goal: broadening a waiver or weakening any unrelated release gate.

@justin808

Copy link
Copy Markdown
Member Author

head_sha: a0d51d8
triggered_gates:

  • changed-lines-limit
  • commit-count-limit
  • infrastructure-delivery
  • irreversible-external-effect
  • security-auth-privacy
    rollback_disposition: Code-only rollback or forward recovery was explicitly accepted.
    decision: approve
    approved_by: justin808
    source: direct-user-task
    evidence: Direct exact-head approval in Codex task 019fac0f-a7fd-7063-9b8c-35828f02e5a3.
    ...

@justin808
justin808 added this pull request to the merge queue Aug 4, 2026
Merged via the queue into main with commit 9780839 Aug 4, 2026
53 checks passed
@justin808
justin808 deleted the jg-codex/fix-4812-shakaperf-evidence branch August 4, 2026 07:12
justin808 added a commit that referenced this pull request Aug 6, 2026
…out-vm-pool

* origin/main:
  Docs: move agent coordination to the HTTP backend (#4764)
  Detect unnoticed changes across generated webpack/Rspack configs (#4839)
  Fix durable ShakaPerf release evidence reuse (#4833)
  Docs: add missing content — release notes, upgrade guide, config, API references (#4843) (#4844)
  Fix incorrect docs: helper names, defaults, requirements, runtime refs (#4836)
  Scroll-priority streaming: candidate architecture evaluation (#4835) (#4841)
  Fix generated server config lint cleanup (#4840)
  Document serialized release backport policy (#4592)
  Package version-matched agent skills and docs (#4809)
  Fix ci-required base ref for PR merge-ref checkouts (#4819)
  Honor response charset and reject non-2xx HTTP-served SSR bundles (#4817)
  [Pro] Redact RSC render-error metadata on the fetched (client-navigation) payload path (#4821)
  Forward-port the 17.0.1 changelog section to main (#4814)

# Conflicts:
#	CHANGELOG.md
justin808 added a commit that referenced this pull request Aug 8, 2026
…ential-broker

* origin/main: (75 commits)
  Silence routine startup diagnostics for Rails commands (#4849)
  Docs: move agent coordination to the HTTP backend (#4764)
  Detect unnoticed changes across generated webpack/Rspack configs (#4839)
  Fix durable ShakaPerf release evidence reuse (#4833)
  Docs: add missing content — release notes, upgrade guide, config, API references (#4843) (#4844)
  Fix incorrect docs: helper names, defaults, requirements, runtime refs (#4836)
  Scroll-priority streaming: candidate architecture evaluation (#4835) (#4841)
  Fix generated server config lint cleanup (#4840)
  Document serialized release backport policy (#4592)
  Package version-matched agent skills and docs (#4809)
  Fix ci-required base ref for PR merge-ref checkouts (#4819)
  Honor response charset and reject non-2xx HTTP-served SSR bundles (#4817)
  [Pro] Redact RSC render-error metadata on the fetched (client-navigation) payload path (#4821)
  Forward-port the 17.0.1 changelog section to main (#4814)
  Handle selector metacharacters in renderComponent DOM IDs (#4808)
  [Pro] Prevent caching RSC renders with errors (#4804)
  Agents: trust Copilot review identities (#4807)
  Agents: bind fleet closeout to generated pack (#4805)
  Docs: ADR 0002 — Skills-in-package over MCP for agent-native DX (#4735)
  Scope GitHub release commands to the origin repository (#4803)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

force-full-hosted-ci Bypass optimized hosted CI selection and run all hosted suites ready-for-hosted-ci Run optimized hosted GitHub CI for this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release tooling: save a successful ShakaPerf run for a specific commit

2 participants