Skip to content

I3181 — A change made on another node reaches every open page by push, and a gap is refetched

Carry mesh journal events that arrive from a linked runtime (sessions, claims, handovers and reviews) into the events channel the local executions use, so /ui/mesh and /ui/peers update without a reload, a page that detects a cursor gap asks for a snapshot, and a client that ends and returns resumes from a snapshot and cursor with nothing lost.

BLOCKED wave 2 · p2 · implementation profile · parallel safe

Part of the-mesh-is-operated-from-any-device — The owner understands and operates the whole mesh from one page, on any device.

Blocked. This issue cannot start until I3138, I3222 are done. The status is derived from that, not declared.

Objective

Carry mesh journal events that arrive from a linked runtime (sessions, claims, handovers and reviews) into the events channel the local executions use, so /ui/mesh and /ui/peers update without a reload, a page that detects a cursor gap asks for a snapshot, and a client that ends and returns resumes from a snapshot and cursor with nothing lost.

Why

The 10-18 analysis found #1342 refreshes /ui/idd only after local executions; a change on another peer or from CI reaches the page only by polling. 5a's I2981 (in flight, no record yet) pushes board and journal changes over one WebSocket for the blackboard; this issue makes every page that reads mesh-derived state follow it. Critique 10-18: /ui/idd reads only the checkout's own plan, and the journal carries only session, claim, handover and review events, so this issue targets the pages that render journal state. I2981 has no record on master or on this branch and cannot be a dependency. I3222 and I3138 are its recorded stand-ins. I3194 (latency) duplicated I3140 (prismatic-lumen) and is dropped in favour of it. It extends milestone everything-is-followed-in-one-stream. Proposed in ADR 0201 (The persistent runtime is the authority; every operator surface, Lumen included, is a client of it); ADR 0216 (Every live surface follows one channel with named follow streams, and nothing polls where a stream exists) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c297#9.

Current state

Verified on master: http/events.rs and http/ws.rs carry executions and the monitor; remote journal events are folded into mesh.state but not pushed to pages. In flight: I2981/I2982 (5a, no records yet), branch feature/the-workspace-follows-the-plan-live (p4).

Desired state

A remote event changes an open page within the stream's budget; a gap triggers a resnapshot and says 'resynchronising'.

Scope

  • apps/majordomus-cli/src/http/events.rs
  • apps/majordomus-cli/src/mesh/journal.rs
  • share/ui/ui.js
  • apps/majordomus-cli/src/http/ws.rs
  • apps/majordomus-cli/src/ui/mesh.rs
  • apps/majordomus-cli/src/ui/mod.rs
  • apps/majordomus-cli/src/ui/source.rs
  • docs/MAJORDOMUS_UI.md

Out of scope

  • Minute polling presented as realtime
  • /ui/idd and plan transitions: the journal carries no plan transition, and local push to /ui/idd is I3220
  • Board push already planned under I2981 (5a, unrecorded)

Dependencies

Acceptance criteria

  • A dropped connection resumes without a missed change
  • An event appended to runtime B's mesh journal (session, claim, handover or review) appears on runtime A's open /ui/mesh and /ui/peers without a reload
  • Ending the session and closing the page, then reopening, resumes from a snapshot and cursor with no change lost, proven by case_a_remote_change_reaches_the_page
  • The proof is the case named in evidence_required, run by bash test/run.sh, not cargo test --test ui_idd

Validation

  • majordomus plan validate
  • cargo test --lib http::events

Evidence required

  • case_a_remote_change_reaches_the_page

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3181.yaml. Read it back with majordomus plan show I3181.

Searches the titles and descriptions of every page this site publishes.