Skip to content

chore: PLAN32 の破壊的変更に合わせて 3.0.0 へ上げる - #109

Merged
takemi-ohama merged 12 commits into
release/PLAN32from
feature/PLAN32-version
Aug 22, 2026
Merged

chore: PLAN32 の破壊的変更に合わせて 3.0.0 へ上げる#109
takemi-ohama merged 12 commits into
release/PLAN32from
feature/PLAN32-version

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

Summary

project.yml への移行はプロジェクト定義の互換性を壊すため、SemVer に従って major を上げます。

  • pyproject.toml: 2.2.03.0.0
  • CHANGELOG.md: [Unreleased] の内容を [3.0.0] - 2026-08-23 として確定し、プラグイン側で requires.devbase: ">=3.0.0" への更新が必要な旨を明記
  • ドキュメント中のバージョン表記(アーキテクチャ解説、プラグイン開発クイックスタートの前提)を 3.0.0 へ

背景

クロスレビューで、プラグインの plugin.ymlrequires.devbase: ">=2.2.0" を許容したままだと、project.yml を読めない 2.2.0 にインストールできてしまい、インストール時の互換性チェックを通過した後で devbase up が失敗する、という指摘がありました。プラグイン側が下限を上げるには、まず本体側にその版数が必要です。プラグインリポジトリ側の更新は各リポジトリの移行 PR で行います。

Test plan

  • uv run pytest — 全 1371 件 green
  • grep -rn "2\.2\.0" docs README.md lib bin — 残存は CHANGELOG の過去リリース記述のみ

takemi-ohamaand others added 5 commits August 23, 2026 01:35
PLAN32 Task 5。複数リポジトリ構成と project.yml への移行に合わせて利用者向け
ドキュメントを更新した。
- docs/user/project-yml.md を新設: スキーマ、複数リポジトリの例、検証される
内容、env との使い分け、旧 env からの移行表、コンテナへの渡り方
- 環境変数ガイド / コンテナ操作ガイド / CLI リファレンス / プラグイン開発の
各所から旧キー (GIT_USER / GIT_REPO / WORK_DIR / CONTAINER_SCALE) の説明を
外し、project.yml とその参照へ置き換え
- CLI リファレンスに devbase project migrate-config を追記
- アーキテクチャ解説に project/ モジュールの節を追加
- CHANGELOG に破壊的変更と再ビルドの注意を追記
過去リリース分の CHANGELOG 記述は履歴なので書き換えていない。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- repo-backed-projects.md: 見出し変更で切れた `#スケール前提-container_scale1`
参照 2 箇所を `#スケール前提-scale-1` に修正
- quickstart.md: `env` はファイル自体が必須(中身は任意)と見出しから分かるよう変更し、
最小構成のディレクトリツリーへ `project.yml` を追加
- project-yml.md: `env` ファイルが必須である旨を同じ表現に揃える
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`devbase env init` の editor コレクター (lib/devbase/env/collectors/editor.py)
が `DEVBASE_OPEN_EDITOR` を対話収集し、対話の既定は `1` (有効) である。
「収集対象外」「既定: OFF」という記述は実装と矛盾していたため、収集対象で
あることと、OFF に倒れるのはキー自体が未設定のときだけである旨へ修正した。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
project.yml への移行はプロジェクト定義の互換性を壊すため、SemVer の
major を上げる。プラグイン側は requires.devbase を ">=3.0.0" に更新して
非対応の devbase へインストールされないようにする必要がある
(各 plugin リポジトリの PR で対応)。
CHANGELOG の [Unreleased] を [3.0.0] として確定し、ドキュメント中の
バージョン表記も揃えた。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@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

リリース前に、実行時版数・lockfile・CHANGELOG 参照リンクを 3.0.0 基準へ同期してください。

Comment threadpyproject.toml
Comment threadCHANGELOG.md

@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 | REQUEST_CHANGES

PR の説明にある grep の結果と異なり、バージョン番号の更新漏れや付随するロックファイルの非同期が見受けられます。
インラインで指摘できない差分外のファイルが含まれるため、以下にまとめて記載します。

  • [major / 正確性] lib/devbase/__init__.py (L3), lib/devbase/cli.py (L17), lib/devbase/commands/status.py (L13):
    __version__ = "2.2.0" が残存しています。これらの実行時版数も 3.0.0 へ更新してください。
  • [major / 正確性] uv.lock:
    pyproject.toml のバージョンが上がったことで uv lock --check が失敗する状態になっています。uv lock を実行してロックファイルを同期してください。
  • [major / 正確性] CHANGELOG.md (末尾):
    Keep a Changelog 形式のリンクが未更新です。[Unreleased] の比較開始点を v3.0.0 に向け、新たに [3.0.0]: https://github.com/devbasex/devbase/compare/v2.2.0...v3.0.0 のリンク定義を追加してください。
  • [minor / ドキュメント] docs/user/env-export-import.md (L77付近):
    manifest のサンプルコードにある devbase_version: 2.2.03.0.0 へ合わせておくことを推奨します(必須ではありません)。

takemi-ohamaand others added 2 commits August 23, 2026 02:02
pyproject.toml だけを 3.0.0 にしたため、実行時の版数表示とロックファイルが
2.2.0 のまま取り残されていた。
- lib/devbase/__init__.py の __version__ を 3.0.0 へ (--version / status /
export manifest の実体)
- lib/devbase/cli.py, lib/devbase/commands/status.py の ImportError fallback も
同じ値へ同期
- uv.lock のローカルパッケージ版数を 3.0.0 へ (uv lock --check が通る状態に戻す)
- CHANGELOG.md に [3.0.0] のリンク定義を追加し、[Unreleased] の比較開始点を
v3.0.0 へ変更
- docs/user/env-export-import.md の manifest サンプルの devbase_version を 3.0.0 へ
docs/user/plugin-registries.md の「devbase v2.2.0 以降」は当該仕様が導入された
版を指す履歴記述のため据え置く。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- project.yml リファレンス: `init` は clone 直後だけでなくコンテナ起動の
たびに `./init.sh` を実行することを明記し、`branch` (clone 直後のみ) との
タイミング差の表と冪等性の注意を追加
- 環境変数: `DEVBASE_WORKSPACE` が効くのはリポジトリ 1 件の構成だけで、
2 件以上では自動生成した workspace を直接開くため上書きできない旨を明記
- container-operations / plugin-dev quickstart の関連記述も同じ挙動へ揃える
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=1 / minor=2 (合計 3 件)
deferred: 0 件 / rejected: 0 件
commit: aef5c90
CI: NONE (このブランチに登録された check はありません)

codex / gemini の指摘はいずれも妥当でした。pyproject.toml だけを 3.0.0 にしたため、実行時の版数表示とロックファイルが 2.2.0 のまま取り残されていたのが根本原因です。PR 本文の Test plan にあった grep 結果は lib / uv.lock を取りこぼしており、誤りでした。

詳細

#指摘元対象重要度対応
1codex (inline) / gemini (body)lib/devbase/__init__.py:3, lib/devbase/cli.py:17, lib/devbase/commands/status.py:13, uv.lock:44major / 正確性修正済み
2codex (inline) / gemini (body)CHANGELOG.md 末尾の参照定義minor / ドキュメント修正済み
3gemini (body)docs/user/env-export-import.md:77minor / ドキュメント修正済み
  • 1: __version__ 実体と 2 箇所の ImportError fallback を 3.0.0 へ同期。uv lock でローカルパッケージ版数も更新し、uv lock --check が通る状態に戻しました。再解決時に exceptiongrouptyping-extensions marker が無関係に書き換わったため、そのハンクのみ差し戻して uv.lock の差分を版数 1 行に限定しています (差し戻し後も uv lock --check green)。
  • 2: [3.0.0]: .../compare/v2.2.0...v3.0.0 を追加し、[Unreleased] の比較開始点を v3.0.0 へ。[2.2.0] 以前は履歴のため据え置き。
  • 3: manifest サンプルの devbase_version3.0.0 へ。

意図的に据え置いた箇所

  • docs/user/plugin-registries.md:7「devbase v2.2.0 以降、「公式レジストリ」固定の概念は廃止されました」— 当該仕様が導入された版を指す履歴記述であり、現行版数ではないため変更しません。
  • CHANGELOG.md[2.2.0] 以前のセクション、issues/old/PLAN03-1.md — いずれも履歴。

検証

$ uv run pytest
1371 passed in 46.20s
$ uv lock --check
Resolved 23 packages # 差分なし
$ uv run python -c "..."
init 3.0.0 cli 3.0.0 status 3.0.0
$ grep -rn "2\.2\.0" docs README.md lib bin pyproject.toml uv.lock
docs/user/plugin-registries.md:7: # 履歴記述のため意図的に据え置き

@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

版数・lockfile・リリース履歴の同期に修正が必要な問題はありません。

@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 | REQUEST_CHANGES

v3.0.0 の破壊的変更 (PLAN32) に伴うドキュメントの更新漏れがあります。新規ユーザーがチュートリアル通りに実行するとエラーになる状態のため、リリース前に修正をお願いします。

  • [critical / 正確性] docs/plugin-dev/quickstart.md: project.yml への更新漏れ
    CHANGELOG に「プロジェクト設定を project.yml へ移行する破壊的変更を含みます」とありますが、本ファイルの「2.3 env ファイルの作成」セクション(76行目付近)が旧仕様(env ファイルに GIT_USER 等を書く内容)のままです。v3.0.0 では project.yml がないと up 時にエラーになるため、チュートリアルを project.yml を作成する手順に更新してください。ディレクトリ構成ツリー(34行目付近)の修正も必要です。

  • [major / 網羅性] docs/plugin-dev/plugin-yml-reference.md: requires 定義の不足
    CHANGELOG でプラグイン側の requires.devbase: ">=3.0.0" 更新が必須とアナウンスされていますが、リファレンスのフィールド一覧に requires に関するスキーマ定義や説明が記載されていません。ユーザーが正しく設定できるよう追記が必要です。

  • [major / 正確性] docs/plugin-dev/quickstart.md: plugin.yml サンプルへの requires 追記
    上記に関連し、本ファイルの「1.2 plugin.yml の配置」(23行目付近)にあるサンプルコードにも requires: ... のセクションを追記し、ユーザーがコピペしても新しい必須要件を満たせるようにしてください。

takemi-ohamaand others added 3 commits August 23, 2026 02:15
env の役割を「コンテナへ渡す環境変数」と書き換えたのに、直上の表だけ
「リポジトリ名・コンテナ数等」と旧仕様のままで矛盾していた。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gemini round 2 の critical 指摘 (quickstart.md が旧 env 仕様のまま) は PR #108 で
対応済みのため、同じ release/PLAN32 を base とする本ブランチへ取り込み、
3.0.0 の版数記述とドキュメント本文の仕様を同一ブランチ上で整合させる。
CHANGELOG.md はコンフリクトしたため union で解決した。
- HEAD 側: [Unreleased] を [3.0.0] - 2026-08-23 として確定した見出しと注記
- docs 側: project.yml 移行の ### Changed エントリ
[2.2.0] 以前の履歴記述は変更していない。
CHANGELOG が 3.0.0 で requires.devbase: ">=3.0.0" への更新を求めているのに、
plugin.yml リファレンスに requires の記述が無く、プラグイン作者が何を書けばよいか
たどれない状態だった (gemini round 2 の major 指摘)。
追記にあたって実装 (lib/devbase/plugin/syncer.py load_plugin_info) を確認したところ、
リファレンスとクイックスタートが載せていた plugins[] 配列 + projects[] 列挙の構造は
どこからも読まれておらず、実際は plugin.yml が name / version / description /
priority / requires.devbase を持つフラット形式で、プロジェクトは projects/ 配下の
ディレクトリから自動検出される。旧構造のまま requires だけ足すと誤った位置を案内する
ため、スキーマ記述を実装に合わせて訂正した上で追記している。
- plugin-yml-reference.md: 基本構造・フィールド一覧・使用例をフラット形式へ訂正。
requires (devbase 本体の最低バージョン。project.yml 形式は 3.0.0 以降でのみ読めるため
">=3.0.0" を指定する) と priority の詳細節を追加。プロジェクト自動検出を明記。
複数 Plugin を 1 リポジトリで配る場合は registry.yml を使う旨へ差し替え。
実在しないエラーメッセージを並べていたバリデーション表を実際の PluginError へ訂正。
- quickstart.md 1.2: plugin.yml サンプルをフラット形式 + requires.devbase へ更新。
検証: uv run pytest 1371 passed / 記載サンプルを load_plugin_info に通して
requires_devbase='>=3.0.0' が取れることを確認。
@takemi-ohama

Copy link
Copy Markdown
ContributorAuthor

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

対応件数: critical=1 / major=2 / minor=0 (合計 3 件)
deferred: 1 件 / rejected: 0 件
commit: 94f6fea (merge) / 028175a (docs)
CI: NONE (このブランチに登録された check はありません)

round 2 は gemini のみ REQUEST_CHANGES で、指摘はレビュー body の 3 点(インラインなし)でした。3 点とも妥当と再判定し、すべて対応しています。

詳細

#指摘元対象gemini 判定独自再判定対応
1gemini (body)docs/plugin-dev/quickstart.md が旧 env 仕様のままcritical / 正確性critical 妥当対応済み(#108 を merge)
2gemini (body)docs/plugin-dev/plugin-yml-reference.mdrequires の説明が無いmajor / 網羅性major 妥当対応済み
3gemini (body)quickstart.md 1.2 の plugin.yml サンプルに requires が無いmajor / 正確性major 妥当対応済み

1. quickstart.mdproject.yml 移行漏れ — 指摘のとおりでしたが、修正自体は同じ release/PLAN32 を base とする PR #108 (feature/PLAN32-docs) で既に済んでいました。本 PR だけを見ると未修正に見えてしまうため、feature/PLAN32-docs を本ブランチへ merge して同一ブランチ上で整合させています (94f6fea)。

現在の quickstart.md は以下の状態です。

  • 2.1 ディレクトリ構成ツリー: project.yml を含む
  • 2.3: 「project.yml の作成」(旧「2.3 env ファイルの作成」を置き換え)
  • 2.3.1: env は「コンテナへ渡す環境変数」のみを持つ旨に変更
  • GIT_USER / GIT_REPO / WORK_DIR / CONTAINER_SCALE の記述は残っていません

CHANGELOG.md は merge でコンフリクトしたため union で解決しました([3.0.0] 見出し + 注記は本 PR 側、project.yml 移行の ### Changed#108 側)。[2.2.0] 以前の履歴記述は変更していません。

2 / 3. requires の文書化 — 追記にあたって実装 (lib/devbase/plugin/syncer.pyload_plugin_info) を確認したところ、リファレンスとクイックスタートが載せていた plugins[] 配列 + projects[] 列挙の構造は、実装のどこからも読まれていませんでした。

# lib/devbase/plugin/syncer.pyreturnPluginInfo(
name=data.get('name', plugin_dir.name),
version=data.get('version', '0.1.0'),
description=data.get('description', ''),
priority=data.get('priority', 0),
requires_devbase=data.get('requires', {}).get('devbase') ifisinstance(data.get('requires'), dict) elseNone,
)

実際の plugin.yml はフラット形式で、プロジェクトは projects/ 配下のディレクトリから自動検出されます (discover_projects)。ドキュメントどおりに書いた plugin.ymlname がディレクトリ名、version0.1.0 に落ちるだけで、plugins[] の中身は無視されます。

旧構造のまま requires だけ足すと誤った位置を案内してしまうため、スキーマ記述を実装に合わせて訂正した上で追記しました。

  • plugin-yml-reference.md
    • 基本構造・フィールド一覧・使用例をフラット形式へ訂正(name / version / description / requires.devbase / priority の 1 表に統合、既定値の列を追加)
    • requires の詳細節を追加 — 「devbase 本体の最低バージョン。project.yml 形式のプロジェクト定義は devbase 3.0.0 以降でしか読めないため、project.yml を持つ Plugin は ">=3.0.0" を指定する」。要件を書かずに 2.x へ入れるとインストールは通るのに devbase up で初めて失敗する、という理由も明記
    • priority の詳細節を追加(衝突時は projects/<name>.<owner>--<repo> へ退避)
    • 「プロジェクトの検出」節を追加(plugin.yml に列挙不要)
    • 「1 リポジトリに複数 Plugin」を registry.yml を使う実際の構成へ差し替え
    • 実在しないエラーメッセージ (Invalid plugin name / Duplicate project name 等) を並べていたバリデーション表を、実際に送出される PluginError へ訂正
  • quickstart.md 1.2: サンプルをフラット形式 + requires.devbase: ">=3.0.0" へ更新し、自動検出と requires の意味をポイントとして併記

deferred

  • quickstart.mdregistry.yml の作成手順が無い — 「4.2 レジストリへの登録」の devbase plugin repo add はリポジトリルートの registry.yml を要求します (No registry.yml found in repository) が、1.x の手順に作成ステップがありません。本 PR (版数引き上げ) の範囲を超え、3.0.0 の破壊的変更とも独立した既存の不足のため、別 PR とします。

検証

$ uv run pytest
1371 passed in 45.18s
$ uv run python -c "load_plugin_info(<リファレンス記載のサンプル>)"
PluginInfo(name='my-plugin', version='1.0.0', description='サンプルプラグイン',
priority=0, requires_devbase='>=3.0.0')
$ git ls-remote origin feature/PLAN32-version
028175a26f4aa5f7cb826e336a5c0659bf009a24 refs/heads/feature/PLAN32-version

記載サンプルが実装のローダを実際に通り、requires_devbase が取れることを確認しています。

Note: 本 PR は feature/PLAN32-docs (#108) を取り込んだため、diff に #108 の変更が含まれます。#108 が先に merge されれば解消します。

@codex@gemini 再レビューをお願いします。

- name: 強制されない命名規則を「バリデーションルール」と書いていたため
「命名規則(推奨)」へ改め、省略時はディレクトリ名になることを追記
- version: サンプルの引用符の有無を基本構造の例と統一
@takemi-ohama

Copy link
Copy Markdown
ContributorAuthor

(上のサマリの補足)セルフレビューで見つけた 2 点を 2165ad6 で追加修正しました。ブランチ先端は 2165ad6 です。

  • name の説明が「バリデーションルール」となっていましたが、実装に名前の検証は無いため「命名規則(推奨)」へ改め、省略時はディレクトリ名が使われることを追記
  • version サンプルの引用符の有無を基本構造の例と統一

uv run pytest は 1371 passed のままです。

@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 3 | codex | APPROVE

修正が必要な指摘はありません。

@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 3 | gemini | APPROVE

変更内容を確認しました。project.yml の導入 (PLAN32) に伴う各モジュールの変更、マイグレーション機能 (migrate-config)、entrypoint.sh の複数リポジトリ対応などすべて目的通り設計・実装されています。境界値やエラーハンドリングに関するテストも十分に書かれており、懸念点はありません。

@takemi-ohama
takemi-ohama marked this pull request as ready for review August 22, 2026 17:31
# Conflicts:
#	CHANGELOG.md
#	docs/user/project-yml.md
@takemi-ohama
takemi-ohama merged commit 0c53b3c into release/PLAN32Aug 22, 2026
@takemi-ohama
takemi-ohama deleted the feature/PLAN32-version branch August 22, 2026 17:33
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