You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Own dashboard execution with durable queue leases - #441
Move dashboard execution under the existing queue leases so a run waiting for a runner cannot block its replacement. Stable and canary work acknowledge success only after calculation, persistence, delivery, publication, and receipt updates succeed.
Execution stays opt-in. After the pause-and-retire cutover, set the GitHub repository variable and Netlify environment to:
PR_DASHBOARD_EXECUTION_MODE=owned
legacy remains the default. paused accepts work without starting new execution.
PR/head refreshes, draft opens, bounded resumable backfills, and reminder write sweeps share the processor. Reminder dry runs stay read-only.
Stable code and dependencies load from promoted immutable pins; canaries use the triggering main commit. Repository policy stays current in both channels.
Enqueue summaries report acceptance, not completion, with an item key, generation, and request ID for progress queries.
Lease loss stops subprocess trees. Failures retry combined work with existing accepted state and delivery receipts. Delivery is not exactly once: an external call can succeed before its receipt persists.
Deployment and rollback instructions cover retiring legacy writers, draining control items before rollback, and preserving queued refreshes. No release promotion or production-mode change is included. This change is independent of #440.
The non-dry sweep only reads pull requests and mutates issue comments (refresh_author_nudges.py uses the issues comment API plus comment minimization), and this same path previously ran with pull-requests: read. Granting pull-requests: write unnecessarily broadens the installation token; keep this permission read-only while toggling only issues.
Adding a backoff here makes the item non-runnable until notBefore, but the drain excludes retry items and finishDispatcher() only dispatches a successor when an item is runnable at that moment. With recovery configured hourly, a 60-second retry can therefore remain idle for nearly an hour unless unrelated work arrives. Add a wake-up mechanism for the earliest notBefore (or keep retries immediately runnable until one exists).
continue is now accepted, but acknowledgmentOutcome() still tells clients that only success, retry, and dead are valid. Include continue in that validation error so malformed requests receive accurate guidance.
…e ref load
Copilot comment:
A failed first preparation leaves this directory behind, but the ref is not cached until all installs finish. If later waves in the same drain need the same ref (the configured repository set exceeds the 16-item wave limit), `load()` reaches this line again and deterministically raises `FileExistsError`, so one transient fetch/install failure poisons that code ref for the rest of the drain. Allow retrying the existing immutable-ref staging directory (or clean it before retrying).
Analysis: Remove any leftover staging directory before preparing a ref, so retries after a failed load succeed.
Upsides: One transient failure no longer poisons the ref for later waves.
Downsides: Discards partial staging contents on retry.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@copilot resolve the merge conflicts in this pull request
Resolved in a58c01b by merging the latest main, preserving both owned-mode guidance and legacy publisher-recovery documentation. Validation passed: 920 Python tests (one skipped), 163 JavaScript tests, and CodeQL with no alerts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Move dashboard execution under the existing queue leases so a run waiting for a runner cannot block its replacement. Stable and canary work acknowledge success only after calculation, persistence, delivery, publication, and receipt updates succeed.
Execution stays opt-in. After the pause-and-retire cutover, set the GitHub repository variable and Netlify environment to:
legacyremains the default.pausedaccepts work without starting new execution.Lease loss stops subprocess trees. Failures retry combined work with existing accepted state and delivery receipts. Delivery is not exactly once: an external call can succeed before its receipt persists.
Deployment and rollback instructions cover retiring legacy writers, draining control items before rollback, and preserving queued refreshes. No release promotion or production-mode change is included. This change is independent of #440.