Repository navigation
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 real behavior proof before merge. What this changesThis PR replaces Companion’s native Microsoft Store publisher with requests to the central release-manager-approved publisher. Example: An operator selects Companion release run 123.
Review scores
ProductKind: Refactor · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Blocked before merge - 4 items remain Keep open: this maintainer-authored PR makes a coherent, approved transfer of Store publishing ownership, and current main still uses the native publisher; no definite introduced code defect was found. Priority: P2 Before merge
FindingsNone. Tests
Agent review detailsHow this fits togetherCompanion CI produces unsigned bundles and release witnesses; the request adapter forwards a source run ID to the central publisher, which owns source verification, approval, credentials, and Store submission. flowchart LR
A[Companion release CI] --> B[Bundle and release witness]
A --> C[Native request adapter]
C --> D[Central source verification]
B --> D
D --> E[Release manager approval]
E --> F[Central Store publisher]
F --> G[Microsoft Store]
Technical reviewBest possible solution: Land the single central publishing owner through the documented administrator cutover while preserving native bundle production, release witnesses, and stable-promotion approval. Do we have a high-confidence way to reproduce the issue? Current-main source clearly locates Store credential use and submission in the native workflow; no live unauthorized publication was attempted or established. Is this the best way to solve the issue? The scoped adapter and removal of the old publisher are the smallest coherent ownership transfer, provided the central dependency and administrative boundary are established first. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 48cb8a18fdb5. Merge-risk optionsMaintainer options:
Provenance checked
TestingProof path: unit tests only. SecurityNeeds attention: No concrete introduced bypass was found, but the transferred publishing authority still requires administrator-controlled verification. EvidenceWhat I checked:
Likely related people:
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 October 27, 2026, 2:54 PM ET / 18:54 UTC. |
What Problem This Solves
Companion repository write access must not also grant authority to publish its package to Microsoft Store.
User Impact
Operators can request Store publication, while only the central publisher may obtain Store credentials after release-manager approval. This is a coordinated cutover: central code, enforced environment/ruleset settings, App access, and Entra federation migration are prerequisites, not effects of merging this PR.
Why This Change Was Made
Replace the native publisher with a request-only adapter to
openclaw/releasesworkflowwindows-store-publish.ymlonmain, accepting only fixedproduct=companionand a canonical sourcerun_id. Retain the manual recovery entry point and optionalMSSTORE_ENABLEDsuccessful stable CI/promotion trigger. Preview-only promotions are filtered before minting the cross-repository token.Remove the native Store API, OIDC exchange, identity/publishing policy, and superseded authorizer tests. Central code owns authoritative source/witness/current-attempt/tag/hash validation, product identity, approval, and Store submission. Native unsigned x64/ARM64 inputs, bundle and
store-release-source-<attempt>witness producers, version reservations, stable-promotion approval, and GitHub release gates are unchanged.Add release-manager CODEOWNERS for automation and release trust inputs, with explicit enforcement prerequisites. CODEOWNERS alone cannot prevent direct push or revoke historical workflows' Store identity.
Related: openclaw/openclaw#181446 and openclaw/openclaw-windows-packaging#212. The central publisher PR is a coordinated dependency and will be cross-linked here.
Evidence
The production PowerShell adapter executed against fixed external GitHub fixtures: 31 scenarios passed. Cases cover exact central dispatch, manual recovery, stable/correction CI, prepared promotion, preview-only promotion with no witness, old/expired witnesses, foreign/main/alpha exclusions, canonical IDs, and ambiguous request failure. The new preview-only regression failed on the recovered pre-fix implementation before passing with the witness-presence filter.
Both changed workflows pass actionlint. Existing CI lane/gate/process contract checks pass. Native Windows and live approval/Store proof remain explicitly unverified below.
Change Type
Scope
winnodeRequired proof pools
none: this PR changes the request/publishing authority boundary, not Companion binary, UI, installer, native architecture, WSL, or MCP behavior. GitHub-hosted Windows CI and separate administrator-controlled cutover rehearsal remain required; no custom Windows proof pool is claimed.Validation
Validated candidate:
9183037d40f965242b29d06b6fad2654b47f07de(same source bytes as the executed focused checks).pwsh -NoLogo -NoProfile -NonInteractive -File scripts/test-store-publication-request.ps1: 31 scenarios executed, none skipped; realghreplaced by an in-memory transport and only test-owned temporary files used.actionlint -shellcheck= -pyflakes= .github/workflows/submit-microsoft-store.yml .github/workflows/ci.yml../scripts/test-ci-workflow-contract.ps1: CI routing/gates/release/proof contracts, 5 E2E runner guard cases, and output-idle process fixtures. The intentional missing-base fixture fails closed as expected.git diff --check; reference search found no remaining calls to the retired native publisher/source/OIDC scripts or policy../scripts/validate-docs.ps1rejects the existing Windows-style proof-pool entryscripts\validate-mxc-e2e.ps1on macOS. No unrelated path-check rewrite included../build.ps1,dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore, anddotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restore../scripts/setup-dev.ps1 -CheckOnlyreports “OpenClaw Windows development requires Windows.” No native test pass is claimed.Real Behavior Proof
9183037d40f965242b29d06b6fad2654b47f07de(focused check/review source preserved through commit).pwsh -NoLogo -NoProfile -NonInteractive -File scripts/test-store-publication-request.ps1.Companion Store publication requests: 31 scenarios passed.The captured dispatch is exactlygh workflow run windows-store-publish.yml --repo openclaw/releases --ref main -f product=companion -f run_id=123for eligible fixture requests. Preview-only promotion emits no dispatch.id-token: writepermission.Security Impact
releasesand Actions write, only to request the fixed central workflow.GH_APP_PRIVATE_KEYis used for a short-lived request token. Store identifiers and OIDC handling are removed here; the action is commit-pinned, token selection is narrow, and checkout does not persist credentials.gh workflow run; no caller-supplied script or product identity.Compatibility and Migration
submit-microsoft-store.ymlmanual run ID input remains, but success now means central request accepted, not Store commit.microsoft-store-companionfor main-only deployments, release-manager team approval, prevention of self-review, and no administrator deployment bypass; enforce release-manager code-owner review for protected automation paths including CODEOWNERS, dismiss stale approval, require latest-push approval, and remove direct-push/bypass paths; move exclusive Companion Entra federation from this repository to central and revoke old/native or alternate publishing writers; grant the existing release App access to request central Actions and make its existing key available; then land this request-only cutover and manually rehearse the approval path before enabling automatic requests. Keep existing native stable-promotion approval. No new PAT or persistent Store password is inherently required. Seedocs/MICROSOFT_STORE.mdfor recovery and prerequisites.Review Conversations
Coordinated Store approval rollout
Land evidence-writer compatibility before enforcing PR-only main. Coordinate the central/native/caller cutovers with the documented administrator setup: team grants, active review/CI rules, exact-main release-manager environments without bypass, scoped existing App grants/key, product variables, and exclusive Entra federation migration. These PRs do not apply those live settings, merge themselves, or authorize a Store submission.