ouroboros/web
Ouroboros 35fbf7616c Show since when a reviewer has been awaited, only where the host knows it
On 2026-09-19 a task sat parked behind a reviewer for 7 h 16 min and the task
card gave no hint for how long. PR #1159 made the wait itself visible — a plan
wave or an acceptance panel lists an unanswered reviewer as
`Awaiting answer: <slot> · <model>` — but never said WHEN the host sent that
reviewer its request.

The rule is that a time is never invented, inferred or back-filled. A row whose
send moment the host did not record keeps exactly the text it has today.

The moment is recorded once, at the source: `ActiveReviewAttempt` gains
`started_at`, stamped with `utc_now_iso()` only where this process creates the
entry for a NEW physical operation. The free replay of an already settled answer
is not stamped, and neither is an `exact_recovery` rejoin: that operation was
sent by an EARLIER process and its send moment is persisted nowhere, so this
process honestly has nothing to show.

`ReviewActorRecord` gains `awaiting_since`, set from the entry onto the two rows
that wait — the `pending_dispatch` row released at the dispatch barrier and the
`in_flight` row whose window expired. A settled or answered row never carries it.
The plan row and the durable wave actor record carry it forward beside the other
custody facts, so it reaches `wave.actors`; `_review_actor_projection` publishes
it for `panel.actors` only when one of the two existing wait predicates still
calls the row unanswered AND the stored value parses as an instant — otherwise
the key is absent.

The browser appends ` · since HH:MM` in the viewer's local 24-hour clock, with
the short local date when the wait began on an earlier day so `since 23:50`
cannot be misread as tonight, and renders nothing at all for an absent or
unparseable value.
2026-09-21 12:23:01 +03:00
..
modules Show since when a reviewer has been awaited, only where the host knows it 2026-09-21 12:23:01 +03:00
providers feat(provider): add GigaChat via the gigachat library 2026-06-03 22:22:17 +03:00
tests Show since when a reviewer has been awaited, only where the host knows it 2026-09-21 12:23:01 +03:00
vendor feat: rich markdown rendering for chat messages 2026-08-30 20:11:49 +04:00
__init__.py Initial commit from app bundle 2026-04-22 01:04:48 +03:00
app.js One way to point at a Project: the reference door 2026-09-21 01:40:41 +03:00
chart.umd.min.js Initial commit from app bundle 2026-04-22 01:04:48 +03:00
eslint.config.js web: the ESLint layer ignores the vendored parser and fixtures 2026-09-05 17:22:44 +00:00
favicon.png Initial commit from app bundle 2026-04-22 01:04:48 +03:00
highlight.min.js feat: rich markdown rendering for chat messages 2026-08-30 20:11:49 +04:00
index.html feat: add client-local Light, Dark and System appearance 2026-09-19 04:49:31 +03:00
logo.jpg Initial commit from app bundle 2026-04-22 01:04:48 +03:00
marked.min.js feat: rich markdown rendering for chat messages 2026-08-30 20:11:49 +04:00
mermaid.min.js feat: rich markdown rendering for chat messages 2026-08-30 20:11:49 +04:00
model_roles.css Settings: mark the collapsed Context & processing disclosure as a control 2026-09-14 17:50:20 +03:00
model_wait.css ui: establish a coherent shared design system 2026-09-09 20:24:35 +03:00
onboarding.css feat: add draft per-subagent enable checkbox 2026-09-21 01:59:32 +03:00
onboarding_template.html feat: add client-local Light, Dark and System appearance 2026-09-19 04:49:31 +03:00
package-lock.json fix: collect independent CI failures before release 2026-09-21 04:35:12 +03:00
package.json fix: collect independent CI failures before release 2026-09-21 04:35:12 +03:00
purify.min.js feat: rich markdown rendering for chat messages 2026-08-30 20:11:49 +04:00
reviewer_slots.css ui: establish a coherent shared design system 2026-09-09 20:24:35 +03:00
settings.css feat: add draft per-subagent enable checkbox 2026-09-21 01:59:32 +03:00
style.css One way to point at a Project: the reference door 2026-09-21 01:40:41 +03:00
theme.js feat: add client-local Light, Dark and System appearance 2026-09-19 04:49:31 +03:00
ui.css fix(appearance): declare the info foreground, finish the Light sweep, keep browser lanes on Dark 2026-09-19 04:49:31 +03:00