Skip to content

refactor: doctor の Codex 権限面ウォッチを関数抽出 (PR-3/4, Refs #189) - #192

Merged
kosako merged 1 commit into
mainfrom
refactor-doctor-codex-section-189
Jul 10, 2026
Merged

refactor: doctor の Codex 権限面ウォッチを関数抽出 (PR-3/4, Refs #189)#192
kosako merged 1 commit into
mainfrom
refactor-doctor-codex-section-189

Conversation

@kosako

@kosako kosako commented Jul 10, 2026

Copy link
Copy Markdown
Owner

Refs #189 の PR-3/4。ultracode 監査 CONFIRMED 所見(structure)。

変更内容(挙動不変)

  1. AI policy 節の Codex ブロック(~120 行・5 段ネスト)を同一ファイル内で関数抽出: report_codex_rules_probes / report_codex_projects_trust。この節は doctor で最も追記頻度が高く(ai-policy モジュールの実体化: AI エージェント権限方針の正本化(Codex 側との対称性) #139/Codex 側の PreToolUse hooks 登録(personal-safe-gh-hook の Codex 活性化・#137 の Codex parity) #181/settings.json.tmpl に PreToolUse hooks 登録を追加(personal-safe-gh-hook の活性化) #137)、毎回 5 段ネストの中を編集していた。
    • lib-policy.sh へは移さない(validate-policy.sh の capability-registry check が doctor.sh の source テキストを grep するため、同一ファイル内に限定)
    • module ゲート(module_active_for_profile)と inactive 側の item は call site に残す
    • 使用変数 10 個は関数 local 化(抽出範囲外の参照ゼロは監査の検証フェーズで grep 確認済み)。if trusted_paths=$(awk ...) の rc を if が見る現行セマンティクスは維持
    • 両関数とも全 path が ok/item/warn で 0 復帰 = 単独文呼び出しで set -e 安全(|| true 不要)
  2. enforceAiSandbox の capability_value 二重 yq 起動を 1 回 capture に(npm_mode と同型)

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

  • bash -n / shellcheck -S warning: clean
  • 全テスト suite green(test-doctor.sh は codex fake shim の各モード= CODEX_FAKE_ALLOWS 有無 / MODE=fail / config.toml 有無 / work profile を実行時契約でカバー)
  • 旧新 doctor の実出力比較: main worktree と本 branch で personal / work を実行し、rc + stdout + stderr が(path 表示・npm probe 時刻の正規化後)byte-identical
  • probe セットの exact pin(test-doctor.sh の fake-shim ログ照合)は実行時契約のため source 位置の移動に非依存 — green のまま

レビュー観点

  • 抽出境界(module ゲートを call site に残し、rules if / config if を丸ごと関数へ)の正しさ
  • local 化した変数の漏れ・関数外参照の見落とし
  • SC2086 の意図的 word-splitting(probe 展開)が disable コメントごと関数内に移っているか

🤖 Generated with Claude Code

https://claude.ai/code/session_016qw8BkUDu5WdwhYfiFFX5n

…(Refs #189)

ultracode 監査の CONFIRMED 所見 (structure)。出力・順序・exit 0 契約は
不変 (旧新 doctor の実出力 diff で確認・PR 本文)。

- AI policy 節の Codex ブロック (~120 行・5 段ネスト) を
  report_codex_rules_probes / report_codex_projects_trust の 2 関数へ
  同一ファイル内抽出 (lib-policy.sh へは移さない: validate-policy.sh の
  capability-registry check が doctor.sh の source テキストを grep する
  ため)。module ゲートと inactive 側の item は call site に残す。使用
  変数は関数 local 化 (repo 全体 grep で抽出範囲外の参照ゼロを確認済み)
- enforceAiSandbox の capability_value を 1 回 capture して sandbox 節と
  injection-guard 節で再利用 (npm_mode と同型の single-read パターン。
  yq 起動が 1 回減るだけで判定値は同一)

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 出力より):

  • 抽出境界: rules / config の各ブロックを丸ごと抽出、module ゲートと inactive 出力は call site に残置
  • local 化: 対象変数は各関数で宣言され、関数外の残存参照なし
  • if trusted_paths=$(awk ...) の rc セマンティクス: 宣言と代入の分離で維持
  • SC2086 disable コメント: probe 展開行とともに関数内へ移動済み
  • set -e: 両関数の全経路が 0 復帰・単独文呼び出しで安全
  • enforce_ai_sandbox capture: 2 使用箇所の間に profile 設定を変える処理なし
  • validate-policy.sh の capability-registry grep(doctor.sh source テキスト対象): 必要な capability 名は維持

author 側検証: 全 16 suite green / 旧新 doctor 実出力(personal+work・rc+stdout+stderr)が正規化後 byte-identical。

@kosako
kosako merged commit 5c34980 into main Jul 10, 2026
2 checks passed
@kosako
kosako deleted the refactor-doctor-codex-section-189 branch July 10, 2026 23:29
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