Repository navigation
fix: restore verified upstream release tag requirement - #139
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 restores verified tag signatures for stable source selection and increments the MSIX rebuild revision. Example: Select published unsigned OpenClaw v2026.9.7 through Get-WorkflowSource.ps1.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep open: this maintainer-authored PR restores the approved release admission policy, and no introduced correctness or security defect was found. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherThe packaging source resolver consumes release policy, npm metadata, and GitHub tag evidence, then supplies an immutable source snapshot to build and signing validation. flowchart LR
Policy[Release policy] --> Resolver[Source resolver]
Registry[npm metadata] --> Resolver
GitHub[GitHub tag verification] --> Resolver
Resolver --> Snapshot[Immutable source snapshot]
Snapshot --> Build[Package build]
Build --> Validation[Signing input validation]
Snapshot --> Validation
Technical reviewBest possible solution: Land the restored admission check and revision-1 integration after the current-head package and installed-upgrade gates pass. Do we have a high-confidence way to reproduce the issue? Current main lacks the verification check, and the recorded control run accepted unsigned v2026.9.7; this review verified that source path without executing target code. Is this the best way to solve the issue? The existing resolver is the correct admission owner, and rejection precedes snapshot persistence while preserving the approved override and immutable-replay contracts. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 9eb1eac47ffe. Provenance checked
TestingProof path: shipped entry point. SecurityNone. EvidenceWhat I checked:
Likely related people:
LabelsLabel changes: No label changes. Label justifications:
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 HistoryReview history (9 earlier review cycles; latest 8 shown)
Reviewed October 16, 2026, 5:37 PM ET / 21:37 UTC (Revision 10). |
|
@clawsweeper re-review The release-preparation task explicitly selects activation of the signed-tag requirement. Current head The PR body records the red/green unsigned-tag regression, 57 passing source scenarios, local policy checks, and the current validation limits. Exact-head Windows CI has passed the Windows host gate and upstream package build; both architecture builds and the installed-upgrade matrix are still pending. Current-head CodeQL is green. Please replace the old empty-diff/activation verdict with a review of this revision; pending CI remains a landing gate. |
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review Final head Also exercised the actual production workflow entrypoint against published unsigned |
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review Current head: |
|
🦞👀 Re-review progress:
|
What Problem This Solves
Stable source selection still accepts unsigned upstream tags. The original restoration PR had no net diff because its two commits canceled each other.
User Impact
Packaging now stops when the selected stable release lacks a valid GitHub-verified tag signature. The temporary unsigned-tag allowance ends with this release preparation: upstream
v2026.10.4is signed and GitHub reportsverified: true,reason: validfor tag objectf823e45687906237b140d64a64b3a6cf26207fc1.Commit signatures are not required. Explicit payload overrides retain their existing contract; release identity still comes from verified stable selection.
Why This Change Was Made
Restore the check at the existing source resolver, preserving current hotfix/rollback selectors and immutable snapshot replay. Retain the original branch ancestry and apply the restoration to current
main. The three-file behavior change is joined by the one-line patch-revision commit from #180, so the mandatory Store upgrade tests exercise a newer candidate instead of rejecting the already-published version.Evidence
Head:
14a2137c99b5673fd65f23f2781b83d01ddef7c9; integrated base:9eb1eac47ffeea36f514d61784e0ff649d34f7bf. Residual diff: 4 files, +22/-12. The #180 policy commit remains an ancestor.mainimplementation19d7cc0and only the new scenario file; the old producer accepted the source. The corrected implementation passes.pwsh -NoProfile -File scripts/Test-OpenClawSource.Tests.ps1: 57 passed, including unsigned, absent, nonboolean, and invalid-reason rejection throughGet-WorkflowSource.ps1in all four signing modes. Each rejection verifies that no reusable source snapshot exists and that resolution stopped at tag verification. Explicit overrides, rollback selectors, official/Store selection, and offline retry replay remain covered.Resolve-OpenClawSource: selectedv2026.10.4, commit383c124cc32ffee3f8e56f549b88da94d269a4af, through the restored signature check.scripts/Test-WorkflowSigningConfiguration.ps1,scripts/Test-MSIXReleaseIdentity.Tests.ps1,scripts/Test-DocReferences.ps1, andgit diff --check: passed; zero documentation findings.Test-SigningInputs.Tests.ps1: passed locally with process-localTEMPset to the host temporary directory. The earlier invocation withoutTEMPcould not initialize its fixture; no repository fixture or assertion was weakened.Get-WorkflowSource.ps1using an isolated local policy copy selecting published2026.9.7, with real registry/GitHub I/O and no network mocks. GitHub reports its tag unsigned. The production entrypoint rejected it withThe release tag must have a valid GitHub-verified signature.and left no source snapshot or workflow context file. The real release policy was not changed.v2026.10.4-msix.1/2026.10.401.0; upstream/runtime/signing inputs and immutable upgrade fixtures are unchanged.2026.10.400.0equaled the installed Store baseline. Current-head CI 38969534714 now validates the patch revision; Windows host/NativeAOT, both architecture packages/bundles, and all13 installed-upgrade scenarios completed successfully, including Store400→401 and retained LocalState. Current-head ClawSweeper review has no findings or before-merge actions.0cb23af; the final test follow-up strengthened the production regression boundary. Earlier-head successes are scoped evidence, not merge admission.No signing, publication, installed package, user profile, or live Gateway was changed for these local checks.