feat: PLAN06-1 project サブコマンド group + ハンドラ共有 + container 非推奨委譲#34
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- cli.py: _add_project_parser を追加し up/down/ps/login/logs/scale/build に 省略可能な [name] positional を付与 - cli.py: SUBCMD_MAP / _expand_argv / _dispatch に project を追加(prefix 解決対応) - cli.py: ショートカット (up 等) は非推奨の container ではなく共有 cmd_project へ委譲 - container.py: cmd_container 本体を _dispatch_lifecycle に抽出し cmd_project (推奨) / cmd_container (非推奨 warning + 委譲) で共有 - name は up/scale の project_name へ畳み込み(ディレクトリ解決 / cd は PR2 で実装) - tests/cli/test_project_dispatch.py: parser / scale positional 非曖昧性 / prefix 解決 / dispatch ルーティング / 非推奨 warning を検証 runtime 挙動は従来と同等(リネーム + 委譲のみ、cd なし)。wrapper (bin/devbase) の project ルーティング + name 解決は PR2 (Task 2) に分離。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
未実装の project name 引数が実行時に無視される経路があるため、修正が必要です。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | gemini | REQUEST_CHANGES
PR #34 introduces the project command group as a replacement for container. While the structural changes and deprecation warning are well-implemented, there is a significant usability issue with argument ambiguity in project login. Additionally, the parser definition could be refactored to reduce duplication.
PR #34 round1 レビュー対応 (codex / gemini)。 - project login / build から `[name]` positional を削除し、単一 positional を index / image として扱う (旧 container login <index> / build <image> と一致)。 `project login 2` が name='2' で index=1 にログインしてしまう曖昧さ、 `project build web` が name='web', image=None で image 指定が無視される問題を解消。 - 共有ディスパッチャ _dispatch_lifecycle で、PR1 未対応の name 指定時に 「カレントディレクトリの compose に作用する」旨を warning 出力。 name を黙って無視して意図しない compose に作用するのを防ぐ (up/scale は既に name を受け取る経路のため対象外)。 - name 解決自体は設計どおり PR2 スコープ (docs/plans/PLAN06_project_name.md)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🔧 cross-review fix | round 1 対応サマリcommit: 対応件数
fixed
name の実解決自体は設計どおり PR2 スコープ (PLAN06 Task 2)。 deferred (Resolve せず / 次ラウンド再評価)
CI / 検証
再レビューをお願いします。 |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | gemini | REQUEST_CHANGES
PR1 では project サブコマンドと name 引数のパース構造が整備されました。ディレクトリ解決 (PR2) が未実装な現状において、up / scale コマンドで警告が出ない点は、ユーザーが「指定したプロジェクトに対して正しく操作が行われている」と誤解するリスクがあるため、他サブコマンドと同様に警告を出すか、メッセージを調整することを検討してください。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | codex | REQUEST_CHANGES
projectサブコマンドがインストール済みCLI入口から到達不能なため、wrapper側のdispatch更新が必要です。
- bin/devbase: resolve_command 候補と dispatch case に `project` を追加。
これまで `devbase project ...` が `*)` 節で unknown command になっていた問題を解消。
- _dispatch_lifecycle: name 指定時の未実装警告を up/scale でも出すよう変更。
PR1 では全サブコマンドが CWD の compose に作用し name によるディレクトリ解決を
しないため、up/scale だけ無警告だと「指定 project に作用した」と誤解を与えるため。
- SHORTCUTS: 死んだ group 要素 (`('container', sub)`) を除去し subcommand 文字列に簡略化。
- _add_project_parser: login/build が name を取らない設計意図と PR2 での --name 方針を docstring に明記。
- tests: wrapper の project ルーティング (test_wrapper_dispatch.py) と
up/scale name 警告のテストを追加。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🔧 cross-review fix | round 2 対応サマリcommit: 対応件数
fixed
CI / 検証
再レビューをお願いします。 |
round2 のレビュー対応 (container.py:100) で up/scale も name 指定時に未実装 警告を出すようにしたため、その回帰防止テストを追加する。前 commit の編集が 既存テストの記法不一致で取り込めていなかったため本 commit で補完する。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
(前 summary の訂正)対応 commit SHA は なお対応内容 (fixed 4 / deferred 0 / rejected 0) と pytest 結果に変更はありません: pytest 全 suite 329 passed (新規テスト wrapper 4 + up/scale 警告 3 を含む)。CI チェックは当ブランチに未設定 (no checks reported)。 |
|
(SHA 最終訂正・確定版)round2 の対応 commit は以下が正です。直前の訂正で挙げた
最終 head: |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | REQUEST_CHANGES
devbase build の実行経路が project build と一致していないため、ショートカット移行の対象を wrapper まで揃えてください。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | gemini | APPROVE
project サブコマンドグループの導入と container の非推奨化が、共有のディスパッチャを利用してきれいに実装されています。テストも網羅的で、設計意図通りに動作することを確認しました。
bin/devbase は top-level `build` を shell の cmd_build (devbase-base 依存検出 + 2 段ビルド + --no-cache 対応) に委譲しているが、Python 側は `build` を SHORTCUTS / _add_shortcuts / help epilog で `project build` ショートカットとして広告していた。 Python の project build は単純な compose build であり、wrapper 経由の `devbase build` は実際には shell の cmd_build を通る (共有ハンドラ経路にならない) ため、広告と実経路が 乖離していた (codex major)。 Python の project build へ委譲する案 (codex 案1) は shell の base-image ビルド オーケストレーションを失う回帰になるため採らず、codex 案2 を採用: Python 側の SHORTCUTS / _add_shortcuts / help epilog / _expand_argv から top-level `build` を 除外し、実経路 (shell cmd_build) と広告を一致させた。project build / container build サブコマンド自体は維持。整合性回帰テスト 5 件を追加。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🔧 cross-review fix | round 3 対応サマリcommit: 対応件数
fixed
deferred (Resolve せず / 次ラウンド再評価)
CI / 検証
再レビューをお願いします。 |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | APPROVE
修正要求なし。PR変更面に対して追加CLIテストと既存CLIテストを確認済みです。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | gemini | APPROVE
PR1 (PLAN06 Task 1) としての project コマンド群の導入、container の非推奨化、および build ショートカットの shell 委譲への整合対応を確認しました。設計および実装は妥当であり、テストも十分に網羅されています。
projectグループと[name]positional の導入containerからprojectへの委譲と非推奨警告の追加buildショートカットを Python 側から除外することによる bin/devbase (shell) との整合性確保project_nameによるディレクトリ解決が未実装である点に対する明示的な警告
🔧 cross-review fix | round 4 対応サマリhead: round 4 レビュー結果
両 bot とも APPROVE で、round 4 では新規の inline コメント / review thread はゼロでした。 対応件数
新規の actionable 指摘が無いため、本ラウンドはコード変更・コミット・push を行っていません (head 据え置き)。 deferred (Resolve せず / 据え置き継続)round 1〜3 で deferred とした以下 3 件は round 4 で新規指摘・再提起が無く状況不変のため、各 thread に round 4 ステータス reply を追記のうえ引き続き deferred とします。
CI / 検証
|
ユーザ指示により cross-review で deferred としていた 3 件を本 PR で対応する。 1. [minor] _add_container_parser / _add_project_parser の重複 project / container で完全一致する login / build サブコマンド定義を _add_login_subparser / _add_build_subparser に括り出し共有化。分岐する up/down/ps/logs/scale の [name] 構成は呼び出し側に残し可読性を維持。 2. [minor] トップレベルショートタットの [name] 受理と伝播 up/down/ps/scale を project サブコマンドと同様に省略可能な [name] positional を受理するよう _add_shortcuts を更新。ショートカット経由でも name が _dispatch → cmd_project → _dispatch_lifecycle まで伝播する経路を通した (name の実解決は PR2、PR1 では未対応 warning を出す)。 3. [nit] commands リストへの project/container 登録順序 _expand_argv の commands リストの並び (_create_parser 登録順と一致、 group 直後に alias を隣接配置、project=推奨 を container=非推奨 より前) と prefix 解決が順序非依存である旨をコメントで明示。 回帰テスト: shortcut の [name] 受理・伝播、login/build の project/container 一致を test_project_dispatch.py に追加。pytest 全 suite 348 passed。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🔧 cross-review fix | deferred 3 件をユーザ指示で対応これまで deferred (Resolve せず据え置き) としていた 3 件を、ユーザ指示により本 PR で全て対応しました。 最終 commit: 対応概要
検証
3 件とも該当 review thread に reply のうえ Resolve 済みです。 |
|
(訂正)上記 deferred 対応 reply / summary に記載した commit SHA
対応内容 (parser 共通化 / shortcut [name] 受理・伝播 / 登録順序整理の 3 件) と Resolve 状況に変更はありません。 |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | gemini | APPROVE
PR1 (PLAN06 Task 1) としての project コマンド群の導入、container の非推奨化、および build ショートカットの shell 委譲への整合対応を確認しました。
以前の指摘事項(login/build の曖昧さ、 dispatcher での警告、wrapper への追加など)が適切に修正され、共通ヘルパーによるリファクタリングも行われています。
テストも網羅的であり、設計通りの動作が担保されていると判断し、承認(APPROVE)します。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | APPROVE
修正要求なし。PR変更面に対して追加CLIテストと全体テストを確認済みです。
Summary
issues/PLAN06_project-subcommand.md(Task 1 / PR1)devbase projectサブコマンド group を新設し、既存container系の実装を共有ハンドラに集約して
containerを非推奨委譲に切り替える。本 PR は Pythonレベルのリネーム + 委譲のみで、runtime 挙動は従来と同等(cd / プロジェクト名
解決なし)。
変更内容
lib/devbase/cli.py_add_project_parserを追加。up/down/ps/login/logs/scale/buildに省略可能な
[name]positional を付与(scaleは[name]+ 必須new_scale:intで曖昧にならない順序)
SUBCMD_MAP/_expand_argvの commands /_dispatchにprojectを追加(3 箇所のコマンドリストのうち Python 側 2 箇所を同期。prefix 解決対応)
up等)は非推奨のcontainerではなく共有cmd_projectへ委譲し、ショートカットで warning が出ないようにした--helpepilog をproject体系 +container非推奨告知に更新lib/devbase/commands/container.pycmd_container本体を_dispatch_lifecycleに抽出(実装重複の排除)cmd_project(推奨)/cmd_container(非推奨 warning + 委譲)が共有project <sub> [name]のnameをproject_nameへ畳み込み、up/scaleへ伝播(down/login/logs/ps/buildの名前解決と wrapper cd はPR2 / Task 2 で実装)
tests/cli/test_project_dispatch.py(新規 14 ケース)スコープ外(後続 PR)
bin/devbaseのprojectルーティング + cd によるプロジェクト名解決 → PR2(
bin/devbaseは PR2 の対象。本 PR では未変更のため、wrapper 経由のdevbase project ...は PR2 まで "unknown command" になる。本 PR のテストはPython を直接起動して検証)
project list/--interactive→ PR3、補完・docs → PR4Test plan
project up/down/ps/login/logs/scale/buildparser が成立([name]パース含む)project scale 3/project scale carmo 3が曖昧にならないcontainer <sub>が非推奨 warning を出しつつ従来通り委譲するproject/ トップレベルショートカットは warning を出さないpr→project、project u→up)が成立