Skip to content

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

One capability computes the blackboard from the records that exist; a change of the board or the journal is pushed over one WebSocket to every page that follows it, with the monitor's cursor for resume; /ui, /cockpit and the home page read the same frames; the published site carries a public-safe snapshot labelled as one.

PLANNED 0 of 9 issues done

ready
1
blocked
8
active
0
verify
0
done
0
cancelled
0

Problem

Who is working on what is already recorded — the board of every checkout (peers.list, gathered per ADR 0044), the mesh journal (sessions, claims, reviews, handovers per ADR 0067) and the monitor's folded signals (ADR 0133) — but no surface shows it as one picture and none shows it live. /cockpit/peers renders peers.list once and never changes; /ui has no peers screen; /cockpit/monitor polls the whole monitor every five seconds; the only WebSocket, /events, carries executions and nothing else; and nothing between the board, the journal and the socket says that anything changed. The unmerged ADR 0162 draft proposed a board channel for the kiosk alone and was never implemented.

Outcome

One capability computes the blackboard from the records that exist; a change of the board or the journal is pushed over one WebSocket to every page that follows it, with the monitor's cursor for resume; /ui, /cockpit and the home page read the same frames; the published site carries a public-safe snapshot labelled as one.

Current state

peers.list, mesh.state and monitor.stream answer separately; /cockpit/peers is static; /cockpit/monitor polls; socket.js follows executions only.

Desired state

blackboard.snapshot answers on every interface; a board or journal change reaches a connected page in under a second on this machine; every surface that shows peers reads that one projection.

Scope

  • apps/majordomus-cli/src/commands/blackboard.rs
  • apps/majordomus-cli/src/capability/builtin/blackboard.rs
  • apps/majordomus-cli/src/http
  • apps/majordomus-cli/src/ui
  • apps/majordomus-cli/src/cockpit
  • share/cockpit
  • share/ui
  • docs/BLACKBOARD.md
  • test/cases

Out of scope

  • A second peer registry, a message store or a broker; a peer message kind is added to the journal only when reviews and handovers are shown not to carry what peers send each other
  • A public WebSocket into a private mesh, or credentials in a published bundle
  • Presence for a provider (OpenAI Dots included) that exposes no supported, authenticated event source

Acceptance criteria

  • blackboard.snapshot answers the same projection over the command line, HTTP and MCP, with completeness, sources, workers, conflicts, reviews, handovers, typed relations and signals
  • A board or journal change is pushed to a connected page over one WebSocket that resumes from the monitor's cursor and resynchronises when the cursor cannot be served
  • /ui/peers, the /ui home panel, /cockpit/peers and the home page read the same frames, and say live, reconnecting, offline or snapshot truthfully
  • The published site shows a public-safe snapshot of the blackboard with its revision, and no private path, message body or scope

Validation

  • majordomus plan validate
  • bash test/run.sh 3380_the_blackboard_is_one_projection

Risks

  • The monitor rereads the whole journal on every page; pushing it on every change multiplies that cost by the subscribers unless one computation is shared by all of them.
  • A worker's board session and its own mesh session are two records; joining them by anything weaker than an identifier invents a person.

Issues

Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.

issuestatuswavedepends ontitle
I2980 READY 0 — The blackboard is one projection answered on every interface
I2981 BLOCKED 1 I2980 A board or journal change is pushed over one WebSocket
I2982 BLOCKED 2 I2981 The monitor page is pushed over the live channel, and says when it polls
I2983 BLOCKED 3 I2982 /ui/peers shows the blackboard and is read again when it changes
I2984 BLOCKED 4 I2983 The published site shows a public-safe blackboard, labelled as the snapshot it is
I2985 BLOCKED 4 I2983 The Observatory's cooperation scene draws the blackboard, not a second join of the journal
I2998 BLOCKED 4 I2983 /cockpit/peers renders the blackboard and follows it live
I2999 BLOCKED 4 I2983 From /ui/peers an operator answers a review, takes a handover or releases a claim, through its capability
I3073 BLOCKED 4 I2983 The home page and the docs explain the peer blackboard: live on a runtime, a labelled snapshot on the published site

The graph

peer-blackboard dependency graphfrom .ai/repo/project
flowchart LR
    I2980["I2980<br/>The blackboard is one projection answered on every interface"]:::ready
    I2981["I2981<br/>A board or journal change is pushed over one WebSocket"]:::blocked
    I2982["I2982<br/>The monitor page is pushed over the live channel, and says when it polls"]:::blocked
    I2983["I2983<br/>/ui/peers shows the blackboard and is read again when it changes"]:::blocked
    I2984["I2984<br/>The published site shows a public-safe blackboard, labelled as the snapshot it is"]:::blocked
    I2985["I2985<br/>The Observatory's cooperation scene draws the blackboard, not a second join of the journal"]:::blocked
    I2998["I2998<br/>/cockpit/peers renders the blackboard and follows it live"]:::blocked
    I2999["I2999<br/>From /ui/peers an operator answers a review, takes a handover or releases a claim, through its capability"]:::blocked
    I3073["I3073<br/>The home page and the docs explain the peer blackboard: live on a runtime, a labelled snapshot on the published site"]:::blocked
    I2980 --> I2981
    I2981 --> I2982
    I2982 --> I2983
    I2983 --> I2984
    I2983 --> I2985
    I2983 --> I2998
    I2983 --> I2999
    I2983 --> I3073
    classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
    classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
    classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
    classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
    classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
    classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px

Canonical record: .ai/repo/project/milestones/peer-blackboard.yaml. Read it back with majordomus plan show peer-blackboard.

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