Skip to content

refactor: runtime scripts の重複集約 + dead code 除去 (PR-1/4, Refs #189) - #190

Merged
kosako merged 2 commits into
mainfrom
refactor-runtime-dedup-189
Jul 10, 2026
Merged

refactor: runtime scripts の重複集約 + dead code 除去 (PR-1/4, Refs #189)#190
kosako merged 2 commits into
mainfrom
refactor-runtime-dedup-189

Conversation

@kosako

@kosako kosako commented Jul 10, 2026

Copy link
Copy Markdown
Owner

Refs #189(全体リファクタリング・挙動不変)の PR-1/4。ultracode 監査(5 レンズ Find → 敵対 Verify、REFUTED 0)の CONFIRMED 所見のうち runtime scripts 系 5 件を実施する。

変更内容(すべて挙動不変)

  1. file_mode() を lib-policy.sh へ集約(3 重複解消)
    • private-backup.sh の関数定義 / preflight.sh のインライン再実装 / test-private-backup.sh の mode_of() を単一定義に。preflight は 2>/dev/null || echo unknown を call site に残すので出力 byte 不変。
  2. doctor / preflight の byte-identical 複製 2 箇所を lib-policy.sh へ
  3. validate-policy.sh の sort | uniq -d 重複検出ループ ×5 を fail_duplicates に集約
    • メッセージ prefix は逐語維持("duplicate capability in $profile: " 等)。helper || status=1 形で status の単調更新も同値。
  4. manager_present() を install-packages.sh → lib-policy.sh へ移動し、report_catalog_drifthave_* 判定と一本化
    • source→manager 対応表の単一 source 化。probe(command -v)の実行コマンド・回数・順序は不変。移動と置換は同一 commit で原子的に実施(test-policy の drift harness は lib 単独 source のため)。
  5. dead 関数 catalog_source_preference() を削除
    • git grep を全リビジョンに対して実行し、導入 commit 以来呼び出しゼロを確認済み。repo 現在形でも参照は定義行のみ。packages.yamlsource_preference キーは「advisory only(人間向け)」のコメント付き意図的データなので残置。

挙動不変の検証(実施済み)

  • bash -n / shellcheck -S warning: green(validate-policy.sh の SC2034 1 件は main でも出る既存件 = ローカル shellcheck 0.11.0 と CI の版差。本 PR では増減なし)
  • 全テスト suite green(test-lib.sh 除く 16 本)
  • render byte-identical: personal / work 両 profile の throwaway apply 出力を変更前 baseline と diff -r → 一致(scripts/ は .chezmoiignore 対象なので構造的にも不変)
  • 旧新実出力比較: main worktree と本 branch で doctor.sh / preflight.sh × personal / work を実行し stdout+stderr を diff → 環境由来の差分(worktree path 表示・npm probe の実行時刻)以外は byte-identical。exit code も全一致(rc=0)

レビュー観点(お願いしたいこと)

  • 集約後の関数が呼び出し文脈(set -e / || status=1 / condition 文脈)で旧コードと等価か
  • fail_duplicates の prefix 逐語性(5 箇所)
  • manager_present 移動の原子性(lib 側定義 + install-packages 側削除 + drift 置換が同 commit)

🤖 Generated with Claude Code

https://claude.ai/code/session_016qw8BkUDu5WdwhYfiFFX5n

ultracode 監査 (5 レンズ + 敵対検証) の CONFIRMED 所見のうち runtime 系
5 件を実施。挙動不変が不変条件 (検証は PR 本文)。

- file_mode() を lib-policy.sh へ集約: private-backup.sh の定義 /
  preflight.sh のインライン再実装 / test-private-backup.sh の mode_of()
  の 3 重複を解消 (stderr 抑止と unknown fallback は call site に残し
  出力 byte 不変)
- doctor.sh / preflight.sh で byte-identical だった policy ゲートと
  standard project roots ループを run_policy_validation /
  report_standard_project_roots として lib-policy.sh へ (section 見出し
  と exit path は call site に残す)
- validate-policy.sh の sort|uniq -d 重複検出ループ x5 を
  fail_duplicates ヘルパへ (メッセージ prefix は逐語維持・status の
  立ち方も同値)
- manager_present() を install-packages.sh から lib-policy.sh へ移動し、
  report_catalog_drift の have_* 判定と一本化 (source→manager 対応表の
  単一 source 化。probe の実行コマンド・回数・順序は不変)
- dead 関数 catalog_source_preference() を削除 (全 git リビジョンで
  呼び出しゼロ。packages.yaml の source_preference キーは human-facing
  advisory として残置)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qw8BkUDu5WdwhYfiFFX5n
@kosako

kosako commented Jul 10, 2026

Copy link
Copy Markdown
Owner Author

Codex 相互レビュー結果(author=Claude → reviewer=Codex)

codex exec(gpt-5.6-sol, read-only, reasoning=medium)によるレビュー。

判定: ✅ merge 可(must 0 件) — should 0 / nit 0

重点観点の検証結果(Codex 出力より):

  • policy ゲート / project-roots 集約: 問題なし。出力文言・順序・stream、report-only 契約を維持
  • set -euo pipefail|| exit/status=1 文脈: 問題なし
  • fail_duplicates 5 箇所: prefix・全重複行の報告・status 更新とも旧実装と同値
  • manager_present 移動: installer と drift harness の参照先が正しく一本化
  • mode_offile_mode: production 実装と同じ OS 分岐をテストが使用
  • catalog_source_preference 削除: 参照漏れなし。YAML の advisory data は維持
  • ShellCheck: 既知の SC2034 のみ(スコープ外・増減なし)

補足: Codex 環境は read-only sandbox のため実テスト再実行は不可(bash -n と diff/参照解析は実施)。author 側で全テスト green・render byte-identical・旧新実出力 diff 一致を検証済み。

…r の shellcheck 更新で顕在化

main にも存在した既存警告 (backup-paths 行の field 分割 placeholder が
未使用) だが、runner 側 shellcheck の更新で validate job が新規 push を
一律 fail するようになったため本 PR で解消する。underscore prefix は
SC2034 の intentionally-unused 慣用形で、read の field 分割位置は不変
(挙動不変)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qw8BkUDu5WdwhYfiFFX5n
@kosako

kosako commented Jul 10, 2026

Copy link
Copy Markdown
Owner Author

Codex 増分レビュー(SC2034 修正 commit)

CI runner の shellcheck 更新で main 由来の既存 SC2034 が validate job を fail させるようになったため、category_category(intentionally-unused 慣用形)で解消する commit を追加した。

判定: merge 可 — 「変数名変更のみ。IFS='|' の 3 フィールド分割位置と $type / $path への割り当て・後続参照に影響なし」(Codex)

CI: validate / render とも green。

@kosako
kosako merged commit c9c59c4 into main Jul 10, 2026
2 checks passed
@kosako
kosako deleted the refactor-runtime-dedup-189 branch July 10, 2026 22:52
Sign up for free to 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