Repository navigation
Handle queued and in-flight PR lifecycle races - #70141
Conversation
Classify confirmed jobless PR attempts using per-attempt jobs and unique commit/lifecycle evidence, preserving raw conclusions and unknown states. Keep excluded runs out of actionable failure analysis and executed-run metrics.\n\nStop failed checkouts, guard stale safe outputs, preserve intentional closed-event workflows, and lease PR pushes including CI-trigger commits so deleted branches are not recreated. Regenerate compiler-derived workflow locks. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅
|
|
✅ PR Code Quality Reviewer completed the code quality review.
|
|
✅ Test Quality Sentinel completed test quality analysis. Test Quality SentinelOutcome: The agent completed and reported no action. A no-op output alone does not verify that all required work was completed or that publication was possible. Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.
|
|
✅ Ponytail Reviewer completed successfully! Ponytail ReviewerOutcome: The agent completed and reported no action. A no-op output alone does not verify that all required work was completed or that publication was possible. Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.
|
|
✅ Design Decision Gate 🏗️ completed the design decision gate check. See the comment below for the result and any generated ADR draft.
|
Regenerate logs and logs-jsonl schemas for the lifecycle evidence and execution metrics introduced by this PR. Update the nine WASM compiler golden fixtures to include checkout invalidation outputs and notification environment wiring. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
🏗️ Design Decision Gate — ADR RequiredThis PR adds a lot of code to core business logic (479 new lines in 📄 Draft ADR committed: The draft records this decision: PR lifecycle races are handled only on evidence, never as a default excuse for failures.
Sections marked
📋 What to do next
Once an ADR is linked in the PR body, this gate will re-run and check that the implementation matches the decision. ❓ Why ADRs Matter
ADRs create a searchable, permanent record of why the codebase looks the way it does. Future contributors (and your future self) will thank you. 📋 Michael Nygard ADR Format ReferenceAn ADR must contain these four sections to be considered complete:
ADRs are stored in
|
Comment MemoryPeek at saved memory (pr-code-quality-reviewer)Note This comment is managed by comment memory.Expand the saved memory block to view or edit the persistent context for this thread.
|
There was a problem hiding this comment.
Verdict
Request changes — the PR-lifecycle work still has one stale-PR path that reports a real push failure after the PR is already closed, and the obsolete-run classifier throws away branch evidence before it uses it.
Themes
- fallback PR creation still returns
push_failedfor stale PRs instead of skipping - obsolete PR detection rejects multi-PR commit associations before branch filtering, leaving valid stale runs visible
- static review only; I reviewed the diff and nearby source, but did not execute code or tests
🔎 Code quality review by PR Code Quality Reviewer · copilot · gpt54 · 147.3 AIC · ⌖ 10.1 AIC · ⊞ 15.9K
Comment /review to run again
There was a problem hiding this comment.
Skills-Based Review 🧠
Applied /diagnosing-bugs and /tdd (triage classified this as a bug_fix targeting PR lifecycle race conditions). No actionable issues found — approving.
📋 Key Themes & Highlights
Key Themes
- Every behavioral change (obsolete-PR classification, checkout-failure handling, stale-PR rechecks, branch-recreation leases) is paired with focused regression tests that assert the new behavior and remove assertions for the old behavior (e.g.
checkout_pr_branch.test.cjsrewrites the "closed PR" suite to assertsetFailednow fires instead of being swallowed). - The jobs-API evidence gathering (
pkg/cli/logs_pr_lifecycle.go,logs_github_api.go) is conservative by design: ambiguous commit-to-PR associations, incomplete/garbled API responses, and API errors all fall back to "unknown" rather than assertingobsolete_pr, avoiding false-negative suppression of real failures (TestFetchObsoletePREvidence's "ambiguous commit association" and "API failure remains unknown" cases cover this well). isInvalidatedPRMergeCheckoutandcheckout_pr_branch.cjsboth narrow their closure-based suppression to require a specific missing-ref error string, so auth/permission/network failures remain visible — verified by the newit.each(["Authentication failed", "Permission denied", "network error", "exit code 128"])test.getStalePullRequestReasoninpr_lifecycle.cjsis a small, well-named abstraction reused consistently acrosssafe_output_handler_manager.cjs(main loop + deferred retry) andpush_to_pull_request_branch.cjs(activation comment + CI-trigger push), with its own focused unit test file covering staged-preview bypass, closed-event preservation, and HTTP-error passthrough.requireExistingBranch+--force-with-leaseinextra_empty_commit.cjs/push_signed_commits.cjscorrectly refuses to recreate a deleted branch and ties the lease to a resolved 40-hex-char OID rather than trusting an empty/garbled value.
Positive Highlights
- ✅ Clear separation between "unknown" and "confirmed obsolete" evidence states throughout the Go lifecycle code — no run is silently miscategorized when API data is incomplete.
- ✅ Good test hygiene: old assertions for the removed "always warn, never fail" behavior were deleted rather than left dangling, reducing risk of a silent regression back to that behavior.
- ✅ Documentation (
docs/src/content/docs/reference/checkout.md,setup/cli.md) was updated alongside the behavior change.
No specific line-level issue rose to the bar for an inline comment; the diff is large (362 files, mostly lock-file regeneration) but the hand-written logic is well-bounded and consistently tested.
🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · copilot · sonnet50 · 114.9 AIC · ⌖ 13.9 AIC · ⊞ 10.1K
Comment /matt to run again
There was a problem hiding this comment.
🟡 Changes recommended
Ineffective checkout invalidation, missing trigger permissions, and cache correctness issues block approval.
1 open issue
What changed in this PR
Adds handling for queued and in-flight PR lifecycle races, covering obsolete-attempt reporting, checkout failures, and safe-output safeguards.
Changes:
- Preserve attempt-specific job and lifecycle evidence in logs and caches.
- Separate obsolete and jobless attempts in failure analysis and execution metrics.
- Propagate checkout invalidation and add live PR-state safeguards.
- Update tests, documentation, schemas, and generated workflow locks.
Unresolved comments:
- Critical: Checkout invalidation cannot become true in real runs because
exec.execerrors omit Git’s stderr. - Moderate: Missing PR-read permission can break
pull_request_targetsafe outputs in private repositories. - Moderate: Cache handling causes repeated refreshes for unavailable evidence and cache-dependent execution totals.
- Nit: Add regression coverage for legacy-cache lookup behavior.
- Nit: Move lifecycle documentation under its own heading.
| File | Description |
|---|---|
schemas/logs-jsonl.schema.json |
Adds lifecycle and job-count fields. |
pkg/workflow/notify_comment_conclusion_helpers.go |
Passes invalidation to failure handling. |
pkg/workflow/compiler_main_job_helpers.go |
Exports checkout invalidation. |
pkg/workflow/compiler_main_job_helpers_test.go |
Tests invalidation output generation. |
pkg/cli/logs_run_processor.go |
Fetches attempt-specific jobs. |
pkg/cli/logs_orchestrator_filters_test.go |
Updates job-evidence stubs. |
pkg/cli/logs_failure_statistics.go |
Excludes obsolete failure populations. |
pkg/cli/logs_failure_signals.go |
Categorizes jobless metadata signals. |
pkg/cli/logs_failure_clusters.go |
Separates jobless and obsolete attempts. |
pkg/cli/logs_cached_json.go |
Refreshes failed-PR records lacking evidence. |
docs/src/content/docs/reference/checkout.md |
Documents lifecycle safeguards and limits. |
.github/workflows/workflow-normalizer.lock.yml |
Wires checkout invalidation. |
.github/workflows/windows-grower.lock.yml |
Wires checkout invalidation. |
.github/workflows/weekly-safe-outputs-spec-review.lock.yml |
Wires checkout invalidation. |
.github/workflows/video-analyzer.lock.yml |
Wires checkout invalidation. |
.github/workflows/update-astro.lock.yml |
Wires checkout invalidation. |
.github/workflows/typist.lock.yml |
Wires checkout invalidation. |
.github/workflows/test-quality-sentinel.lock.yml |
Wires checkout invalidation. |
.github/workflows/terminal-stylist.lock.yml |
Wires checkout invalidation. |
.github/workflows/super-linter.lock.yml |
Wires checkout invalidation. |
.github/workflows/sub-issue-closer.lock.yml |
Wires checkout invalidation. |
.github/workflows/step-name-alignment.lock.yml |
Wires checkout invalidation. |
.github/workflows/static-analysis-report.lock.yml |
Wires checkout invalidation. |
.github/workflows/stale-repo-identifier.lock.yml |
Wires checkout invalidation. |
.github/workflows/stale-pr-cleanup.lock.yml |
Wires checkout invalidation. |
.github/workflows/squad.lock.yml |
Wires checkout invalidation. |
.github/workflows/squad-plan.lock.yml |
Wires checkout invalidation. |
.github/workflows/squad-implement-worker.lock.yml |
Wires checkout invalidation. |
.github/workflows/squad-game-planner.lock.yml |
Wires checkout invalidation. |
.github/workflows/spec-librarian.lock.yml |
Wires checkout invalidation. |
.github/workflows/spec-extractor.lock.yml |
Wires checkout invalidation. |
.github/workflows/spec-enforcer.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-workflow-call.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-work-queue.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-test-tools.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-temporary-id.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-service-ports.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-pydantic.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-pi.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-pi-sub-agents.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-pi-routed.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-otel-backends.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-opencode.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-kiro.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-goose.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-gemini.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-drive.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-deepseek-harness.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-cursor.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-crush.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-copilot-dynamic-workflow.lock.yml |
Adds PR-state read permission. |
.github/workflows/smoke-copilot-auto.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-codex.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-claude.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-ci.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-builtin-ledgers.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-aider.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-agy.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-agent-scoped-approved.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-agent-public-none.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-agent-public-approved.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-agent-all-none.lock.yml |
Wires checkout invalidation. |
.github/workflows/smoke-agent-all-merged.lock.yml |
Wires checkout invalidation. |
.github/workflows/skillet.lock.yml |
Wires checkout invalidation. |
.github/workflows/sighthound-security-scan.lock.yml |
Wires checkout invalidation. |
.github/workflows/sergo.lock.yml |
Wires checkout invalidation. |
.github/workflows/semantic-function-refactor.lock.yml |
Wires checkout invalidation. |
.github/workflows/security-review.lock.yml |
Wires checkout invalidation. |
.github/workflows/scout.lock.yml |
Wires checkout invalidation. |
.github/workflows/schema-feature-coverage.lock.yml |
Wires checkout invalidation. |
.github/workflows/schema-consistency-checker.lock.yml |
Wires checkout invalidation. |
.github/workflows/safe-output-health.lock.yml |
Wires checkout invalidation. |
.github/workflows/research.lock.yml |
Wires checkout invalidation. |
.github/workflows/repo-tree-map.lock.yml |
Exports invalidation status. |
.github/workflows/repo-audit-analyzer.lock.yml |
Wires checkout invalidation. |
.github/workflows/refactoring-cadence.lock.yml |
Wires checkout invalidation. |
.github/workflows/python-data-charts.lock.yml |
Wires checkout invalidation. |
.github/workflows/purelock.lock.yml |
Wires checkout invalidation. |
.github/workflows/prompt-clustering-analysis.lock.yml |
Wires checkout invalidation. |
.github/workflows/pr-sous-chef.lock.yml |
Wires checkout invalidation. |
.github/workflows/pr-code-quality-reviewer.lock.yml |
Wires checkout invalidation. |
.github/workflows/portfolio-analyst.lock.yml |
Wires checkout invalidation. |
.github/workflows/ponytail-reviewer.lock.yml |
Wires checkout invalidation. |
.github/workflows/poem-bot.lock.yml |
Wires checkout invalidation. |
.github/workflows/pdf-summary.lock.yml |
Wires checkout invalidation. |
.github/workflows/outcome-collector.lock.yml |
Wires checkout invalidation. |
.github/workflows/notion-issue-summary.lock.yml |
Wires checkout invalidation. |
.github/workflows/necromancer.lock.yml |
Wires checkout invalidation. |
.github/workflows/metrics-collector.lock.yml |
Wires checkout invalidation. |
.github/workflows/lockfile-stats.lock.yml |
Wires checkout invalidation. |
.github/workflows/linter-miner.lock.yml |
Wires checkout invalidation. |
.github/workflows/lint-monster.lock.yml |
Wires checkout invalidation. |
.github/workflows/issue-monster.lock.yml |
Wires checkout invalidation. |
.github/workflows/issue-arborist.lock.yml |
Wires checkout invalidation. |
.github/workflows/instructions-janitor.lock.yml |
Wires checkout invalidation. |
.github/workflows/hourly-ci-cleaner.lock.yml |
Wires checkout invalidation. |
.github/workflows/hippo-embed.lock.yml |
Wires checkout invalidation. |
.github/workflows/grumpy-reviewer.lock.yml |
Wires checkout invalidation. |
.github/workflows/gpclean.lock.yml |
Wires checkout invalidation. |
.github/workflows/go-pattern-detector.lock.yml |
Wires checkout invalidation. |
.github/workflows/go-logger.lock.yml |
Wires checkout invalidation. |
.github/workflows/go-fan.lock.yml |
Wires checkout invalidation. |
.github/workflows/github-remote-mcp-auth-test.lock.yml |
Wires checkout invalidation. |
.github/workflows/github-mcp-tools-report.lock.yml |
Wires checkout invalidation. |
.github/workflows/functional-pragmatist.lock.yml |
Wires checkout invalidation. |
.github/workflows/front-page-copy-guard.lock.yml |
Wires checkout invalidation. |
.github/workflows/feature-grower.lock.yml |
Wires checkout invalidation. |
.github/workflows/example-workflow-analyzer.lock.yml |
Wires checkout invalidation. |
.github/workflows/example-permissions-warning.lock.yml |
Wires checkout invalidation. |
.github/workflows/example-failure-category-filter.lock.yml |
Wires checkout invalidation. |
.github/workflows/evoskill-evolver.lock.yml |
Wires checkout invalidation. |
.github/workflows/eslint-refiner.lock.yml |
Exports invalidation status. |
.github/workflows/eslint-monster.lock.yml |
Exports invalidation status. |
.github/workflows/eslint-miner.lock.yml |
Exports invalidation status. |
.github/workflows/eslint-factory-dispatcher.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-pydantic-ai.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-pi.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-opencode.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-kiro.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-goose.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-gemini.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-dispatcher.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-deepseek-harness.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-cursor.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-crush.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-copilot.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-codex.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-claude.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-aider.lock.yml |
Exports invalidation status. |
.github/workflows/engine-conformance-agy.lock.yml |
Exports invalidation status. |
.github/workflows/duplicate-code-detector.lock.yml |
Wires checkout invalidation. |
.github/workflows/draft-pr-cleanup.lock.yml |
Wires checkout invalidation. |
.github/workflows/docs-noob-tester.lock.yml |
Wires checkout invalidation. |
.github/workflows/dictation-prompt.lock.yml |
Wires checkout invalidation. |
.github/workflows/dev-hawk.lock.yml |
Wires checkout invalidation. |
.github/workflows/detection-analysis-report.lock.yml |
Wires checkout invalidation. |
.github/workflows/designer-drift-audit.lock.yml |
Wires checkout invalidation. |
.github/workflows/design-decision-gate.lock.yml |
Wires checkout invalidation. |
.github/workflows/dependabot-go-checker.lock.yml |
Wires checkout invalidation. |
.github/workflows/delight.lock.yml |
Wires checkout invalidation. |
.github/workflows/deep-report.lock.yml |
Exports invalidation status. |
.github/workflows/dead-code-remover.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-workflow-updater.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-workflow-security-model.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-token-consumption-report.lock.yml |
Exports invalidation status. |
.github/workflows/daily-team-evolution-insights.lock.yml |
Exports invalidation status. |
.github/workflows/daily-syntax-error-quality.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-storify.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-squid-image-scan.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-spending-forecast.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-semgrep-scan.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-security-red-team.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-secrets-analysis.lock.yml |
Exports invalidation status. |
.github/workflows/daily-safe-outputs-conformance.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-safe-output-optimizer.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-safe-output-integrator.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-report-dispatcher.lock.yml |
Exports invalidation status. |
.github/workflows/daily-repo-chronicle.lock.yml |
Exports invalidation status. |
.github/workflows/daily-regulatory.lock.yml |
Exports invalidation status. |
.github/workflows/daily-performance-summary.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-observability-report.lock.yml |
Exports invalidation status. |
.github/workflows/daily-news.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-model-inventory.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-max-ai-credits-test.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-malicious-code-scan.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-issues-report.lock.yml |
Exports invalidation status. |
.github/workflows/daily-graft-intelligence.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-grader-audit.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-go-test-stubs-aider.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-geo-optimizer.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-function-namer.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-firewall-report.lock.yml |
Exports invalidation status. |
.github/workflows/daily-file-diet.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-fact.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-experiment-report.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-evals-report.lock.yml |
Exports invalidation status. |
.github/workflows/daily-ecosystem-explorer.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-documentation-diagram.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-doc-updater.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-doc-healer.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-credit-limit-test.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-compiler-quality.lock.yml |
Exports invalidation status. |
.github/workflows/daily-code-metrics.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-code-debt-aider.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-cli-tools-tester.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-cli-performance.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-choice-test.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-architecture-diagram.lock.yml |
Wires checkout invalidation. |
.github/workflows/daily-ambient-context-optimizer.lock.yml |
Wires checkout invalidation. |
.github/workflows/craft.lock.yml |
Wires checkout invalidation. |
.github/workflows/copilot-session-insights.lock.yml |
Wires checkout invalidation. |
.github/workflows/copilot-pr-prompt-analysis.lock.yml |
Wires checkout invalidation. |
.github/workflows/copilot-pr-nlp-analysis.lock.yml |
Wires checkout invalidation. |
.github/workflows/copilot-pr-merged-report.lock.yml |
Wires checkout invalidation. |
.github/workflows/copilot-cli-deep-research.lock.yml |
Wires checkout invalidation. |
.github/workflows/copilot-centralization-optimizer.lock.yml |
Wires checkout invalidation. |
.github/workflows/copilot-centralization-drilldown.lock.yml |
Wires checkout invalidation. |
.github/workflows/copilot-agent-analysis.lock.yml |
Wires checkout invalidation. |
.github/workflows/commit-changes-analyzer.lock.yml |
Wires checkout invalidation. |
.github/workflows/code-scanning-fixer.lock.yml |
Wires checkout invalidation. |
.github/workflows/cloclo.lock.yml |
Wires checkout invalidation. |
.github/workflows/cli-version-checker.lock.yml |
Wires checkout invalidation. |
.github/workflows/cli-consistency-checker.lock.yml |
Wires checkout invalidation. |
.github/workflows/ci-coach.lock.yml |
Wires checkout invalidation. |
.github/workflows/changeset.lock.yml |
Wires checkout invalidation. |
.github/workflows/breaking-change-checker.lock.yml |
Wires checkout invalidation. |
.github/workflows/bot-detection.lock.yml |
Wires checkout invalidation. |
.github/workflows/blog-auditor.lock.yml |
Wires checkout invalidation. |
.github/workflows/aw-issue-clustering.lock.yml |
Wires checkout invalidation. |
.github/workflows/aw-failure-investigator.lock.yml |
Wires checkout invalidation. |
.github/workflows/auto-triage-issues.lock.yml |
Wires checkout invalidation. |
.github/workflows/audit-workflows.lock.yml |
Wires checkout invalidation. |
.github/workflows/artifacts-summary.lock.yml |
Exports invalidation status. |
.github/workflows/architecture-guardian.lock.yml |
Wires checkout invalidation. |
.github/workflows/archie.lock.yml |
Wires checkout invalidation. |
.github/workflows/approach-validator.lock.yml |
Wires checkout invalidation. |
.github/workflows/api-consumption-report.lock.yml |
Wires checkout invalidation. |
.github/workflows/agent-performance-analyzer.lock.yml |
Wires checkout invalidation. |
.github/workflows/agent-job-health.lock.yml |
Wires checkout invalidation. |
.github/workflows/actions-aw-linter-factory.lock.yml |
Wires checkout invalidation. |
.github/workflows/ab-testing-advisor.lock.yml |
Wires checkout invalidation. |
Review effort: Max
Disambiguate commit associations by affirmative branch evidence, skip obsolete non-fast-forward fallbacks without hiding real push failures, inspect captured fetch stderr, and decode binary job logs before classifying missing refs. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Record attempt-specific lifecycle evidence, branch disambiguation, checkout and safe-output safeguards, deletion-safe writes, alternatives, and platform race limitations. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Regarding the skills-review completion notice: no code change is needed because this notification requests none. The associated review approved without actionable findings; completion of that review is not a claim about current CI. |
|
Regarding the code-quality completion notice: the actionable inline findings were addressed in df5b89a, with a reply and resolution on each thread. The notification itself requires no additional change. |
|
Regarding the Test Quality Sentinel result: no code change is needed because it reports no actionable finding. Its no-action status is not treated as proof of publication or current CI success. |
|
Regarding the Ponytail Reviewer result: no code change is needed because it requests none. Its reported-no-action outcome does not establish publication or current CI success. |
|
Regarding the design-gate completion notice: reviewed the accompanying ADR requirement and addressed it in ed9ce82. The completed record is now linked in the PR body. |
|
Accepted the ADR requirement: added and linked ADR-70141 in ed9ce82, documenting branch-aware evidence, alternatives including concurrency, and the remaining race limits. No prior draft existed locally, so this record was prepared from the implementation and leaves maintainer acceptance explicit rather than inventing approval. |
|
Regarding the managed review-memory snapshot: its branch-association and stale-fallback findings were addressed in df5b89a. No additional code change is needed, and the historical memory and generated metadata are left unchanged. |
|
@copilot address the following outstanding work in one pass:
Push the necessary fixes, reply to each listed review thread and resolve it when addressed. Ignore feedback already answered or resolved. Use the pr-finisher skill and stop when only human review or CI remains; do not trigger CI. Sous-chef head: ed9ce82
|
…spork Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Merged the latest |
|
🎉 This pull request is included in a new release. Release: |

Summary
obsolete_pronly with an affirmative empty Jobs API response for that exact attempt, a unique commit-to-PR association, and PR closure during the attempt's queue/finalization window. Association still works when the PR head advanced before merge.ADR: ADR-70141: Evidence-Based Handling of Queued and In-Flight PR Lifecycle Races
Validation
make agent-report-progress: impacted Go unit tests and 7 JavaScript suites passed (1,342 passed, 3 skipped). Initial Go lint findings were corrected afterward.make agent-report-progress-no-test: final formatting, build, scoped Go/custom/JavaScript lint, schema freshness, and workflow-drift gate passed after those corrections.go test ./pkg/cli ./pkg/workflowlifecycle/compiler regressions and cache/health consistency tests passed after the final Go refactor.npm run typecheck --silentpassed.Platform limits
An unexecuted workflow is not healthy. No in-job guard can change GitHub's pre-job conclusion. Unknown API evidence, ambiguous PR associations, explicit startup-validation conclusions, observed failure signals, and job-backed failures are not classified as obsolete. Live-state checks cannot atomically lock a PR against closure between the check and a GitHub write; branch leases separately prevent recreating a deleted PR branch.