Repository navigation
feat(release): automate Microsoft Store submission - #1474
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. |
|
Non-git authority boundary is now provisioned: the |
|
Codex review: needs real behavior proof before merge. Reviewed September 28, 2026, 1:59 PM ET / 17:59 UTC (Revision 8). ClawSweeper reviewWhat this changesThe branch adds a stable-release job that uploads the validated Windows app bundle to Microsoft Store using GitHub OIDC, with submission checks, release documentation, and contract tests. Merge readiness⛔ Blocked before merge - 9 items remain The PR remains useful: current main still leaves Partner Center submission manual. Two Store API contract defects remain on the reviewed head, and automated publication should wait for a real Partner Center rehearsal and release activation decision. Priority: P2 Review scores
Verification
How this fits togetherThe release workflow builds and publishes Windows packages to GitHub. This PR adds a later job that takes the validated bundle, obtains a short-lived publishing identity, and submits an update to Partner Center. flowchart LR
A[Stable release tag] --> B[Validated Windows bundle]
B --> C[GitHub release]
C --> D{Store job eligible?}
D -->|Yes| E[OIDC publishing identity]
E --> F[Partner Center draft]
F --> G[Store submission]
D -->|No| H[GitHub release only]
Decision needed
Why: The release-owner direction favors Store as an additional channel, but the current environment prerequisites and rollout acceptance remain incomplete; only a release owner can authorize when automatic Store mutation begins. Before merge
Findings
Agent review detailsSecurityNeeds attention: The diff avoids stored client secrets, but the new OIDC-to-Partner-Center publishing boundary still lacks real allowed and denied final-effect evidence. Review metrics
Root-cause clusterRelationship: Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Keep Store publishing staged until the publisher tolerates valid Partner Center responses, the identity and Store account are provisioned, and a redacted live rehearsal plus signed-install acceptance supports activation. Do we have a high-confidence way to reproduce the issue? No. The new publisher is absent on current main, and the PR shows deterministic API doubles rather than a Partner Center response or final-effect rehearsal. Is this the best way to solve the issue? No, not yet. Submission-ID-bound publishing is a sensible direction, but valid conditional metadata and server-populated package fields need narrower checks before activation. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 3331b5e38876. LabelsLabel changes: No label changes. Label justifications:
EvidenceSecurity concerns:
What I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (7 earlier review cycles)
|
|
Addressed the accepted ClawSweeper findings on
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
|
Pushed @clawsweeper re-review |
|
🦞👀 Re-review progress:
|
|
Accepted and fixed both API-contract findings at
Focused Store and workflow contract tests pass. The live @clawsweeper re-review |
|
🦞👀 Re-review progress:
|
|
Recorded the final-commit owner decision at The policy is required by the production script and deterministic contract tests. The external environment still needs its identifiers and federated credential before genuine Partner Center final-effect proof can exist. @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Proactively fixed the late commit-status defect at @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Global triage: NEEDS_HUMAN_TEST. Take confidence 12%; recommendation confidence 93%; effort medium-to-large; risk high. Reviewed exact head |
|
Ownership audit: no active maintainer or agent session is driving this draft, and its Partner Center contract/proof blockers remain open. Removing the stale active-landing label until work resumes. |
|
This pull request has been automatically marked as stale due to inactivity. |
|
@RomneyDa I’m an automated assistant acting on Scott’s behalf for this backlog cleanup. There is strong work in this draft, especially around OIDC, stable-only routing, bundle enforcement, and ambiguous submission handling. Before we decide whether it belongs in the active queue, what is your plan for it? Do you intend to continue it and have access to the Partner Center environment needed to resolve the remaining API-contract issues and run real end-to-end proof, or would you prefer that we close it for now and preserve the branch until that ownership and environment exist? Either answer is completely reasonable. We mainly want the open PR list to reflect work that has a realistic path to completion. |
|
ClawSweeper reviews are opt-in for maintainers. If a review is required, finish the work and validation first, then comment |
acd47fc to
da421cf
Compare
Current landing status (2026-10-22)
Head:
ee77292685956bbb71b4072104624544431a7519. Current-head CI passed, including core/CLI, tray/setup/integration, UI/accessibility, both MSIX architectures, the combined bundle, all three WSL E2E lanes and CI Gate. C# and Actions security checks also passed. Setup/connect completed in 20m38s overall (build/setup plus the unchanged 20-minute test-step cap).Prerequisite #1831 (fix(ci): keep progressing E2E fixtures alive under the hang guard) landed as
6647e5497dd0f87a8d61dae83e6d98bb9e8b2797. Its exact reviewed commit0faca6a2was integrated here to qualify the composed head concurrently. The final main-relative diff is Store automation only; its patch-id matches the pre-integration feature exactly. No new feature-code edits were made during integration.Current-head focused proof: publisher fixtures, 22 source-authorization cases, the complete CI workflow contracts and new real process lifecycle cases all passed. The 100%-gradual-rollout defect is fixed and regression-covered. Feature review plus the focused rollout correction and watchdog prerequisite reviews have no remaining actionable source findings.
Previous-head CI
46b07ceefailed in setup/connect and network recovery because the 600-second VSTest timer counted progressing shared fixture initialization as inactivity. WSL creation took 325 seconds; install, gateway startup, both pairings and connectivity then succeeded. The prerequisite changes only the activity signal, retaining 600-second silence and 20-minute hard step limits. The same-version VSTest reproduction aborts under the old guard while logging progress, and passes under the replacement. UI/revocation passed. Hosted Shared 4,676 passed / 8 skipped, Tray 4,474 passed and SetupEngine 2,425 passed / 1 skipped also passed on that prior head.Native Windows closeout on Store head
46b07cee: build passed in 82.5s; Shared 4,656 passed / 1 failed / 27 skipped; Tray 4,467 passed / 7 failed. Known Parallels symlink privilege, ARM64/x64 fixture, native speech DLL and redirected-folder limitations remain recorded as failures. Native publisher/source/workflow contracts passed. Separate exact-head native qualification of the watchdog prerequisite completed: build and full process/workflow contracts passed, with the same documented local unit-test limitations. Hosted composed-head CI subsequently passed, as linked above.ClawSweeper's completed review was on
ca004815, not this head. Its optional-metadata and server-owned package-field findings are fixed and fixture-covered. Activation concerns are explicitly deferred under the maintainer-selected staged rollout: merge dormant code, keepMSSTORE_ENABLEDunset until live authority/submission and Store lifecycle proof. No live Store proof or exact-head ClawSweeper review is claimed.Admin readback: main-only
microsoft-storeenvironment, all three identifiers, and the dedicated secretless OIDC identity are configured. Partner Center checks await fresh admin login. No release or Store submission dispatched. Historical validation below retains original-head attribution.What Problem This Solves
Release operators need a reliable, retryable Microsoft Store submission path for validated releases, without rebuilding or replacing an existing Partner Center draft.
User Impact
Operators can manually run Submit Microsoft Store on
mainwith a successful releaserun_id, or enable the same path automatically with the repository variableMSSTORE_ENABLED=true. Automatic submission defaults off. Existing GitHub releases and unsigned Store handoff artifacts are preserved. Setup and recovery guide.Why This Change Was Made
The dedicated workflow consumes only an authorized release artifact and runs trusted main code in the protected
microsoft-storeenvironment. It uses short-lived OIDC instead of a client secret. The publisher verifies bundle and Partner Center product identity, preserves product metadata, rejects existing drafts, and commits only its own exact submission ID. Valid conditional metadata and server-populated package fields are accepted; ambiguous commit failures never delete the possibly accepted submission.This repair integrates current main without rewriting the original author's commits. Stable/correction tags and approved alpha-to-stable promotion record a run/attempt/tag/commit/hash witness before the Store workflow can consume their bundle.
Evidence
Previous head:
da421cf9fff21e04f8f43a14b418314c11d9938f. Previous-head CI.Independent rubber-duck review completed using a Codex review child. Its fork-PR eligibility finding was fixed and covered: successful fork PR completions are skipped, not failed or submitted. The follow-up review also verified the release-step test boundary correction. No remaining actionable source-review finding. This is not live Store authorization proof.
Deployment is intentionally staged. No live Store upload/commit, signing or release was performed during this repair. The current landing section above records subsequent admin configuration and integration work.
Change Type
Scope
winnodeRequired proof pools
none: release automation and API/source contract changes only. No new custom Windows runtime capability. Existing signed Store install/upgrade rollout gates are not waived.Validation
Passed on current source:
scripts/test-microsoft-store-submission.ps1,scripts/Test-StoreSubmissionSource.Tests.ps1(22 scenarios),scripts/test-ci-workflow-contract.ps1,actionlintfor both changed workflows, andgit diff --check origin/main.Native Windows 11 ARM64 required closeout completed on pre-rebase head
acd47fc955f668c8c440fe0b2139d759c826eaeein an isolated Parallels checkout.scripts/setup-dev.ps1 -CheckOnlyreported all prerequisites met. Results:./build.ps1dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restoredotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restoreReleaseSigningWorkflowTestsThe Shared failure is missing symbolic-link privilege. The seven Tray failures are four x64 prerequisite fixtures running under ARM64 PowerShell, one missing native speech DLL dependency, and two sandbox tests rejecting Parallels-redirected known folders (
C:\Mac\Homeis a reparse point). These unchanged tests also failed before the release-contract fix. They are recorded as failed, not waived or counted green. The task-caused release-asset test failure was fixed by bounding its assertions to the Create Release step; unsigned-package assertions remain intact. No host settings or installed Gateway were altered. Pre-rebase hosted CI was terminal failed; see the attributed holds below. Rebased-head CI is pending. This is not a merge-ready assertion.macOS
scripts/validate-docs.ps1is blocked by the existing backslash path handling invalidate-proof-pools.ps1; native Windows documentation validation in the full build passes. The earlier main baseline had unrelated WSL Latest E2E failures because Node 24.19.0 was below the Gateway minimum, baseline run. Merged prerequisite #1824 (fix(setup): use a Node runtime accepted by the Gateway installer) updates that runtime and is now included through the rebase. Earlier hosted results remain visible at the linked run. Live Store deployment proof is still outstanding.Rebase validation (
da421cf9)Rebased onto merged prerequisite
51f18c1222c996fb6fa2eb4d7e8d668492103a0e. The complete base-relative feature patch is byte-for-byte identical to the pre-rebase patch. The resulting tree differs from the previous head only by the three files from #1824.Fresh focused checks on
da421cf9fff21e04f8f43a14b418314c11d9938fpassed: publisher fixtures; source authorization (22 scenarios); CI workflow contracts; actionlint for both changed workflows;ReleaseSigningWorkflowTests(5 passed); andgit diff --check origin/main.Full native build/Shared/Tray closeout was not repeated for this mechanical base update. The earlier native results remain attributed to their original head, not presented as new-head runs. New-head hosted CI is pending. The earlier UI bootstrap abort remains unproven on this head. No Store submission was triggered.
Pre-rebase CI follow-up (
acd47fc9)The pre-rebase run is terminal failed, not pending. Store contract validation, both MSIX builds and the bundle passed. Hosted Shared: 4,676 passed / 8 skipped; Tray: 4,474 passed; SetupEngine: 2,425 passed / 1 skipped.
51f18c1222c996fb6fa2eb4d7e8d668492103a0e. Its hosted run passed all three WSL lanes. That is prerequisite proof, not a passing run of this rebased PR.UIThreadProc: before bootstrap. The actual hung stack was not retained. This appears unrelated to the release-only diff but is not independently reproduced on base. It remains an unresolved CI hold, not a waived test.No CI reruns, test skips, timeout increases, or feature-branch code changes were made during this attribution.
Real Behavior Proof
da421cf9fff21e04f8f43a14b418314c11d9938f; earlier native closeout onacd47fc955f668c8c440fe0b2139d759c826eaee.CommitStartedis acceptance, not completed publication. Automatic activation remains disabled pending these deployment gates.Security Impact
workflow_dispatchaccepts only a numeric source run ID, not source code or an artifact URL.Compatibility and Migration
MSSTORE_*environment variables and the dedicated Entra app/federated credential already exist; the app has no passwords or certificates. Themicrosoft-storedeployment policy has now been changed from tags-only to themainbranch. Verify Partner Center Manager (Windows) assignment, published product baseline, and absence of a pending draft. After manual rehearsal and lifecycle acceptance, set repositoryMSSTORE_ENABLED=true. No matching organization-level Store secrets/variables were found.Review Conversations