Picker review fixes: validate stream_id on stop; accurate offline + no-system copy

- POST /discord/nodes/{id}/streams/stop: stream_id must be guild:channel
  snowflakes, so a malformed id is a 422 instead of a Firestore path error.
- Offline footer said channels resume on reconnect; ad-hoc ones stop once
  the node is gone past the lease grace (reconcile_once). Say so.
- Picker: say why Start is disabled when the node has no system.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Logan Cusano
2026-10-04 21:36:30 -04:00
co-authored by Claude Opus 5.5
parent 2457d2d734
commit d2437e3a0b
3 changed files with 19 additions and 2 deletions
+6 -1
View File
@@ -271,6 +271,11 @@ function DiscordPicker({
</fieldset>
)}
{!options.system_id && (
<p className="text-xs text-sev-moderate">
This node is not listening to a system yet. Assign it one before adding a radio channel.
</p>
)}
{atNodeCap && !channelOnHere && (
<p className="text-xs text-sev-moderate">
This node already carries {options.limits.node_used} of {options.limits.node_max} radio channels. Stop one
@@ -439,7 +444,7 @@ export function NodeDiscordRadio({ nodeId }: { nodeId: string }) {
{actionError && <p role="alert" className="px-4 py-2 text-xs text-sev-major border-t border-line">{actionError}</p>}
{options && !options.node_online && streams.length > 0 && (
<p className="px-4 py-2 text-xs text-ink-muted bg-raised border-t border-line">
This node is offline — its channels resume when it reconnects. If it stays down, persistent ones move to another node on the same system.
This node is offline — its channels resume if it reconnects shortly. If it stays down, ad-hoc ones stop and persistent ones move to another node on the same system.
</p>
)}