何が起きたか
version: 2(group_aliases: {default: nyle})の端末で devbase env backend test を打つと、見出しが読み替え前の名前だけになる。
グローバル(グループ default) devbase/team/nyle/global 22 変数
env backend status は グループ: default → nyle と両方を出すのに、SecretRef.label() を使う見出し(env backend test・env list)は default だけで、隣のパス(nyle)と食い違って見える。
現象は v3.6.0 でも再現する。SecretRef.label()(lib/devbase/env/secret_store.py:151)は self.group をそのまま埋め込み、storage_group も display_group も呼ばない。
仕様書が自己矛盾している
docs/specifications/secret-backend.md に、相反する 2 つの記述がある。
| 箇所 |
記述 |
「label() はグループがあれば (グループ <名前>) を後ろに付ける」 |
読み替え前を出す |
「文言には読み替えの前と後を default → nyle の形で出す(display_group)」 |
読み替え後も出す |
list の見出しの例は === グローバル(グループ with) (...) === で固定されているが、with は読み替えの無いグループなので、この例では前後が一致してしまい矛盾が表に出ない。コードを直す前に、どちらを採るかを仕様の側で決める必要がある。
修正レイヤー
現象レイヤー: env backend test の見出し(lib/devbase/commands/env_backend.py:472)と env list の見出し(lib/devbase/commands/env.py の cmd_env_list / _group_suffix)。
修正レイヤー: SecretRef.label()(lib/devbase/env/secret_store.py:151)が返すグループの表示。呼び出される側の契約であり、env list の _group_suffix は「文言は SecretRef.label() が持ち、ここでは写さずに差分だけを取り出す」と明記して label() に従っている。見出しを 1 か所ずつ直すと、この従属関係が崩れる。
label() は SecretRef にあり OpenBaoSettings を知らないため、読み替えの前後を出すには表示の側へ設定を渡す必要がある。label() のコメントは「チーム単位の文字列は変えない(誤りの伝達や桁揃えに埋め込まれている)」と断っているので、label() にグループの表示だけを差し替える引数を足すか、表示用のラッパを 1 つ置くかを設計で決める。
採る手: 移動(move_responsibility)。グループの表示の責務を、呼び出し側から label() の契約へ寄せる。
波及の範囲
label() は lib/ の中で 52 か所 / 10 ファイルから呼ばれる。大半はエラー文言とログである。
| ファイル |
件数 |
env/openbao.py |
11 |
commands/env_migrate.py |
10 |
commands/env_backend.py |
9 |
env/io_import.py |
6 |
env/cache.py |
5 |
env/secret_store.py |
4 |
commands/env.py |
3 |
commands/env_ops.py |
2 |
env/runtime.py / env/backend_config.py |
各 1 |
既定の振る舞いを変えると 52 か所すべてに及ぶ。 見出しだけを変えるなら、差し替えるのは commands/env_backend.py:472 と commands/env.py の _group_suffix の 2 か所で足りる。どちらにするかが設計の分かれ目である。
期待すること
見出しのグループ名も status と同じく読み替えの前後を出す(OpenBaoSettings.display_group を使う)。version: 1 とファイル backend の見出しは変えない。
受け入れ条件
group_aliases のあるグループで env backend test と env list の見出しが読み替えの前後を出す
docs/specifications/secret-backend.md の 2 つの記述の矛盾が解け、list の見出しの例に読み替えのある場合(default → nyle)が加わる
version: 1 とファイル backend の見出しが変わらない
既存のテストは、見出しを固定している 3 ファイル(tests/env/test_groups.py:126-128、tests/commands/test_env_user_axis.py:475,499-503、tests/env/test_runtime.py:802,816)がいずれも読み替えの無いグループ(with / kkg)を使っているため、読み替え後を出すようにしても出力は変わらない。読み替えのあるグループのテストは新しく書く。
見つけた場面
PLAN57(#187)の単位 2 で env backend test の出力を記録したとき。
Refs #182 / #184
何が起きたか
version: 2(group_aliases: {default: nyle})の端末でdevbase env backend testを打つと、見出しが読み替え前の名前だけになる。env backend statusはグループ: default → nyleと両方を出すのに、SecretRef.label()を使う見出し(env backend test・env list)はdefaultだけで、隣のパス(nyle)と食い違って見える。現象は v3.6.0 でも再現する。
SecretRef.label()(lib/devbase/env/secret_store.py:151)はself.groupをそのまま埋め込み、storage_groupもdisplay_groupも呼ばない。仕様書が自己矛盾している
docs/specifications/secret-backend.mdに、相反する 2 つの記述がある。label()はグループがあれば(グループ <名前>)を後ろに付ける」default → nyleの形で出す(display_group)」listの見出しの例は=== グローバル(グループ with) (...) ===で固定されているが、withは読み替えの無いグループなので、この例では前後が一致してしまい矛盾が表に出ない。コードを直す前に、どちらを採るかを仕様の側で決める必要がある。修正レイヤー
現象レイヤー:
env backend testの見出し(lib/devbase/commands/env_backend.py:472)とenv listの見出し(lib/devbase/commands/env.pyのcmd_env_list/_group_suffix)。修正レイヤー:
SecretRef.label()(lib/devbase/env/secret_store.py:151)が返すグループの表示。呼び出される側の契約であり、env listの_group_suffixは「文言はSecretRef.label()が持ち、ここでは写さずに差分だけを取り出す」と明記して label() に従っている。見出しを 1 か所ずつ直すと、この従属関係が崩れる。label()はSecretRefにありOpenBaoSettingsを知らないため、読み替えの前後を出すには表示の側へ設定を渡す必要がある。label()のコメントは「チーム単位の文字列は変えない(誤りの伝達や桁揃えに埋め込まれている)」と断っているので、label()にグループの表示だけを差し替える引数を足すか、表示用のラッパを 1 つ置くかを設計で決める。採る手: 移動(
move_responsibility)。グループの表示の責務を、呼び出し側からlabel()の契約へ寄せる。波及の範囲
label()はlib/の中で 52 か所 / 10 ファイルから呼ばれる。大半はエラー文言とログである。env/openbao.pycommands/env_migrate.pycommands/env_backend.pyenv/io_import.pyenv/cache.pyenv/secret_store.pycommands/env.pycommands/env_ops.pyenv/runtime.py/env/backend_config.py既定の振る舞いを変えると 52 か所すべてに及ぶ。 見出しだけを変えるなら、差し替えるのは
commands/env_backend.py:472とcommands/env.pyの_group_suffixの 2 か所で足りる。どちらにするかが設計の分かれ目である。期待すること
見出しのグループ名も
statusと同じく読み替えの前後を出す(OpenBaoSettings.display_groupを使う)。version: 1とファイル backend の見出しは変えない。受け入れ条件
group_aliasesのあるグループでenv backend testとenv listの見出しが読み替えの前後を出すdocs/specifications/secret-backend.mdの 2 つの記述の矛盾が解け、listの見出しの例に読み替えのある場合(default → nyle)が加わるversion: 1とファイル backend の見出しが変わらない既存のテストは、見出しを固定している 3 ファイル(
tests/env/test_groups.py:126-128、tests/commands/test_env_user_axis.py:475,499-503、tests/env/test_runtime.py:802,816)がいずれも読み替えの無いグループ(with/kkg)を使っているため、読み替え後を出すようにしても出力は変わらない。読み替えのあるグループのテストは新しく書く。見つけた場面
PLAN57(#187)の単位 2 で
env backend testの出力を記録したとき。Refs #182 / #184