Skip to content

fix(sync): safely refresh matching leased deliveries - #2901

Merged
stranske merged 4 commits into
mainfrom
closer/followup-2880-delivery-ac
Aug 2, 2026
Merged

fix(sync): safely refresh matching leased deliveries#2901
stranske merged 4 commits into
mainfrom
closer/followup-2880-delivery-ac

Conversation

@stranske

@stranske stranske commented Aug 2, 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.

Summary by CodeRabbit

  • Bug Fixes

    • Improved synchronization of existing pull requests by avoiding unnecessary commits and pushes when no changes are needed.
    • Safely refreshes changed pull requests while preserving branch updates.
    • Prevents expired or completed delivery attempts from being considered eligible for merging.
  • Tests

    • Added coverage for selecting the latest eligible pull request and marking older ones as stale.
    • Added regression tests for matching and updated delivery scenarios.

Copilot AI review requested due to automatic review settings August 2, 2026 03:27
@cursor

cursor Bot commented Aug 2, 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 2, 2026

Copy link
Copy Markdown

Review Change Stack

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: 46 minutes

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: ee5f991d-a6f5-47e1-9701-6df220926ef7

📥 Commits

Reviewing files that changed from the base of the PR and between c145774 and bf0ddab.

📒 Files selected for processing (3)
  • .github/scripts/__tests__/sync_pr_lease_contract.test.js
  • .github/workflows/maint-68-sync-consumer-repos.yml
  • tests/workflows/test_sync_manifest_delivery.py
📝 Walkthrough

Walkthrough

Maint 68 now preserves an existing sync PR when its base and generated tree match. It records branch metadata, uses lease-protected updates for changed branches, and adds tests for branch refresh and merge eligibility.

Changes

Sync PR safeguards

Layer / File(s) Summary
Merge eligibility contract
.github/scripts/__tests__/sync_pr_lease_contract.test.js
Tests select the newest matching pull request and reject expired or terminal delivery records.
Same-generation branch refresh
.github/workflows/maint-68-sync-consumer-repos.yml, tests/workflows/test_sync_manifest_delivery.py
Maint 68 compares existing branch base and tree values with the desired state. Matching branches skip commit and push. Changed existing branches use --force-with-lease; new branches use a normal push.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related issues

  • Issue 2881: Relates to shared sync PR eligibility and branch refresh safeguards.
  • Issue 2884: Relates to leased generated PR behavior and eligibility checks.

Possibly related PRs

Sequence Diagram(s)

sequenceDiagram
  participant Maint68Workflow
  participant ConsumerRepository
  participant GitHubPR
  Maint68Workflow->>ConsumerRepository: Fetch existing branch metadata
  Maint68Workflow->>ConsumerRepository: Compute desired tree
  alt Existing base and tree match
    Maint68Workflow->>GitHubPR: Refresh existing PR without commit or push
  else Existing branch differs
    Maint68Workflow->>ConsumerRepository: Force-push with head-specific lease
  else Branch does not exist
    Maint68Workflow->>ConsumerRepository: Push new branch normally
  end
Loading

Suggested labels: verify:compare

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The changes cover safe Maint 68 refresh and merge-eligibility tests, but omit evidence for schema, terminal states, persistence, migration, documentation, and Maint 71 handling. Implement or include the linked contract changes for schema, provenance, terminal-state persistence, migration, documentation, and Maint 71 merge handling.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the safe refresh behavior implemented for matching leased sync deliveries.
Out of Scope Changes check ✅ Passed The workflow changes and regression tests directly support the linked issue objectives for safely refreshing leased sync deliveries.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ 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 closer/followup-2880-delivery-ac

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

@stranske stranske added agent:codex Agent-created issues from Codex agents:keepalive Use to initiate keepalive functionality with agents labels Aug 2, 2026
@stranske
stranske had a problem deploying to agent-high-privilege August 2, 2026 03:28 — with GitHub Actions Error
@stranske stranske added autofix Opt-in automated formatting & lint remediation agent:retry Add to trigger agent retry after rate limit or pause follow-up codex-automation labels Aug 2, 2026
Comment thread .github/workflows/maint-68-sync-consumer-repos.yml
Comment thread .github/workflows/maint-68-sync-consumer-repos.yml
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

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

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

Updates the consumer sync delivery contract so Maint 68 can safely keep an existing current-generation sync PR up to date by comparing the remote PR head’s base/tree against the newly staged desired tree, only refreshing the lease when it’s an exact match and otherwise using a --force-with-lease guarded refresh. Adds regression coverage for the refreshed Maint 68 behavior and for merge-eligibility selection of the newest matching generation.

Changes:

  • Maint 68 now fetches the existing sync branch head, computes base/tree hashes, and refreshes only a matching delivery attempt (else refreshes via --force-with-lease).
  • Adds a workflow-level regression test asserting the new Maint 68 refresh/lease-guard contract is present.
  • Extends the lease/merge contract test suite to cover “newest matching generation” selection and terminal/expired ineligibility.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
.github/workflows/maint-68-sync-consumer-repos.yml Adds base/tree hash comparison + --force-with-lease guarding to safely refresh only matching leased deliveries.
tests/workflows/test_sync_manifest_delivery.py Adds a regression test that asserts the new Maint 68 refresh/lease-guard shell contract exists.
.github/scripts/__tests__/sync_pr_lease_contract.test.js Adds selection coverage ensuring only the newest matching generation is merge-eligible and terminal/expired records are ineligible.

Comment thread .github/workflows/maint-68-sync-consumer-repos.yml Outdated

@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: 9424cbd960

ℹ️ 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/workflows/maint-68-sync-consumer-repos.yml Outdated
@stranske

stranske commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Runner dispatch state for autofix on PR #2901. Do not edit.

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Autofix updated these files:

  • tests/workflows/test_sync_manifest_delivery.py

@agents-workflows-bot
agents-workflows-bot Bot temporarily deployed to agent-high-privilege August 2, 2026 03:39 Inactive
Require an unexpired non-terminal delivery marker before refreshing an
existing same-generation sync PR, configure git credentials before the
early fetch, and keep Black formatting on the Maint 68 contract test.

Co-authored-by: Cursor <cursoragent@cursor.com>
@stranske

stranske commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Closer recovery (cursor) — lint + review threads

Head: 9ad58ae6 on closer/followup-2880-delivery-ac

Fixes

  1. Black/lint-format: tests/workflows/test_sync_manifest_delivery.py kept Black-clean (autofix c1457747 + contract assertions).
  2. Copilot (credential order): configure credential.helper with GH_TOKEN before the early git fetch of an existing sync branch.
  3. Codex P1 (lease gate): lease-only refresh requires a current sync-pr-delivery-record/v1 (unexpired, non-terminal, generation-matched via parseDeliveryRecord/mergeEligibility). Same base/tree with a bad/missing marker → existing_pr_not_refreshable (leave for Maint 71).

Validation

  • pytest tests/workflows/test_sync_manifest_delivery.py (+ maint82 contract) → 16/16
  • node --test lease + merge-contract suites → 24/24
  • black --check --fast --line-length 100 on the contract test → clean

Fresh CI on 9ad58ae6 is in progress; not polling.

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🤖 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 @.github/scripts/__tests__/sync_pr_lease_contract.test.js:
- Around line 41-67: Update the test around selectMergeEligibleSyncPr so both
old and newest candidates match syncHash: 'new' while retaining different
created_at values. Keep the candidates otherwise distinguishable, then assert
newest is active and old is stale to verify selection uses recency rather than
generation matching alone.

In `@tests/workflows/test_sync_manifest_delivery.py`:
- Around line 250-263: The test
test_maint68_refreshes_only_a_same_base_and_tree_delivery_attempt must verify
the no-op matching_existing path skips both git commit and git push, while the
mismatch path performs the lease-protected force push. Extend the source
assertions to cover the conditional commit/push structure and distinguish
behavior for matching versus non-matching deliveries.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: f7ddd5fd-d2ca-4525-bc44-9553aab62d39

📥 Commits

Reviewing files that changed from the base of the PR and between df80ffd and c145774.

📒 Files selected for processing (3)
  • .github/scripts/__tests__/sync_pr_lease_contract.test.js
  • .github/workflows/maint-68-sync-consumer-repos.yml
  • tests/workflows/test_sync_manifest_delivery.py

Comment thread .github/scripts/__tests__/sync_pr_lease_contract.test.js
Comment thread tests/workflows/test_sync_manifest_delivery.py Outdated
@stranske
stranske temporarily deployed to agent-high-privilege August 2, 2026 03:41 — with GitHub Actions Inactive
@agents-workflows-bot

Copy link
Copy Markdown
Contributor

🤖 Bot Comment Handler

  • Agent: codex
  • Bot comments to address: 2

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.

@stranske

stranske commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Addressed the two current CodeRabbit test findings and the Maint 52 ShellCheck failure in bf0ddabb: the lease selector now proves recency when both candidates match; the workflow contract test proves a matching delivery skips commit/push while mismatches retain the force-with-lease path; and the credential helper uses a literal runtime token expression without the false SC2016 report. Validation: actionlint, Node lease + merge-contract suites (24/24), pytest sync-manifest + Maint 82 (16/16), Black, and Ruff all pass.

@stranske
stranske temporarily deployed to agent-high-privilege August 2, 2026 04:26 — with GitHub Actions Inactive
@stranske
stranske merged commit 376c3d7 into main Aug 2, 2026
51 checks passed
@stranske
stranske deleted the closer/followup-2880-delivery-ac branch August 2, 2026 04:36
@stranske stranske added the verify:compare Compare multiple LLM evaluations label Aug 2, 2026
@stranske
stranske temporarily deployed to agent-high-privilege August 2, 2026 04:36 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Provider Comparison Report

Provider Summary

Provider Model Verdict Confidence Summary
openai gpt-5.6-terra CONCERNS 90% This change appears to improve Maint 68's handling of an existing generated PR and adds targeted coverage for refresh/replacement behavior. However, the documented acceptance criteria define a broa...
anthropic claude-sonnet-5 CONCERNS 78% This PR modifies maint-68-sync-consumer-repos.yml to add refresh-vs-replace logic for existing leased PRs, plus minimal test additions in sync_pr_lease_contract.test.js and test_sync_manifest_deliv...
📋 Full Provider Details (click to expand)

openai

  • Model: gpt-5.6-terra
  • Verdict: CONCERNS
  • Confidence: 90%
  • Scores:
    • Correctness: 6.0/10
    • Completeness: 3.0/10
    • Quality: 7.0/10
    • Testing: 5.0/10
    • Risks: 5.0/10
  • Summary: This change appears to improve Maint 68's handling of an existing generated PR and adds targeted coverage for refresh/replacement behavior. However, the documented acceptance criteria define a broader durable-campaign/leased-PR contract. The diff contains no corresponding schema, provenance emission in both producer workflows, merge-gate enforcement, terminal-state persistence, migration, or documentation work. As a result, the PR is a useful partial implementation but does not demonstrate complete fulfillment of the stated acceptance criteria.
  • Concerns:
    • The diff addresses only part of the documented leased-delivery design: it modifies Maint 68 and adds focused tests, but does not modify sync_dependency_campaign.js to introduce the required versioned delivery-record schema.
    • There are no changes to Maint 52 to emit the required machine-readable provenance marker, nor changes to Maint 71 or sync_pr_merge_contract.js to enforce that only the newest unexpired, plan/tree-matching delivery is merge-eligible.
    • The required terminal-disposition handling (merged, superseded, expired, blocked), blocked-issue linkage with an exact next action, tracker-state persistence, and Maint 82 campaign-state persistence are not implemented in this diff.
    • The required operational documentation updates and migration behavior for already-open markerless generated PRs are absent.
    • The added sync_pr_lease_contract test is small and does not, from the changed-file scope, establish the full merge contract: superseded/expired PR closing behavior, blocked durable-issue records, review-debt/required-check interaction, and explicit deliberate-break coverage remain unproven.
    • The changed workflow test helps validate same-generation update versus replacement behavior, but the acceptance criteria also require end-to-end lineage, terminal-state, and merge-eligibility behavior that is not covered by the modified tests.

anthropic

  • Model: claude-sonnet-5
  • Verdict: CONCERNS
  • Confidence: 78%
  • Scores:
    • Correctness: 5.0/10
    • Completeness: 3.0/10
    • Quality: 6.0/10
    • Testing: 4.0/10
    • Risks: 5.0/10
  • Summary: This PR modifies maint-68-sync-consumer-repos.yml to add refresh-vs-replace logic for existing leased PRs, plus minimal test additions in sync_pr_lease_contract.test.js and test_sync_manifest_delivery.py. However, the acceptance criteria for PR fix(sync): safely refresh matching leased deliveries #2901 describe a much broader change set spanning the delivery-record schema in sync_dependency_campaign.js, merge-eligibility enforcement in sync_pr_merge_contract.js, Maint 71 workflow updates for superseded/expired PR handling, persistence via sync_tracker_state.js, and documentation updates — none of which appear in this diff. The new test files are small (36 lines each) and likely only validate the narrow Maint 68 change rather than the full lease/merge-eligibility contract. While the implemented portion (Maint 68 refresh behavior) appears reasonable and CI passed, the PR as evaluated against its full documented acceptance criteria list is substantially incomplete, particularly missing merge-contract enforcement and Maint 71 changes, both explicitly called out as required in the criteria.
  • Concerns:
    • The PR touches only 3 files (maint-68 workflow + two test files) while the documented tasks require changes across at least 8 files: .github/scripts/sync_dependency_campaign.js, .github/scripts/sync_pr_merge_contract.js, .github/workflows/maint-52-sync-dev-versions.yml, .github/workflows/maint-71-merge-sync-prs.yml, .github/scripts/sync_tracker_state.js, and three docs files (SYNC_DEPENDENCY_CAMPAIGN.md, DURABLE_TRACKING_ISSUES.md, CONSUMER_REPO_MAINTENANCE.md). None of these are modified in this diff.
    • The acceptance criterion requiring sync_pr_lease_contract.test.js to prove merge-eligibility logic (newest unexpired PR whose tree hash matches current plan) implies corresponding production logic in sync_pr_merge_contract.js, which is entirely untouched — the new 36-line test file cannot be validating real merge-eligibility enforcement without that implementation.
    • The acceptance criterion that Maint 71 report/close superseded or expired PRs without merging is unaddressed since maint-71 workflow file is not part of the diff.
    • No changes to sync_dependency_campaign.js mean the versioned delivery-record schema (campaign URL, plan ID, generation, tree hash, lease expiry, predecessor/successor refs) required by the first task is not demonstrably added in this PR.
    • No migration behavior for already-open generated PRs lacking markers is visible in the diff.
    • Documentation updates required by the 'durable issue, leased PR' rule are absent.
    • The deliberate-break test scenario (expire fixture / change plan hash, verify failure, then revert) is not evidenced in the 36-line test additions shown.
    • Given the very small diff size relative to the scope of the acceptance criteria, it appears this PR implements only a narrow slice (Maint 68 refresh logic) of the larger campaign/lease system described, leaving most acceptance criteria unmet by this specific change set.

Agreement

  • Verdict: CONCERNS (all providers)
  • Correctness: scores within 1 point (avg 5.5/10, range 5.0-6.0)
  • Completeness: scores within 1 point (avg 3.0/10, range 3.0-3.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 diff addresses only part of the documented leased-delivery design: it modifies Maint 68 and adds focused tests, but does not modify sync_dependency_campaign.js to introduce the required versioned delivery-record schema.; There are no changes to Maint 52 to emit the required machine-readable provenance marker, nor changes to Maint 71 or sync_pr_merge_contract.js to enforce that only the newest unexpired, plan/tree-matching delivery is merge-eligible.; The required terminal-disposition handling (merged, superseded, expired, blocked), blocked-issue linkage with an exact next action, tracker-state persistence, and Maint 82 campaign-state persistence are not implemented in this diff.; The required operational documentation updates and migration behavior for already-open markerless generated PRs are absent.; The added sync_pr_lease_contract test is small and does not, from the changed-file scope, establish the full merge contract: superseded/expired PR closing behavior, blocked durable-issue records, review-debt/required-check interaction, and explicit deliberate-break coverage remain unproven.; The changed workflow test helps validate same-generation update versus replacement behavior, but the acceptance criteria also require end-to-end lineage, terminal-state, and merge-eligibility behavior that is not covered by the modified tests.
  • anthropic: The PR touches only 3 files (maint-68 workflow + two test files) while the documented tasks require changes across at least 8 files: .github/scripts/sync_dependency_campaign.js, .github/scripts/sync_pr_merge_contract.js, .github/workflows/maint-52-sync-dev-versions.yml, .github/workflows/maint-71-merge-sync-prs.yml, .github/scripts/sync_tracker_state.js, and three docs files (SYNC_DEPENDENCY_CAMPAIGN.md, DURABLE_TRACKING_ISSUES.md, CONSUMER_REPO_MAINTENANCE.md). None of these are modified in this diff.; The acceptance criterion requiring sync_pr_lease_contract.test.js to prove merge-eligibility logic (newest unexpired PR whose tree hash matches current plan) implies corresponding production logic in sync_pr_merge_contract.js, which is entirely untouched — the new 36-line test file cannot be validating real merge-eligibility enforcement without that implementation.; The acceptance criterion that Maint 71 report/close superseded or expired PRs without merging is unaddressed since maint-71 workflow file is not part of the diff.; No changes to sync_dependency_campaign.js mean the versioned delivery-record schema (campaign URL, plan ID, generation, tree hash, lease expiry, predecessor/successor refs) required by the first task is not demonstrably added in this PR.; No migration behavior for already-open generated PRs lacking markers is visible in the diff.; Documentation updates required by the 'durable issue, leased PR' rule are absent.; The deliberate-break test scenario (expire fixture / change plan hash, verify failure, then revert) is not evidenced in the 36-line test additions shown.; Given the very small diff size relative to the scope of the acceptance criteria, it appears this PR implements only a narrow slice (Maint 68 refresh logic) of the larger campaign/lease system described, leaving most acceptance criteria unmet by this specific change set.

🔍 LangSmith Traces

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:patch autofix Opt-in automated formatting & lint remediation codex-automation follow-up 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