feat(PLAN71): prefix S の一覧とメニューをコマンド tmux-menu からも開く (#270) - #274
Conversation
- tmux-menu を tmux-session menu の短縮名にし、セッションも -c も受け取らない形で一覧を開く
- tmux の中は TMUX_PANE の pane に、外は attach して一覧を出す。サーバが無ければ終了コード 1
- prefix S は run-shell "TMUX_PANE=#{pane_id} tmux-menu" を呼び、一覧の定義を tmux-session に集める
- Dockerfile に symlink tmux-menu、利用者向け文書と CHANGELOG、回帰テスト
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 | APPROVE
修正を要する指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | REQUEST_CHANGES
PLAN71 の実装・テスト・利用者文書・CHANGELOG は一貫しており、後方互換 (旧 bind-key S を写した人は tmux-session menu -c 経由で動く) も保たれている。修正提案は 2 点: (1) 確定仕様 docs/specifications/tmux-named-session.md が旧 prefix S 割り当てと短縮名一覧のまま出荷実装と食い違う (PR 本文で先送りと明言しているが、文書内に先送りの断り書きが無い)、(2) tmux 内で TMUX_PANE 空のときの choose-tree フォールバック分岐が未テスト。
差分の外を指す指摘
docs/specifications/tmux-named-session.md:45[minor] [minor / 保守性] 確定仕様の「キーの割り当て」行が旧定義bind-key S choose-tree … "tmux-session menu …"のままで、本 PR が /etc/tmux.conf をbind-key S run-shell "TMUX_PANE=#{pane_id} tmux-menu"へ変えた実装と食い違う。加えて構成要素表の短縮名行がtmux-menuを欠き、ln -sf3 つ/サブコマンド 3 操作の記述も 4 と食い違う。PR 本文で「確定仕様化のときに直す」と先送りしているが文書側に断りが無いため、少なくとも当該箇所へ「#270 で prefix S は tmux-menu を呼ぶ形へ変更済み(確定仕様は別途更新)」の注記を入れるか、行を新形へ更新する。tests/containers/test_tmux_session.py:1084[minor] [minor / テスト] 一覧を開く分岐のうち『TMUX があるが TMUX_PANE が空』でexec tmux choose-tree -Zs -O name(-t なし)へ落ちる中間分岐 (tmux-session:181-183) が未検証。この分岐は直近操作端末に一覧が出る既知の弱点そのものなので、env=inside_env(home)から TMUX_PANE を除いた環境でtmux-menuを実行し、returncode==0 かつ一覧が開くことを確かめるテストを 1 件足すと退行を捕まえられる。
prefix S の割り当てを run-shell "TMUX_PANE=#{pane_id} tmux-menu" に、短縮名と
ln -sf を 4 つに、一覧の定義が tmux-session にあることを書く。呼び出しの形・
終了コード・確かめ方の旧定義も合わせる。
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | commit 74c93d4対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | claude | REQUEST_CHANGES
実装・割り当て・利用者文書は一貫している。確定仕様のテスト節に、本 PR が足した tmux-menu の一覧を開く形の回帰テストが載っていない点のみ修正を求める。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | APPROVE
PLAN71 (#270) の実装・確定仕様・利用者文書・テスト・CHANGELOG は一貫しており、後方互換 (旧 bind-key S choose-tree を写した人も prefix S は動く) も保たれている。修正を要する新たな指摘は無い。
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🔧 /ndf:fix サマリ | commit 9371822対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | claude | APPROVE
修正を要する指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | APPROVE
修正を要する新たな指摘はありません。
🔧 /ndf:fix サマリ | commit (なし)対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
実装レビュー(/ndf:cross-review)の経過駆動が残した上の 3 件の「/ndf:fix サマリ」は、スイープ後の再開で状態が作り直されたため件数がすべて 0 になっています。実際の経過は次のとおりです。
未解決の review thread は 0 件。構造改善(/ndf:cross-refactoring)は、assess が本番コードの差分を 0 と判定した(終了コード 3)ため起動していません。 範囲外と判断し、次の issue として残しました(いずれも devbasex/ai-plugins)。
|
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
確定仕様化の途中で見つけた範囲外の課題(spec-finalize で --design を繰り返すと最後の 1 つしか削除されない)を devbasex/ai-plugins#1136 として起票した。この PR では残った 2 件を手で削除した。 |
リリース後テスト対象の版: main 5edc75f(PR #274 のマージ、2026-09-26 01:50 JST。このリポジトリは main へのマージが配布)
コマンド: 出力合否: 合格(条件 1〜5 を擬似端末で実施し 18 項目すべて合格。実際の端末エミュレータでの見た目の 1 件は保留) |
Closes #270
Summary
tmux-menuをtmux-session menuの短縮名として足した。menuはセッションも-cも受け取らないときだけ、prefix Sと同じセッションの一覧(choose-tree -Zs -O name)を開く(設計の決定 1)TMUX_PANEの pane に一覧を出す(-t "$TMUX_PANE")exec tmux attach-session \; choose-tree …。attach 先は tmux の既定(決定 3)prefix Sをbind-key S run-shell "TMUX_PANE=#{pane_id} tmux-menu"に変えた。一覧の template はtmux-sessionにだけ置く(決定 2・決定 4)。今の形のtmux-session menu -c 端末 <セッション>は変えていないので、ホストの~/.tmux.confに前の行を写した人のprefix Sもそのまま動くtmux-menuを足した。利用者向け文書(docs/user/environment-variables.md「セッションを名指しで扱う」。ホストの symlink は 5 つ)と CHANGELOG も直したtmux-first/tmux-cleanは変えていないdocs/specifications/tmux-named-session.mdを今の形(短縮名 4 つ、prefix Sはrun-shellでtmux-menuを呼ぶ、一覧を開く 3 つの経路、回帰テストの節)に合わせた(実装レビューの指摘)要求と受け入れ条件(条件 1〜14)と設計(#271)は、確定仕様化で
docs/specifications/tmux-named-session.mdへ移した(決定の理由・ホストの以前の割り当てとの互換・テストで Enter を端末から送る理由を足した)。issues/PLAN71_tmux-menu.md・issues/PLAN71_tmux-menu-design.md・issues/PLAN71_tmux-menu-measure.pyは消した(e847c9f)。利用者向けの変化
tmux-menuで、prefix Sと同じセッションの一覧とメニューを開けるようになった。tmux の中では今の pane に一覧を出し、tmux の外では attach してから一覧を出す(attach 先は tmux の既定。サーバが無ければ何も作らず終了コード 1)prefix Sはtmux-menuを呼ぶ形になった。開く一覧とメニューは今までと同じで、tmux-session menu -c 端末 <セッション>の形も変わらないtmux-menu)と~/.tmux.confの新しい行を足す(docs/user/environment-variables.md「セッションを名指しで扱う」)devbase build base --no-cacheと派生イメージの建て直し、コンテナの作り直し(devbase down→devbase up)が要るTest plan
ホスト(macOS、tmux 3.7b)で実行した。tmux のテストは専用のソケットで起動し、利用者の tmux サーバに触れない。
最終の版 9371822 での再実行(2026-09-26)
env -u TMUX -u TMUX_PANE uv run --locked pytest tests/ -q→ 3233 passed / exit=0(条件 13。実装レビューで足したtest_list_inside_without_tmux_pane_opens_treeを含む)env -u TMUX -u TMUX_PANE uv run --locked pytest -q tests/containers/test_tmux_session.py tests/containers/test_tmux_conf.py→ 118 passed / exit=0(条件 1〜11)uvx --from shellcheck-py shellcheck containers/base/tmux-first containers/base/tmux-clean containers/base/tmux-session→ exit=0、shellcheck --severity=error install.sh→ exit=0(条件 13)uvx ruff check --select=E9,F63,F7,F82 lib→ exit=0、python3 -m compileall -q lib bin→ exit=0git diff --stat origin/main -- containers/base/tmux-first containers/base/tmux-cleanが空(条件 12)tmux-menuと symlink の 5 つ目、確定仕様と CHANGELOG に反映。実装レビューで 3 者(claude / codex / kiro)が見て、仕様の指摘 2 件を直した実装の時点(2390b4f)
env -u DEVBASE_ROOT uv run pytest -q(全体)→ 3232 passed(条件 13)uv run --locked pytest -q tests/containers/test_tmux_session.py tests/containers/test_tmux_conf.py→ 117 passed(条件 1〜11)。テストを先に足した時点では 22 件が落ちたuvx --from shellcheck-py shellcheck containers/base/tmux-*→ exit=0(条件 13)git diff --stat origin/main -- containers/base/tmux-first containers/base/tmux-cleanが空(条件 12)uvx ruff check --select=E9,F63,F7,F82 lib(CI と同じ)→ All checks passed。変えたテストファイルに新しい指摘は無い--no-cacheで建て、この作業ツリーのcontainers/baseで変わった層から先を建て直した(タグdevbase-base:plan71-check)。使い捨てのコンテナ(tmux 3.6)で次の結果を得た(条件 10、条件 1・4・6・11 の実イメージでの確認)イメージの中の結果
tmux-menuを打ち、一覧 → メニュー →a/p/kが効くことを見る(条件 2〜5)。リリース後テストで main 5edc75f のイメージdevbase-base:plan71-verifyを使い、擬似端末に attach したクライアントへキーを打って 18 項目すべて合格(2026-09-26、PR のコメント「リリース後テスト」)モード: standard / 通した工程: 要求定義 → 設計 → ドキュメントレビュー → 実装計画 → 実装 → 構造改善 → 実装レビュー → 完了判定 → Pull Request
🤖 Generated with Claude Code