executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
microsoft-store-publisherPrepare, validate, submit, and monitor Windows desktop apps in Microsoft Partner Center. Use for MSIX packaging, Store identity, listings, WACK, Partner Center automation, certification, and publishing.
Independent GitHub snapshot · Automated classification · Original documentation governs
Use this skill when the user wants to publish a Windows application to the Microsoft Store, create or validate an MSIX, complete a Partner Center submission, respond to certification findings, or monitor publishing status.
This skill is for Windows desktop applications, including packaged classic
Win32 apps that use runFullTrust. It is based on a successful end-to-end
submission using Partner Center, an unsigned Store MSIX, the Windows App
Certification Kit, and browser automation against Partner Center's current web
components.
Treat Partner Center as a production publishing system.
references/submission-playbook.md - complete submission sequence.references/msix-checklist.md - package and manifest requirements.references/partner-center-dom.md - known routes, text, roles, custom
elements, selectors, and automation quirks.references/worked-example.md - concrete lessons from a successful
full-trust desktop app submission.scripts/partner-center-control.mjs - Playwright controller for a dedicated
Edge profile.scripts/inspect-msix.ps1 - unpack and inspect an MSIX before upload.scripts/invoke-wack.ps1 - run WACK, then find, verify, and save its XML and
HTML reports.templates/run-full-trust-rationale.md - restricted-capability explanation.templates/certification-notes.md - tester instructions.templates/store-listing.md - listing content worksheet.templates/submission-record.json - durable identity, package, validation,
and certification handoff record.Read the relevant reference before performing that phase. Do not rely on remembered Partner Center labels because Microsoft changes the UI.
Collect or determine:
Inspect the repository before proposing package changes. Search for existing manifest templates, package scripts, signing scripts, app icons, version sources, privacy documents, third-party notices, and startup behavior.
In Partner Center, reserve an available product name. Avoid trademarked terms in the product name unless the user has a documented right to use them.
After reservation, capture the exact values under:
Product management > Product identity
CN=... valueNever guess these values. The MSIX must use the Partner Center values exactly.
Follow references/msix-checklist.md.
Important defaults:
0 before Store submission because it
is reserved for Microsoft.Package/Properties/DisplayName must exactly match a reserved product name.
Matching only the application's visual display name is not sufficient.Prefer a repeatable build script that:
makeappx.exe.Run:
.\scripts\inspect-msix.ps1 `
-PackagePath '<path-to-package.msix>' `
-ExpectedIdentityName '<Partner Center identity name>' `
-ExpectedPublisher '<Partner Center publisher ID>' `
-ExpectedDisplayName '<reserved product name>'
The script belongs to this skill directory, not necessarily the application repository. Resolve its full path before invoking it.
Install and exercise the packaged app under real package identity when possible. Test:
Run:
# Run this command from an elevated PowerShell terminal.
.\scripts\invoke-wack.ps1 `
-PackagePath '<path-to-package.msix>' `
-ReportPath '<artifact-directory>\WACK-report.xml'
The WACK command-line runner requires elevation. The model must not approve the operating-system authentication prompt for the user.
WACK accepts a report path only when it ends in .xml. Any other extension
fails with exit code -1 and The report output file path should point to a XML file. Current kits write the XML report to the requested path and an HTML
rendering of it to %LOCALAPPDATA%\Microsoft\AppCertKit\<same base name>.htm.
One earlier run left only an HTML report in that folder and no XML report.
The script:
.xml path. A -ReportPath ending in .htm or
.html names the saved HTML report, and the XML report is saved beside it
with the same base name.%LOCALAPPDATA%\Microsoft\AppCertKit. It skips files from
earlier runs and the unrelated XML files WACK keeps in that folder, and keeps
waiting while the report is still an unfinished interim report.-ReportPath.OVERALL_RESULT the way the HTML report shows it: PASS is
PASSED, FAIL is FAILED, WARNING is PASSED WITH WARNINGS, and an
interim report is INCOMPLETE. The HTML result is used only when there is
no XML report.PASSED, not every test ran, the XML and HTML
reports disagree, appcert.exe exited with an error, or the report's
package identity name or version does not match the package. For a bundle,
it warns instead, so check the name and version by hand.nonPassingTests, with WACK's
messages for it. An HTML-only result leaves this list empty.When it finds a report, the script prints a JSON summary, then throws if
passed is false. Do not continue to submission unless passed is true.
PASSED WITH WARNINGS is not PASSED: fix the tests it names and rerun WACK.
Read every entry in warnings. Optional test failures do not block Store
onboarding, but investigate them.
Record the result in the submission record: overallResult as wack.result,
xmlReport as wack.reportPath, kitVersion as wack.kitVersion, and
reportTime as wack.testedAt. When resultSource is html, use
htmlReport as the report path and copy the kit version and report time from
the HTML report's header.
To parse and verify an existing report without running WACK again:
.\scripts\invoke-wack.ps1 `
-PackagePath '<path-to-package.msix>' `
-ReportPath '<artifact-directory>\verified-WACK-report.xml' `
-ExistingReportPath '<existing-WACK-report.xml>'
Pass an .htm report only when no XML report exists. Given an XML report, the
script looks for the HTML report with the same base name, beside it or in
%LOCALAPPDATA%\Microsoft\AppCertKit, and uses it when the report times
match. Given an HTML report, it uses the XML report beside it when the two
match.
Prefer app-native browser or computer-use tools when they can inspect and act
on the page reliably. Use scripts/partner-center-control.mjs as a fallback
when Partner Center web components or file uploads are unreliable.
Setup:
Set-Location '<skill-directory>\scripts'
npm install
$env:PARTNER_CENTER_PROFILE = '<dedicated-profile-directory>'
node .\partner-center-control.mjs launch
Run launch as an attached background process. The user completes Microsoft
authentication in the dedicated Edge window. In a separate command process,
use read-only commands such as:
node .\partner-center-control.mjs status
node .\partner-center-control.mjs pages
node .\partner-center-control.mjs text
node .\partner-center-control.mjs anchors
node .\partner-center-control.mjs overview-state
node .\partner-center-control.mjs agreement-state
node .\partner-center-control.mjs button-state "Submit for certification"
State-changing controller commands require:
$env:PARTNER_CENTER_ALLOW_WRITE = '1'
Set it only after the user has authorized the exact action. Remove it after the action so later commands fail closed.
Read references/partner-center-dom.md before using selectors.
Read references/submission-playbook.md. Typical sections are:
After saving each section, reload it and verify persistence. Partner Center can temporarily omit completion states while its APIs are still loading. Wait and reload before deciding a section is incomplete.
Do not make unsupported marketing or accessibility claims. Use genuine app screenshots. Describe network, hardware, account, and protected-content limitations plainly.
For runFullTrust, explain the exact native functionality, helper processes,
Windows APIs, startup integration, and why a sandboxed app model is
insufficient. State whether the app uses elevation, services, drivers,
system-wide settings, or a cloud backend.
Before asking for submission approval, verify:
invoke-wack.ps1 reported passed: true for the final package: the WACK
overall result is PASSED, and the report's identity name and version
match the package.If Partner Center displays an updated agreement:
Not Accepted to an acceptance date.Do not reuse approval from another agreement or earlier action.
When the button is enabled:
Certification commonly completes within a few hours but can take several business days. Monitor:
If certification fails, quote the finding exactly, map it to the package, listing, policy, or test behavior, make the smallest complete correction, rebuild with a higher package version when required, rerun inspection and WACK, and obtain fresh submission approval.
If the product is approved, verify the public Store URL from an unauthenticated context. Do not claim it is live solely because Partner Center says publishing completed.
Report concrete state:
Never report a mutation as complete unless the resulting state was read back from Partner Center or the generated artifact was inspected.
For long-running submissions, copy templates/submission-record.json into a
session artifact directory and update it after each meaningful state change.
Do not commit account identifiers, private URLs, credentials, or browser
profile data into the application repository.