Skip to content

fix: restore verified upstream release tag requirement - #139

Merged
RomneyDa merged 7 commits into
mainfrom
fix/restore-upstream-tag-signatures
Oct 16, 2026
Merged

RomneyDa merged 7 commits into
mainfrom
fix/restore-upstream-tag-signatures

Conversation

@RomneyDa

@RomneyDa RomneyDa commented Oct 1, 2026 •

Copy link
Copy Markdown
Member

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.4 is signed and GitHub reports verified: true, reason: valid for tag object f823e45687906237b140d64a64b3a6cf26207fc1.

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.

  • Regression first: the production-workflow unsigned rejection case failed in an isolated control checkout using unchanged main implementation 19d7cc0 and 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 through Get-WorkflowSource.ps1 in 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.
  • Live Resolve-OpenClawSource: selected v2026.10.4, commit 383c124cc32ffee3f8e56f549b88da94d269a4af, through the restored signature check.
  • scripts/Test-WorkflowSigningConfiguration.ps1, scripts/Test-MSIXReleaseIdentity.Tests.ps1, scripts/Test-DocReferences.ps1, and git diff --check: passed; zero documentation findings.
  • Test-SigningInputs.Tests.ps1: passed locally with process-local TEMP set to the host temporary directory. The earlier invocation without TEMP could not initialize its fixture; no repository fixture or assertion was weakened.
  • Live production-path negative: ran Get-WorkflowSource.ps1 using an isolated local policy copy selecting published 2026.9.7, with real registry/GitHub I/O and no network mocks. GitHub reports its tag unsigned. The production entrypoint rejected it with The 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.
  • After integrating chore: prepare the 2026.10.4 Gateway MSIX patch #180, the 57 source scenarios, release-identity suite, and workflow-version suite passed again. The native owner derives v2026.10.4-msix.1 / 2026.10.401.0; upstream/runtime/signing inputs and immutable upgrade fixtures are unchanged.
  • The previous final-head run correctly failed only the Store upgrade because candidate 2026.10.400.0 equaled 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.
  • Local host: macOS / PowerShell 7. The resolver implementation is unchanged from 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.

@clawsweeper

clawsweeper Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@RomneyDa
RomneyDa marked this pull request as ready for review October 1, 2026 01:41
Base automatically changed from fix/allow-unsigned-upstream-tags to main October 1, 2026 01:42
@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Oct 1, 2026
@clawsweeper

clawsweeper Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Codex review: needs maintainer review before merge.

What this changes

This 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.

  • Before: Source selection accepts the unsigned tag and can create a reusable snapshot.
  • After: Source selection rejects the tag before creating a snapshot.

Review scores

Measure Result What it means
Overall readiness 🦞 diamond lobster (5/6) Focused, owner-approved restoration with real production-path acceptance and rejection evidence, meaningful regressions, and no identified defect; outstanding CI remains a landing gate.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (live_output): The recorded macOS/PowerShell run exercised production Get-WorkflowSource.ps1 with real registry/GitHub I/O: unsigned v2026.9.7 was rejected before snapshot or context creation, while signed v2026.10.4 was accepted through the restored resolver. Current-head CI also passed production source resolution and snapshot saving. Existing offline replay intentionally retains admitted authority, with operator cancellation documented for withdrawal.
Patch quality 🦞 diamond lobster (5/6) No actionable review findings were identified.

Product

Kind: Bug fix · Worth it: Yes · Fix scope: Complete
User problem: Stable packaging still admits unsigned tags after the maintainer selected restoration of verified-tag admission.
Reason: The maintainer explicitly approved activation, and the revision increment enables the required upgrade qualification without weakening its guard.

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
Reviewed head: 14a2137c99b5673fd65f23f2781b83d01ddef7c9

Before merge

None.

Findings

None.

Tests

  • Missing end-to-end proof: Current-head package composition and all 13 installed-package upgrade scenarios remain pending in CI; the admission regression has recorded failing-before and passing-after evidence.
Agent review details

How this fits together

The 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
Loading

Technical review

Best 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

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Likely related people:

  • Dallin Romney: Raw commit 11f19be adds scripts/OpenClawSource.ps1:186 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 11f19be0e863; files: scripts/OpenClawSource.ps1)
  • Linus Huang: Raw commit 9f18180 adds scripts/OpenClawSource.ps1:128 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 9f18180d27ba; files: scripts/OpenClawSource.ps1)

Labels

Label changes:

No label changes.

Label justifications:

  • P2: This is a focused packaging admission-policy restoration with no demonstrated urgent installed-runtime regression.
  • merge-risk: 🚨 compatibility: New stable selections of unsigned releases now stop deliberately; the maintainer explicitly accepted ending that temporary allowance.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • proof: sufficient: Contributor real behavior proof is sufficient.

Rating scale

6/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.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

History

Review history (9 earlier review cycles; latest 8 shown)
  • reviewed 2026-10-02T05:48:48.666Z sha 5dd9eed :: blocked before merge. :: none
  • reviewed 2026-10-02T15:49:14.232Z sha 5dd9eed :: blocked before merge. :: none
  • reviewed 2026-10-03T09:28:46.556Z sha 5dd9eed :: blocked before merge. :: none
  • reviewed 2026-10-03T20:25:24.383Z sha 5dd9eed :: blocked before merge. :: none
  • reviewed 2026-10-05T05:58:31.571Z sha 5dd9eed :: blocked before merge. :: none
  • reviewed 2026-10-07T16:34:14.235Z sha 5dd9eed :: blocked before merge. :: none
  • reviewed 2026-10-16T20:38:32.478Z sha 0cb23af :: needs real behavior proof before merge. :: none
  • reviewed 2026-10-16T20:57:54.572Z sha 1aa6d3c :: needs maintainer review before merge. :: none

Reviewed October 16, 2026, 5:37 PM ET / 21:37 UTC (Revision 10).

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Oct 2, 2026
@RomneyDa

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

The release-preparation task explicitly selects activation of the signed-tag requirement. Current head 0cb23afe1d721485ce105568f4ee70b625fc0459 now has a nonempty three-file restoration on current main, retaining the original branch ancestry. Upstream v2026.10.4 has GitHub-verified signing evidence (verified=true, reason=valid, tag object f823e45687906237b140d64a64b3a6cf26207fc1), and the live resolver accepted that exact release through the restored check.

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.

@clawsweeper

clawsweeper Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Oct 16, 2026
@RomneyDa

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

Final head 1aa6d3cfaf0f5895d469cf487503d05daba78906 addresses the final-effect proof finding. The rejection regression now invokes production Get-WorkflowSource.ps1 for unsigned, absent, nonboolean, and invalid-reason signing evidence in all four signing modes, and asserts that no reusable source snapshot is created. It failed against the unchanged main implementation in an isolated control checkout; all 57 source scenarios and the signing-input suite pass with the correction.

Also exercised the actual production workflow entrypoint against published unsigned v2026.9.7 with real registry/GitHub I/O and a temporary local policy copy. It rejected the tag with the signature error and created no snapshot. No release policy, tag, or published artifact was changed. Signed v2026.10.4 acceptance and earlier-head CI source creation remain recorded in the updated body. Production scripts are unchanged by this test-only follow-up; final-head CI is still required before landing.

@clawsweeper

clawsweeper Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Oct 16, 2026
@RomneyDa

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

Current head: 14a2137c99b5673fd65f23f2781b83d01ddef7c9. The signed-tag implementation and production-entrypoint/no-snapshot regressions are unchanged from the prior READY verdict. This head integrates the one-line revision-1 policy from #180 to repair the observed equal-version Store upgrade rejection. All 57 source scenarios plus identity/workflow-version suites pass again. Current CI is 38969534714; no earlier-head green is used for merge admission. The PR body records exact inputs, red/green unsigned production proof, and remaining lanes.

@clawsweeper

clawsweeper Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. labels Oct 16, 2026
@RomneyDa
RomneyDa merged commit 8f2f97f into main Oct 16, 2026
31 checks passed
@RomneyDa
RomneyDa deleted the fix/restore-upstream-tag-signatures branch October 16, 2026 22:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. 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