Skip to content

I2982 — The monitor page is pushed over the live channel, and says when it polls

Let the one socket client follow the blackboard channel and move /cockpit/monitor onto it. /events?follow=blackboard takes for (the reader whose signals are marked), sources (the monitor sources, mesh and executor by default) and frames (snapshot, signals or both); a shared read is keyed by what it reads. socket.js keeps the opaque cursor of the last blackboard.signals frame and the epoch of stream.ready, resumes with both, and hands a stream.resync to the page. The monitor page renders the channel with its own cursor and epoch, adds pushed signals on top, and polls /api/v1/monitor only when the channel could not be opened, saying so.

BLOCKED wave 2 · p1 · implementation profile · runs alone

Part of peer-blackboard — The peer blackboard is one projection, pushed live to every surface.

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

Objective

Let the one socket client follow the blackboard channel and move /cockpit/monitor onto it. /events?follow=blackboard takes for (the reader whose signals are marked), sources (the monitor sources, mesh and executor by default) and frames (snapshot, signals or both); a shared read is keyed by what it reads. socket.js keeps the opaque cursor of the last blackboard.signals frame and the epoch of stream.ready, resumes with both, and hands a stream.resync to the page. The monitor page renders the channel with its own cursor and epoch, adds pushed signals on top, and polls /api/v1/monitor only when the channel could not be opened, saying so.

Why

/cockpit/monitor asks the whole monitor every five seconds per tab, and says it is live while it polls.

Current state

socket.js follows executions only, with a numeric sequence cursor; monitor.js polls /api/v1/monitor every five seconds while visible.

Desired state

A review request reaches an open monitor page as a row without a poll; a page whose channel is refused polls and labels itself as polling.

Scope

  • apps/majordomus-cli/src/http/follow.rs
  • apps/majordomus-cli/src/cockpit/monitor.rs
  • share/cockpit/socket.js
  • share/cockpit/monitor.js
  • .ai/repo/adrs/0176-the-blackboard-is-one-projection-pushed-over-one-socket.md
  • .ai/repo/project/intents/the-peer-blackboard-is-one-reality.yaml
  • docs/BLACKBOARD.md
  • test/cases/3382_the_monitor_is_pushed.sh

Dependencies

What waits on this

Acceptance criteria

  • A follower given for= receives signals marked for_you for that reader, and one given frames=signals receives no snapshot
  • socket.js resumes a blackboard channel with the last cursor and epoch, and reports stream.resync to the page
  • The monitor page adds a pushed signal without polling, and polls with a label only when the channel is refused

Validation

  • majordomus plan validate
  • bash test/run.sh 3382_the_monitor_is_pushed

Evidence required

  • case_monitor_pushed

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/I2982.yaml. Read it back with majordomus plan show I2982.

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