Skip to content

fix(ci): validate older release targets#103975

Merged
steipete merged 3 commits into
mainfrom
codex/ci-target-plan-compat
Jul 11, 2026
Merged

fix(ci): validate older release targets#103975
steipete merged 3 commits into
mainfrom
codex/ci-target-plan-compat

Conversation

@steipete

@steipete steipete commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Closes #103973

What Problem This Solves

Fixes an issue where release managers validating an older immutable release tag through Full Release Validation would see the trusted current CI workflow fail before producing target-appropriate evidence when the tag predates current CI planner exports or optional tooling.

Why This Change Was Made

The current trusted workflow can now use target-owned legacy planners and omit absent current-only lanes only after Full Release Validation supplies a canonical semver release tag and CI proves that tag resolves to the exact checkout SHA. Normal PRs, pushes, arbitrary manual targets, and current release targets remain fail-closed. Current-only tsgo:scripts and Swift helpers follow the same bounded compatibility contract.

User Impact

Release managers can validate older tagged candidates without moving their tags or creating testing-only branches. Current CI continues to surface missing planners, scripts, and lane tooling as failures.

Evidence

The older exact-target proof from the prior branch head is intentionally not reused because the branch was rewritten and the compatibility authorization contract changed. Exact tagged-target validation will run after landing.

AI-assisted implementation and review; maintainer-directed and independently validated.

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

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5abb9f3d55

ℹ️ 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/ci.yml Outdated
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. labels Jul 10, 2026
@clawsweeper

clawsweeper Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed July 10, 2026, 9:11 PM ET / July 11, 2026, 01:11 UTC.

Summary
The PR updates trusted CI manifest generation and workflow guard tests to support legacy and current shard planners plus optional surfaces absent from older release targets.

Reproducibility: yes. Dispatching the current trusted Full Release Validation workflow for target 495651ebb05c503f754d4b6cfaf9246947940faf deterministically fails before matrix generation because that target lacks the current planner export.

Review metrics: 1 noteworthy metric.

  • Planner compatibility: 2 planner APIs supported. Legacy and bundled planner exports now share one manifest path, so compatibility and fail-closed current behavior both require explicit coverage.

Stored data model
Persistent data-model change detected: serialized state: extensions/acpx/src/codex-auth-bridge.test.ts, serialized state: extensions/canvas/index.test.ts, serialized state: extensions/canvas/src/a2ui-jsonl.ts, serialized state: extensions/canvas/src/tool.test.ts, serialized state: ui/src/test-helpers/control-ui-e2e.ts, unknown-truncated-pull-files, and 2 more. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #103973
Summary: This PR is the direct candidate fix for the linked deterministic Full Release Validation regression.

Members:

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

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

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

Rank-up moves:

  • Restrict compatibility lane suppression to older release-target dispatches.
  • [P1] Add an ordinary pull request or push fixture proving requested iOS validation remains fail-closed.

Risk before merge

  • [P1] Merging as written could let a pull request or push that removes or renames current iOS CI scripts report the requested iOS job as skipped instead of exposing the regression.
  • [P1] The branch is behind current main, so the repaired head still needs exact-head workflow validation after refresh.

Maintainer options:

  1. Restrict compatibility skips before merge (recommended)
    Apply target-capability lane suppression only to older release-target dispatches and add regression coverage proving ordinary pull request and push runs remain fail-closed.
  2. Pause pending correction
    Keep the PR open without merging until the existing iOS lane-suppression blocker is resolved on the current head.

Next step before merge

  • [P2] The protected maintainer-labeled PR needs an explicit contributor or maintainer correction and exact-head review rather than automatic work-lane promotion.

Security
Cleared: The unique patch changes workflow planning and tests without changing permissions, secret access, dependency sources, action pins, or package resolution.

Review findings

  • [P1] Preserve requested iOS failures on normal CI events — .github/workflows/ci.yml:332-336
Review details

Best possible solution:

Limit capability-based lane suppression to older Full Release Validation dispatch targets, preserve fail-closed behavior for ordinary pull request and push runs, and add fixtures covering both modes before merge.

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

Yes. Dispatching the current trusted Full Release Validation workflow for target 495651ebb05c503f754d4b6cfaf9246947940faf deterministically fails before matrix generation because that target lacks the current planner export.

Is this the best way to solve the issue?

No, not yet. Adapting trusted CI to the target checkout is the correct boundary, but the compatibility suppression currently applies too broadly and must preserve fail-closed ordinary CI.

Full review comments:

  • [P1] Preserve requested iOS failures on normal CI events — .github/workflows/ci.yml:332-336
    Restrict this capability-based suppression to older release-target workflow_dispatch checkouts. As written, a normal pull request or push that requests iOS but deletes or renames one of these current scripts sets run_ios_build to false, so the downstream job is skipped instead of failing and exposing the CI regression; add coverage for both legacy dispatch and ordinary events.
    Confidence: 0.99

Overall correctness: patch is incorrect
Overall confidence: 0.99

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 57a3b1e99dba.

Label changes

Label changes:

  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (live_output): The PR provides after-fix output from the exact frozen target showing 93 legacy shards and focused Testbox workflow validation.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: ⏳ waiting on author.

Label justifications:

  • P1: The PR fixes a release-validation blocker but currently introduces a path that can hide an ordinary iOS CI tooling regression.
  • merge-risk: 🚨 automation: The unconditional capability probe can silently suppress a requested CI lane after merge.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (live_output): The PR provides after-fix output from the exact frozen target showing 93 legacy shards and focused Testbox workflow validation.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR provides after-fix output from the exact frozen target showing 93 legacy shards and focused Testbox workflow validation.
Evidence reviewed

What I checked:

  • Unfixed prior blocker: runIosBuild is unconditionally gated by supportsCurrentIosCi; no event or older-target condition distinguishes release-target compatibility from ordinary pull request and push runs. (.github/workflows/ci.yml:332, 3d5e3cf63d63)
  • Re-review continuity: The workflow and guard test are unchanged between the previously reviewed SHA where this finding was raised and the current head, so later branch updates did not fix it. (.github/workflows/ci.yml:332, 3d5e3cf63d63)
  • Missing normal-event coverage: The new fixture proves that absent iOS tooling disables the lane for a legacy target, but it does not prove that an ordinary pull request or push requesting iOS remains fail-closed. (test/scripts/ci-workflow-guards.test.ts:1540, 3d5e3cf63d63)
  • Real regression proof: The exact frozen target fails before matrix generation on the unavailable current planner export, while the PR reports the patched target selecting 93 legacy shards and passing focused Testbox workflow checks. (.github/workflows/ci.yml:259, 3d5e3cf63d63)
  • Actual patch scope: The intended branch patch is confined to the CI workflow and its guard test; the much broader GitHub comparison is stale-base drift rather than the unique change under review. (test/scripts/ci-workflow-guards.test.ts:52, 5abb9f3d55bb)
  • Feature provenance: The legacy-target adapter and optional-lane guards were introduced by the first two branch commits, both limited to the workflow and its guard tests. (.github/workflows/ci.yml:259, 5abb9f3d55bb)

Likely related people:

  • steipete: Introduced and iterated the legacy-target compatibility adapter and optional-lane guards in the central CI workflow and tests. (role: recent CI compatibility contributor; confidence: high; commits: 6c689f7eae61, 5abb9f3d55bb; files: .github/workflows/ci.yml, test/scripts/ci-workflow-guards.test.ts)
  • RomneyDa: Authored the merged QA planner transition that introduced the bundled planner surface involved in the older-target regression. (role: planner transition author; confidence: medium; commits: 0b9c2e6f9532; files: .github/workflows/ci.yml, scripts/lib/ci-node-test-plan.mjs)
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.
Review history (1 earlier review cycle)
  • reviewed 2026-07-10T23:04:24.214Z sha 5abb9f3 :: needs maintainer review before merge. :: none

@steipete steipete self-assigned this Jul 11, 2026
@steipete
steipete requested a review from a team as a code owner July 11, 2026 00:58
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: macos App: macos app: web-ui App: web-ui gateway Gateway runtime extensions: memory-core Extension: memory-core cli CLI command changes scripts Repository scripts commands Command implementations docker Docker and sandbox tooling agents Agent runtime and tooling extensions: acpx channel: qqbot extensions: codex channel: sms Channel integration: sms extensions: vault Extension: vault size: XL and removed size: M labels Jul 11, 2026
@github-actions github-actions Bot added the dependencies-changed PR changes dependency-related files label Jul 11, 2026
@github-actions

github-actions Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Dependency graph guard cleared

This PR no longer has blocked dependency graph changes. A future dependency graph change requires a fresh /allow-dependencies-change comment after the guard blocks that new head SHA.

  • Current SHA: 4af456802376cdfcf5d4b627f2b3955df026a220

@openclaw-barnacle openclaw-barnacle Bot removed app: web-ui App: web-ui gateway Gateway runtime extensions: memory-core Extension: memory-core cli CLI command changes scripts Repository scripts commands Command implementations docker Docker and sandbox tooling agents Agent runtime and tooling extensions: acpx channel: qqbot extensions: codex channel: sms Channel integration: sms extensions: vault Extension: vault labels Jul 11, 2026
@github-actions github-actions Bot removed the dependencies-changed PR changes dependency-related files label Jul 11, 2026
@steipete steipete removed proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 11, 2026
@steipete
steipete merged commit 7ae5996 into main Jul 11, 2026
106 of 117 checks passed
@steipete
steipete deleted the codex/ci-target-plan-compat branch July 11, 2026 12:44
@steipete

Copy link
Copy Markdown
Contributor Author

Merged via squash.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4af4568023

ℹ️ 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/ci.yml
parseBoolean(process.env.OPENCLAW_CI_RUN_IOS_BUILD) &&
!docsOnly &&
isCanonicalRepository &&
(!historicalTarget || supportsCurrentIosCi);

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.

P2 Badge Do not skip historical iOS builds just because wrappers are absent

For historical release targets that still have ios:build but predate one of the Swift wrapper scripts, this gate sets run_ios_build=false and skips the entire ios-build job, so pnpm ios:build is never run. Fresh evidence in this final revision is that the iOS job still has target-compatible fallbacks for missing install-swift-tools.sh/lint wrappers, but requiring those wrappers here makes those fallbacks unreachable for historical targets and drops iOS build coverage instead of only relaxing the wrapper-specific steps.

Useful? React with 👍 / 👎.

steipete added a commit that referenced this pull request Jul 11, 2026
The guard expectation still referenced the raw await import( form that
7ae5996 (#103975) replaced with the importTargetPlan fallback helper;
the assertion fails on current main.
steipete added a commit that referenced this pull request Jul 11, 2026
…04475)

* chore(types): add declaration files for scripts/lib and scripts/e2e modules

* chore(types): add declaration files for top-level script modules (a-m)

* chore(types): add declaration files for top-level script modules (n-z)

* test: use a non-secret-shaped gateway token fixture

* test: type ci workflow guard helpers for the root test lane

* chore(tooling): typecheck root test/** with a dedicated tsgo lane

- test/tsconfig/tsconfig.test.root.json: root-test program (strict unused checks,
  fixtures excluded; two Docker E2E clients that import built dist/** stay out,
  same rationale as the scripts/e2e exclusion in tsconfig.scripts.json)
- tsgo:test:root wired into tsgo:test, check:test-types, scripts/check.mjs, and
  the ci.yml test-types shard, mirroring the tsgo:scripts lane (#104348)
- changed-lane routing: test/**/*.ts (excluding fixtures) and the lane tsconfig
  now trigger 'typecheck test root' in check:changed; previously test/ paths ran
  lint only, so harness type errors surfaced first in CI (#104287 envDir case)
- burn down all 1071 latent type errors in the program: precise param/local
  types across test/scripts, test/vitest, test/e2e, and transitive scripts/e2e
  program members; 205 sibling .d.mts declaration files for imported .mjs
  modules (committed separately); zero any, zero ts-expect-error
- resolve the pre-existing testing star-export ambiguity in
  scripts/e2e/parallels/common.ts with an explicit re-export

Closes #104388

* chore(types): correct declaration fidelity per structured review

- re-derive 51 .d.mts files from implementation data flow instead of
  initializers: fix a wrong never return (runTestProjectsDelegation returns
  the child), add encoding-sensitive exec/spawn overloads (plain-gh), restore
  the full release profile union, make parsed paths string | null, add missing
  parseArgs fields via help/non-help unions, add a missing sibling declaration
  (budget-number-args), drop 15 unused lint directives
- precise install-record/tuple typing removes the type-aware oxlint
  regressions the first declarations caused in scripts/e2e implementations
- route .mts declaration edits under test/ to the testRoot lane and reference
  the test-root project from tsconfig.projects.json so tsgo:all covers it
  (closes both review findings against the lane wiring)

* chore(scripts): keep telegram runner dist typing structural for the boundary guard

* chore(types): declare runtime pack and gateway readiness exports added on main

* test: pin the importTargetPlan form of the plugin-contract plan import

The guard expectation still referenced the raw await import( form that
7ae5996 (#103975) replaced with the importTargetPlan fallback helper;
the assertion fails on current main.
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 12, 2026
* fix(ci): support older release targets

* fix(ci): guard optional channel contracts

* fix(ci): scope legacy release compatibility
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 12, 2026
…enclaw#104475)

* chore(types): add declaration files for scripts/lib and scripts/e2e modules

* chore(types): add declaration files for top-level script modules (a-m)

* chore(types): add declaration files for top-level script modules (n-z)

* test: use a non-secret-shaped gateway token fixture

* test: type ci workflow guard helpers for the root test lane

* chore(tooling): typecheck root test/** with a dedicated tsgo lane

- test/tsconfig/tsconfig.test.root.json: root-test program (strict unused checks,
  fixtures excluded; two Docker E2E clients that import built dist/** stay out,
  same rationale as the scripts/e2e exclusion in tsconfig.scripts.json)
- tsgo:test:root wired into tsgo:test, check:test-types, scripts/check.mjs, and
  the ci.yml test-types shard, mirroring the tsgo:scripts lane (openclaw#104348)
- changed-lane routing: test/**/*.ts (excluding fixtures) and the lane tsconfig
  now trigger 'typecheck test root' in check:changed; previously test/ paths ran
  lint only, so harness type errors surfaced first in CI (openclaw#104287 envDir case)
- burn down all 1071 latent type errors in the program: precise param/local
  types across test/scripts, test/vitest, test/e2e, and transitive scripts/e2e
  program members; 205 sibling .d.mts declaration files for imported .mjs
  modules (committed separately); zero any, zero ts-expect-error
- resolve the pre-existing testing star-export ambiguity in
  scripts/e2e/parallels/common.ts with an explicit re-export

Closes openclaw#104388

* chore(types): correct declaration fidelity per structured review

- re-derive 51 .d.mts files from implementation data flow instead of
  initializers: fix a wrong never return (runTestProjectsDelegation returns
  the child), add encoding-sensitive exec/spawn overloads (plain-gh), restore
  the full release profile union, make parsed paths string | null, add missing
  parseArgs fields via help/non-help unions, add a missing sibling declaration
  (budget-number-args), drop 15 unused lint directives
- precise install-record/tuple typing removes the type-aware oxlint
  regressions the first declarations caused in scripts/e2e implementations
- route .mts declaration edits under test/ to the testRoot lane and reference
  the test-root project from tsconfig.projects.json so tsgo:all covers it
  (closes both review findings against the lane wiring)

* chore(scripts): keep telegram runner dist typing structural for the boundary guard

* chore(types): declare runtime pack and gateway readiness exports added on main

* test: pin the importTargetPlan form of the plugin-contract plan import

The guard expectation still referenced the raw await import( form that
7250680 (openclaw#103975) replaced with the importTargetPlan fallback helper;
the assertion fails on current main.
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. P1 High-priority user-facing bug, regression, or broken workflow. size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: current CI cannot validate older release targets

1 participant