設計(PLAN71): prefix S の一覧とメニューをコマンド tmux-menu からも開く (#270) - #271
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
修正提案3件(major 1件、minor 2件)。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | REQUEST_CHANGES
設計 PR。決定 2 で prefix S の割り当てを choose-tree のテンプレート直書きから run-shell "tmux-menu" へ変えるが、この変更で壊れる既存の静的テスト test_prefix_s_opens_session_chooser がテスト設計に挙がっておらず、受け入れ条件 11 が『既存テストが通る』と読める点を、明示的に『書き換える既存テスト』として整理すべき。
- 決定 4: run-shell の中には TMUX_PANE が無く、-t の無い choose-tree は直近に
操作されたセッションへ出る。prefix S を run-shell "TMUX_PANE=#{pane_id} tmux-menu" にする
- 実測を再現用スクリプト issues/PLAN71_tmux-menu-measure.py と出力つきで記録し直す
- attach の既定を「端末の無いセッションを優先し、その中で直近」に直す(要求の前提 3 も)
- menu が一覧を開くのはセッションも -c も無いときに限ると明記する
- 既存の静的テスト test_prefix_s_opens_session_chooser を書き換える対象として明記する
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 1 | commit 98f3829対応件数: critical=0 / major=2 / minor=3(合計 5 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | claude | REQUEST_CHANGES
決定 4(TMUX_PANE を -t に使う)を縛るテスト設計が、実装から -t "$TMUX_PANE" を落としても落ちない。時間に頼らない形のテストへ差し替えること。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | REQUEST_CHANGES
設計 PR。決定 2・4 で prefix S の割り当てを run-shell "TMUX_PANE=#{pane_id} tmux-menu" へ変えると、prefix S 経由の既存テスト (test_prefix_s_passes_selected_id_and_client / test_menu_*) は tmux-menu を PATH から解決できる前提になる。しかしテスト基盤 (SHORT_NAMES と fake_tm フィクスチャ) には tmux-menu の symlink が無いため、設計が『そのまま通る』としている既存テストは実際には基盤の更新なしには通らない。テスト設計行 11 の分類(書き換える / そのまま通る)に基盤更新の必要性を反映すべき。
- 足すテストを「直近の端末を other にしてから inside_env(home) で tmux-menu を実行し、 home の pane だけが tree-mode になる」形へ差し替える - SHORT_NAMES への tmux-menu の追加が Dockerfile 検査と TmuxEnv.bin の両方に効くこと、 fake_tm の fake/ には tmux-menu を置かないことを明記する - prefix S から開く既存テストを「基盤更新で通る既存テスト」へ分類し直し、受け入れ条件 11 をそろえる Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 2 | commit b0e84c9対応件数: critical=0 / major=2 / minor=1(合計 3 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | claude | REQUEST_CHANGES
決定 4 を縛るとして足したテスト(行 11)は、tmux 自身がクライアントの環境の TMUX_PANE から現在の pane を決めるため、実装から -t "$TMUX_PANE" を落としても通る見込みが高い。実測で確かめ、テストが縛る対象の説明を直すこと。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | APPROVE
追加の修正指摘はありません(round 3、指摘 0 件)。
-t 無し・TMUX_PANE 有りで choose-tree を呼ぶ実測 7a〜7c を足した。tmux は端末を 持たないクライアントの現在の pane を環境の TMUX_PANE で決めるため、-t を落としても 一覧は TMUX_PANE の pane に出る。行 11 の足すテストから「-t を落とすと落ちる」の主張を 消し、「TMUX_PANE の pane に出る」振る舞いを縛るテストと書き直した(行 1 も揃えた)。 決定 4 は -t を意図の明示と保険として残し、理由を実測に合わせた。 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 3 | commit bb8eb7f対応件数: critical=0 / major=1 / minor=0(合計 1 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | APPROVE
追加の修正指摘はありません(round 4、指摘 0 件)。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | kiro | REQUEST_CHANGES
設計 PR。受け入れ条件 8(tmux-menu と tmux-session menu の各形が同じ振る舞い)に対し、テスト設計は list 形(条件 1)と no-server 形(条件 6)を両名でしか parametrize しておらず、契約表が「tmux-menu -c 端末 <セッション> も今の形のメニューを出す」と断言する menu-with-args 形を tmux-menu 名で縛るテスト行が無い。この 1 点のみ。
`tmux-menu -c 端末 <セッション>` も今の形のメニューを出すという契約を縛れるよう、 テスト設計の行 8 に両方の名前で -c 形を呼ぶテストを足し、受け入れ条件 8 に 2 つの形の両方で成り立つことを明記する。 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | commit 85f4b26対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | claude | REQUEST_CHANGES
テスト設計の行 8 に、書いたとおりに実装すると落ちる形が 2 つある(run-shell へ渡す ID の引用漏れと、fake_tm のプロンプトで tmux-session が偽物へ解決されること)。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | kiro | APPROVE
設計 PR。要求・設計・決定の 3 文書で受け入れ条件 1〜14 に設計要素とテスト行が対応し、決定 1〜4 で退けた案が他節に残っていない。状態(TMUX_PANE / SHORT_NAMES の 2 経路 / fake_tm の fake ディレクトリ / bin の symlink)の書き手と読み手が整合し、外部挙動(choose-tree の -t と TMUX_PANE、attach の既定、run-shell の #{…} 展開)は再現用スクリプト(行 1〜7c)の実測に裏付けられている。前ラウンド(round 1〜4)の指摘(TMUX_PANE を渡す・test_prefix_s_opens_session_chooser の書き換え・fake_tm/SHORT_NAMES の基盤更新・-t 分岐でなく TMUX_PANE の pane を縛る旨・menu-with-args を tmux-menu 名でも縛る)は 85f4b26 までですべて反映済み。追加の修正指摘は無い。
- 行 8 のメニューを出す形は target (ID `$0`) を shlex.quote で引用する。run-shell は sh -c に渡すため 引用しないと `$0` が sh に展開される - 行 1 は ui_tm で、プロンプトへは tm.bin の絶対パスで打つ。fake_tm では名前の tmux-session が fake/ の偽物に解決される - 行 2・3・4・5・6 もフィクスチャと起動の形 (tm.bin の絶対パス / tm.spawn / tm.run) を明記する Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 5 | commit 43db282対応件数: critical=0 / major=1 / minor=1(合計 2 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 6 | claude | REQUEST_CHANGES
テスト設計の 3 か所(行 11 が縛る壊し方の説明、行 5 の前提の置き方、行 1・2 のプロンプトへの入力の送り方)を直すこと。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 6 | codex | APPROVE
追加の修正指摘はありません(round 6、指摘 0 件)。
- 一覧は pane へ send-keys で打って開き、1 つ上は send-keys の Up、Enter は押した端末から 送り直し付きで送る補助 _pick_above を決める(Enter を send-keys で送ると client_name が 直近の端末になることを実測 8a・8b で確かめた) - 行 4・5 に外から開くときの組み方(zz-home を端末の無い唯一のセッションにする)と期待値を書く - 行 11 の落ちる壊し方を「TMUX_PANE を消し、-t にも使わない」だけに直す(実測 7d・7e) - 行 2・3・6・9 にフィクスチャ・期待値・parametrize を明記し、基盤更新の節の偽 tmux-menu の説明を直す Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 6 | commit 9302a33対応件数: critical=0 / major=0 / minor=3(合計 3 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 7 | codex | APPROVE
追加の修正指摘はありません(round 7、指摘 0 件)。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 7 | kiro | APPROVE
設計 PR。要求・設計・決定の 3 文書で受け入れ条件 1〜14 に設計要素とテスト行が対応し、決定 1〜4 で退けた案が他節に残っていない。設計が参照するテスト基盤(SHORT_NAMES=38 行/346 行、fake_tm=943 行、SPECIAL_NAMES=43 行、_open_tree=915 行/_open_menu=934 行、inside_env=405 行、test_prefix_s_passes_selected_id_and_client=962 行、test_dockerfile_links_short_names=1084 行、test_prefix_s_opens_session_chooser=test_tmux_conf.py:257)と、現状の tmux.conf の prefix S 割り当て・Dockerfile の symlink RUN・docs/user/environment-variables.md の symlink ループ(4 名)と bind-key 行を、いずれも worktree の実ファイルで確認した。決定 2 で壊れる test_prefix_s_opens_session_chooser の書き換え、fake_tm/SHORT_NAMES の基盤更新、-t 分岐でなく TMUX_PANE の pane を縛る旨(実測 7a〜7e)、menu-with-args を tmux-menu 名でも縛る形($0 の shlex.quote 引用)、行 1・2・8 の send-keys でのプロンプト入力は、いずれも 9302a33 までに反映済み。前ラウンド(round 1〜6)の指摘はすべて解消されており、独立に検証した範囲で新規の修正アクションを要する不整合・誤り・検証不能な断定は見つからなかった。追加の修正指摘は無い。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 8 | claude | REQUEST_CHANGES
テスト設計の行 11 の足すテストが前提とする tmux の挙動(attach の順だけで直近の端末が決まる)に、再現用スクリプトの実測が無い。1 件のみ。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 8 | kiro | APPROVE
設計 PR。要求・設計・決定の 3 文書で受け入れ条件 1〜14 に設計要素とテスト行が対応し、決定 1〜4 で退けた案が他節に残っていない。設計が参照するテスト基盤(SHORT_NAMES=38 行/346 行、SPECIAL_NAMES=43 行、fake_tm=943 行、_open_tree=915 行/_open_menu=934 行、inside_env=405 行、TmuxEnv.tmux/new/attach/run=350〜418 行、test_prefix_s_passes_selected_id_and_client=962 行、ui_tm=980 行、test_usage_errors_exit_two=473 行、_prefix_keys/test_prefix_s_opens_session_chooser=test_tmux_conf.py:238/257)と、現状の tmux.conf の prefix S 割り当て(bind-key S choose-tree …、52 行)を worktree の実ファイルで確認した。実測の再現スクリプト(PLAN71_tmux-menu-measure.py)の open-list 系 5 種と 7a〜7e・8a/8b は設計の実測表と一致する。条件 8 の run-shell は TmuxEnv.tmux が env=self.env(PATH に bin を含む)でサーバを起動するため bin の tmux-menu を引ける、という設計の断定はコードと整合する。条件 11 の足すテストの反証条件(実装が TMUX_PANE を unset/env -u し、かつその値を -t にも使わない壊し方でだけ落ちる)は実測 7a・7b・7d・7e と一致し、prefix S が TMUX_PANE=#{pane_id} を渡すことは書き換える静的テストが縛る旨も整合している。前ラウンド(round 1〜6)の指摘はすべて 9302a33 までに反映済み。独立に検証した範囲で、新規の修正アクションを要する不整合・誤り・検証不能な断定は見つからなかった。追加の修正指摘は無い。
行 11 の足すテストが頼る「tm.attach(home) → tm.attach(other) の順だけで other が直近になる」前提を、 再現用スクリプトの 9a(c→d の順に attach、打たずに TMUX_PANE 無しで開くと d に出る)と 9b(c の TMUX_PANE を渡すと c に出る)で確かめ、実測表・出力の抜粋・所見へ載せる。 端末の名前は今回の実行に揃えた。 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | commit 936903d対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
Summary
#270 の要求と設計を載せる。実装は含まない。
Refs #270
決めたこと
issues/PLAN71_tmux-menu-design.mdtmux-menuはmenuサブコマンドの短縮名にし、セッションを受け取らない形を一覧を開く動きにするtmux-sessionだけに持ち、prefix Sはrun-shellでtmux-menuを呼ぶprefix Sはキーを押した pane の ID をTMUX_PANEで渡し、choose-treeの-tに使うTest plan
設計の段階で確かめたこと(実測は設計文書の「実測」の節にある)。
tmux choose-tree -Zs -O name '<template>'で、選んで Enter を押すとmenu -c <押した端末> <選んだ ID>が渡ること(専用ソケットの tmux 3.7b、pty で attach、'を含む名前。別のセッションにも端末を繋いだ状態)tmux attach \; choose-tree …で、attach と同時に一覧が出て、同じ引数が渡ることbind-key S run-shellへ template を直接埋め込むと ID が欠けること(run-shell が#{…}を先に展開する)と、スクリプト経由なら正しく渡ること🤖 Generated with Claude Code