I3220 — An intent proposed or an issue moved by any client reaches an open intent workspace without a reload
Advance the change generation (crate::change, from I2981) on every repository_mutation capability of the plan and intents (intent propose, plan transition, evidence attach), and have /ui/idd read itself again on that frame, whichever client made the change: the CLI, MCP from a Claude Code session, or another tab.
READY wave 3 · p1 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3220 will be accepted.
Objective
Advance the change generation (crate::change, from I2981) on every repository_mutation capability of the plan and intents (intent propose, plan transition, evidence attach), and have /ui/idd read itself again on that frame, whichever client made the change: the CLI, MCP from a Claude Code session, or another tab.
Why
Owner, 2026-10-12: typing /intent in Claude Code must show in /ui at once over the WebSocket. I2783 (2b) re-reads the workspace when a move ends on its own server; a write by another client is not covered. It waits on in-flight work not yet on master: I2981. 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:c232#6, chatgpt-majordomus:c288#8, chatgpt-majordomus:c208#73.
Current state
On master /ui/idd refreshes every 60 s (share/ui/ui.js); I2783 and I2981 are branch-only.
Desired state
One frame per plan or intent write, carrying the record ids it touched; the workspace re-reads the panels those ids feed.
Scope
- apps/majordomus-cli/src/capability/builtin/plan.rs
- apps/majordomus-cli/src/capability/builtin/intents.rs
- apps/majordomus-cli/src/http/events.rs
- share/ui/ui.js
- .ai/repo/project/intents
Out of scope
- Writes from the published site
- Merging of concurrent edits
Dependencies
What waits on this
Acceptance criteria
- majordomus intent propose from a terminal makes an open /ui/idd list the new intent within a second on this machine, measured
- A plan transition made over MCP updates the issue's row in another tab without a reload
- Work starts only once I2981's crate::change and I2783 are on master; their ids join depends_on in the change that records them there
- The criterion every-surface-follows-what-changed#a-write-reaches-the-workspace is switched to evidence: test, ref case_the_workspace_follows_every_client, in the change that adds the case
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test ui_idd
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib http::events
Evidence required
- case_the_workspace_follows_every_client
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/I3220.yaml. Read it back with majordomus plan show I3220.