Pending questions: glow + question cards + answering; steers queue-until-idle #27

Merged
ClaudiuSchuster merged 1 commit from oss-oo/observatory-questions-ions20260924 into main 2026-09-24 18:25:33 +00:00
Owner

AskUserQuestion pauses become first-class: amber glow (row badge, section count, new-question toast) for ANY session with a running AskUserQuestion part — both driving modes, the part persists with the full question payload. Question cards in the response modal and transcript drawer (question, header, options + descriptions, multiSelect; answer line once resolved).

Answering (dispatch-driven): POST /api/session/<id>/answer writes the dispatcher side-channel answer file (needs zcode-dispatch v0.3.0, PR OSS-Singularity/zcode-dispatch#19); option buttons, free text, and Decline forward within ~1 s. Steers spawn with ZCODE_DISPATCH_ANSWERABLE=1, so questions raised by steered turns wait instead of auto-resolving empty. Desktop-driven questions stay read-only with an honest hint (no external channel into the desktop app's private app-server).

Steer queue-until-idle: the spawn carries the notify markers (parent=target, child=synthetic steer id, event=steer); a busy target self-queues into the sweeper and the prompt delivers VERBATIM as the next sequential turn when idle — never interleaving. Dialog shows the busy state up front and walks queued (position) → delivered.

Verified live on scratch sessions (evidence in the round report): real app-server question parked → answered from the observatory → turn completed quoting the option; steer into a running turn queued → sweeper delivered the marker prompt → session answered ACKNOWLEDGED. Fixture + screenshots cover both answerable and read-only cards. Gates: py_compile + boot OK, Super-Linter slim-v8.7.0 (CI linter set) EXIT 0.

AskUserQuestion pauses become first-class: amber glow (row badge, section count, new-question toast) for ANY session with a running AskUserQuestion part — both driving modes, the part persists with the full question payload. Question cards in the response modal and transcript drawer (question, header, options + descriptions, multiSelect; answer line once resolved). **Answering (dispatch-driven):** POST `/api/session/<id>/answer` writes the dispatcher side-channel answer file (needs zcode-dispatch v0.3.0, PR OSS-Singularity/zcode-dispatch#19); option buttons, free text, and Decline forward within ~1 s. Steers spawn with `ZCODE_DISPATCH_ANSWERABLE=1`, so questions raised by steered turns wait instead of auto-resolving empty. Desktop-driven questions stay read-only with an honest hint (no external channel into the desktop app's private app-server). **Steer queue-until-idle:** the spawn carries the notify markers (parent=target, child=synthetic steer id, event=steer); a busy target self-queues into the sweeper and the prompt delivers VERBATIM as the next sequential turn when idle — never interleaving. Dialog shows the busy state up front and walks queued (position) → delivered. Verified live on scratch sessions (evidence in the round report): real app-server question parked → answered from the observatory → turn completed quoting the option; steer into a running turn queued → sweeper delivered the marker prompt → session answered ACKNOWLEDGED. Fixture + screenshots cover both answerable and read-only cards. Gates: py_compile + boot OK, Super-Linter slim-v8.7.0 (CI linter set) EXIT 0.
Pending questions: glow + question cards + answering; steers queue-until-idle
All checks were successful
Checks / Functional checks (pull_request) Successful in 14s
a0d6643b48
AskUserQuestion pauses are now first-class in the observatory. Any session
whose newest AskUserQuestion tool part is still running (both driving
modes — the part persists with the full question payload the moment the
tool starts) glows amber: row badge, section-header count, and a toast
when a session gains a question. The response modal and transcript
drawer render the question card (question, header, options with
descriptions, multiSelect hint; answer line once resolved).

Dispatch-driven questions are ANSWERED here: POST /api/session/<id>/
answer writes the dispatcher's side-channel answer file (v0.3.0+ parks
the question and polls); option buttons, free text, and Decline forward
within ~1 s and the turn continues — verified end-to-end against a live
scratch session (answer accepted, turn completed quoting the option).
Desktop-driven questions are read-only with an honest hint (their
interaction lives inside the desktop app's private app-server — no
external channel; forensics in zcode-dispatch docs/PROTOCOL.md).

Steering is now race-free by construction: the spawn carries the
dispatcher's notify markers plus ZCODE_DISPATCH_ANSWERABLE=1, so a busy
target (lock, running turn, transcript activity in grace, -32010)
self-queues into the sweeper, which delivers the prompt verbatim as the
next sequential turn (verified live: marker prompt delivered and
acknowledged after the running turn finished). The dialog reports the
busy state up front and walks queued (with position) → delivered.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
OSS-Singularity/zcode-dispatch-observatory!27
No description provided.