plugins: a splash is part of a plugin, like its icon

assets/splash.png is discovered by presence, published by the same copy that
already took the whole assets directory, and carried on DiscoveredPlugin beside
icon.

The platform draws no splash — a plugin has no launch. It is carried because the
plugin repository is where a product's artwork lives now, and the phone app that
fronts the same product needs somewhere to read it from that is not a designer's
folder. The pair is the point: the icon is a reduction of the splash's world,
and keeping them together is what stops them drifting.

Publishing no longer gates on the icon alone, which left a plugin shipping only
a splash serving nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 06:29:41 +01:00
co-authored by Claude Opus 5
parent bbb16d6ed3
commit cfbec0b757
5 changed files with 22 additions and 1 deletions
+3 -1
View File
@@ -320,7 +320,9 @@ export async function installPlugin(
// obvious: the `/plugins/*` route is dynamic precisely so a first install does not show a broken
// image until the next restart, and uninstall is allowed to delete these because they are copies of
// files that still exist in the plugin's source.
if (plugin.icon) {
// Either asset is reason enough to publish — the copy takes the whole directory, and gating on
// the icon alone left a plugin that ships only a splash serving nothing.
if (plugin.icon || plugin.splash) {
await publishAssets(appName, plugin.dir);
await step(steps, onStep, `assets: published to /plugins/${appName}/`);
}