I3431 — 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
On the 20 s heartbeat the live channel already runs (http/events.rs:70), take crate::live's repository stamp and the stamps of the ledger file and of today's capture directory: three stats per heartbeat, never one per object. When a stamp has moved, emit the frame I3220 defines, carrying the kinds that changed and no content. A knowledge record that the session-end hook wrote, once a commit or git add has brought it into the index, a task.started line, and a captured prompt then all reach open views. Wake followers through crate::change::Generation from feature/the-blackboard-is-pushed once that branch lands, rather than through a second wake mechanism. A woken reader writes nothing, so no frame can cause another.
BLOCKED wave 4 · p2 · implementation profile · parallel safe
Blocked. This issue cannot start until I3220 is done. The status is derived from that, not declared.
Objective
On the 20 s heartbeat the live channel already runs (http/events.rs:70), take crate::live's repository stamp and the stamps of the ledger file and of today's capture directory: three stats per heartbeat, never one per object. When a stamp has moved, emit the frame I3220 defines, carrying the kinds that changed and no content. A knowledge record that the session-end hook wrote, once a commit or git add has brought it into the index, a task.started line, and a captured prompt then all reach open views. Wake followers through crate::change::Generation from feature/the-blackboard-is-pushed once that branch lands, rather than through a second wake mechanism. A woken reader writes nothing, so no frame can cause another.
Why
The owner's 2026-10-19 Cognitive Fabric pack prefers the existing WebSocket stream over polling for the view of intents, knowledge and evidence (campaigns/prismatic-way-cognitive-fabric-prompt-pack/prompts/05_SURFACES.md), and verification/ACCEPTANCE.md forbids unbounded event or hook feedback. I3220 covers writes made through capabilities. Knowledge, the ledger and the capture archive are written outside the server.
Current state
The session-end hook derives knowledge candidates outside the server (lib/session.sh:663-673). Capture is written by a hook process (.claude/hooks/majordomus-capture). crate::live detects a move only through git's control files, stat'ed on a request's thread, with no watcher (apps/majordomus-cli/src/live.rs:19-40). /ui refreshes every 60 s (share/ui/ui.js:228,404). crate::change::Generation exists only on the unmerged feature/the-blackboard-is-pushed, feature/the-monitor-is-pushed and feature/the-peers-screen-follows-the-blackboard. That work has no issue file on this branch, and apps/majordomus-cli/src/change.rs and http/follow.rs are absent here.
Desired state
A staged or committed knowledge record, a new ledger line and a new capture each move an open view within one heartbeat, with no polling added, no per-object stat and no second wake mechanism.
Scope
- apps/majordomus-cli/src/http/events.rs
- apps/majordomus-cli/src/live.rs
- share/ui/ui.js
- .ai/repo/project/intents
Out of scope
- A filesystem watcher or a new thread
- Showing untracked candidates
- A second event bus or socket
- Frame content beyond the kinds that changed
Dependencies
What waits on this
- I3409BLOCKED An episode answers, for each prompt it captured, the intent it matched, the task that recorded it, that task's outcome and the evidence of the criterion it serves, with the same identities on every surface and after any replay
- I3430BLOCKED The IDD standing panel and the Cockpit intent page show, under each criterion, the knowledge that bears on it, each with how it is known
Acceptance criteria
- git add of a new candidate makes an open /ui/knowledge list it within one 20 s heartbeat, without a reload
- An appended task.started line moves an open intent inspector within one heartbeat
- A burst of 100 stamp moves wakes a follower a bounded number of times, and ends in a state equal to a fresh read
- After a wake, the ledger, the index stamp and the capture directory are unchanged by the reader
- live.rs's per-request cost is measured against the existing benchmark baseline before and after and reported, not asserted
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib http::events
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib live
- majordomus plan validate
Evidence required
- a_record_written_outside_reaches_an_open_view
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/I3431.yaml. Read it back with majordomus plan show I3431.