Repository navigation
fix(release): promotion source hashing fails on nested diagnostics checkout - #2067
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. What this changesThis PR extracts the pinned pipeline diagnostics helper into runner temporary storage instead of creating a nested checkout. Example: Promote v2026.11.1-alpha.8 at 04f413d.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Regression provenanceRegression provenance — suspected predecessor, not a causality claim: source commit Possible regression — suspected (reviewed change). No predecessor PR is attributed. Merge readiness✅ Ready for maintainer review Keep open: this maintainer-authored PR repairs a source-verifiable promotion failure still present on main; no actionable code or security findings were identified. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherReusable release CI checks out historical candidate source, collects pipeline-owned crash diagnostics, and then freezes source hashes for Local AI proof. flowchart TD
A[Promotion dispatch] --> B[Pinned pipeline revision]
A --> C[Historical candidate checkout]
B --> D[Extract helper into runner temp]
C --> E[Tray UI tests]
D --> F[Bounded crash diagnostics]
E --> F
F --> G[Local AI source hashing]
Technical reviewBest possible solution: Keep the existing workflow as diagnostics owner and extract only its immutable helper outside the candidate source tree. Do we have a high-confidence way to reproduce the issue? The nested checkout and unconditional source-entry hashing establish the failure path in source; the linked hosted job corroborates the failing stage, and the author reports a matching negative control. Is this the best way to solve the issue? The patch is the smallest complete repair using existing owners: remove the contaminating checkout, preserve immutable pipeline selection, and leave candidate source and manifest validation intact. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against b6f158ab257a. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Preflight sourceSource unknown. Source comparison at the observed PR snapshot only. Completion is self-reported; body, policy, tests, execution, and report bytes are not verified. Review metrics
LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed November 7, 2026, 2:46 AM ET / 07:46 UTC. |
What Problem This Solves
Fixes stable promotion failing during Local AI proof source hashing after #2061 adds a nested diagnostics checkout.
Observed in promotion run 42338153493: diagnostics and Tray UI tests passed, but
Invoke-LocalAiVisualProof.ps1failed hashing.ci-pipeline/. This fixes the merged #2061 approach; closed #2062 remains closed.User Impact
The existing
v2026.11.1-alpha.8at04f413d26531d3ea19cb108291334bb3cc5fd6e6remains the promotion candidate. No new alpha, tag movement, or product-code change is needed. This PR fixes helper resolution; live promotion/publication remains unverified.Why This Change Was Made
Git lists the nested
.ci-pipeline/repository as one untracked directory. The historical proof script hashes every source-manifest entry as a file, so the added checkout deterministically breaks it. Remove that nested checkout rather than weaken the source manifest or change the alpha. The workflow owns diagnostic collection, while the product checkout deliberately owns the historical alpha. Extract only the helper from immutableGITHUB_SHAintoRUNNER_TEMPand invoke it with the existing bounded start time. Do not overwrite the product checkout, load moving main, skip diagnostics, or weaken the CI gate.The helper itself, event-field filtering, and Local AI source-manifest code remain unchanged. Extraction failure throws before a stale temporary helper can execute.
Evidence
Negative control: a real nested Git checkout makes
git ls-files --cached --others --exclude-standardreturn.ci-pipeline/; applying the sameGet-FileHashloop exits 1.The new disposable-Git regression executes the actual YAML run block, then runs the historical source-hashing algorithm and compares hashes before/after. It also checks absent/older candidate helpers, main advancing past the pinned pipeline, unchanged checkout/HEAD, timestamp forwarding, and fail-closed extraction. Three cases pass; all 34 promotion cases and actionlint pass.
Shared autoreview (Codex gpt-6.1-sol, high, branch mode against
b6f158ab257aabdf04823d636076980ab614507f, P0-P3, with diagnostics and Local AI proof source context) completedscoped-clean: correct verdict, no findings, exit 0. This independent implementation/proof-plan review does not establish live Windows or release proof.Change Type
Scope
winnodeRequired proof pools
none: pipeline helper source resolution only; no changed Windows product/UI contract. Required Windows CI and the real promotion remain outstanding.Validation
pwsh -NoProfile -File scripts/test-ci-crash-metadata-source.ps1: 3 cases passed, including unchanged, hashable source manifests. Nested-checkout negative control reproduced the directory-hash failure.pwsh -NoProfile -File scripts/test-alpha-promotion.ps1: 34 cases plus workflow contracts passed.actionlint -shellcheck= -pyflakes= .github/workflows/ci.yml: passed.git diff --check: passed.pwsh -NoProfile -File scripts/test-ci-workflow-contract.ps1: updated source checks pass up to the existing Windows-only path filtering assertion; full script not green on macOS.pwsh -NoProfile -File build.ps1andpwsh -NoProfile -File scripts/setup-dev.ps1 -CheckOnly: blocked, require Windows.dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore: macOS Windows path/API and profile-assumption failures; task-owned run stopped after 45 seconds, not a completed-suite pass.dotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restore: executed tests hit path/API and source-contract failures on macOS (including OnboardingPresentationContractTests and CiNugetCacheWorkflowTests); not a completed-suite pass.Tests use temporary isolated tray settings. No shared Windows runtime or alpha changed.
Real Behavior Proof
7280e0fbc89466ab6314b377f7648d69b309ece7; focused tests ran on byte-identical source before commit.pwsh -NoProfile -File scripts/test-ci-crash-metadata-source.ps1.Passed 3 pipeline crash-helper cases: absent/older candidate helper, pinned revision, unchanged hashable source manifest, and failed extraction.Security Impact
Compatibility and Migration
Review Conversations