Repository navigation
スプリント m8b - #472
スプリント m8b#472
Conversation
前の snapshot.snar を引き継がずに full.tar.zst.new・snapshot.snar.new へ控え、 成功したら状態ファイル → 差分(番号の大きい順)→ 印付きの meta.yml → full → 印無しの meta.yml → 状態ファイルの順に入れ替える。印のある世代は restore が消去の 前に止める。テストの docker の差し替えは、書くファイルの名前をコマンドから拾う。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#458 を実装する(スプリント m8b)
…nternal に置き換える (#295) openbao.url が http の loopback で docker の接続先がローカル扱いのときだけ、dev の インスタンスの BAO_ADDR のホストを host.docker.internal に置き換え、 host.docker.internal:host-gateway の行を足す。https・リモート扱い・network_mode: host の dev サービスは今のまま。ホストの devbase が使う URL と検査は変えない。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/user/openbao-server.md に個人・チーム・既存のサーバの 3 つの形と、マウント・AppRole・ ポリシー・entity と alias・ロール・端末の secret_id の発行と失効の手順を書く。 docs/user/openbao/ に version 1 / 2 のポリシーの雛形と、開発モードの試用の構成 (compose.yml) を置く。env-backend.md は管理者から受け取る前提を既存のサーバの形だけにし、 利用者の識別子をサーバの entity 名と同じ値と説明する。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
非公開の運用のリポジトリへの参照と、利用者の識別子を組織の決まりで説明した記述を外す。 devbase がサーバに求める条件(マウント・パス・AppRole・本人とチームの権限・拒否・ version 2 のグループ単位)と雛形の置き場、loopback の接続先の置き換えを書く。目次に サーバの用意の文書を足す。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
雛形がマウント devbase の data/ と metadata/ の下だけを書き、管理の経路を含まないこと、 個人の雛形が本人の entity に限ること、読み取りの雛形が読むだけであること、version 2 の 雛形が __GROUP__ の置き換えで 1 つのグループを指すこと、試用の構成の版が base の BAO_VERSION と同じ 2.6 系でポートが loopback だけであることを確かめる。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… サービスを足す (#295) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#295 を実装する(スプリント m8b)
一致テストに、子の parser を持たない末端の道から --context の集合を引いた NO_CONTEXT_LEAF_PATHS を足し、bash の補完の余分を比べる。zsh は補完の実行テスト に X1 の行を足し、実際の候補で余分を比べる。親の道は子の分岐を含むため比べない。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#453 を実装する(スプリント m8b)
…SNAP_META_FILE _load_snap_meta・_save_snap_meta・snapshot_volumes に残っていた 'meta.yml' の直書きを SNAP_META_FILE に置き換える。META_FILE_TMP と同じ定数から名前を引くようにする。 Item-Id: I-001 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#CONTAINER_HOST_NAME コンテナからホストを指す名前を volume/compose.py の HOST_GATEWAY_NAME に寄せる。 BAO_ADDR の書き換え先と extra_hosts に足す名前を同じ定数から取る。 container.py は既に devbase.volume.compose に依存しており、依存の向きは変わらない。 Item-Id: I-002 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…al.py#_run_docker_tar StubManager._run_docker_tar の backup の分岐を fake_tar.write_backup_outputs に寄せ、 コマンドが書く名前のファイルを置く。前準備(backup のコマンドを通らない)の直書きは残す。 Item-Id: I-004 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…st_gateway(現状固定テスト) extra_hosts が解釈できない形(文字列)のときに触らないことを現状固定テストで押さえる。 list / dict / None の場合は既存のテストが押さえている。 Item-Id: I-006 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…st_gateway _extra_host_names の辞書形の判定を _add_host_gateway と同じ isinstance(existing, dict) に揃え、 名前の読み取りと追記で形の分類が食い違わないようにする。extra_hosts は yaml.safe_load の 出力なので、辞書形は常に dict であり振る舞いは変わらない。 Item-Id: I-006 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…napshotManager._replace_snap_meta メタデータと meta.yml を YAML で書く open と yaml.dump の組をモジュールの _dump_yaml に寄せ、 _save_snap_meta・_replace_snap_meta・_save_metadata から呼ぶ。書式の知識を 1 か所にする。 _replace_snap_meta は仮の名前へ _dump_yaml したあと os.replace する形のまま。 Item-Id: I-007 Impl-Runtime: claude Impl-Model: claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
改修計画 — devbasex/devbase #472
改善項目I-001 —
|
| 兆候 | 手法 | 重要度 | 等級 | 提案元 | 状態 | コミット |
|---|---|---|---|---|---|---|
| magic_value | introduce_named_constant | minor | high | claude | 採用 | 1 |
なぜ: PR で SNAP_META_FILE = 'meta.yml' を定義したが、_load_snap_meta・_save_snap_meta・snapshot_volumes(1383 行)は 'meta.yml' の直書きのまま。META_FILE_TMP はこの定数から作るので、本来の名前と仮の名前の対応が直書きの側で崩れ得る
手順: 1. _load_snap_meta・_save_snap_meta・snapshot_volumes の snap_dir / 'meta.yml' を snap_dir / SNAP_META_FILE に置き換える
2. manager.py に他の 'meta.yml' の直書きが残っていないかを grep で確かめる(ログ・メッセージの文言は変えない)
3. tests/snapshot/ を通す
I-002 — lib/devbase/commands/container.py#CONTAINER_HOST_NAME
| 兆候 | 手法 | 重要度 | 等級 | 提案元 | 状態 | コミット |
|---|---|---|---|---|---|---|
| duplication | consolidate_duplication | minor | high | claude | 採用 | 1 |
なぜ: コンテナからホストを指す名前 'host.docker.internal' が container.py の CONTAINER_HOST_NAME と volume/compose.py の HOST_GATEWAY_NAME の 2 か所に別の名前で定義されている。BAO_ADDR の書き換え先と extra_hosts に足す名前は一致していないと届かないので、同じ知識を 1 か所に寄せるべき
手順: 1. container.py の CONTAINER_HOST_NAME の定義を消し、from devbase.volume.compose import HOST_GATEWAY_NAME を足す(container.py は既に devbase.volume.compose を使っているので依存の向きは変わらない。import 済みかを確かめ、無ければ足す)
2. container_bao_address の netloc = CONTAINER_HOST_NAME を HOST_GATEWAY_NAME に書き換え、docstring の :data: 参照を直す
3. tests/ で CONTAINER_HOST_NAME を参照している所が無いことを grep で確かめる
4. pytest tests/commands/test_container_bao.py tests/volume/test_compose_host_gateway.py を通す
I-003 — lib/devbase/commands/container.py#container_bao_address
| 兆候 | 手法 | 重要度 | 等級 | 提案元 | 状態 | コミット |
|---|---|---|---|---|---|---|
| duplication | consolidate_duplication | minor | high | codex | 見送り | 0 |
なぜ: container.py の CONTAINER_HOST_NAME と volume/compose.py の HOST_GATEWAY_NAME が同じ host.docker.internal を別々に定義している。URL の置換先と extra_hosts の登録名は必ず一致すべき同じ知識である。
手順: 1. volume/compose.py の HOST_GATEWAY_NAME を正とし、既に同モジュールへ依存する container.py から import する。既存の CONTAINER_HOST_NAME は互換性が必要なら同定数への別名として残す。
2. URL の組み立てと Compose の登録値を変えず、tests/commands/test_container_bao.py と tests/volume/test_compose_host_gateway.py を実行する。期待値の文字列は実装の定数へ置き換えない。
取り消した理由: 実装の終わりまでにコミットが無く、残った時間に入らない
I-004 — tests/snapshot/test_restore_incremental.py#_run_docker_tar
| 兆候 | 手法 | 重要度 | 等級 | 提案元 | 状態 | コミット |
|---|---|---|---|---|---|---|
| duplication | extract_test_helper | minor | high | claude | 採用 | 1 |
なぜ: PR で控えのコマンドが書くファイルを置く処理を tests/snapshot/fake_tar.write_backup_outputs に寄せたが、test_restore_incremental.py の差し替え(135-137 行)は 'full.tar.zst' と 'snapshot.snar' を直書きで置いたまま残っている。作り直しで仮の名前へ書く経路をこの差し替えが通ると、コマンドと違うファイルを置いてしまう
手順: 1. test_restore_incremental.py の _run_docker_tar の backup 分岐を write_backup_outputs(snap_dir, command) に置き換え、from .fake_tar import write_backup_outputs を足す
2. 110 行の前準備の直書きは backup のコマンドを通らないためそのまま残す
3. pytest tests/snapshot/test_restore_incremental.py を通す
レビューで確かめるテストの差分: tests/snapshot/test_restore_incremental.py(機械で期待値が変わったか決まらなかった)
I-005 — tests/volume/test_compose_dev_environment.py#generated
| 兆候 | 手法 | 重要度 | 等級 | 提案元 | 状態 | コミット |
|---|---|---|---|---|---|---|
| duplication | extract_test_helper | minor | high | codex | 取り消し | 0 |
なぜ: 生成した .docker-compose.scale.yml の読み込みが、この generated、test_compose_secret_env.py の generated、test_compose.py の _load_scaled に重複する。tests/volume/conftest.py に同じ責務の load_scaled が既にある。
手順: 1. 3 ファイルの生成物読み込みを既存の tests.volume.conftest.load_scaled へ統一する。
2. 重複定義を削除し、呼び出し名と不要になった import だけを整理する。YAML の入力と期待値は維持する。
3. 3 ファイルのテストを実行する。
取り消した理由: テストの期待する振る舞いが変わっています(tests/volume/test_compose.py, tests/volume/test_compose_dev_environment.py)。構造改善では期待出力を変えません。振る舞いの変更は別の変更に分けてください
I-006 — lib/devbase/volume/compose.py#_add_host_gateway
| 兆候 | 手法 | 重要度 | 等級 | 提案元 | 状態 | コミット |
|---|---|---|---|---|---|---|
| inconsistent_naming | flatten_conditional | minor | medium | claude | 採用 | 2 |
なぜ: 対になる _extra_host_names は辞書形を Mapping で判定するのに、_add_host_gateway は dict で判定している。Mapping だが dict でない値は名前の読み取りでは辞書として扱われ、追記では『解釈できない形』へ落ちるという判定の食い違いがあり、同じ形の分類が 2 か所に散らばっている
手順: 1. 現状固定として、extra_hosts が list / dict / None / 文字列のときの結果を tests/volume/test_compose_host_gateway.py で押さえていることを確かめる(足りなければ dict 形と未知の形のケースを足す)
2. YAML から読んだ値は dict なので、_extra_host_names 側の判定を isinstance(existing, dict) に揃える(振る舞いは yaml.safe_load の出力に対して不変)
3. pytest tests/volume/ を通す
レビューで確かめるテストの差分: tests/volume/test_compose_host_gateway.py(機械で期待値が変わったか決まらなかった)
I-007 — lib/devbase/snapshot/manager.py#SnapshotManager._replace_snap_meta
| 兆候 | 手法 | 重要度 | 等級 | 提案元 | 状態 | コミット |
|---|---|---|---|---|---|---|
| duplication | consolidate_duplication | minor | medium | claude | 採用 | 1 |
なぜ: _replace_snap_meta と _save_snap_meta が同じ yaml.dump(meta, f, default_flow_style=False, allow_unicode=True) を持ち、違いは仮の名前を経由するかだけ。meta.yml の書式の知識が 2 か所(_save_metadata を入れると 3 か所)にある
手順: 1. モジュールに _dump_yaml(path: Path, data: dict) -> None を抽出し、open と yaml.dump の組をそこへ寄せる
2. _save_snap_meta・_replace_snap_meta・_save_metadata の本体をそれを呼ぶ形に書き換える(_replace_snap_meta は _dump_yaml(tmp) のあと os.replace)
3. tests/snapshot/ を通す
指標の測定
- 状態: written / 言語とツールの対応: 既定(.ndf/code-metrics.json は無い) / 所要: 8.4 秒(使えた時間 90 秒 / 上限 90 秒)
- 指標のファイル: /var/folders/qz/qxt0p_y15xv5jg4x77zmtxj80000gp/T/ndf-worktrees/devbasex--devbase/rf472/work/.cross_refactoring/code-metrics-rf472.md
| 言語 | ツール | 版 | ランナー | ファイル | 秒 | 結果 |
|---|---|---|---|---|---|---|
| python | ruff-complexipy | ruff 0.16.9 / complexipy 8.0.1 | uvx | 209 | 0.9 | 測った |
| 重複: python | symilar | pylint 4.0.9 | uvx | 209 | 7.0 | 測った(3 箇所) |
時間の上限
| 値 | 中身 |
|---|---|
| 提案の枠の終わり(監視の上限 = 残り + 余裕) | 2026-10-13T00:00:10+09:00 |
| 改修計画の枠の終わり(同上) | 2026-10-13T00:03:10+09:00 |
| テストの追加の終わり = 実装の終わり − Σ(採っていて未検証の項目の実装の見積り) | 2026-10-13T00:00:17+09:00 |
| 実装の終わり = 最終ゲートの修正の打ち切り − バッファ − Σ(採っていて未検証の項目の検証の見積り) | 2026-10-13T00:04:24+09:00 |
| 直しの試行の打ち切り | 2026-10-13T00:13:19+09:00 |
| 最終ゲートの修正の打ち切り(想定最大時間の終わり) | 2026-10-13T00:21:30+09:00 |
| 打ち切りの後の取り消し(案 A)の締め切り = 最終ゲートの修正の打ち切り + 0.20·B(工程の 1 つとして起動したとき) | 2026-10-13T00:27:30+09:00 |
| 最終ゲートの修正の 1 回目に必ず渡す長さ(秒。予備時間の final_fix) | 330 |
| 指標の測定の上限(秒。提案の枠の中から割く) | 90 |
| 着手前のテスト 1 回の上限(秒) | 393 |
| 範囲テスト 1 回の上限(秒) | 482 |
| 手元の全体テスト 1 回の上限(秒) | 393 |
| CI の待ちの上限(秒) | 327 |
| 余裕(秒。手順の上限と CLI の上限に足す) | 90 |
入力: 予算 30 分 / 全体テストの所要 w 130.8(ndf-record) / 着手前の実測 x 160.6 / CI の壁時計 c 109.0 / 範囲テストの所要 s None(—) / 戦略 local-full
無音の打ち切りは手順の監視の上限と同じ値である。項目ごとの期限は持たない(実装を止めるのは実装の終わりだけ)。
見送った提案
| 対象 | 兆候 | 理由 | 根拠(MVV) | 補足 |
|---|---|---|---|---|
lib/devbase/volume/compose.py#_apply_dev_environment |
duplication | budget | Value 2 | 見積り 1.1 分が残りに入らない |
lib/devbase/commands/container.py#container_bao_address |
hidden_dependency | budget | C1 / Vision | 見積り 1.2 分が残りに入らない |
lib/devbase/commands/container.py#cmd_scale |
duplication | budget | Vision / Value 2 | 見積り 1.5 分が残りに入らない |
lib/devbase/snapshot/manager.py#SnapshotManager._apply_rotation_plan |
duplication | budget | Value 2 | 見積り 1.5 分が残りに入らない |
lib/devbase/snapshot/manager.py#SnapshotManager._create_full |
long_method | budget | Value 2 | 見積り 1.5 分が残りに入らない |
lib/devbase/snapshot/manager.py#SnapshotManager.auto_snapshot_target |
conditional_chain | budget | Value 2 | 見積り 1.4 分が残りに入らない |
lib/devbase/volume/compose.py#_drop_missing_env_files |
inconsistent_naming | budget | Value 3 | 見積り 0.9 分が残りに入らない |
lib/devbase/volume/compose.py#_build_scaled_services |
data_clump | budget | Value 3 | 見積り 1.3 分が残りに入らない |
lib/devbase/commands/container.py#_ensure_env_files |
long_method | budget | Value 3 | 見積り 1.5 分が残りに入らない |
lib/devbase/snapshot/manager.py#SnapshotManager._apply_rotation_plan |
divergent_change | budget | Value 2 | 見積り 1.5 分が残りに入らない |
lib/devbase/snapshot/manager.py#ensure_snapshot_image |
long_method | budget | Value 2 | 見積り 1.5 分が残りに入らない |
tests/cli/zsh_completion_harness.py#run_completions |
long_method | budget | Mission | 見積り 1.5 分が残りに入らない |
tests/containers/test_base_dockerfile_fonts.py#_run_blocks |
duplication | budget | Vision | 見積り 1.9 分が残りに入らない |
lib/devbase/commands/container.py#_should_skip_by_interval |
hidden_dependency | budget | Value 2 / Vision | 見積り 2.0 分が残りに入らない |
lib/devbase/commands/container.py#container_bao_address |
duplication | not_done | Value 3 / Vision | 実装の終わりまでにコミットが無く、残った時間に入らない |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
データ保全と端末のアクセス失効に関する major 3 件の修正を求めます。
差分の外を指す指摘
lib/devbase/snapshot/manager.py:1156[major] [major / データ保全] 控えを入れ替える前に、tar と zstd の両方の成功を確認してください(控えの bash に pipefail を設定するなど)。現在は tar の読み取りエラーでも zstd が成功すればこの入れ替えへ進み、不完全な full で既存の full と差分を消してしまいます。lib/devbase/snapshot/manager.py:599[major] [major / データ保全] 復元前バックアップは、既存の世代と衝突したら別の一意な名前で作り、既存世代を作り直さないようにしてください。今回の _create_full の変更により同じ秒の控えが上書きされ、復元対象自体がその名前なら展開前に復元元まで現在のボリュームで置き換わります。docs/user/openbao-server.md:366[major] [major / 認証・認可] 端末を手放す際の失効手順に、その端末へ発行済みの token を accessor で失効させる操作を加えてください。secret_id の破棄だけでは新規ログインしか止まらず、コンテナの ~/.vault-token は期限まで最大 1 時間読み書きできるため、backend test の認証失敗だけでは端末のアクセス停止を確認できません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | APPROVE
PR #472 (0eb4af9..72e0217) は振る舞いを保つ機械的なリファクタリングのみ。SNAP_META_FILE への集約(残存リテラルは定数定義 1 箇所のみ・grep で確認)、CONTAINER_HOST_NAME→HOST_GATEWAY_NAME の統合(値 'host.docker.internal' を保持・残存参照なし)、_dump_yaml 抽出(yaml.dump 引数不変)、_extra_host_names の Mapping→dict(入力は yaml.safe_load の dict なので等価)、テストヘルパ write_backup_outputs の抽出(テスト専用)。利用者経路の誤動作・秘密/認可/データ/不可逆操作への影響・設計文書の食い違いのいずれも確認できず、critical/major の基準に該当する指摘は無い。
- 作り直しの控えのコマンドに PIPESTATUS の検査を足す。tar が読み取りで 止まっても zstd が成功すると入れ替えへ進み、前の full と差分を消していた - 端末を手放す手順に、その端末へ発行済みの token を accessor で失効させる 操作を足す。secret_id の破棄だけでは ~/.vault-token が最大 1 時間使える Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 1 | commit cac6b75対応件数: critical=0 / major=2 / minor=0(合計 2 件) レビュー本文の指摘への返事:
|
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | claude | REQUEST_CHANGES
round 1 の修正(作り直しの tar の失敗の検査・発行済み token の失効)を確認した。残りは、失効の確認手順が名前の取り違えでも『確かめた』になる点と、確定仕様が作り直しの控えの失敗に tar の終了コードを含めることを書いていない点の 2 件。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | APPROVE
round 2 の修正コミット cac6b75 を検査した。checked_backup_command は PIPESTATUS[0]=tar / PIPESTATUS[1]=zstd を正しく読み、tar の致命的失敗 (>=2) または zstd 失敗で非ゼロ終了させて _create_full の rebuild と pre-restore の rebuild 経路の両方で入れ替え前に止める形で、設計 issue-458-design.md の決定 1(控え失敗時に前の控えを 1 バイトも変えない)と整合する。fake_tar.py の正規表現を ([^\s;]+) にした変更は、仮の名前の後ろに付く ; を取り込まないために必要で妥当。openbao-server.md の token 失効手順は bao_admin が dev モードの root token で動く(capability 不足なし)、secret_id の metadata (terminal) と role_name は AppRole ログインで token の meta に載る(Vault/OpenBao の文書化済み挙動)ため手順は到達可能で、検証メモ(backend test は新規ログインの停止しか確かめられない)も正確。新しい critical/major の指摘は無い。既存の pre-restore の同一秒の衝突(round 1 の codex が manager.py:599 で指摘し、修正担当が設計 F3 を根拠に人の判断へ回したもの)は本修正で新しい論点を生んでおらず、重複指摘にあたるため挙げない。
- openbao-server: 失効の例を member02 の端末 desktop02 に揃え、失効した accessor を出して 1 回目に 1 件も当たらない取り違えを見分けられるようにする - snapshot-series: 作り直しの控えの失敗を tar の 2 以上または zstd の 0 以外で判定する (checked_backup_command) と明記し、テストの節に tar の失敗で世代が変わらないことを足す Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔧 /ndf:fix サマリ | round 2 | commit d313de5対応件数: critical=0 / major=2 / minor=0(合計 2 件) |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | claude | APPROVE
round 2 の修正(d313de5)を確認した。失効の例は u=member02 の端末 desktop02 に揃い、revoke の行の出力で取り違えを見分けられる。確定仕様は作り直しの控えの失敗を checked_backup_command(tar が 2 以上・zstd が 0 以外)で定義し、実装(manager.py:1032)と実の tar のテスト(test_backup_real_tar.py:282)に一致する。新しい critical/major の指摘は無い。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | APPROVE
既存指摘を除き、新たな critical / major の修正指摘はありません(判断基準: C1・C2・C3・C4、Value 2・3。機密・認可・データ保全の経路と設計を照合)。
🔧 /ndf:fix サマリ | commit (なし)対応件数: critical=0 / major=0 / minor=0(合計 0 件) |
手動確認(マージ前)の記録2026-10-13、承認ゲート 2 で利用者が「担当の結果で印を付ける」と決めた。
|
リリース後テスト(スプリント m8b、2026-10-13)対象: main
#458 は作業用のボリューム(数 MB)と一時のルートで、実の #295 の実のサーバへの接続は、ホストの Netskope の TLS 傍受のため CA バンドルと Python 3.12 の環境を付けて打った(従来どおり。#295 の変更とは関係しない)。 |
振り返り(2026-10-13)対象: スプリント m8b — issue #458・#295・#453 / PR #472(確定仕様化 #474) 既にある世代へ full を作るときの「世代の作り直し」(#458)、OpenBao を利用者が自分で立てる前提の文書・ポリシーの雛形・loopback のサーバへコンテナから届く接続先の置き換え(#295)、補完の 何が起きたか
context window の大きさconductor 2 セッション(m8b の開始〜スプリント PR のマージ、仕上げ)。プランの worker(
目印の付いた行は無い。そのままにする。 用語集の変化
承認ゲートの差し戻し関門 1: 0 件、関門 2: 0 件。 MVV を見直すか版 1。覆し 0(閾値 3)・判定できない 0(閾値 5)・流出不具合 0(閾値 3)。利用者の答え: 改訂しない。#470 の件は P3 の定義ではなく、担当に 次に変えること
途中で起票した課題
取りこぼしの検索(起点 #458 #295 #453・PR #469〜#472、上流を含む)で、番号の無い範囲外の項目は見つからなかった。 |
スプリント m8b の課題を main へ取り込む。
利用者向けの変化
--fullを指定すると、その世代を full で作り直す(#458 を実装する(スプリント m8b) #469)host.docker.internalに置き換わります。これでコンテナの中のbaoからサーバへ届きます。(#295 を実装する(スプリント m8b) #470)docs/user/openbao-server.mdにあります。(#295 を実装する(スプリント m8b) #470)devbase-userと、v1・v2 のteam-read/team-write)と試用の構成(docs/user/openbao/compose.yml)を使えます。(#295 を実装する(スプリント m8b) #470)BAO_ADDRを置き換えない場合は、network_mode: hostの dev サービスを足す手順をdocs/user/env-backend.mdで案内します。(#295 を実装する(スプリント m8b) #470)移行の手順
課題と設計
baoが届く(#295) #468コミット
変更の統計
テスト(supervise.py の run のステップ)
集めた実装の PR
閉じる課題
Closes #295
Closes #453
Closes #458
手動確認
devbase snapshot create --name <作業用> --fullを 2 回(間にファイルを足して)打ち、snapshot restoreを作業用のボリュームへ当てて全ファイルが戻ることを見る。利用者のボリュームへは復元しない。ボリュームを丸ごと写さない(AGENTS.md の落とし穴)devbase upとコンテナの中のbao kv getまでを打ち、結果を残す。非対話のセッションで base を建てられないときは「判断が要る」で返すモード: standard / 通した工程: 実装 → Pull Request
🤖 Generated with Claude Code