Skip to content

ci: make release child dispatch idempotent#102858

Merged
steipete merged 2 commits into
mainfrom
codex/release-dispatch-idempotency
Jul 9, 2026
Merged

ci: make release child dispatch idempotent#102858
steipete merged 2 commits into
mainfrom
codex/release-dispatch-idempotency

Conversation

@steipete

@steipete steipete commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Full Release Validation could fail when GitHub accepted a child workflow_dispatch request but gh workflow run returned an HTTP 500. In run 29019783765, the plugin dispatcher failed while the exact child run 29020317666 had already been created and continued successfully. Retrying that POST would risk duplicate release matrices.

Why This Change Was Made

  • Give every Full Release Validation child a parent-scoped dispatch_id and unique run name.
  • Issue each dispatch POST exactly once.
  • Resolve the child through read-only workflow-run queries matching both the exact run name and workflow branch.
  • Adopt an accepted child after an ambiguous POST result, fail closed on duplicate matches, and never guess from a recent run.
  • Apply the same contract to CI, plugin prerelease, release checks, performance, and focused npm Telegram E2E dispatches.

User Impact

Release validation no longer reports a false failure or creates duplicate child matrices when GitHub returns an ambiguous dispatch response. Existing manual workflow titles and child test behavior remain unchanged when no parent dispatch identifier is supplied.

Evidence

  • Blacksmith Testbox tbx_01kx3ghv24pb17nzzsm5zaa893: 92 focused workflow tests passed.
  • node scripts/check-workflows.mjs: actionlint, zizmor, and workflow guards passed.
  • Focused oxfmt --check: all changed workflow/test files passed.
  • git diff --check: passed.
  • Fresh autoreview: clean, no accepted/actionable findings (0.92 confidence).

@openclaw-barnacle openclaw-barnacle Bot added size: M maintainer Maintainer-authored PR labels Jul 9, 2026
@steipete

steipete commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Land-ready proof for exact head 32576ce34542e222247e88837ff45bd6d10e72eb:

  • CI 29023131750: 45 passed, 10 expected skips, 0 failures.
  • Workflow Sanity 29023131648: actionlint and workflow guards passed.
  • CodeQL 29023131677: 7/7 passed.
  • Blacksmith Testbox tbx_01kx3ghv24pb17nzzsm5zaa893: 92 focused workflow tests passed.
  • node scripts/check-workflows.mjs, focused format check, and git diff --check: passed.
  • Fresh autoreview after the latest main merge: clean at 0.94 confidence.
  • Repo-native review artifacts validated with zero findings; OPENCLAW_TESTBOX=1 scripts/pr prepare-run 102858 passed.

The dispatch contract now covers CI, Plugin Prerelease, Release Checks, Performance, and focused npm Telegram. Ambiguous POST failures are never retried; exact child correlation adopts a single accepted run and fails closed on duplicates.

@steipete
steipete merged commit 11dda0e into main Jul 9, 2026
82 checks passed
@steipete
steipete deleted the codex/release-dispatch-idempotency branch July 9, 2026 14:03
@steipete

steipete commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 10, 2026
steipete added a commit that referenced this pull request Jul 10, 2026
Backports the release pipeline speedups from main (ace2407 and
ancestors) so the 2026.7.1 train benefits immediately:
- metadata-only evidence reuse with input/harness/child-run matching
- Docker runtime-assets preflight runs in parallel with lanes
- release/* umbrella runs supersede in-progress duplicates
- beta profile treats live-provider suites as advisory
Syncing the umbrella workflow also picks up the main-only dispatch
idempotency and transient-read retries (#102858, #102896).
steipete added a commit that referenced this pull request Jul 10, 2026
…ella

The synced Full Release Validation umbrella dispatches children with a
dispatch_id and adopts runs by exact name (#102858), so ci.yml,
npm-telegram-beta-e2e.yml, and plugin-prerelease.yml need the matching
input; applies that commit's hunks plus its ci-workflow-guards update,
syncs scripts/ci-live-command-retry.sh, and ports the guard test blocks
that pin the synced workflow text.
wheakerd pushed a commit to wheakerd/clawdbot that referenced this pull request Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer Maintainer-authored PR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant