Skip to content

every-surface-follows-what-changed — Every surface follows what changed in the repository by push, and a surface that does not says so

Executions are a monitor source; the Observatory is told over /events; a write by any client reaches the workspace; every live surface states its transport in ADR 0158's words; a follower converges after loss; a kiosk keeps following for days.

PLANNED 0 of 8 issues done

ready
5
blocked
3
active
0
verify
0
done
0
cancelled
0

Problem

docs/MONITOR.md says executions are not a monitor source yet; on master /events carries executions only, /ui refreshes on a 60 s timer (share/ui/ui.js), and the Observatory asks /api/v1/observatory/events with a cursor on an interval (share/ui/observatory.js). Each surface words its liveness differently, and an intent proposed from a terminal reaches an open /ui/idd only on that timer. Proposed in 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:c294#3, chatgpt-majordomus:c294#7, chatgpt-majordomus:c260#8, chatgpt-majordomus:c208#73, chatgpt-majordomus:c260#0, chatgpt-majordomus:c232#6.

Outcome

Executions are a monitor source; the Observatory is told over /events; a write by any client reaches the workspace; every live surface states its transport in ADR 0158's words; a follower converges after loss; a kiosk keeps following for days.

Current state

Verified on master 707a04c7ce8: apps/majordomus-cli/src/monitor has the executor, github and mesh sources; apps/majordomus-cli/src/http/events.rs serves executions; share/ui/observatory.js polls by cursor and words REPLAY, SNAPSHOT, RESYNCED, LIVE and STALE for itself. In flight, not on master: PR #1178 (observatory-stream.js) and 5a's follow channel I2980-I2983.

Desired state

Each criterion of every-surface-follows-what-changed is carried by one issue here and proven by the case its issue's evidence_required names, on the one /events channel.

Scope

  • apps/majordomus-cli/src/monitor
  • apps/majordomus-cli/src/execution/store.rs
  • apps/majordomus-cli/src/http/events.rs
  • apps/majordomus-cli/src/mesh/journal.rs
  • share/ui
  • share/cockpit
  • apps/majordomus-cli/src/ui/view.rs
  • apps/majordomus-cli/src/cockpit/view.rs
  • docs/MONITOR.md
  • docs/MAJORDOMUS_UI.md

Out of scope

  • Web Push notifications outside the browser
  • Live state on the published site

Acceptance criteria

  • An execution started from the CLI appears in majordomus monitor and on an open /cockpit/monitor
  • The Observatory says LIVE only while a socket is delivering
  • An intent proposed from a terminal reaches an open /ui/idd without a reload
  • A fault-injection case ends every follower equal to a fresh snapshot

Validation

  • majordomus plan validate
  • majordomus intent explain every-surface-follows-what-changed

Risks

  • I3220 needs I2981's crate::change, and I3218's pushed half joins when I2981 lands; neither id can be a depends_on until its record reaches master, so the coordinator holds I3220 until then

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
I3218 READY 0 — The execution ledger is a source of the monitor, so a run started anywhere is followed everywhere
I3219 READY 0 — The Observatory is told what happened over the live channel, and asks only when it cannot be told
I3220 READY 3 I2783 An intent proposed or an issue moved by any client reaches an open intent workspace without a reload
I3221 BLOCKED 1 I3219 Every live surface says in ADR 0158's words whether it is live, reconnecting, stale, polling, a snapshot or a replay
I3222 READY 0 — A follower whose frames are lost, delayed or reordered, or whose peer is partitioned, ends equal to a fresh snapshot
I3231 BLOCKED 1 I3219 The Observatory shows its own stream health: lag, dropped frames, resyncs and frame rate
I3232 READY 0 — A kiosk left running for days shifts its marks against burn-in and recovers from a lost drawing context
I3431 BLOCKED 4 I3220 A record a process outside the server writes (a knowledge record reaching the index, a ledger line or a captured prompt) reaches an open view within one heartbeat, without a reload

The graph

every-surface-follows-what-changed dependency graphfrom .ai/repo/project
flowchart LR
    I3218["I3218<br/>The execution ledger is a source of the monitor, so a run started anywhere is followed everywhere"]:::ready
    I3219["I3219<br/>The Observatory is told what happened over the live channel, and asks only when it cannot be told"]:::ready
    I3220["I3220<br/>An intent proposed or an issue moved by any client reaches an open intent workspace without a reload"]:::ready
    I3221["I3221<br/>Every live surface says in ADR 0158's words whether it is live, reconnecting, stale, polling, a snapshot or a replay"]:::blocked
    I3222["I3222<br/>A follower whose frames are lost, delayed or reordered, or whose peer is partitioned, ends equal to a fresh snapshot"]:::ready
    I3231["I3231<br/>The Observatory shows its own stream health: lag, dropped frames, resyncs and frame rate"]:::blocked
    I3232["I3232<br/>A kiosk left running for days shifts its marks against burn-in and recovers from a lost drawing context"]:::ready
    I3431["I3431<br/>A record a process outside the server writes (a knowledge record reaching the index, a ledger line or a captured prompt) reaches an open view within one heartbeat, without a reload"]:::blocked
    I3219 --> I3221
    I3219 --> I3231
    I3220 --> I3431
    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/every-surface-follows-what-changed.yaml. Read it back with majordomus plan show every-surface-follows-what-changed.

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