Repository navigation
Store Tests tab: install test builds of plugins you were invited to test - #918
Merged
Merged
Conversation
…Tests tab, and install them with consent
manuelmayer-dev
force-pushed
the
feature/store-tests
branch
from
September 17, 2026 16:58
4705cea to
6930ce9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Creators on the Macro Deck Platform can now invite up to ten testers to a plugin (TestFlight-style). This PR is the Macro Deck side: a signed-in tester sees the test builds of the plugins they test in a new Tests tab of the Store and installs them.
GET api/v1/store/testslists the tested plugins with their builds for the signed-in account;POST api/v1/store/tests/{packageId}/builds/{buildId}/downloadreturns a short-lived link and the SHA-256 the bytes must match.api/store/tests(list, install). A test install is a store operation of kindTestInstall, so progress uses the existing operation events. The host checks that the Platform lists the build for this account before starting, and requests the download link itself when the operation runs; nothing about the URL or digest comes from the UI.TestBuild. They are unsigned, so every install needs explicit consent, but not Developer Mode, and they may replace a plugin admitted as trusted. The persisted tier is not lowered, so a later non-test unsigned update is still refused. Signatures that do not verify are still refused, and the package must carry the listed plugin id. A failed test install is not retryable, so consent is asked again./store/tests), in the Discover / Installed switcher, offered only when signed in and not behind the StoreTester coming-soon gate; that overlay offers "Open your tests" to a signed-in account. One card per plugin, builds with version, build number, changelog, install / installed / progress, and a confirmation modal before every install.The Platform side is already on Macro-Deck-Platform
main.Testing
dotnet build MacroDeck.slnx -c Release -warnaserrorStoreTestBuildInstallTestsagainst real signed/unsigned/tampered archives and a real trust evaluator (consent required, no Developer Mode needed, replaces a trusted install, newer build of the same version, other plugin id refused, digest mismatch, build not listed for the account starts nothing, broken signature refused),StorePlatformClientTestsfor the two endpoints, auth matrix for the new routes, trust acceptance test extended to the new source kind. Full host suite after rebasing onto Add an installed extensions page and automatic extension updates #917: 8760 passed.ui/angular:npm run build:prodclean,npm test4188 passed;ui/web-clientbuild and 465 specs passed.Known unrelated failures in the full solution run:
MacroDeck.Plugin.Protocol.Tests.UnitTests(protocol docs misshost.asset.*) and a signing test that also counts files under local.claude/worktrees.Plugin SDK / API compatibility
No public, non-obsolete SDK or plugin protocol contract was changed; all changes are in the host and desktop UI.
Notes
Limitation: with a test build of 1.2.0 installed, a Store release of the same 1.2.0 is not offered as an update.