# cache-sentinel 仕様 v0.5 — UI 対応(公式 UI と m3e) [spec.md](spec.md)(v0.4)に次の 3 つを足す。 ## D. ブロックしたことを会話に表示する(Host のみ、両 UI 共通) - 入力禁止でステップを拒否したとき(dryRun ではないとき)、そのセッションに次のペアを `session.append` で追加する。 - `command/run` `{ commandId, name: 'cache-sentinel', args: '', source: { kind: 'user' } }` - `command/done` `{ commandId, kind: 'error', text }` - 理由: 両 UI とも `command/run`/`command/done` をコマンド結果の行として描画する(公式: `dsh-client-ui-chat` の command Definition、 m3e: `web/src/features/chat/model.ts`)。保存形式の検証は「commandId が重複しない」「done の前に run がある」だけ (`dsh-session-format-v3-to-v4` の検査)なので、合成しても読み込めなくならない。独自のイベント種別は保存時に拒否されるため使わない。 コマンドのイベントはモデルに送られない(log-only)。`source.kind` は既存の 'user' しかないので 'user' を使う(既知の妥協)。 - `commandId` = `cache-sentinel--