Skip to content

feat(ui): start a session from the participant row, and drop the launcher - #63

Merged
smileygames merged 4 commits into
mainfrom
issue-62-start-from-row
Aug 23, 2026
Merged

feat(ui): start a session from the participant row, and drop the launcher#63
smileygames merged 4 commits into
mainfrom
issue-62-start-from-row

Conversation

@smileygames

Copy link
Copy Markdown
Member

Closes #62

セッションの開始を参加者の行へ移し、#launcher を削除した。行の操作は名前の後ろの二列——一列目がライフサイクル(開始 または 終了)、二列目が 編集 である。

同じライフサイクルの両端が同じ場所に来た

終了は #57 で行に乗ったが、開始は会話面の上のランチャ行に残っていた。一つの物事の両端が二つの面にあった状態を、片方を動かして解消した。開始には 2 段階 arm を付けていない——取り消せる操作であり、間違えて始めたセッションは、その場所を引き継ぐ終了が終わらせる。終了の 2 段階 arm(#57)はそのままである。

列が動かないこと

以前の並びは 編集 終了 であり、終了は稼働中の行にしか出ないため、未起動の行では編集が左へずれていた。

列は grid の track で持ち、track は中身の有無に依らず幅を持つ。ライフサイクルを持たない行——種別 user、および端末を持たないアカウント——も列を閉じない。閉じれば編集がその行だけ左へ寄る。

Chrome での実測(パネル 16.5rem、7 通りの行の形: 本人 / 未起動 / 起動中 / 稼働中 / armed / 起動失敗 / ゲスト):

測定点 結果
編集 の左端 211.2px、全行一致(ライフサイクルの無い user の行を含む)
ライフサイクル track の右端 206.4px、全行一致(ボタンを持たない行を含む)
開始 / 終了 の幅 ともに 51.2px、同じ位置
armed 本当に終了 69.9px へ左向きに伸びる。文字は収まり、編集 は動かない
行の高さ 全行 27.6px

armed の幅にライフサイクル列を固定する形は採らなかった。パネルは 16.5rem しかなく、実測では本人の行の名前が 15.8px まで潰れて読めなくなる(「マスター」+「(あなた)」)。四秒間の一行のために、リスト全行の名前の幅を払うことになる。armed が伸びるのは名前の側であって、編集 の位置ではない。

起動中と起動失敗

ランチャのボタンが持っていた disabled は、押された行のボタンへ移った。状態の語は名前の隣の note に入る——未起動 終了 と同じ場所であり、note は状態を、ボタンは行為を言う。

  • 起動中 — 押した直後から起動が返るまで。その行の開始は押せない。
  • 起動失敗 — 直前の起動が失敗した。理由は title、全文は従来通り status 行。次にそのアカウントの開始が押された時点で消える。

起動に失敗した端末は破棄されるため、行に残さなければ押したこと自体が画面から消え、行は押される前と同じ 未起動 へ戻ってしまう。

ランチャ行に残る仕事は無かった

accountEl.value を読むのは selectedAccount(開始の呼び出し元)と renderAccountOptions(その select 自身の再描画)の 2 箇所だけで、いずれもランチャ内部で閉じていた。パネル下部のセッションの値は選択ではなく画面に出ている端末に従う。確認した結果、残る役目は見つからなかった。 削除すると会話面が縦に広がる。

変更

  • index.html#launcher の削除、行の由来のコメント
  • src/main.tsstartSession が account を受け取る形へ。startButton の追加、launchFailuresselectedAccount / launchableAccounts / renderAccountOptions の削除
  • src/styles.css — 行を grid 三列へ。.lifecycle.start#launcher 節の削除(残された #terminal に節見出しを戻した)
  • docs/0-requirements.md — 行の二列、開始に arm を付けない理由、起動中/起動失敗、「ランチャ行は無い」の新設
  • README.md — 行の操作の説明、「アカウントを選び『セッション参加』を押す」→「行の『開始』を押す」

追っていないもの

design/Main.dc.html(design canvas)はランチャ行を描いたままである。キャンバスと実装の差は #46 で追う旨が issue と要件に書かれており、その通りに残した。

検証

  • npm run buildtsc + vite build)が通る。
  • 上表のレイアウト実測を Chrome で実施。
  • 実機でのセッション起動は未実施(Tauri のビルドと実行を伴うため)。

Claude Lin & Lay added 4 commits August 24, 2026 07:09
…cher

開始 をランチャ行から参加者の行へ移し、`#launcher` を削除した。

同じライフサイクルの両端が離れていた。終了は #57 で行に乗ったが、開始は
会話面の上のランチャ行に残っており、一つの物事の両端が二つの面にあった。
行は名前の後ろに二つの列を持つ——一列目がライフサイクル(`開始` または
`終了`)、二列目が `編集` である。

列は行の状態で動かない。track は中身の有無に依らず幅を持つので、ライフ
サイクルを持たない行——起動されない人間、種別 `user`——も列を閉じない。
これが `編集` を他の行より左へずらしていた原因である。`編集` の track は
固定であり、armed の `本当に終了` が伸びるのは名前の側であって `編集` の
位置ではない。ライフサイクルの track を armed の幅に固定する形は採らな
かった。パネルは 16.5rem しかなく、実測で「マスター(あなた)」の名前が
出なくなる。四秒の一行のためにリスト全行の幅を払うことになる。

起動中と起動失敗は行が持つ。ランチャのボタンが持っていた `disabled` は
押された行のボタンへ移り、状態の語は名前の隣の note に入る——`未起動` /
`終了` / `起動失敗` と同じ場所である。起動に失敗すると端末は破棄される
ので、行に残さなければ押したこと自体が消える。理由は `title` に載せ、
status 行はこれまで通り全文を持つ。

`#launcher` に残る仕事は無かった。`accountEl.value` の参照はすべてラン
チャ内部で閉じており(`selectedAccount` と `renderAccountOptions` のみ)、
パネル下部の値は選択ではなく画面に出ている端末に従う。どのアカウントを
起動するかは、押された行が答える。

終了の 2 段階 arm は変えていない。開始には付けない——取り消せる操作で
あり、間違えて始めたセッションはそれを置き換えるボタンが終わらせる。

Refs #62
`.lifecycle > button { flex: 1 }` を共有規則の `width: 100%` に戻し、その
理由として書いていた「percentage width が track の測定へ食い込み
`本当に終了` を切る」を削除した。**この記述は誤りである。** 測定を誤って
いた——比較用の clone を `#participants` の外へ挿していたため、clone は
padding も font-size も border も失った UA 既定のボタンとして測られて
いた。同じ条件で測り直すと `flex: 1` と `width: 100%` は完全に同一で
あり、どちらも切らない。

実測(Chrome、パネル 16.5rem、7 通りの行):

- `編集` の左端は 211.2px で全行一致。ライフサイクルを持たない種別 `user`
  の行でも動かない。
- ライフサイクル track の右端は 206.4px で全行一致。ボタンを持たない行
  (`user` / ゲスト)でも track は幅を保つ。
- `開始` と `終了` はいずれも 51.2px、同じ位置。
- armed の `本当に終了` は 69.9px へ左向きに伸び、文字は収まり、`編集` は
  動かない。track が max-content なので、字幅の異なる環境でも収まる。
- 行の高さは全行 27.6px。

Refs #62
要件と README を実装に合わせた。

`docs/0-requirements.md`:

- 参加者パネルに、行の二列(一列目=ライフサイクル / 二列目=編集)と、列が
  行の状態で動かないことを書いた。中身の無い列も幅を保つこと、それが編集
  を揃える条件であることを含む。
- 開始を 2 段階にしない理由を書いた。終了の二度押しは取り消せないため
  であり、開始は取り消せる。
- 起動中と起動失敗を行が読めることを表で書いた。失敗の記録が次の開始まで
  残る理由も。
- 「ランチャ行は無い」を新設した。残っていた仕事が無かったことを参照から
  示し(`accountEl.value` の読み手は 2 箇所、どちらもランチャ内部)、
  ボタンが持っていた状態の行き先を書いた。
- 種別 `user` の記述を「ランチャの選択肢にも出さない」から「その行に開始
  も出さない」へ。拒否が唯一の知る手段になってはならない、という理由は
  変わっていない。

`README.md`: 行の操作の説明を書き直し、「アカウントを選び『セッション参加』
を押す」を「アカウントの行の『開始』を押す」へ。

Refs #62
`startEl` の click listener を消したとき、その後ろの空行まで一緒に消えて
いた。`main` 内の段落の切れ目であり、意味は変わらない。

Refs #62
@smileygames smileygames self-assigned this Aug 23, 2026

@smileygames smileygames left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

セルフレビュー(auto モード / 人間チェックなし)

完了条件の照合

#62 の完了条件 結果
参加者の行から開始できる 満たす
開始と終了が同じ列にある 満たす。grid の第 2 トラック
編集が常に一番右で、行の状態によって動かない 満たす。下記の実測
種別 user の行にライフサイクルのボタンが無い 満たす。トラックは空のまま保たれる
ランチャ行が存在しない 満たす。参照 0 件(下記)
起動中と起動失敗が読める 満たす
終了の 2 段階 arm が残っている 満たす

親側の指示を、実装が実測で却下した(是認する)

わたしは再開時に「ライフサイクル列をありうる最も広いラベル(本当に終了)に合わせろ」と指示した。実装はこれを測ったうえで却下している。

a fixed 5.6rem track leaves the local user's own row with 15.8px for the name — 「マスター」 disappears behind 「(あなた)」

わたしの案は編集の固定と引き換えに名前を潰す。実装が採ったのは grid の三トラック構成である。

grid-template-columns: minmax(0, 1fr) minmax(3.2rem, auto) 3rem;

編集は固定幅の第 3 トラックにあり、arm でライフサイクル列が伸びてもその伸びを吸収するのは名前列(1fr)であって編集ではない。 わたしが閉じたかった不変条件(arm で編集が動かない)は満たされ、名前は潰れない。

しかも #57END_SETTLE_MS(armed ボタンがポインタの下で広がるためのダブルクリック対策)の前提を保っている。固定幅にしていたらあの理由付けが偽になっていた。

わたしの案より良い。 推論で出した指示を、測って否定したのは正しい。

実測値も報告されている。7 つの行形状(自分 / 未起動 / 起動中 / 稼働中 / armed / 失敗 / ゲスト)で編集の左端が 211.2px で一致、ライフサイクル列の右端が 206.4px で一致

ランチャの削除は参照で確認した

index.htmllauncher / account-select / start-session0 件src/main.tsaccountEl / selectedAccount / renderAccountOptions0 件

「他に役目が無い」は仮定ではなく参照で確かめられている。パネル下部の値は shownAccount に従っており、select とは無関係だった。

起動中と失敗の行き先

ボタンが disabled、状態語が名前の隣(起動中 / 起動失敗、理由は title)。launchFailures はアカウント id で保持し、次に開始を押したとき消える。

この保持が必要な理由も報告されている。 失敗した起動は端末を捨てるため、記録が無いと行が黙って 未起動 に戻り、押していないのと同じ見た目になる。ランチャ削除で失われかけた情報が、正しく行へ移っている。

自己訂正のコミット

4d9bdd3 は、実装自身が書いた CSS の理由付け(width: 100%本当に終了 を切る)が誤りだったことの訂正である。比較用のクローンを #participants の外へ置いたための誤測定で、同条件で測り直すと flex: 1width: 100% は同一出力だった。

偽の理由付けを消し、訂正を別コミットとして残している。 隠していない。

検証

CI(check / CI)いずれも pass。親側で grid のトラック定義、ランチャ参照の消失、diff の範囲を確認した。

実機は未確認(Tauri ビルドが要る)。docs に記載済み。阻却事由としない。

手元の clone の src-tauri/Cargo.toml

実装側が「自分の変更ではない」と報告している。親側で確認したところ HEAD とバイト単位で同一であり、行末コードの stat 差のみ。この PR とも実装側とも無関係で、実害は無い。報告は正しい。

リリース種法

minor と判定する。ランチャ行の廃止と開始の移動により画面構成が変わる。user observable な構造変更。

自己レビュー通過。auto モードのため人間チェックはなく、このままマージへ進む。

@smileygames
smileygames merged commit 8532c9a into main Aug 23, 2026
2 checks passed
@smileygames
smileygames deleted the issue-62-start-from-row branch August 23, 2026 22:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(ui): start a session from the participant row, and drop the launcher

1 participant