webui: a refusal forgets only the reads from the source that refused #1554

Open
opened 2026-10-10 21:18:07 +00:00 by jarvis · 0 comments
Contributor

Found by Dewey in row 54 (#1543), round 2, while tracing the views.test :167 race.

forget() in packages/webui/src/public/bus.js clears every kept read when any read is refused (row 53's rule: after a refusal, nothing read before is shown anywhere). That rule was written when every kept read came from the bus. Row 54 adds reads that don't use the bus: Queue (the queue store), Business (the business file) and Settings.

On a Console started with a system config but no running bus, opening the palette reads inbox and tasks. Both come back 503 not-configured, and forget() drops the queue rows the Queue view had just read. The next read brings them back, so the screen flickers and the palette can't list queue rows.

Lead ruling (Sage): a refusal forgets the reads from the source that refused. A bus refusal (403, not-configured, no-bus-host) forgets the bus reads and the Inbox count. A queue-refused forgets the queue reads. A business refusal forgets the business read. The banner, the code shown in mono and "Nothing was written" stay as they are. A test shows that a bus refusal keeps queue rows that were read before it, and that a queue refusal still drops them.

This is not a row 54 blocker: no data the refused source owns stays visible. The work becomes a queue row after the Q14 hold ends (packages/webui is not frozen, but the queue moves wait for the hold).

Found by Dewey in row 54 (#1543), round 2, while tracing the views.test :167 race. `forget()` in `packages/webui/src/public/bus.js` clears every kept read when any read is refused (row 53's rule: after a refusal, nothing read before is shown anywhere). That rule was written when every kept read came from the bus. Row 54 adds reads that don't use the bus: Queue (the queue store), Business (the business file) and Settings. On a Console started with a system config but no running bus, opening the palette reads inbox and tasks. Both come back 503 `not-configured`, and `forget()` drops the queue rows the Queue view had just read. The next read brings them back, so the screen flickers and the palette can't list queue rows. Lead ruling (Sage): a refusal forgets the reads from the source that refused. A bus refusal (403, `not-configured`, `no-bus-host`) forgets the bus reads and the Inbox count. A `queue-refused` forgets the queue reads. A business refusal forgets the business read. The banner, the code shown in mono and "Nothing was written" stay as they are. A test shows that a bus refusal keeps queue rows that were read before it, and that a queue refusal still drops them. This is not a row 54 blocker: no data the refused source owns stays visible. The work becomes a queue row after the Q14 hold ends (`packages/webui` is not frozen, but the queue moves wait for the hold).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1554