Skip to content

設計(PLAN71): prefix S の一覧とメニューをコマンド tmux-menu からも開く (#270) - #271

Merged
takemi-ohama merged 8 commits into
mainfrom
design/plan71-tmux-menu
Sep 24, 2026
Merged

takemi-ohama merged 8 commits into
mainfrom
design/plan71-tmux-menu

Conversation

@takemi-ohama

@takemi-ohama takemi-ohama commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Summary

#270 の要求と設計を載せる。実装は含まない。

Refs #270

決めたこと

issues/PLAN71_tmux-menu-design.md

  • 決定 1: tmux-menu は menu サブコマンドの短縮名にし、セッションを受け取らない形を一覧を開く動きにする
  • 決定 2: 一覧を開く定義は tmux-session だけに持ち、prefix S は run-shell で tmux-menu を呼ぶ
  • 決定 3: tmux の外では attach 先を引数で取らない
  • 決定 4: prefix S はキーを押した pane の ID を TMUX_PANE で渡し、choose-tree の -t に使う

Test plan

設計の段階で確かめたこと(実測は設計文書の「実測」の節にある)。

  • tmux の中のプロンプトから打った tmux choose-tree -Zs -O name '<template>' で、選んで Enter を押すと menu -c <押した端末> <選んだ ID> が渡ること(専用ソケットの tmux 3.7b、pty で attach、' を含む名前。別のセッションにも端末を繋いだ状態)
  • tmux の外からの tmux attach \; choose-tree … で、attach と同時に一覧が出て、同じ引数が渡ること
  • bind-key S run-shell へ template を直接埋め込むと ID が欠けること(run-shell が #{…} を先に展開する)と、スクリプト経由なら正しく渡ること
  • コンテナの tmux 3.6 での同じ確認(実装の後、建てたイメージで行う)

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 1 | codex | REQUEST_CHANGES

修正提案3件(major 1件、minor 2件)。

Comment thread issues/PLAN71_tmux-menu-design.md Outdated
Comment thread issues/PLAN71_tmux-menu-design.md Outdated
Comment thread issues/PLAN71_tmux-menu-design.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 1 | kiro | REQUEST_CHANGES

設計 PR。決定 2 で prefix S の割り当てを choose-tree のテンプレート直書きから run-shell "tmux-menu" へ変えるが、この変更で壊れる既存の静的テスト test_prefix_s_opens_session_chooser がテスト設計に挙がっておらず、受け入れ条件 11 が『既存テストが通る』と読める点を、明示的に『書き換える既存テスト』として整理すべき。

Comment thread issues/PLAN71_tmux-menu-design.md Outdated
Comment thread issues/PLAN71_tmux-menu-design.md
- 決定 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>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ | round 1 | commit 98f3829

対応件数: critical=0 / major=2 / minor=3(合計 5 件)
決着: 5 件 / 見送り: 0 件 / 却下: 0 件
CI: SUCCESS

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 2 | claude | REQUEST_CHANGES

決定 4(TMUX_PANE を -t に使う)を縛るテスト設計が、実装から -t "$TMUX_PANE" を落としても落ちない。時間に頼らない形のテストへ差し替えること。

Comment thread issues/PLAN71_tmux-menu-design.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 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 の分類(書き換える / そのまま通る)に基盤更新の必要性を反映すべき。

Comment thread issues/PLAN71_tmux-menu-design.md
Comment thread issues/PLAN71_tmux-menu-design.md
- 足すテストを「直近の端末を 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>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ | round 2 | commit b0e84c9

対応件数: critical=0 / major=2 / minor=1(合計 3 件)
決着: 3 件 / 見送り: 0 件 / 却下: 0 件
CI: SUCCESS

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 3 | claude | REQUEST_CHANGES

決定 4 を縛るとして足したテスト(行 11)は、tmux 自身がクライアントの環境の TMUX_PANE から現在の pane を決めるため、実装から -t "$TMUX_PANE" を落としても通る見込みが高い。実測で確かめ、テストが縛る対象の説明を直すこと。

Comment thread issues/PLAN71_tmux-menu-design.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 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>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ | round 3 | commit bb8eb7f

対応件数: critical=0 / major=1 / minor=0(合計 1 件)
決着: 1 件 / 見送り: 0 件 / 却下: 0 件
CI: SUCCESS

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 4 | codex | APPROVE

追加の修正指摘はありません(round 4、指摘 0 件)。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 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 点のみ。

Comment thread issues/PLAN71_tmux-menu-design.md Outdated
`tmux-menu -c 端末 <セッション>` も今の形のメニューを出すという契約を縛れるよう、
テスト設計の行 8 に両方の名前で -c 形を呼ぶテストを足し、受け入れ条件 8 に
2 つの形の両方で成り立つことを明記する。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ | commit 85f4b26

対応件数: critical=0 / major=0 / minor=0(合計 0 件)
決着: 1 件 / 見送り: 0 件 / 却下: 0 件
CI: NONE

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 5 | claude | REQUEST_CHANGES

テスト設計の行 8 に、書いたとおりに実装すると落ちる形が 2 つある(run-shell へ渡す ID の引用漏れと、fake_tm のプロンプトで tmux-session が偽物へ解決されること)。

Comment thread issues/PLAN71_tmux-menu-design.md Outdated
Comment thread issues/PLAN71_tmux-menu-design.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 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>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ | round 5 | commit 43db282

対応件数: critical=0 / major=1 / minor=1(合計 2 件)
決着: 2 件 / 見送り: 0 件 / 却下: 0 件
CI: SUCCESS

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 6 | claude | REQUEST_CHANGES

テスト設計の 3 か所(行 11 が縛る壊し方の説明、行 5 の前提の置き方、行 1・2 のプロンプトへの入力の送り方)を直すこと。

Comment thread issues/PLAN71_tmux-menu-design.md Outdated
Comment thread issues/PLAN71_tmux-menu-design.md Outdated
Comment thread issues/PLAN71_tmux-menu-design.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 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>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ | round 6 | commit 9302a33

対応件数: critical=0 / major=0 / minor=3(合計 3 件)
決着: 3 件 / 見送り: 0 件 / 却下: 0 件
CI: SUCCESS

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 7 | codex | APPROVE

追加の修正指摘はありません(round 7、指摘 0 件)。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 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 takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 8 | claude | REQUEST_CHANGES

テスト設計の行 11 の足すテストが前提とする tmux の挙動(attach の順だけで直近の端末が決まる)に、再現用スクリプトの実測が無い。1 件のみ。

Comment thread issues/PLAN71_tmux-menu-design.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 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>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🔧 /ndf:fix サマリ | commit 936903d

対応件数: critical=0 / major=0 / minor=0(合計 0 件)
決着: 1 件 / 見送り: 0 件 / 却下: 0 件
CI: NONE

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.

1 participant