Skip to content

feat: PLAN32-host-wiring up / scale / editor の配線を project.yml へ切替 - #105

Merged
takemi-ohama merged 2 commits into
release/PLAN32from
feature/PLAN32-host-wiring
Aug 22, 2026
Merged

feat: PLAN32-host-wiring up / scale / editor の配線を project.yml へ切替#105
takemi-ohama merged 2 commits into
release/PLAN32from
feature/PLAN32-host-wiring

Conversation

@takemi-ohama

@takemi-ohamatakemi-ohama commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Summary

devbase up / devbase scale / エディタ自動オープンの設定源を、プロジェクトの env から projects/<name>/project.yml へ切り替えます。これにより 1 プロジェクトが複数リポジトリを持てるようになります。

  • 新規 lib/devbase/project/runtime.py
    • コンテナへ渡す環境変数の組み立て(DEVBASE_REPOS = clone プラン / DEVBASE_PRIMARY_DIR / DEVBASE_WORKSPACE / DEVBASE_WORKSPACE_B64
    • multi-root workspace の JSON 生成(primary リポジトリを先頭に置く)
    • scale の読み書き
  • devbase up: project.yml を読み、clone プランを生成 compose の dev サービスへ載せる。これを entrypoint が復号して複数リポジトリを clone する
  • devbase scale N: 書き込み先が envCONTAINER_SCALE から project.ymlscale
  • エディタ: リポジトリが 1 件なら primary のフォルダ、2 件以上なら entrypoint が書き出した *.code-workspace を開く。自動オープンの有効判定は project.ymlopen_editor → グローバル .envDEVBASE_OPEN_EDITOR の順
  • 旧経路の削除: GIT_USER / GIT_REPO / WORK_DIR / CONTAINER_SCALE を読む処理を削除。project.yml の無いプロジェクトは移行手順を案内するエラーで停止する

設計上の判断

  • workspace の JSON はホスト側で組み立てて base64 で渡す。シェルで JSON をエスケープせずに済み、生成ロジックをテストできる場所に置ける
  • clone プランは機密の伏せ字化のあとに載せる。リポジトリ URL は機密ではなく、そのままコンテナへ渡す必要がある。既存の environment は辞書形・リスト形の両方を保ったまま追記する
  • scale の書き込みは行単位の置換。YAML を読み直して書き戻すとコメントと並び順が失われるため。書き換え後に読み直して検証し、壊れていれば元へ戻す
  • project.yml が無い場合はエラーで停止(旧 env へフォールバックしない)。後方互換を持たない方針では、移行漏れを黙って動かすと検出できないため

破壊的変更

project.yml を持たないプロジェクトは devbase up / devbase scale が動作しません。プロジェクト定義の移行は後続 PR(変換コマンド)と plugin リポジトリ側の PR で行います。

Test plan

  • uv run pytest tests/project/test_runtime.py — 12 件(clone プラン / primary / workspace の有無と中身 / compose 安全性 / scale の読み書きとコメント保持 / 不正値での巻き戻し)
  • uv run pytest tests/volume/test_compose_dev_environment.py — 5 件(dev 全インスタンスへ注入 / 非 dev には注入しない / 辞書形・リスト形・未定義の各 environment 形式)
  • uv run pytest tests/editor — 96 件(open_editor の有効判定が project.yml 優先になること / workspace を --file-uri、単一リポジトリを --folder-uri で開くこと)
  • uv run pytest — 全 1342 件 green
  • 実機: 複数リポジトリのプロジェクトで devbase build --no-cacheup --open(release ブランチでの結合検証で実施)

PLAN32 Task 2。devbase up がプロジェクトの project.yml を読み、正規化した
clone プランを生成 compose の dev サービスへ環境変数として載せる。これで
entrypoint が複数リポジトリを clone できる。
- lib/devbase/project/runtime.py を追加: コンテナへ渡す環境変数の組み立て
(DEVBASE_REPOS / DEVBASE_PRIMARY_DIR / DEVBASE_WORKSPACE*)、workspace JSON の
生成、scale の読み書き。workspace の JSON はホスト側で組み立てて base64 で
渡すため、シェルでのエスケープが要らずテストもできる
- scale の取得元と devbase scale の書き込み先を env の CONTAINER_SCALE から
project.yml の scale へ移した。書き込みは行単位の置換にしてコメントと並び順を
保ち、書いた結果を読み直して壊れていれば元へ戻す
- エディタは repo が 1 件なら primary のフォルダ、2 件以上なら entrypoint が
書き出した multi-root workspace を開く。自動オープンの有効判定は
project.yml の open_editor > グローバル .env の DEVBASE_OPEN_EDITOR の順
- 旧 GIT_REPO / WORK_DIR / CONTAINER_SCALE を読む経路を削除した。project.yml が
無いプロジェクトは移行手順を案内するエラーで停止する (後方互換なし)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama
takemi-ohamaforce-pushed the feature/PLAN32-host-wiring branch from b65fce4 to 3e21c0dCompareAugust 22, 2026 16:15

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

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

write_scaleproject.yml のコメントを保持する契約を満たすよう、行内コメントを残す置換にしてください。

Comment threadlib/devbase/project/runtime.py Outdated

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

🤖 cross-review | round 1 | gemini | APPROVE

PR の目的 (PLAN32) に沿った up / scale への project.yml 適用が適切に実装されています。

  • open_editorcontainer_env など、設定の参照先が新方式に一本化されていることを確認しました。
  • テストも過不足なく更新されており、既存の env 依存が綺麗に剥がせている点が素晴らしいです。

[minor / 正確性]
別 PR になるかと思いますが、config.py 等のエラーメッセージで案内されている devbase project migrate-config コマンドが現状のコマンド群に未実装のようです。もし本 PR 群が先行してリリースされる場合、ユーザーが存在しないコマンドを叩いて混乱する可能性があるため、リリース順序などにご留意ください。

`^scale:.*$` の一括置換で `scale: 1 # 並列数` の行内コメントごと
消えており、「コメントを保持する」という関数の契約に反していた。
値部分と行内コメントを別々に捕まえ、値だけを差し替える。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
ContributorAuthor

🔧 /ndf:fix サマリ (round 1)

対応件数: critical=0 / major=0 / minor=1 (合計 1 件)
deferred: 1 件 / rejected: 0 件
commit: c0ae50f
CI: NONE (このブランチに CI check は設定されていません)
検証: uv run pytest1343 passed

対応した指摘

#出所箇所内容対応
1codexlib/devbase/project/runtime.py:95write_scalescale: 1 # 並列数 の行内コメントを消す(「コメントを保持する」契約に反する)✅ 修正

_SCALE_LINE を値部分と行内コメントを別々に捕まえる正規表現へ変更し、_rewrite_scale_line() が値だけを差し替えて行内コメントを元の間隔ごと残すようにしました。回帰テスト test_write_scale_keeps_an_inline_comment を追加しています。

deferred

#出所内容理由
1geminiエラーメッセージが案内する devbase project migrate-config が未実装別 PR 対応。PR 本文「破壊的変更」に記載のとおり、プロジェクト定義の移行コマンドは PLAN32 の後続 Task で実装します。指摘のとおりリリース順序(移行コマンド → プロジェクト側 PR)には留意します

再レビュー依頼

@codex@gemini 上記の修正を反映しました。再レビューをお願いします。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

🤖 cross-review | round 2 | codex | APPROVE

round 1 の修正を確認し、追加の修正必須事項はありません。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

🤖 cross-review | round 2 | gemini | APPROVE

設計と実装は意図通りに連携しており、テストも十分にカバーされています。追加の修正が必要な点はありません。

@takemi-ohama
takemi-ohama marked this pull request as ready for review August 22, 2026 16:35
@takemi-ohama
takemi-ohama merged commit e3a6e36 into release/PLAN32Aug 22, 2026
@takemi-ohama
takemi-ohama deleted the feature/PLAN32-host-wiring branch August 22, 2026 16:35
Sign up for freeto 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

@takemi-ohama