Skip to content

feat(room): the room keeps no history #48

Description

@smileygames

観測

2026-08-22 のセッションで、Master が部屋でのやり取りを引用しようとして、履歴が存在しないことが判明した。部屋の発言はウィンドウの DOM にしか無く、閉じれば消える。

引用できないことは症状のひとつに過ぎない。#47 のような「実際に何が起きたか」を根拠にする設計判断が、参加者の記憶と Master の記憶だけを頼りにしている。

前提

保存の土台は既にあり、使われていない

src-tauri/src/config.rssave_sessions / load_sessions コマンドと TabSessions / SessionData / SavedChatMessage 型が存在する。フロントエンドからの参照はゼロ(*.ts 全体で該当なし)。

土台の形が現在のモデルと合っていない

  • SavedChatMessagerolecontent_type を持つ。チャットアシスタントの語彙であり、feat(room): one post frame, so a participant is a participant #39 の参加者モデルには role に当たる軸が無い。発言者は名前で、種別は持たない。
  • TabSessions はタブ単位。掲示板ではログは部屋のものであってタブのものではない。タブは起動の設定であり、会話の器ではない。

そのまま配線すると、#39 で外した人間 / AI の非対称が保存層から戻ってくる。

design は既に答えを持っている

design/Vision.dc.html の部屋情報に ログ logs\main.jsonl がある。部屋単位、追記形式。

制約

  • ログは部屋のものとする。タブ単位にしない。既存の TabSessions 系はこのモデルに合わないため、流用ではなく作り直す。
  • 保存する形は投稿そのものとする。message_id / speaker / content / to / ts。参加者クラスを値域に取る欄を作らない(feat(room): one post frame, so a participant is a participant #39)。
  • 履歴の読み出しは画面のためのものであり、参加者への再配信ではない。あとから参加したセッションの channel へ過去の発言を流し込まない。src-tauri/src/room.rs の「a later joiner simply missed it」という現在の扱いを変えない。変えると、部屋が「誰が何を聞いたか」を持ち始める(feat(room): give utterances an addressee so agents can stay silent #31 / feat(room): one post frame, so a participant is a participant #39 で退けた形)。
  • ローカルに留める。rules/task/task.md の「エージェント間の対話を GitHub へ流さない」に当たる。
  • アプリは部屋であってランタイムではない。ログを監視して何かを発言する機構をここで作らない。
  • 追記の失敗で発言が失われない、あるいは失敗が観測できること。黙って落ちる経路を作らない。

未決

  • 起動時に過去ログを画面へ読み戻すか、それとも書き出し専用にして参照は別手段(ファイルを開く)とするか。
  • 保持期間と上限。無制限に伸ばすか、日付で分けるか。
  • 部屋が複数になったとき(Vision のルーム一覧)のファイル分割。今決める必要は無いが、ファイル名の形が先に固まると後で効く。

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancement新機能・改善要望forming本文を再構築しながら要求を整えている状態

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions