feat(review): re-read an open Needs review page when its queue changes

An open Needs review page now follows the queue without polling. A new
server-sent event stream, GET /prompt_manager/review/events, sends
"ready" when it opens and "change" after every committed queue change:
an item the scan or the monitor recorded, a spelling refresh, a decision
from any tab, and a restore. database/review_changes.py notifies after
the commit from whichever thread wrote it. The page re-reads its first
page on each event, keeps the open item, its choice and an unanswered
decision, and re-reads the SAVED VIEWS count with it. When the open item
left the queue, the next one opens with a note. A keepalive comment
every 25 s lets the server drop a closed tab; shutdown ends every stream.

Leaving the page mid-decision now releases that decision's capture.

D-NEW-F1 is renumbered D119 in markers and TESTING.md.
This commit is contained in:
Vito Sansevero
2026-10-22 19:23:37 -07:00
parent 9a7bdb2f09
commit 52c6efcbe4
13 changed files with 666 additions and 26 deletions
+1 -1
View File
@@ -383,6 +383,6 @@ pre.prompt-text { font: inherit; font-size: 12px; line-height: 1.75; margin-bloc
/* #249 D20: the prompt blocks' mount point is transparent, so the chosen path's sections sit in the panel as the
concept's do. */
.review-panel > .prompt-inspector { display: contents; /* D20 */ }
/* D-NEW-F1: a file that cannot be served (no current root) has an inert, empty media button. */
/* D119: a file that cannot be served (no current root) has an inert, empty media button. */
.review-queue .image-open[aria-disabled="true"] { cursor: not-allowed; }
.review-panel > p.small { min-inline-size: 0; overflow-wrap: anywhere; }