Skip to content

feat(sync): lease generated delivery attempts - #2895

Merged
stranske merged 4 commits into
mainfrom
codex/issue-2880-durable-campaign-leases
Aug 1, 2026
Merged

feat(sync): lease generated delivery attempts#2895
stranske merged 4 commits into
mainfrom
codex/issue-2880-durable-campaign-leases

Conversation

@stranske

@stranske stranske commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Source: Issue #2880

Closes #2880

Automated Status Summary

Scope

The coordination object must be allowed to persist, but a generated PR must not. The current durable campaign already models queue fingerprints and item leases in .github/scripts/sync_dependency_campaign.js:178-230,360-456, while Maint 68 stops when an existing consumer PR is found (.github/workflows/maint-68-sync-consumer-repos.yml:681-724). That combination leaves the opener/closer system without a bounded rule for whether an old PR should be refreshed, replaced, closed, or escalated.

This is a current productivity defect: generated PRs can survive across source generations, repeatedly consume review and CI attention, and still be indistinguishable from the latest intended delivery. The durable object should be the campaign issue (currently #1836), with each generated PR acting as a leased delivery attempt that has an explicit terminal disposition.

Context for Agent

Related Issues/PRs

Tasks

  • Add a versioned delivery-record schema to .github/scripts/sync_dependency_campaign.js with campaign issue URL, plan ID, generation, repository, desired tree hash, source commit, lease expiry, and predecessor/successor PR references.
  • Emit the schema as a machine-readable provenance marker in PR bodies created by .github/workflows/maint-68-sync-consumer-repos.yml and .github/workflows/maint-52-sync-dev-versions.yml.
  • Change Maint 68 to compare the existing PR base/tree and delivery record, following the same-wave update pattern already used by Maint 52, instead of treating any existing PR as terminal.
  • Extend .github/scripts/sync_pr_merge_contract.js and .github/workflows/maint-71-merge-sync-prs.yml so only the latest unexpired delivery generation is merge-eligible.
  • Define explicit terminal transitions: merged, superseded, expired, and blocked; blocked transitions must link a durable source or repo-local issue with the exact next action.
  • Persist terminal disposition and latest desired tree hash through .github/scripts/sync_tracker_state.js and the campaign state used by Maint 82.
  • Update docs/ops/SYNC_DEPENDENCY_CAMPAIGN.md, docs/ops/DURABLE_TRACKING_ISSUES.md, and docs/ops/CONSUMER_REPO_MAINTENANCE.md with the rule “durable issue, leased PR.”
  • Add migration behavior for already-open generated PRs that lack a marker: classify them once, attach or infer lineage safely, and never merge an ambiguous stale generation.

Acceptance criteria

  • .github/scripts/__tests__/sync_dependency_campaign.test.js proves that the durable issue survives multiple delivery generations while each PR reaches exactly one terminal disposition.
  • A new .github/scripts/__tests__/sync_pr_lease_contract.test.js proves that only the newest unexpired PR whose desired tree hash matches the current plan is merge-eligible.
  • tests/workflows/test_sync_manifest_delivery.py proves Maint 68 updates the same current-generation PR when safe and creates a replacement only after a generation or terminal-state transition.
  • Maint 71 reports and closes superseded/expired generated PRs without merging them; blocked PRs leave a linked durable issue record with an exact next command.
  • Active, non-outdated inline review debt and failing required checks continue to block merge even when the lease and generation are current.
  • Deliberate-break test: expire a current fixture or change its plan hash, verify sync_pr_lease_contract.test.js fails merge eligibility, then revert the fixture and verify the suite passes.
  • Run python scripts/dev_check.py --action test and the repository workflow-validation suite successfully.

@stranske stranske added agent:codex Agent-created issues from Codex agents:keepalive Use to initiate keepalive functionality with agents autofix Opt-in automated formatting & lint remediation labels Aug 1, 2026
Copilot AI review requested due to automatic review settings August 1, 2026 21:07
@cursor

cursor Bot commented Aug 1, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 1 minute

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 81e99252-0eed-4014-8994-c2f763f8e083

📥 Commits

Reviewing files that changed from the base of the PR and between 18f25a9 and fd9d65b.

📒 Files selected for processing (9)
  • .github/scripts/__tests__/sync-pr-merge-contract.test.js
  • .github/scripts/__tests__/sync_pr_lease_contract.test.js
  • .github/scripts/sync_pr_lease_contract.js
  • .github/scripts/sync_pr_merge_contract.js
  • .github/workflows/maint-52-sync-dev-versions.yml
  • .github/workflows/maint-68-sync-consumer-repos.yml
  • .github/workflows/maint-71-merge-sync-prs.yml
  • docs/ops/DURABLE_TRACKING_ISSUES.md
  • tests/workflows/test_workflow_agents_consolidation.py

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

@stranske stranske added the agent:retry Add to trigger agent retry after rate limit or pause label Aug 1, 2026
Comment thread .github/workflows/maint-52-sync-dev-versions.yml Fixed
Comment thread .github/workflows/maint-68-sync-consumer-repos.yml Fixed
Comment thread .github/workflows/maint-68-sync-consumer-repos.yml Fixed
Comment thread .github/workflows/maint-52-sync-dev-versions.yml Fixed
Comment thread .github/workflows/maint-52-sync-dev-versions.yml Fixed
Comment thread .github/workflows/maint-68-sync-consumer-repos.yml Fixed
Comment thread .github/workflows/maint-68-sync-consumer-repos.yml Fixed
@stranske
stranske temporarily deployed to agent-high-privilege August 1, 2026 21:08 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Runner dispatch state for codex on PR #2895. Do not edit.

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

ℹ️ 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 .github/scripts/sync_pr_merge_contract.js Outdated
Comment thread .github/workflows/maint-68-sync-consumer-repos.yml

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

Pull request overview

This PR introduces a “leased delivery attempt” provenance marker for generated sync PRs and begins enforcing that lease contract during automated merge, aligning sync coordination around a durable campaign issue rather than long-lived generated PRs.

Changes:

  • Emit a machine-readable sync-pr-delivery-record/v1 marker (with lease expiry + desired tree hash) in PR bodies created by Maint 68 (consumer sync) and Maint 52 (dev-tool sync).
  • Add a new JS lease-contract module (sync_pr_lease_contract.js) plus unit tests, and wire lease parsing/eligibility into the sync PR merge contract.
  • Update Maint 71 to select merge candidates via the new “merge-eligible” selection path and record delivery-contract blocks in results.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
docs/ops/DURABLE_TRACKING_ISSUES.md Documents the “durable issue, leased PR” model for generated sync deliveries.
.github/workflows/maint-71-merge-sync-prs.yml Uses delivery-record-based merge eligibility when selecting the active sync PR to merge.
.github/workflows/maint-68-sync-consumer-repos.yml Adds delivery-record marker (lease + desired tree hash) to newly created consumer sync PR bodies.
.github/workflows/maint-52-sync-dev-versions.yml Adds delivery-record marker (lease + desired tree hash) to newly created dev-tool sync PR bodies.
.github/scripts/sync_pr_merge_contract.js Adds selectMergeEligibleSyncPr and extends merge reporting to include delivery-contract blocks.
.github/scripts/sync_pr_lease_contract.js Implements delivery-record parsing/validation and merge-eligibility checks.
.github/scripts/tests/sync-pr-merge-contract.test.js Extends merge-contract tests for delivery-record gating and report summary counts.
.github/scripts/tests/sync_pr_lease_contract.test.js Adds tests covering delivery-record formatting/parsing and eligibility decisions.

Comment thread .github/workflows/maint-71-merge-sync-prs.yml Outdated
Comment thread .github/workflows/maint-71-merge-sync-prs.yml Outdated
Comment thread .github/scripts/__tests__/sync-pr-merge-contract.test.js Outdated
Comment thread .github/scripts/__tests__/sync_pr_lease_contract.test.js Outdated
Comment thread .github/workflows/maint-68-sync-consumer-repos.yml
Comment thread .github/workflows/maint-52-sync-dev-versions.yml
Comment thread .github/scripts/sync_pr_merge_contract.js Outdated
@stranske
stranske temporarily deployed to agent-high-privilege August 1, 2026 21:28 — with GitHub Actions Inactive
@stranske

stranske commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

Addressed the current delivery-lease review findings in d8f4503. Existing Maint 52 attempts now renew their marker without restarting unchanged checks; Maint 68 rebuilds and refreshes existing generated attempts; and Maint 71 compares the selected PR head tree against the leased desired tree before merge, while stale predecessors are cleaned before a delivery-contract block is reported. Validation: node --test sync-pr-merge-contract + sync_pr_lease_contract (18 passed), focused pytest delivery/body tests (12 passed), check_gate_diff_quality, dev_check --changed, and git diff --check.

Comment thread .github/workflows/maint-52-sync-dev-versions.yml Fixed
@stranske
stranske temporarily deployed to agent-high-privilege August 1, 2026 21:30 — with GitHub Actions Inactive
@agents-workflows-bot

Copy link
Copy Markdown
Contributor

🤖 Bot Comment Handler

  • Agent: codex
  • Bot comments to address: 9

The agent has been assigned to this PR to address the bot review comments.

Instructions for agent

  1. Implement suggested fixes that improve the code
  2. Skip suggestions that don't apply (note why in your response)

The bot comment handler workflow has prepared context in the artifacts.

… assert

Unquoted HEAD^{tree} tripped shellcheck SC1083 in Parse/lint; the
consolidation test now expects selectMergeEligibleSyncPr after the lease
eligibility wrapper replaced the bare selectActiveSyncPr call site.

Co-authored-by: Cursor <cursoragent@cursor.com>
@stranske
stranske temporarily deployed to agent-high-privilege August 1, 2026 21:42 — with GitHub Actions Inactive
@stranske

stranske commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

Closer CI recovery on fd9d65b0:

  • Parse and lint / actionlint: quoted HEAD^{tree} as 'HEAD^{tree}' in Maint 52/68 run scripts to clear shellcheck SC1083 (literal {/}).
  • Python Tests: updated test_merge_sync_prs_uploads_machine_readable_report_and_hash_input to assert selectMergeEligibleSyncPr (lease-aware wrapper) instead of the old bare selectActiveSyncPr call site in Maint 71 YAML.
  • Validation: actionlint clean on the three changed workflows; focused consolidation test pass; Node delivery-contract tests 18/18.
  • Resolved remaining outdated review threads that were already addressed by the lease/eligibility work on this head.

Next: wait for fresh CI on fd9d65b0; merge when green/review-clear, then apply verify:compare.

@stranske
stranske merged commit d1e5020 into main Aug 1, 2026
51 checks passed
@stranske
stranske deleted the codex/issue-2880-durable-campaign-leases branch August 1, 2026 22:22
@stranske stranske added the verify:compare Compare multiple LLM evaluations label Aug 1, 2026
@stranske
stranske temporarily deployed to agent-high-privilege August 1, 2026 22:23 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Provider Comparison Report

Provider Summary

Provider Model Verdict Confidence Summary
openai gpt-5.6-terra CONCERNS 90% The PR makes a meaningful partial implementation of leased delivery merge eligibility: it adds sync_pr_lease_contract.js, tests newest/unexpired/hash-matching eligibility, and modifies Maint 52,...
anthropic claude-sonnet-5 CONCERNS 75% The PR adds a new sync_pr_lease_contract.js module and corresponding test, and modifies sync_pr_merge_contract.js plus the maint-52/68/71 workflows, addressing part of the merge-eligibility/lease r...
📋 Full Provider Details (click to expand)

openai

  • Model: gpt-5.6-terra
  • Verdict: CONCERNS
  • Confidence: 90%
  • Scores:
    • Correctness: 6.0/10
    • Completeness: 4.0/10
    • Quality: 7.0/10
    • Testing: 5.0/10
    • Risks: 5.0/10
  • Summary: The PR makes a meaningful partial implementation of leased delivery merge eligibility: it adds sync_pr_lease_contract.js, tests newest/unexpired/hash-matching eligibility, and modifies Maint 52, 68, and 71 accordingly. However, several required durable-campaign aspects are absent from the changed code: campaign delivery-record schema/state persistence, tracker/Maint 82 persistence, complete documentation, campaign lifecycle tests, the requested Maint 68 manifest-delivery test, and demonstrated safe migration of legacy unmarked PRs. The implementation is readable and the focused lease test is useful, but the documented acceptance criteria are not fully established.
  • Concerns:
    • The change adds a lease-contract helper and integrates lease information into the merge path, but the required versioned delivery-record schema is not added or updated in .github/scripts/sync_dependency_campaign.js. The diff therefore does not demonstrate persistence of the required campaign URL, plan ID, generation, repository, desired tree hash, source commit, lease expiry, and predecessor/successor lineage in the durable campaign model.
    • The required persistence of terminal disposition and latest desired tree hash through .github/scripts/sync_tracker_state.js and the Maint 82 campaign state is not represented in the changed files. Closing or rejecting a PR in Maint 71 is not by itself evidence that the durable campaign state records exactly one terminal disposition.
    • Documentation coverage is incomplete: only docs/ops/DURABLE_TRACKING_ISSUES.md changes. The specified updates to docs/ops/SYNC_DEPENDENCY_CAMPAIGN.md and docs/ops/CONSUMER_REPO_MAINTENANCE.md are absent.
    • The required campaign lifecycle test is not added or modified. In particular, the diff does not show a test proving that one durable issue survives multiple delivery generations while every generated PR reaches exactly one terminal disposition.
    • The required workflow-level test, tests/workflows/test_sync_manifest_delivery.py, is not added or modified. Consequently, the PR does not demonstrate the key Maint 68 behavior: updating the same current-generation PR when safe and creating a replacement only after a generation or terminal-state transition.
    • The new lease-contract test is narrow. It checks lease/hash eligibility, but the diff does not demonstrate the full integration behavior for predecessor/successor lineage, migration of unmarked already-open PRs, or persistence and durable-issue linkage for blocked transitions with an exact next command.
    • Maint 71 changes appear to provide lease-aware merge gating and handling for superseded/expired deliveries, but the acceptance requirement that blocked transitions create or link a durable source/repository issue with an exact next action is not clearly covered by a dedicated test or durable-state implementation in this diff.

anthropic

  • Model: claude-sonnet-5
  • Verdict: CONCERNS
  • Confidence: 75%
  • Scores:
    • Correctness: 6.0/10
    • Completeness: 3.0/10
    • Quality: 6.0/10
    • Testing: 4.0/10
    • Risks: 5.0/10
  • Summary: The PR adds a new sync_pr_lease_contract.js module and corresponding test, and modifies sync_pr_merge_contract.js plus the maint-52/68/71 workflows, addressing part of the merge-eligibility/lease requirement. However, several core acceptance criteria are not evidenced in the diff: no schema changes in sync_dependency_campaign.js (and no updated test proving durable-issue survival across generations), no persistence changes in sync_tracker_state.js, no new tests/workflows/test_sync_manifest_delivery.py, and only one of three required documentation files was updated. Migration behavior for legacy PRs lacking markers is also not evident. While the implemented lease-contract logic appears internally reasonable and tested, the PR covers only a fraction of the described multi-part feature, so completeness is significantly deficient relative to the stated acceptance criteria.
  • Concerns:
    • No changes to .github/scripts/sync_dependency_campaign.js — the versioned delivery-record schema (campaign issue URL, plan ID, generation, desired tree hash, source commit, lease expiry, predecessor/successor PR refs) required by task Clean up validate_fast.sh Phase 4 TODOs and remove project-specific references #1 is not present in this diff.
    • No changes to .github/scripts/sync_tracker_state.js — terminal disposition and latest desired tree hash persistence required by task chore(codex): bootstrap PR for issue #2 #6 is missing.
    • No new tests/workflows/test_sync_manifest_delivery.py file was added, so the acceptance criterion requiring proof that Maint 68 updates the same-generation PR vs. creates a replacement is unverified.
    • Only docs/ops/DURABLE_TRACKING_ISSUES.md was updated (+9 lines); docs/ops/SYNC_DEPENDENCY_CAMPAIGN.md and docs/ops/CONSUMER_REPO_MAINTENANCE.md were not touched, leaving the 'durable issue, leased PR' rule undocumented in two of three required places.
    • No evidence in the diff of migration behavior for already-open generated PRs lacking a provenance marker (classify-once / lineage inference) as required by the tasks.
    • sync_dependency_campaign.test.js (existing) was not modified to prove the durable issue survives multiple delivery generations with each PR reaching exactly one terminal disposition — this acceptance criterion appears unaddressed.
    • The added sync_pr_lease_contract.js and its test (39 lines) are a reasonable but comparatively narrow slice of the full leased-PR requirement; the deliberate-break scenario (expire fixture / change plan hash, verify failure, then revert) is not clearly demonstrated as a distinct test case.
    • Given the scope described (schema, tracker persistence, migration, 3 docs files, new python test suite) versus the actual diff size (9 files, ~281/-59 lines, no changes to sync_dependency_campaign.js or sync_tracker_state.js), this looks like a partial implementation of the described feature rather than the full scope.

Agreement

  • Verdict: CONCERNS (all providers)
  • Correctness: scores within 1 point (avg 6.0/10, range 6.0-6.0)
  • Completeness: scores within 1 point (avg 3.5/10, range 3.0-4.0)
  • Quality: scores within 1 point (avg 6.5/10, range 6.0-7.0)
  • Testing: scores within 1 point (avg 4.5/10, range 4.0-5.0)
  • Risks: scores within 1 point (avg 5.0/10, range 5.0-5.0)

Disagreement

No major disagreements detected.

Unique Insights

  • openai: The change adds a lease-contract helper and integrates lease information into the merge path, but the required versioned delivery-record schema is not added or updated in .github/scripts/sync_dependency_campaign.js. The diff therefore does not demonstrate persistence of the required campaign URL, plan ID, generation, repository, desired tree hash, source commit, lease expiry, and predecessor/successor lineage in the durable campaign model.; The required persistence of terminal disposition and latest desired tree hash through .github/scripts/sync_tracker_state.js and the Maint 82 campaign state is not represented in the changed files. Closing or rejecting a PR in Maint 71 is not by itself evidence that the durable campaign state records exactly one terminal disposition.; Documentation coverage is incomplete: only docs/ops/DURABLE_TRACKING_ISSUES.md changes. The specified updates to docs/ops/SYNC_DEPENDENCY_CAMPAIGN.md and docs/ops/CONSUMER_REPO_MAINTENANCE.md are absent.; The required campaign lifecycle test is not added or modified. In particular, the diff does not show a test proving that one durable issue survives multiple delivery generations while every generated PR reaches exactly one terminal disposition.; The required workflow-level test, tests/workflows/test_sync_manifest_delivery.py, is not added or modified. Consequently, the PR does not demonstrate the key Maint 68 behavior: updating the same current-generation PR when safe and creating a replacement only after a generation or terminal-state transition.; The new lease-contract test is narrow. It checks lease/hash eligibility, but the diff does not demonstrate the full integration behavior for predecessor/successor lineage, migration of unmarked already-open PRs, or persistence and durable-issue linkage for blocked transitions with an exact next command.; Maint 71 changes appear to provide lease-aware merge gating and handling for superseded/expired deliveries, but the acceptance requirement that blocked transitions create or link a durable source/repository issue with an exact next action is not clearly covered by a dedicated test or durable-state implementation in this diff.
  • anthropic: No changes to .github/scripts/sync_dependency_campaign.js — the versioned delivery-record schema (campaign issue URL, plan ID, generation, desired tree hash, source commit, lease expiry, predecessor/successor PR refs) required by task Clean up validate_fast.sh Phase 4 TODOs and remove project-specific references #1 is not present in this diff.; No changes to .github/scripts/sync_tracker_state.js — terminal disposition and latest desired tree hash persistence required by task chore(codex): bootstrap PR for issue #2 #6 is missing.; No new tests/workflows/test_sync_manifest_delivery.py file was added, so the acceptance criterion requiring proof that Maint 68 updates the same-generation PR vs. creates a replacement is unverified.; Only docs/ops/DURABLE_TRACKING_ISSUES.md was updated (+9 lines); docs/ops/SYNC_DEPENDENCY_CAMPAIGN.md and docs/ops/CONSUMER_REPO_MAINTENANCE.md were not touched, leaving the 'durable issue, leased PR' rule undocumented in two of three required places.; No evidence in the diff of migration behavior for already-open generated PRs lacking a provenance marker (classify-once / lineage inference) as required by the tasks.; sync_dependency_campaign.test.js (existing) was not modified to prove the durable issue survives multiple delivery generations with each PR reaching exactly one terminal disposition — this acceptance criterion appears unaddressed.; The added sync_pr_lease_contract.js and its test (39 lines) are a reasonable but comparatively narrow slice of the full leased-PR requirement; the deliberate-break scenario (expire fixture / change plan hash, verify failure, then revert) is not clearly demonstrated as a distinct test case.; Given the scope described (schema, tracker persistence, migration, 3 docs files, new python test suite) versus the actual diff size (9 files, ~281/-59 lines, no changes to sync_dependency_campaign.js or sync_tracker_state.js), this looks like a partial implementation of the described feature rather than the full scope.

🔍 LangSmith Traces

@stranske

stranske commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

Closer disposition — verifier CONCERNS (not false-positive)

Audited dual-provider verify:compare (openai + anthropic both CONCERNS). Spot-checked against issue #2880 tasks/ACs: the merged diff delivers the lease-contract / merge-eligibility slice, but the campaign schema, tracker persistence, full docs set, lifecycle/manifest-delivery tests, and unmarked-PR migration remain unmet.

Reopened source issue #2880 with a sequencing comment. Leaving this PR's verify:compare label in place; completion debt continues via a bounded follow-up PR, not by reopening merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent:codex Agent-created issues from Codex agent:retry Add to trigger agent retry after rate limit or pause agents:keepalive Use to initiate keepalive functionality with agents autofix Opt-in automated formatting & lint remediation verify:compare Compare multiple LLM evaluations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Dependency/Sync] Use durable campaign issues and leased generated PRs

4 participants