fix(webui): tell a deliberate singleton from an un-reviewed app

The instances line had two states where there are three. An app with a
blocker cannot be instanced; an app whose flag is explicitly false was
reviewed and deliberately kept to one — the resolver clients point at,
the auth provider every router points at, the scanner the updater
resolves by a fixed container name; an app with no flag has simply never
been looked at.

Collapsing the middle case into the last reported a decision as an
oversight, and invited someone to "fix" it by flipping the flag. Those
apps now read "Not offered" and point at the reason recorded above the
flag in their config, rather than "not been opted in".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
librelad 2026-08-19 23:50:11 +01:00
parent fd65b74d53
commit 3ebd4ee5bb

View File

@ -378,11 +378,23 @@ Object.assign(AppsManager.prototype, {
+ `(${shown}${unprefixed.length > 4 ? `, +${unprefixed.length - 4} more` : ''}) `
+ `— those names cannot be made unique per instance`);
}
const short = bits.length ? 'Not available' : 'Not enabled';
// Three states, not two. An app with a blocker cannot be instanced; an app
// with the flag explicitly false was reviewed and deliberately left off
// (a singleton by role — the resolver clients point at, the auth provider
// every router points at, the scanner the updater resolves by a fixed
// container name); an app with no flag at all has simply never been
// looked at. Collapsing the middle case into the last one reports a
// decision as an oversight.
const decided = typeCfg[`CFG_${U(type)}_MULTI_INSTANCE`] !== undefined;
const short = bits.length ? 'Not available' : (decided ? 'Not offered' : 'Not enabled');
const tip = bits.length
? `${typeTitleEarly} ${bits.join('; and ')}.`
: `${typeTitleEarly} has no technical blocker — it simply has not been opted in. `
+ `Set CFG_${U(type)}_MULTI_INSTANCE=true on a reviewed app to allow it.`;
: decided
? `${typeTitleEarly} could run as multiple instances, but is deliberately kept to one — `
+ `it is infrastructure the rest of the box points at. See the note above `
+ `CFG_${U(type)}_MULTI_INSTANCE in its config for the specific reason.`
: `${typeTitleEarly} has no technical blocker — it simply has not been opted in. `
+ `Set CFG_${U(type)}_MULTI_INSTANCE=true on a reviewed app to allow it.`;
return `
<div class="instance-family-bar instance-family-bar-off">
<span class="instance-family-label">Instances</span>