目的
名簿と端末リストを一つにする。行にアカウントの操作が乗り、種別で分かれ、起動していないアカウントも最初から並ぶ。あわせてアカウントの作成をランチャ行からモーダルへ出す。
前提
いまリストが二つある
画面右に「参加者」と「端末」が縦に並んでいる(Master のスクリーンショット、2026-08-23)。稼働中のアカウントは両方に出る。終了ボタンは端末側にしかない。
#57 がそう作ったのは、名簿の行にアカウントを結べなかったためである。Participant は接続キーであり アカウント id を持たない。名前で結ぶ形は #40 と #53 が却下している。
「部屋に触らない」は原則ではなかった
その制約は #53 のスコープ判断だった。アカウントは画面と config の概念であり、あの issue では protocol を変える必要が無かった。ただそれだけである。
それを標準の制約として #57 へ持ち込んだのは誤りであり、リストが二つに割れた直接の原因である。
部屋がアカウント id を運ぶことは、#39 / #40 の規律を壊さない。 同一性は接続に置いたままとし、自分の発言の抑止も名簿の同一性も接続で判定し続ける。アカウント id は名前ではなく、同一性を置き換えるものでもない。運ぶだけである。
種別は作るときに決める
参加者が人間かどうかを接続の種類から推測しようとすると、別クライアントから来た人間を取り違える。部屋は接続の種類しか知らない。
アカウントの作成フォームは既にある。そこで選べばよい。
これにより #53 が保留にした「人間をアカウントにするか」も決まる。 Master は種別 user のアカウントになる。
ランチャ行が二つの仕事を持っている
現在の行は、アカウント選択 / + / − / 名前 / 色 / 作業ディレクトリ / セッション参加 を並べ、起動オプションが次の行に続く。
「どのアカウントで参加するか」と「このアカウントの設定を編集する」は別の行為である。 種別が増えることで、なおさら分ける理由がある。
起動時に並ばない件(切り分け済み・欠陥ではない)
Master の初回観測では human のみが並んでいたが、再起動後の観測(2026-08-23)で Claude Lin / Claude Lay が起動直後から 未起動 として並ぶことを確認した。
原因は #55 / #56 の改名である。バンドル識別子が変わって appdata が切り替わり、その起動時点では config が空だった。欠陥ではない。 この項目に実装作業は無い。
作成に「決めた」瞬間が無い
現在、アカウントの各欄は change で保存される(src/main.ts、accountNameEl ほかの change ハンドラが saveAccounts() を呼ぶ)。フォーカスが外れた時点で書き込まれる。+ を押した瞬間にアカウントが実在し、以後はその場で直していく形になる。
決定も取消も無い。 Master の言葉では「煩わしい」(2026-08-23)。
モーダルへ移すこと自体はこれを直さない。モーダルの中で change 保存を続ければ同じである。
リストの見た目(Master の参考、2026-08-23)
Discord のロールリストが参考として示された。読み取れる構造は次のとおり。
アバターは入れない(Master、2026-08-23)。参考画像にはあるが、今回は対象外とする。現在の色付きの名前と在席ドットをそのまま使い、グループ見出しと行の操作を足す形になる。
オフラインの参加者は、色を保ったまま薄く表示し、ドットを白抜きにする。灰色に落として色を捨てない —— 色はアカウントの同一性を担っており、居ないだけで別人に見えるのは誤りである。
制約
対象外
対象ファイル
src-tauri/src/room.rs — hello / room_join のアカウント id、Participant への搭載、protocol
sidecar/src/index.ts — hello にアカウント id
src-tauri/src/config.rs — アカウント種別
src-tauri/src/session.rs — 起動時のアカウント id の受け渡し
index.html, src/main.ts, src/styles.css — 統合リスト、グループ、モーダル、ランチャ行の整理
sidecar/test/round-trip.test.mjs
docs/0-requirements.md
完了条件
- 画面右のリストが一つである。
- 稼働中のアカウントの行に 終了 がある。押し間違いで終了しない(arm を維持)。
- 起動していないアカウントも、アプリを起動した直後から並ぶ。
- リストが種別で分かれ、それぞれの数が読める。
- グループ見出しが種別名と件数を示している。
- オフラインの参加者が、色を保ったまま薄く表示されている。
- 種別はアカウント作成時に選ぶ。接続の種類から推測していない。
- 画面の本人が種別 user のアカウントとして扱われる。
- アカウントの作成・編集・削除がモーダルで行える。
- モーダルに決定と取消がある。取消したとき、アカウントが作られていない / 編集が反映されていない。
- 欄からフォーカスが外れただけでは保存されない。
- ランチャ行にはアカウントの選択と参加のみが残っている。
hello にアカウント id が載り、Participant がそれを持つ。protocol が 5 である。
- アカウント id を持たない接続も参加者として扱われる。
- 自分の発言の抑止と名簿の同一性が、依然として接続で判定されている。
関連
目的
名簿と端末リストを一つにする。行にアカウントの操作が乗り、種別で分かれ、起動していないアカウントも最初から並ぶ。あわせてアカウントの作成をランチャ行からモーダルへ出す。
前提
いまリストが二つある
画面右に「参加者」と「端末」が縦に並んでいる(Master のスクリーンショット、2026-08-23)。稼働中のアカウントは両方に出る。終了ボタンは端末側にしかない。
#57 がそう作ったのは、名簿の行にアカウントを結べなかったためである。
Participantは接続キーであり アカウント id を持たない。名前で結ぶ形は #40 と #53 が却下している。「部屋に触らない」は原則ではなかった
その制約は #53 のスコープ判断だった。アカウントは画面と config の概念であり、あの issue では protocol を変える必要が無かった。ただそれだけである。
それを標準の制約として #57 へ持ち込んだのは誤りであり、リストが二つに割れた直接の原因である。
部屋がアカウント id を運ぶことは、#39 / #40 の規律を壊さない。 同一性は接続に置いたままとし、自分の発言の抑止も名簿の同一性も接続で判定し続ける。アカウント id は名前ではなく、同一性を置き換えるものでもない。運ぶだけである。
種別は作るときに決める
参加者が人間かどうかを接続の種類から推測しようとすると、別クライアントから来た人間を取り違える。部屋は接続の種類しか知らない。
アカウントの作成フォームは既にある。そこで選べばよい。
これにより #53 が保留にした「人間をアカウントにするか」も決まる。 Master は種別 user のアカウントになる。
ランチャ行が二つの仕事を持っている
現在の行は、アカウント選択 /
+/−/ 名前 / 色 / 作業ディレクトリ / セッション参加 を並べ、起動オプションが次の行に続く。「どのアカウントで参加するか」と「このアカウントの設定を編集する」は別の行為である。 種別が増えることで、なおさら分ける理由がある。
起動時に並ばない件(切り分け済み・欠陥ではない)
Master の初回観測では
humanのみが並んでいたが、再起動後の観測(2026-08-23)でClaude Lin/Claude Layが起動直後から 未起動 として並ぶことを確認した。原因は #55 / #56 の改名である。バンドル識別子が変わって appdata が切り替わり、その起動時点では config が空だった。欠陥ではない。 この項目に実装作業は無い。
作成に「決めた」瞬間が無い
現在、アカウントの各欄は
changeで保存される(src/main.ts、accountNameElほかのchangeハンドラがsaveAccounts()を呼ぶ)。フォーカスが外れた時点で書き込まれる。+を押した瞬間にアカウントが実在し、以後はその場で直していく形になる。決定も取消も無い。 Master の言葉では「煩わしい」(2026-08-23)。
モーダルへ移すこと自体はこれを直さない。モーダルの中で
change保存を続ければ同じである。リストの見た目(Master の参考、2026-08-23)
Discord のロールリストが参考として示された。読み取れる構造は次のとおり。
admin — 1の形)。Pullcept ではuser — 1/AI — 2。アバターは入れない(Master、2026-08-23)。参考画像にはあるが、今回は対象外とする。現在の色付きの名前と在席ドットをそのまま使い、グループ見出しと行の操作を足す形になる。
オフラインの参加者は、色を保ったまま薄く表示し、ドットを白抜きにする。灰色に落として色を捨てない —— 色はアカウントの同一性を担っており、居ないだけで別人に見えるのは誤りである。
制約
helloにアカウント id を足す。画面側の参加経路(room_join)にも同じものを通す。speakerの刻印はいずれも接続で判定する(feat(room): one post frame, so a participant is a participant #39 / fix(session): a participant cannot declare who they are in the room #40 / feat(room): let a participant see the floor before speaking #47)。アカウント id は突き合わせのために運ぶだけであり、判定の基準にしない。changeで保存しない。+は空のフォームを開くだけとし、決定するまでアカウントを作らない。 取消は何も残さない。編集も決定するまで反映しない。対象外
design/Vision.dc.htmlにはあるが、今回は求められていない。対象ファイル
src-tauri/src/room.rs—hello/room_joinのアカウント id、Participantへの搭載、protocolsidecar/src/index.ts—helloにアカウント idsrc-tauri/src/config.rs— アカウント種別src-tauri/src/session.rs— 起動時のアカウント id の受け渡しindex.html,src/main.ts,src/styles.css— 統合リスト、グループ、モーダル、ランチャ行の整理sidecar/test/round-trip.test.mjsdocs/0-requirements.md完了条件
helloにアカウント id が載り、Participantがそれを持つ。protocol が 5 である。関連