目的
部屋の発言をローカルの追記ログに残し、過去のやり取りを左サイドバーの履歴として参照できるようにする。
観測
2026-08-22 のセッションで、Master が部屋でのやり取りを引用しようとして、履歴が存在しないことが判明した。部屋の発言はウィンドウの DOM にしか無く、閉じれば消える。
引用できないことは症状のひとつに過ぎない。#47 のような「実際に何が起きたか」を根拠にする設計判断が、参加者の記憶と Master の記憶だけを頼りにしている。
前提
いずれも 2026-08-27 に main の作業ツリーで実測して確認済み。
保存の土台は既にあり、使われていない
src-tauri/src/config.rs に保存の土台が存在する。SavedChatMessage(113 行)/ SessionData(120 行)/ TabSessions(127 行)/ save_sessions(241 行)/ load_sessions(253 行)。いずれも lib.rs:43-44 で登録済み。
フロントエンドからの参照は 0 件(src/**/*.ts 全体を save_sessions|load_sessions|TabSessions|SavedChatMessage で走査)。
土台の形が現在のモデルと合っていない
そのまま配線すると、#39 で外した人間 / AI の非対称が保存層から戻ってくる。
保存する 5 欄は現在の投稿型にそのままある
src-tauri/src/room.rs:108 の RoomMessage が message_id / speaker / content / to / ts を持つ。同じ構造体に hue と own もあるが、own は「見ている側の属性であって話者の属性ではない」と型のコメントが明言している(room.rs:105-107)。保存層に持ち込めば壊れる欄であり、5 欄指定はこれと整合する。
design は既に答えを持っている
design/Vision.dc.html:191 のルーム情報パネルに ログ logs\main.jsonl がある。部屋単位、追記形式。同じパネルの隣の行は 部屋ソケット 127.0.0.1:64475 で、ログのパスはそれと同列の「情報」として置かれている。
現在の画面は左に何も置いていない
index.html:44 の #body は flex 行で、#conversation(flex:1、45 行)と <aside id="participants">(16.5rem 固定、border-left、162 行 / styles.css:495)の 2 つだけ。左端は #conversation が占めており、左サイドバーは新規に追加する必要がある。
制約
決定(旧・未決)
2026-08-27 に Master が判断。
- 読み戻し — 左サイドバーを作り、履歴として表示する。ただし起動時は新規ルームとして起動する(本文は空から始まり、過去ログはサイドバー側にのみ現れる)。
- 保持期間と上限 — 無制限追記、ローテーションなし。Vision が
main.jsonl と単数形で持ち、日付を持たないことに従う。
- ファイル名の形 —
logs\{部屋名}.jsonl。Vision の main を部屋名の位置と読む。複数部屋そのものの実装は今回やらない。
対象ファイル
| ファイル |
変更 |
src-tauri/src/room.rs |
投稿が部屋に入った経路から追記を呼ぶ。RoomMessage から保存 5 欄を落とす写像。 |
部屋ログの新規モジュール(src-tauri/src/ 配下) |
jsonl 追記と読み出し。config.rs の TabSessions 系は流用しない。 |
src-tauri/src/lib.rs |
読み出しコマンドの generate_handler! 登録。 |
index.html |
#body の先頭へ左 <aside> を追加。#conversation の前。 |
src/styles.css |
左 aside の幅と border-right。#participants(border-left)と対になる形。 |
src/main.ts |
サイドバーの描画と読み出しコマンドの呼び出し。 |
依存: src-tauri 側の読み出しコマンドが先。main.ts はそれに乗る。
関連
目的
部屋の発言をローカルの追記ログに残し、過去のやり取りを左サイドバーの履歴として参照できるようにする。
観測
2026-08-22 のセッションで、Master が部屋でのやり取りを引用しようとして、履歴が存在しないことが判明した。部屋の発言はウィンドウの DOM にしか無く、閉じれば消える。
引用できないことは症状のひとつに過ぎない。#47 のような「実際に何が起きたか」を根拠にする設計判断が、参加者の記憶と Master の記憶だけを頼りにしている。
前提
いずれも 2026-08-27 に
mainの作業ツリーで実測して確認済み。保存の土台は既にあり、使われていない
src-tauri/src/config.rsに保存の土台が存在する。SavedChatMessage(113 行)/SessionData(120 行)/TabSessions(127 行)/save_sessions(241 行)/load_sessions(253 行)。いずれもlib.rs:43-44で登録済み。フロントエンドからの参照は 0 件(
src/**/*.ts全体をsave_sessions|load_sessions|TabSessions|SavedChatMessageで走査)。土台の形が現在のモデルと合っていない
SavedChatMessageはroleとcontent_typeを持つ。チャットアシスタントの語彙であり、feat(room): one post frame, so a participant is a participant #39 の参加者モデルにはroleに当たる軸が無い。発言者は名前で、種別は持たない。TabSessionsはタブ単位。掲示板ではログは部屋のものであってタブのものではない。タブは起動の設定であり、会話の器ではない。そのまま配線すると、#39 で外した人間 / AI の非対称が保存層から戻ってくる。
保存する 5 欄は現在の投稿型にそのままある
src-tauri/src/room.rs:108のRoomMessageがmessage_id/speaker/content/to/tsを持つ。同じ構造体にhueとownもあるが、ownは「見ている側の属性であって話者の属性ではない」と型のコメントが明言している(room.rs:105-107)。保存層に持ち込めば壊れる欄であり、5 欄指定はこれと整合する。design は既に答えを持っている
design/Vision.dc.html:191のルーム情報パネルにログ logs\main.jsonlがある。部屋単位、追記形式。同じパネルの隣の行は部屋ソケット 127.0.0.1:64475で、ログのパスはそれと同列の「情報」として置かれている。現在の画面は左に何も置いていない
index.html:44の#bodyは flex 行で、#conversation(flex:1、45 行)と<aside id="participants">(16.5rem 固定、border-left、162 行 /styles.css:495)の 2 つだけ。左端は#conversationが占めており、左サイドバーは新規に追加する必要がある。制約
TabSessions系はこのモデルに合わないため、流用ではなく作り直す。message_id/speaker/content/to/ts。参加者クラスを値域に取る欄を作らない(feat(room): one post frame, so a participant is a participant #39)。ownは保存しない(見る側の属性であるため)。#roomの本文へ復元しない。閉じれば部屋の中身は消える、という現在の振る舞いを変えない。src-tauri/src/room.rs:503の「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 へ流さない」に当たる。決定(旧・未決)
2026-08-27 に Master が判断。
main.jsonlと単数形で持ち、日付を持たないことに従う。logs\{部屋名}.jsonl。Vision のmainを部屋名の位置と読む。複数部屋そのものの実装は今回やらない。対象ファイル
src-tauri/src/room.rsRoomMessageから保存 5 欄を落とす写像。src-tauri/src/配下)config.rsのTabSessions系は流用しない。src-tauri/src/lib.rsgenerate_handler!登録。index.html#bodyの先頭へ左<aside>を追加。#conversationの前。src/styles.cssborder-right。#participants(border-left)と対になる形。src/main.ts依存:
src-tauri側の読み出しコマンドが先。main.tsはそれに乗る。関連
ログがある。