feat(ui): surface the participant panel and colour speech per participant - #44
Conversation
design/Main.dc.html が示していた右側の参加者パネルを出す。裏の値はすべて 既にあり、読める場所が無かっただけである。 - 名簿(room-participants)を唯一の出所として参加者一覧を描く。自分の行に は「(あなた)」が付く。 - セッションの裏の値をパネルへ集める: 部屋ソケット / セッション状態 / 接続方法 / 起動コマンド / 作業ディレクトリ / 開始時刻 / ウィンドウ。 - 発言の色分けを自分 / 他人の二値から参加者ごとの色相へ移す。明度と彩度は accent の実測値(oklch 0.528 0.104 / dark 0.715 0.087)で固定し、色相のみ 名前から決める。名簿の点と発言の縁が同じ色になり、誰の発言かを色で追え る。accent 周辺 50 度は自分の色として空ける。 - 開始時刻を start_session が返す。部屋の ts と同じ時計を使う。 - 診断面には端末だけが残る。読む値はパネルへ移った。会話面(#room)に端末 を置かない境界は動かしていない。 - 診断面の hidden が効いていなかった(#diagnostics の display が UA 規則を 上回っていた)ため、畳んだ状態が初回から成立するよう直した。 タイトルバーの名簿行は落とした。常時見えるパネルが同じ名簿を描くため、 二重の描画面を保つ理由が無い。 #43
パネルの追加に合わせて、要求仕様と README のうち値の在り処を述べている 箇所を直す。 - 「参加者パネル」節を新設。読む値と映すものの分け方、名簿の単一出所、 参加者ごとの色(accent の実測値と色相の決め方、自分の 1 色の予約)を 記す。 - 「診断面」節は端末だけを述べる形へ。端末をパネルへ畳まない理由(パネル の幅では TUI が枠を描けない)を残す。設計キャンバスは同居を描いている が、あれは配置の絵であって寸法の指定ではない。 - 切り分け手順 1-3 の参照先を診断面からパネルへ。待受表示は `127.0.0.1:<port> で待受中` から住所のみへ変わっている。 - 「UI の方向」の次の一手は参加者パネルと宛先の両方が実装済みになった。 残る差は操作ボタンと宛先の見た目だけである。 #43
…pty one 名簿は部屋が答えてから届く。初期状態の空の `<ul>` は、まだ誰にも尋ねて いない状態を「参加者なし」として見せてしまう。初期 HTML に同じ行を置く。 #43
smileygames
left a comment
There was a problem hiding this comment.
セルフレビュー(auto モード / 人間チェックなし)
完了条件の照合
| #43 の完了条件 | 結果 |
|---|---|
| 右側に参加者パネルが出る。名簿の全員が並び、自分が自分と分かる | 満たす。(あなた) 表記 + 自分は accent 固定 |
| セッションの裏の値が読める | 満たす。接続方法 / 起動コマンド / 作業ディレクトリ / 開始時刻 / ウィンドウ |
| 部屋ソケットのアドレスが読める | 満たす |
| 会話面に診断値が混ざっていない | 満たす。#room は無変更、端末は #diagnostics に単独で残る |
| 発言の色が参加者ごとに異なり、名簿の色と一致する | 満たす。--speaker を両方へ同一値で設定 |
| ライト / ダークの両方で読める | 満たす。全 360 色相で測定、light 最小 4.95:1 / dark 最小 6.79:1 |
制約の照合
- 色相は参加者名から決まり、発言のたびに変わらない — 満たす。FNV-1a による name → hue。
- 明度と彩度は accent と同じ — 満たす。
--speaker-l/--speaker-cにテーマごとの実測値。 - 自分の発言が分かる手段を残す — 満たす。自分は accent そのもの、かつ派生色相は accent の周囲 50° を避ける。
data-ownの役割の行き先として妥当。 - 名簿は
room-participantsを唯一の出所 — 満たす。タイトルバーの重複描画を削除したのはこの制約に沿う方向。 - 色と寸法は
src/styles.cssの実値 — 満たす。下記の食い違い処理を含めて正しい。
design との食い違いの処理(是認する)
design/canvas.json は accent を oklch 0.52 / 0.09 / 255 と記すが、#3a6ea5 の実測は 0.528 / 0.104 / 251.5。実装が実測値を採り、src/styles.css も design/ も書き換えていない。design/README.md が定める権威の向き(design が実装を写す側)どおりであり、是認する。
スコープ
- 端末をパネルへ畳まなかった判断は妥当。264px では TUI の枠が描けず、
docs/0-requirements.mdが xterm.js を採る理由と衝突する。読める値だけをパネルへ移し、境界は維持されている。 - タイトルバーの名簿行の削除は、名簿の単一出所という制約に沿う。
#diagnostics[hidden] { display: none }は本 issue 対象外の既存欠陥の修正。display: flexが UA の[hidden]を上書きしており、診断面は最初から畳まれていなかった。src/styles.cssは対象ファイルであり、パネル導入で診断面の構造を触る以上、同一 PR で閉じるのが正しい。ただし起動直後の見え方が変わる(端末が最初から出ていた状態が解消する)。
検証
CI(CI / check)いずれも db33f61 で pass。ブラウザ実駆動でライト / ダーク両方、横溢れ無し、パネル幅 264px、名簿の点の色と発言の枠線色が一致することを確認済みと報告されている。rosterEl は移設後も解決することを親側で確認した(#roster は <ul> としてパネル内に存在)。
繰越(マージ後に起票する)
色相が名前由来のため、特定の 2 名が近接しうる。親側で実測: Lin 130.5° / Lay 165.5°(35° 差、いずれも緑系)、マスター 205.5°。実際に使う 3 名が 75° の帯に収まっており、色で追う目的が弱まる。
完了条件(「参加者ごとに異なる」)は満たしており本 PR の欠陥ではない。名前由来かつ安定という制約と、任意の 2 名の分離保証は両立しないため、制約側の再判断が要る。Master へ提示のうえ起票する。
リリース種別
minor と判定する。画面の構成が変わり(常設パネル、タイトルバーの名簿行の削除、診断面の初期表示)、いずれも user observable。rules/operations/release-version-rule.md の minor に当たる。
自己レビュー通過。auto モードのため人間チェックはなく、このままマージへ進む。
Closes #43
design/Main.dc.html が示していた右側の参加者パネルを出し、発言の色分けを
参加者ごとの色相へ揃えた。
room-participants)を唯一の出所とする参加者一覧。自分の行に「(あなた)」。
起動コマンド / 作業ディレクトリ / 開始時刻 / ウィンドウ。開始時刻のみ新規
で、
start_sessionが部屋と同じ時計で返す。--accentの実測値に固定(lightoklch(0.528 0.104)/ darkoklch(0.715 0.087))。自分は accent そのものを使い、名前から derive する色相は accent の周囲 50 度を空ける。これが
data-ownの担っていた「自分の発言が自分と分かる」役割の行き先である。#room)に端末を置かない境界は動かしていない。
実装判断(issue 本文が手段を実装側に委ねていた点)
264px の列では CLI が枠を描けない。要求仕様の「端末エミュレータで描く」と
両立しないため、端末は会話列の下に残した。理由は docs へ記した。
切り分け手順の文言も併せて直した。
ついでに直した 1 行
#diagnosticsのdisplay: flexが UA の[hidden]規則を上回っていたため、畳んだ状態が初回から成立していなかった。パネルが常時面になった以上、端末は
求められるまで畳んでいる必要がある。
design との差分(実装側が正、キャンバスが追随する側)
design/canvas.jsonの付箋は accent をoklch 0.52 / 0.09 / 255と書いているが、
#3a6ea5の実測は0.528 / 0.104 / 251.5である。実装は実測値を使った。キャンバス側の数字が古い。
検証
npm run build/npm run sidecar:check/cargo check --target x86_64-pc-windows-gnuすべて green。はみ出し無し、名簿の点と発言の縁が同一色。
5.31 / 7.11)。両方で読める。