設計(PLAN64): 機密の参照の見出しにグループの読み替えの前後を出す (#188) - #223
Conversation
要求と受け入れ条件 (issues/PLAN64_secret-label-group.md) と設計 (issues/PLAN64_secret-label-group-design.md) の 2 文書を足す。lib/ は変えない。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | kiro | APPROVE
設計文書のみの PR。lib/ の実コードに対して主要な主張(SecretRef.label()=secret_store.py:151、SecretStore.storage_group/ref_group/same_storage_group、OpenBaoSettings.display_group/storage_group/path_of、_group_of が ref.label() を使う点、cmd_env_backend_test=env_backend.py:472 の :<28、migrate 完了行 594 の :<24、_MigrationPlan._heading、cmd_env_list/_group_suffix、env_migrate.py:85-94/env_ops.py:56-63 が group= 無しで参照を組む点、.label() 52 件/10 ファイル)を実測で照合し、いずれも一致。文言分割(見出し=display_label、エラー/ログ=引数なし label())の切り分けと桁幅据え置きの根拠も整合している。修正を要するアクションは見つからなかった。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | agy | REQUEST_CHANGES
要求・設計ドキュメントにおける既存仕様との整合性、テスト対象クラス名、および影響範囲の記述について 3 点の修正提案を行います。
- 受け入れ条件 7 の例示を、実際に SecretRef.label() の既定を使う文言 (OpenBaoBackend._check_group / runtime の DEVBASE_ACCOUNT_GROUP 警告) へ差し替えた。 --group の不一致の文言 (_project_group_mismatch) は display_group を直接呼んでおり、 今も読み替えの前後を出す。対象範囲の「含まない」と決定 2 に明記した - 設計のテスト設計 7 の参照先を OpenBaoSettings.path_of から OpenBaoBackend._check_group へ直した - 影響の「公開インタフェース」に env backend migrate を足した Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🤖 cross-review fix | round 1agy の REQUEST_CHANGES 3 件をすべて受け入れ、commit 対応の内訳
重要度別: major 1 件 / minor 2 件 各指摘への対応
検証設計文書のみの Pull Request で 未解決のレビュースレッドは 0 件です。 🤖 Generated with Claude Code |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | codex | REQUEST_CHANGES
修正指摘 2 件(minor 2 件)。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | kiro | APPROVE
設計文書のみの PR。lib/ は未変更で、記載どおり。参照する行番号・メソッドの挙動・件数・桁幅(:<28 / :<24)・エラー文言の位置(_check_group L152/163/167、runtime.py L220)・_project_group_mismatch が display_group を使う点・env encrypt/decrypt/rekey の参照が group=None になる点(_select_refs / _encrypted_refs)・決定 4 の migrate 2 一覧(L594 / _MigrationPlan._heading L705)を実コードで照合し、いずれも一致。docs/specifications/secret-backend.md の自己矛盾(L285 vs L304-305)と with 例(L339)も実在を確認。設計の内外の整合が取れており、修正アクションを要する箇所は見つからなかった。
- 前提 2 を直した。config.openbao が None かどうかで backend の種類を判定しては ならない (backend: age でも openbao: 節が残れば None にならない)。表示の分岐は SecretStore.storage_group に任せる旨へ揃え、決定 3 の根拠にも足した - 受け入れ条件 5・6 の検証を、既存テストの通過から新規の出力テストへ変えた。 既存の assert は '=== グローバル' の前方一致で、見出しにグループが付いても通る ため「変わらないこと」を確かめられない Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🤖 cross-review fix | round 2codex の REQUEST_CHANGES 2 件をすべて受け入れ、commit 対応の内訳
重要度別: minor 2 件 各指摘への対応
検証設計文書だけの Pull Request で 未解決のレビュースレッドは 0 件です。 🤖 Generated with Claude Code |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | REQUEST_CHANGES
確定仕様の書き換え指示について、修正提案1件です。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | agy | REQUEST_CHANGES
PLAN64の要求仕様および設計方針はコードベースの実装・制約とよく整合していますが、ドキュメント末尾のアーティファクトタグの残存、および env backend migrate 完了表示に対する受け入れ条件・テスト設計の網羅性に修正が必要です。
- 設計文書の末尾に残っていた不要なタグ </content> を消した - 受け入れ条件 3 とテスト設計を、env backend migrate の 2 つの一覧の両方を 確かめる形へ直した。計画の一覧 (_MigrationPlan._heading) と --to age の 完了表示は別の関数が出すため、--dry-run の計画一覧だけでは決定 4 を 確かめられない Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
「エラー文言とログを除く」と書くと、display_group を直接呼ぶ _project_group_mismatch の -p の拒否の文言 (default → nyle を出す既存の仕様と テスト) と矛盾する。除くものを「引数なしの SecretRef.label() で参照を表示する エラー文言・ログ」に限る形へ直し、機能一覧 F2 と曖昧語の具体化にも同じ分かれ目を 書いた。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🤖 cross-review fix | round 3codex の REQUEST_CHANGES 1 件と agy の REQUEST_CHANGES 2 件をすべて受け入れ、commit 対応の内訳
重要度別: minor 3 件 各指摘への対応
検証設計文書だけの Pull Request で 未解決のレビュースレッドは 0 件です(round 1 の 3 件・round 2 の 2 件・round 3 の 3 件すべて Resolve 済み)。 🤖 Generated with Claude Code |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | kiro | APPROVE
設計・要求の 2 文書を対象に、引用されているシンボル・行番号・振る舞い(SecretRef.label():151、_group_of が label() を使う点、display_group→storage_group の失敗経路、env_backend.py:472/594/703-705 の見出し、_select_refs/_encrypted_refs が group= を渡さない点、test_env_user_axis.py の前方一致 assert が「変わらないこと」を検査できない点)を worktree の実コードで照合し、いずれも一致を確認した。label() 件数の 52/10 も、.pyc を除いたソース基準では整合。実装との不整合・古い参照・文書間の矛盾は見つからず、修正アクションはない。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | agy | REQUEST_CHANGES
要求文書と設計文書のテスト設計における受け入れ条件 7 の検証対象に不整合があります。インラインコメントの修正提案をご確認ください。
受け入れ条件 7 は 2 つの文言 (OpenBaoBackend._check_group の例外と、 runtime.py の DEVBASE_ACCOUNT_GROUP の警告) を挙げているが、設計のテスト設計は 例外だけを書いていた。警告文でも → が出ないことを見る旨を足した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🤖 cross-review fix | round 4agy の REQUEST_CHANGES 1 件を受け入れ、commit 対応の内訳
重要度別: minor 1 件 各指摘への対応
テスト設計文書だけの Pull Request で スレッド未解決だった 1 件に reply を付けて Resolve しました。round 1〜3 の 8 件は既に対応済みで、未解決のスレッドは残っていません。 🤖 Generated with Claude Code |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | codex | APPROVE
設計文書と関連実装を照合し、修正が必要な指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | kiro | APPROVE
設計文書 2 件のみの変更。要求と設計の決定が整合し、コード参照(label() 52 件/10 ファイル、storage_group/display_group の挙動、_MigrationPlan._heading の server_store 経由、_group_suffix の従属関係、桁幅 :<24/:<28/:<40、_group_of が label() を使う点)を worktree のコードで実測確認した。いずれも一致し、誤りや実装との齟齬は見つからなかった。修正アクションはない。
Summary
#188(
env backend testとenv listの見出しが、グループ名を読み替え前だけで出す)の設計。設計文書だけを載せる。
lib/は変えない。issues/PLAN64_secret-label-group.mdissues/PLAN64_secret-label-group-design.mdbase は
release/v3.7.0(release Pull Request #212)。モードはstandard。決めたこと
issues/PLAN64_secret-label-group-design.mdlabel()の契約へ寄せる(issue のmove_responsibilityを採る)label()の既定の返り値は変えないSecretStore.display_labelの 1 つに置くenv backend migrateの 2 つの一覧も直すenv encrypt/env decrypt/env rekeyの一覧は直さないTest plan
設計の段階で確かめたこと。
label()の呼び出しを実測した。grep -rn "\.label()" lib/→ 52 件 / 10 ファイル(issue 本文と一致)。内訳は、読み替えのあるグループを持ちうる見出し 5 件(issue 本文の「2 か所で足りる」は実測と合わない)/
参照が常にグループを持たない見出し 3 件 / エラー文言・警告・ログ・巻き戻しの説明 43 件 / docstring の言及 1 件
config.openbaoがNoneになる条件を_openbao_from_dict(lib/devbase/env/backend_config.py)で確かめた。backend: ageでもopenbao:節が残っていればNoneにならないため、config.openbaoのNoneでbackend の種類を判定してはならない。表示の分岐は
SecretStore.storage_groupに任せるOpenBaoSettings.display_groupがstorage_group経由でBackendConfigErrorを送出しうることを確かめた(
_validate_group_name/_check_reserved)。label()を通すエラー文言の経路では呼ばない設計にした_project_group_mismatch(lib/devbase/commands/env.py)がdisplay_groupを直接呼び、-pの拒否のエラーに今も
default → nyleを出すことを確かめた。この文言は対象外(変えない)layout: flatでグループ付きの参照を拒む例外を出すのはOpenBaoBackend._check_group(
OpenBaoSettings.path_ofではない)ことを確かめたプロジェクト 'carmo-ai'(グループ default)は 31 文字で、env backend testの:<28を読み替えの無い状態でも既に超えている。桁幅は変えないenv encrypt/env decrypt/env rekeyの一覧が組む参照はgroup=を渡さずref.groupが常にNoneであることを確かめた(
env_migrate.py:85-94、env_ops.py:56-63)。対象から外した(
tests/conftest.pyのconfigure_openbao(group_aliases=...)、tests/commands/test_env_user_axis.pyのgrouped)env listの見出しを固定している既存の assert は
'=== グローバル'の前方一致(tests/commands/test_env_user_axis.py:229-253)で、見出しに
(グループ default → nyle)が付いても通る。受け入れ条件 5・6 は新規の出力テストへ変えた検証していないこと
この Pull Request では CI が 1 件も動かない(
.github/workflows/ci.ymlの対象がmainだけ。#216)。設計文書だけの変更のため、実行する検査も無い。
ドキュメント再構成の前後
「後」はレビューの 5 ラウンドを終えた時点の値である(再構成の直後は要求 222 行 / 設計 318 行で、
差はレビューの指摘 9 件の反映による)。
行数の増減の内訳: 設計は再構成で +17 行(「変えないもの」の列挙を表へ、決定 6 の 3 項目を表へ、
テスト設計の道具の列挙を表へ置き換えた)、レビューで +5 行。要求は再構成で差し引き 0 行
(
## 依頼(原文)を末尾へ移し、長い文を分けた分を同じ数だけ詰めた)、レビューで +14 行。目安を超えた項目:
前提 / 操作 / 結果 / 検証を句点なしで並べる形で、
requirements-designの受け入れ条件の雛形と PLAN61・PLAN62 がこの形を採っている。1 項目全体が 1 文として数えられる。採らなかった直し方: 項目ごとに句点で区切る(同じまとまりの既存文書と形が変わる)
採らなかった直し方: パスを別の行へ出す(どの行の話かが読めなくなる)
(同じ動詞を 2 度書くことになる)
範囲外として起票したもの
env_migrate.Target.labelに消費側が無い(デッドコード)参照: #188 / #212 / #216