Skip to content

fix(ci): retry platform checkout fetch timeouts#97912

Merged
RomneyDa merged 1 commit into
mainfrom
codex/windows-checkout-fetch-retry
Jun 29, 2026
Merged

fix(ci): retry platform checkout fetch timeouts#97912
RomneyDa merged 1 commit into
mainfrom
codex/windows-checkout-fetch-retry

Conversation

@RomneyDa

Copy link
Copy Markdown
Member

Related: https://github.com/openclaw/openclaw/actions/runs/28392342787/attempts/1?pr=95920

What Problem This Solves

Resolves a problem where platform CI jobs could fail before tests ran when the manual checkout fetch hung or timed out on a transient Git transport issue. The observed failure was checks-windows-node-test exiting during Checkout with fatal: fetch-pack: invalid index-pack output and exit code 124; rerunning the same run and SHA succeeded.

Why This Change Was Made

The platform checkout helpers already bound fetch duration without relying on GNU timeout. This keeps that bounded process-kill behavior and adds the same three-attempt retry shape used by other CI checkout paths for timeout-style fetch failures.

User Impact

No product behavior changes. CI operators and contributors should see fewer unrelated Windows/macOS/iOS platform flakes caused by transient checkout fetch timeouts.

Evidence

  • node scripts/run-vitest.mjs test/scripts/ci-workflow-guards.test.ts
  • actionlint .github/workflows/ci.yml
  • git diff --check
  • .agents/skills/autoreview/scripts/autoreview --mode local -> clean, no accepted/actionable findings

@openclaw-barnacle openclaw-barnacle Bot added size: S maintainer Maintainer-authored PR labels Jun 29, 2026
@clawsweeper

clawsweeper Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 29, 2026, 4:10 PM ET / 20:10 UTC.

Summary
The PR anchors the shared Windows/macOS/iOS checkout step, adds three-attempt retry handling for timeout-style fetch exits, and extends the CI workflow guard test.

PR surface: Tests +11, Config -77. Total -66 across 2 files.

Reproducibility: no. deterministic current-main reproducer was established. The linked GitHub Actions run failed in checks-windows-node-test on attempt 1 and passed on attempt 2, while source inspection shows current main exits after one timeout-style platform fetch failure.

Review metrics: 1 noteworthy metric.

  • Platform checkout retry surfaces: 4 checkout steps changed. The same retry wrapper now controls Windows, macOS Node, macOS Swift, and iOS checkout before tests run.

Root-cause cluster
Relationship: canonical
Canonical: #97912
Summary: This PR is the focused checkout-retry fix for the platform CI timeout flake; prior merged PRs addressed adjacent manual-fetch and timeout-budget pieces.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🌊 off-meta tidepool
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • none.

Risk before merge

  • [P1] The diff changes checkout control flow before tests run for Windows, macOS Node, macOS Swift, and iOS jobs, so a shell or YAML-anchor mistake could block platform CI before normal validation starts.
  • [P1] Exact-head CI exercised workflow syntax, guard coverage, and Windows checkout, but macOS Swift and iOS were skipped by preflight and still rely on actionlint plus source guard coverage.

Maintainer options:

  1. Land With Current CI Evidence (recommended)
    Maintainers can accept the source-reviewed retry wrapper plus passing actionlint, guard, security, and Windows checkout checks as sufficient for this CI flake fix.
  2. Require Simulated Timeout Proof
    Ask for a focused shell proof that statuses 124 and 137 retry while a non-timeout status exits immediately before merge.
  3. Pause On Platform Checkout Regression
    If any platform checkout job fails on this head, pause landing and inspect whether the anchor or wrapper changed checkout setup or exit propagation.

Next step before merge

  • [P2] Protected maintainer-labeled CI workflow PR with no concrete repair finding; maintainers should review the automation risk and exact-head CI state before landing.

Security
Cleared: The diff changes existing workflow shell control flow and test assertions only; it adds no new action refs, permissions, secrets, dependency sources, or package execution paths.

Review details

Best possible solution:

Land the shared retry wrapper after maintainer acceptance of the exact-head CI evidence, or require a focused simulated 124/137 timeout proof if deterministic retry-branch coverage is mandatory.

Do we have a high-confidence way to reproduce the issue?

No deterministic current-main reproducer was established. The linked GitHub Actions run failed in checks-windows-node-test on attempt 1 and passed on attempt 2, while source inspection shows current main exits after one timeout-style platform fetch failure.

Is this the best way to solve the issue?

Yes, this is the best scoped fix I found: it preserves the non-GNU manual watchdog needed by platform jobs and mirrors an existing sibling retry pattern. Duplicating four separate checkout scripts or switching platform jobs to GNU timeout would be less maintainable or less portable.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 29f787f10ed4.

Label changes

Label justifications:

  • P2: The PR addresses a real CI flake class with limited product blast radius but meaningful maintainer and contributor impact.
  • merge-risk: 🚨 automation: The diff changes GitHub Actions checkout control flow where a mistake could block platform CI jobs before validation starts.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The external-contributor proof gate does not apply to this maintainer-labeled MEMBER PR; PR-body validation and exact-head CI provide the normal review evidence.
Evidence reviewed

PR surface:

Tests +11, Config -77. Total -66 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 1 11 0 +11
Docs 0 0 0 0
Config 1 21 98 -77
Generated 0 0 0 0
Other 0 0 0 0
Total 2 32 98 -66

What I checked:

  • Root repository policy read: Root AGENTS.md was read fully; its ClawSweeper review and CI-workflow guidance affects this review because the PR changes GitHub Actions checkout control flow. (AGENTS.md:1, 29f787f10ed4)
  • Current main behavior: Current main's platform checkout helper has a 90-second watchdog and calls the fetch helper once, so timeout-style failure exits before platform tests run. (.github/workflows/ci.yml:1898, d43366b4e392)
  • PR implementation: PR head keeps the manual watchdog as fetch_checkout_ref_once and wraps it in a three-attempt retry loop for statuses 124 and 137. (.github/workflows/ci.yml:1919, add5d50d9e6e)
  • Alias consumers: PR head uses the anchored checkout step for macOS Node, macOS Swift, and iOS after defining it in the Windows job. (.github/workflows/ci.yml:2025, add5d50d9e6e)
  • Guard coverage: The workflow guard now asserts one platform checkout anchor, three aliases, the retry loop, timeout filtering, and warning text across all four platform checkout jobs. (test/scripts/ci-workflow-guards.test.ts:398, add5d50d9e6e)
  • Sibling retry pattern: Current main already uses the same three-attempt timeout-status retry shape in another manual checkout path, making this a consistent CI pattern rather than a new mechanism. (.github/workflows/ci.yml:135, 29f787f10ed4)

Likely related people:

  • RomneyDa: Prior merged PRs bounded manual fetches and adjusted the platform checkout timeout in the same workflow/test surface. (role: same-surface prior fix contributor; confidence: high; commits: ed36f423dabf, 784fbcfd16e2; files: .github/workflows/ci.yml, test/scripts/ci-workflow-guards.test.ts)
  • Peter Steinberger: Commit 0ee5baf added an existing custom-checkout retry pattern that this PR mirrors for platform checkout watchdogs. (role: adjacent checkout retry contributor; confidence: medium; commits: 0ee5baf6c502; files: .github/workflows/ci.yml)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. labels Jun 29, 2026
@RomneyDa
RomneyDa force-pushed the codex/windows-checkout-fetch-retry branch from 14e6340 to add5d50 Compare June 29, 2026 20:00
@RomneyDa
RomneyDa merged commit 15de9d8 into main Jun 29, 2026
82 checks passed
@RomneyDa
RomneyDa deleted the codex/windows-checkout-fetch-retry branch June 29, 2026 20:30
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 30, 2026
QiuYuang pushed a commit to QiuYuang/openclaw that referenced this pull request Jul 1, 2026
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 1, 2026
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer Maintainer-authored PR merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. P2 Normal backlog priority with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant