Uh oh!
There was an error while loading. Please reload this page.
feat!: safe-refactoring を refactoring へ改名し、表現の判断材料を統合(issue #38 / v8.0.0) - #111
Conversation
分岐・反復・定数を検査可能なデータとして表現し、判断の理由を記録可能に する判断基準を Skill として追加する(issue #38)。 規範本文(原則層・判定層)は言語非依存に保ち、言語固有の手段は references/language-notes.md へ分離した。対象言語は Python / TypeScript / PHP だが、判定表だけで他言語にも適用できる。 禁止規則にしないことを設計の中心に置いた。単純なガード節、静的に網羅性を 検査できる分岐、逐次依存のループ、閉じた状態集合の列挙型は MAY として 「そのままでよい」と明示している。 - Skill 30 個 → 31 個(Claude 27 / Codex 25 / Kiro 26) - 調査結果と実装プランを issues/issue-38-coding-skill-plan.md に記録 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | REQUEST_CHANGES
一括処理の失敗方針を安全性・原子性に応じて選べる規範へ修正し、言語機能に関する事実主張の適用範囲を限定してください。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 1 | gemini | REQUEST_CHANGES
[minor / 正確性]
Codex と Kiro の各 README 内にある利用例のパス表記 (7.0.0 の部分) についても、今回のリリースに合わせて 7.1.0 に更新しておくことを推奨します(PR 差分外ですがバージョンの一貫性のため)。
Uh oh!
There was an error while loading. Please reload this page.
cross-review round 1 の指摘対応。 - SKILL.md: 「最初の失敗で打ち切らない」MUST の適用範囲を「項目どうしが 独立に処理できる場合」へ限定。原子性・整合性・安全性を守るための fail-fast / rollback を MAY へ追加し、打ち切り位置・理由・巻き戻し範囲の 記録を条件として明示した - language-notes.md: 「PHP に一括演算の基盤はない」を「PHP 標準に〜」へ 範囲限定し、拡張を採用する場合は計測して選ぶ旨を追記 - plugins/ndf-codex/.codex-plugin/plugin.json: 生成対象外の手動管理ファイルで 7.0.0 / 24 skills のまま取り残されていたため 7.1.0 / 25 skills へ更新 - Codex / Kiro README の利用例パス・出力例の版数表記を 7.1.0 へ揃えた - issue-38-coding-skill-plan.md 第 3 部へ上記の事実訂正を追記 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 14, 2026
🔧 /ndf:fix サマリ (round 1)対応件数: critical=0 / major=3 / minor=1 (合計 4 件) 詳細
補足: なぜ #3 が CI をすり抜けたか
設計制約の遵守
品質チェック(全て成功)
@takemi-ohama 再レビューをお願いします。 |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | codex | REQUEST_CHANGES
言語別ノートの事実記述を 1 件修正してください。
Uh oh!
There was an error while loading. Please reload this page.
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 2 | gemini | REQUEST_CHANGES
PR 横断の設計レベルの修正提案です。
[major / 更新漏れ].claude-plugin/marketplace.jsonのdescriptionがv7.0.0,26 skillsのままです。v7.1.0,27 skillsへ更新してください。
Uh oh!
There was an error while loading. Please reload this page.
cross-review round 2 の指摘対応。 - language-notes.md: `.apply()` を「行ごとの呼び出し」と断定していたが、 DataFrame.apply は既定 axis=0 で列単位、axis=1 で行単位であり、ufunc を渡す 経路もある。「Python の関数を要素・行・列のいずれかの単位で呼ぶ経路である 限りは一括演算ではない」へ書き換えた - issue-38-chatgpt-response.md: 脚注 [1] のリンクテキスト "Cat's Cradle" は ChatGPT 側の誤り(正: Eric S. Raymond, The Art of Unix Programming。URL は 正しい)。生ログの記録価値を保つため本文は改変せず、冒頭の注記ブロックと 該当箇所の短い注記で誤りを明示した - .claude-plugin/marketplace.json: ndf の description が v7.0.0 / 26 skills の まま取り残されていたため v7.1.0 / 27 skills へ更新(manifests/claude-skills.txt の実数と一致)。このファイルも生成物ではなく手動更新対象 - issue-38-coding-skill-plan.md: 第 3 部に 3.5 として上記を記録 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 14, 2026
🔧 /ndf:fix サマリ (round 2)対応件数: critical=0 / major=1 / minor=2 (合計 3 件) 詳細
#1 の判断根拠
判定軸を「どの単位で呼ぶか」ではなく「Python の関数を呼ぶ経路かどうか」に置き換えることで、 #2 の判断根拠
#3 が CI をすり抜けた理由(round 1 の |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | gemini | APPROVE
前回の指摘事項(pandas .apply() の挙動の正確な記述、ChatGPT生ログ誤出典への注記、marketplace の版数更新)がすべて適切に修正されていることを確認しました。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 3 | codex | REQUEST_CHANGES
仕様適合と調査事実の一般化に修正が必要です。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- SKILL.md「データ化の前提」の「外部化した時点で静的解析の視界から外れる」を 「型情報を伴わずに実行時ロードすると〜」へ限定。選択肢を (1) スキーマから型・定数を生成しビルド時に取り込む (2) 生成できないならスキーマ検証で埋める (3) どちらもできないなら外部化しない の順に提示(言語非依存の語のみ使用) - language-notes.md の PHPStan 実測表に「この表が測っているのは 型情報を伴わずに実行時ロードした場合」であることを明記 - language-notes.md に JavaScript 列と `## JavaScript` 節を追加。 手段は TypeScript と同じだが型注釈がなく網羅性の静的検査が効かない点と、 その帰結(即時失敗 / スキーマ検証の必要性)を悪い例・良い例 1 組で記述 - プラン側の言語表記(1.6 / AC-4 / Task 4 / 2.8 / 3.3)を 4 言語へ統一し、 第 3 部に「3.6 cross-review round 3 での事実訂正」を追記 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 14, 2026
🔧 /ndf:fix サマリ (round 3)対応件数: critical=0 / major=2 / minor=0 (合計 2 件) 詳細
#1 の判断根拠PHPStan の実測が支えているのは表の 3 行目、つまり SKILL.md の記述を「型情報を伴わずに実行時ロードすると、その対応表は静的解析の視界から外れる」へ限定したうえで、判定基準を次の順序に改めています。
生成は「スキーマ検証で埋める」より一段良い選択肢なので先頭に置きました。表現は言語非依存の語(コード生成 / 型生成 / ビルド時)に留め、ツール名は書いていません。
#2 の判断根拠と、揃えた方向スコープを縮めるのではなく、JavaScript を追加しました。 この Skill の対象読者には型注釈なしの JS だけで書くコードが多く、目的側の 4 言語が本来の意図だからです。
プラン側は 1.6 見出し・1.6 対応表・AC-4・2.8・Task 4・3.3 の言語表記を 4 言語へ統一しています(AC-9(c) は元から「対象 4 言語」表記のため変更なし)。 設計制約の遵守
品質チェック(全て成功)
@takemi-ohama 再レビューをお願いします。 |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | codex | APPROVE
修正必須の指摘はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 4 | gemini | REQUEST_CHANGES
型定義だけをビルド時に生成し、データ実体は実行時に動的ロードする場合のスキーマ検証の要否について、AIエージェントが誤解しないよう記述を明確化する提案を行いました。詳細はインラインコメントを参照してください。
Uh oh!
There was an error while loading. Please reload this page.
「データ化の前提」の 3 段の選択肢が「型を生成できるか」を軸にしていたため、 型生成とスキーマ検証が排他に読めた。型定義だけをビルド時に生成しデータ実体を 実行時にロードする構成では、型生成ができていてもロード境界のスキーマ検証は 必須であり、現状の書き方は無検証キャストへの誘導になりうる。 - SKILL.md: 分岐の軸を「データを実行時にロードするか」へ組み替え、型生成が 実行時のスキーマ検証の代わりにならないことを明示(言語非依存の語のみ) - language-notes.md: PHP 節の同じ誤りを訂正し、Python / TypeScript / JavaScript / PHP に「型注釈・型生成は実体を検査しない」具体例を各 1〜2 行追加 - issue-38-coding-skill-plan.md: 3.7 として round 4 の訂正を記録 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 14, 2026
🔧 /ndf:fix サマリ (round 4)対応件数: critical=0 / major=1 / minor=0 (合計 1 件) 前ラウンドの結果: codex = APPROVE(指摘 0 件) / gemini = REQUEST_CHANGES(major 1) 詳細
指摘: 「データ化の前提」の 3 段の選択肢が「型・定数を生成できるか」を軸にしていたため、型生成とスキーマ検証が排他の分岐に読めた。「型定義だけをビルド時に生成し、データ実体は実行時にロードする」構成では、型生成ができていてもロード境界のスキーマ検証は必須であり、現状の書き方は無検証キャストへの誘導になりうる。 再判定: 妥当(major 維持)。実体を読んだところ、round 3 で導入した「生成できないなら〜」という条件付けが確かに排他に読め、AI エージェントの誤読を誘発しうる。 対応: 分岐の軸を「データを実行時にロードするか」へ組み替えた。
検証
|
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | gemini | APPROVE
Skill の規範が言語非依存に保たれており、MAY 節による機械的置換の防止や事実主張(各言語の静的解析・一括処理の仕様、型生成とスキーマ検証の差異)も正確であることを確認しました。追加の修正提案はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 5 | codex | APPROVE
修正が必要な事項はありません。
冒頭で「実行前に検査でき、実行後に説明できる状態を保つ」という到達点を 表で示し、以降の規範と判定表がそこへどう寄与するかを追える構成にした。 検討過程に由来する記述を除去した: - 別の言い回しを引き合いに出して否定する形の説明 - 外部の理論名への言及 - measurement の経緯を指す表現 - 説明文中のフィールド名(業務用語へ置き換え、コードブロックにのみ残す) 「禁止規則ではない」という否定形の節は、「改善にならない置き換え」として 着手前の判定基準に組み替えた。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 6 | codex | REQUEST_CHANGES
冒頭の適用条件と MAY の例外関係を明確化する必要があります。
Uh oh!
There was an error while loading. Please reload this page.
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 6 | gemini | REQUEST_CHANGES
README.md の分類と、実際の SKILL.md 内で定義された役割(工程ではなく判断基準)の間に生じているカテゴリの不整合について、1点のみ修正を提案します。
Uh oh!
There was an error while loading. Please reload this page.
- SKILL.md 冒頭の確認手順が全ての分岐・反復・定数を対象に読め、MAY 節と矛盾していた。 対象を変化する業務判断に限定し、MAY に該当するものはそのままでよいことを冒頭で示した - README.md の Skill 分類で analyzable-coding を開発方法論へ入れていたが、 development-workflow の記述どおり判断基準であるため原則・ガイドラインへ移した (開発方法論 6→5、原則・ガイドライン 9→10。合計 31 個は変わらない) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 14, 2026
round 6 レビュー対応サマリ (commit 4f75ee7)codex 1 件 / gemini 1 件、いずれも major と再判定して自動修正しました。deferred / rejected はありません。
1. 冒頭の確認手順が MAY 節と矛盾していた冒頭の確認手順がすべての分岐・反復・定数を対象に読め、MAY 節のガード節・逐次依存ループ・列挙型まで書き換え対象になっていました。適用対象を 変化する業務判断 に限定し、MAY に該当するものは「そのままでよい」と冒頭で明示しています。到達点の表(実行前/実行後)は残しました。 2. README の Skill 分類が development-workflow の記述と食い違っていた
検証
配布物 |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 7 | gemini | APPROVE
言語非依存の原則層と各言語固有の手段の分離、網羅性検査や安全性を損なわないための MAY 節の明示を含め、PR の目的と変更内容に矛盾や潜在的な問題は見当たりません。修正提案はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 7 | codex | APPROVE
修正が必要な指摘はありません。
分岐・反復・定数をどう持つかの判断材料を、独立 Skill ではなく構造改善の 観点として統合する(issue #38)。 独立 Skill では発動条件を「コードを書くとき」以外に書けず、常に該当する トリガは発動判定として働かない。既存のコードスメル 14 件のうち 4 件とも 重複しており、棚卸台帳の「重複は統合」の基準に該当する。統合により発動点が 「リファクタリングを始めるとき」に定まる。 - safe-refactoring → refactoring(公開コマンドの非互換変更) - コードスメル 3 件追加(業務ルールの埋め込み / 一件ずつの反復 / 検証のない外部化)と、対応する手法 2 件 - references/data-representation.md に判定表・外部化の条件・判断の記録 - references/language-notes.md を移設 - Skill 31 → 30 個(Claude 26 / Codex 24 / Kiro 25) - 移行対応表を ndf-policies へ追加(v9.0.0 で削除)。v7.0.0 の対応表は 予告どおり削除 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 8 | codex | REQUEST_CHANGES
公開リリースメタデータの版と Skill 数を、v8.0.0 の配布内容に統一してください。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 8 | gemini | REQUEST_CHANGES
docs/specifications/ndf-skill-inventory.md の Skill 数の推移について、コミットメッセージや計画文書(31個→30個)と矛盾する記載があるため修正をお願いします。
Uh oh!
There was an error while loading. Please reload this page.
cross-review round 8 の指摘 3 件と、同種の取り残しの網羅的な洗い出しに対応する。 - `.claude-plugin/marketplace.json` の `ndf` description を v8.0.0 / 26 skills へ - `plugins/ndf-codex/.codex-plugin/plugin.json` の version と description を 8.0.0 / 24 skills へ - `plugins/ndf-codex/README.md` のキャッシュパス例 2 箇所と `codex plugin list` の 出力例、`plugins/ndf-kiro/README.md` のエージェント description 例を 8.0.0 へ - `ndf-policies` の「v7.1.0 の ndf-policies を参照」を v7.0.0 へ訂正。v7.1.0 は 配布していない中間の版で、移行時の参照先として成立しない - 3 ランタイムの README にある「移行先の対応表は ndf-policies にある」は v8.0.0 での 削除により成立しないため、root README の該当節へ誘導する - 棚卸台帳の「Skill 数は 30 個で変わらない」を、v7.1.0 の 31 個から 30 個へ戻る旨へ 訂正し、予算比較表に v7.1.0(未配布)列を追加 - `scripts/validate-runtime-plugins.sh` に版数・Skill 数の突き合わせ検査を追加。 Claude 版 plugin.json を基準に、Codex 版 version・両 description の版数・ description の Skill 数と manifest の実数を検査する 過去の事実を述べる記述(移行対応表、v6.1.0 / v7.0.0 の節、日付つき勉強会資料)は据え置く。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 15, 2026
cross-review round 8 の対応(commit 45d411f)未解決の 3 件はすべて major と再判定し、自動修正しました。deferred / rejected はありません。
網羅的な洗い出しの結果指摘 1 と 2 は round 1 / round 2 で同じ場所を指摘された取り残しの再発です。原因は次の 2 つでした。
そこでリポジトリ全体を 追加で直した箇所(指摘外)
意図的に据え置いた箇所過去の事実を述べている記述はそのままにしています。
再発防止
plugin family は既存の検出結果( 検証push 直前の |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 9 | codex | REQUEST_CHANGES
調査記録の事実整合性に要修正が 1 件あります。
Uh oh!
There was an error while loading. Please reload this page.
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 9 | gemini | REQUEST_CHANGES
language-notes.mdの PHP 8.0 以下の代替手段の節において、「閉じた状態集合をデータ化する」という表現がありますが、data-representation.mdの分類と矛盾する懸念があります(理由と提案はインラインに記載しました)。- 他の追加されたコードスメルの観点や、言語ごとの具体的な置き換え手段については事実誤認もなく、機械的置換を防ぐ条件も明確に書かれています。
Uh oh!
There was an error while loading. Please reload this page.
参照ファイルは読んだときだけコンテキストへ載るため、4 言語を 1 ファイル にまとめていると、PHP の作業でも Python / JavaScript / TypeScript の内容 まで読み込まれていた。 - references/language-notes.md(316 行)を lang-python.md / lang-javascript.md / lang-typescript.md / lang-php.md へ分割 - SKILL.md に「対象の言語のファイルだけを読む」と明記 - 各ファイルを自己完結させ、冒頭に「判定 → その言語の手段」の対応表を置く (言語をまたぐ対応表は 4 言語分を読ませることになるため持たない) あわせて PR #111 round 9 の指摘 2 件を解消する。 - PHP 8.0 以下の節が「閉じた状態集合をデータ化する利点が小さい」と書いて おり、閉じた状態集合はコードに残すという分類と矛盾していた。変わるのは 外部化した業務ルールの守り方であることを明示する - プラン文書の「14 件のうち 4 件」が括弧内の 5 項目と食い違っていた Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 15, 2026
Round 9 レビュー対応サマリ指摘 2 件(major 1 / minor 1)すべてに対応しました。commit
同じコミットに含めた追加変更
|
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 10 | codex | REQUEST_CHANGES
言語非依存の反復分類と、配布メタデータ検証の抜けを修正してください。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
AI エージェントによるコーディングでは、動くコードは出ても整理が済んで いない。構造改善を任意にしておくと、その状態のまま次の工程へ進む。 - development-workflow のモード表で `refactoring` の「(必要な場合)」を外す (standard / architecture / legacy-refactor が対象。light は対象外) - architecture の必須工程に構造改善を追加 - 標準フローに構造改善の工程を明示 - レビューと同じ扱いであることを明記。通した結果が「手を付けない」でもよく、 その場合は理由を残す。工程を飛ばすことと、通したうえで手を付けないことは別 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 10 | gemini | APPROVE
言語非依存の原則と、それを具体化する各言語ごとの手段が極めてよく整理されています。
とくに data-representation.md での「手を付けないもの」「改善にならない置き換え」の明示は、機械的なコード改変を防ぐための強固なガードレールとして機能しており十分に安全です。
Python/PHP/TypeScript/JavaScript 各言語の仕様や解析ツールに関する事実主張(PHPStan の match.unhandled や、Python の np.vectorize の実態など)についても誤りはなく、適切に参照されています。
全体を通して変更目的と実装は完全に一貫しており、スクリプトへの検証処理の追加も含めて妥当です。このままマージして問題ありません。
必須化の説明が、通したうえで手を付けない場合の記述に寄っていた。既定は 見つけたスメルを直すことで、見送りは例外である。 - 「今回の変更が触れた範囲に見つけたスメルは直す」を既定として先に置く - 見送りは code-smells.md「スメルに手を付けない場合」に当てはまるときだけ、 と条件を限定する Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
- data-representation.md の「反復の種類」表を「反復の実行方式」表へ改め、 1 行目を「高階反復 / 逐次」から「逐次実行」へ変更した。高階反復は構文で あって実行方式ではなく、言語によっては遅延・並行・並列・分散で実行される - lang-javascript.md の `Object.freeze` をトップレベルの凍結と限定し、 深い不変性が必要な場合の手段を併記した - validate-runtime-plugins.sh で、manifest がある family について description から Skill 数を抽出できないこと自体をエラーにした。あわせて 抽出regexを `<数> ... skills` に絞り、無関係な数の誤認をなくした Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 15, 2026
round 10 レビュー対応(commit 7a83207)codex 3 件(major 2 / minor 1)をすべて修正しました。gemini は今ラウンド APPROVE(指摘 0 件)です。
deferred: 0 件 / rejected: 0 件。 1. 反復の分類を実行方式にする「高階反復 = 逐次 = 得られるものなし」は、言語非依存の表での誤った一般化でした。高階反復は構文であって実行方式ではなく、言語や API によっては遅延・並行・並列・分散で実行されます。表の見出しを「反復の種類」→「反復の実行方式」に、1 行目を 同じ絶対的な言い方が残っていた 2. |
| # | 書き換え | exit | 出力 |
|---|---|---|---|
| 1 | 26 focused NDF skills → focused NDF skills(Skill 数を削除) | 1 | ERROR: ... の description から Skill 数を読み取れない(\<数> ... skills` の形で書く。claude-skills.txt: 26)` |
| 1b | → focused NDF capabilities(skills 語ごと削除) | 1 | 同上 |
| 2 | → twenty-six focused NDF skills(書式変更) | 1 | 同上 |
| 3 | → 25 focused NDF skills(実数と相違・既存検査の退行確認) | 1 | ERROR: ... の description の Skill 数が manifest と食い違う(description: 25 / claude-skills.txt: 26) |
書き戻し後、git status は clean です。
品質チェック
bash scripts/build-runtime-plugins.sh で配布物を再生成のうえ、4 種すべて成功しています。
python3 scripts/check-skill-frontmatter.py --strict exit=0
bash scripts/build-runtime-plugins.sh --check exit=0
bash scripts/validate-runtime-plugins.sh exit=0
python3 scripts/check-markdown-links.py exit=0
「変更予定のない領域は手を付けない」を除外条件に置くと、読みにくい領域が 読みにくいまま残り続ける。 - 「スメルに手を付けない場合」から「変更予定のない領域」を外す - 代わりに「手を付ける範囲」を定義する。変更した関数・クラス、その呼び出し 元と呼び出し先、同じファイル・同じモジュールの関連箇所までを対象とし、 そこから遠い領域だけを対象外とする - 広げた分は別のコミットに切る(差分がレビューできなくなるため) - 残る除外は、生成物・削除予定の領域・振る舞い不変を示せない箇所の 3 つ - development-workflow と refactoring の SKILL.md も対象範囲に合わせる Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 11 | gemini | APPROVE
修正提案はありません。
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 11 | codex | REQUEST_CHANGES
構造改善の適用範囲と完了条件を、振る舞い不変・依頼範囲・MAY 判断が両立するよう修正してください。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- SKILL.md の「途中で止める条件」を、依頼の文面ではなく code-smells.md の 「手を付ける範囲」を基準に止める記述へ変更 - code-smells.md「手を付ける範囲」に、範囲内でもスメル一覧に当たらない箇所は 直さないこと、手順は範囲を広げても変わらないことを追加 - refactoring-catalog.md「対応表への置き換え」の完了条件を、記録できる データ構造を保つところまでに限定。実際の記録追加は別変更と明示 - data-representation.md「判断を記録できるようにする」の冒頭を同じ基準へ整合 - lang-python.md の一括処理を基盤名からベクトル化演算へ限定 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 15, 2026
🔧 /ndf:fix サマリ (round 11)対応件数: critical=0 / major=2 / minor=1 (合計 3 件、うち 1 件は部分採用) gemini は今ラウンド APPROVE(指摘 0 件)のため、対応は codex の 3 件のみです。 詳細
指摘 1 を部分採用にした理由範囲の表(呼び出し元・呼び出し先・同一モジュールまでを対象とする)は、リポジトリ所有者の明示的な決定として維持します。 「変更予定のない領域は手を付けない」という以前の書き方だと、読みにくい領域が永久に整理されないまま残るため、今回意図的に範囲を広げたものです。codex はこの決定の背景を持たない状態で以前の状態へ戻すよう求めているため、範囲の縮小は行いません。 ただし、指摘が突いた内部矛盾は実在したため、そこだけ解消しました。
結果として、範囲は広いまま、範囲内で直す対象はスメル一覧に該当するものへ限定され、手順による安全弁も維持されます。 指摘 2 / 3 の対応2. 3. 検証配布物は |
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 12 | codex | APPROVE
ブロッカーはありません。明確な事実誤認 1 件の修正を提案します。
Uh oh!
There was an error while loading. Please reload this page.
takemi-ohama
left a comment
There was a problem hiding this comment.
🤖 cross-review | round 12 | gemini | APPROVE
指示された追加観点(言語非依存の規範、機械的置換の防止、事実主張の正確性)を含め、修正を要する問題は見当たりませんでした。
array_column はコールバックを受け取らない組み込みの列抽出であり、 array_map と同じ高階反復として扱うのは誤りだった。走査が逐次である点は 変わらないが、PHP レベルのループとは実装が異なるため計測して選ぶ、と改めた。 PHP 標準に一括演算の基盤はないという結論は変えていない。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cpg1uksLKy4W7GxFZwQELG
takemi-ohama
commented
Aug 15, 2026
🧹 cross-review 最終スイープ (Step 7.5 / |
| # | 指摘元 | 対象 | 再判定 | 対応 |
|---|---|---|---|---|
| 1 | codex | plugins/ndf-shared/skills/refactoring/references/lang-php.md:88 | minor(妥当) | array_column を array_map と分離。コールバックを取らない組み込みの列抽出であり、走査は逐次のままだが PHP レベルのループとは実装が異なるため計測して選ぶ、と記述を修正 |
- 「PHP 標準に一括演算の基盤はない」という結論、および直後の
array_mapのコード例は変更していません - 同じ誤分類が残っていた
issues/issue-38-coding-skill-plan.md:121も併せて修正 - 配布物
plugins/ndf-{claude,codex,kiro}/skills/はscripts/build-runtime-plugins.shで再生成
品質チェック(4 種すべて成功)
| チェック | 結果 |
|---|---|
python3 scripts/check-skill-frontmatter.py --strict | ✅ Skill 34 個 / エラー 0・警告 0 |
bash scripts/build-runtime-plugins.sh --check | ✅ generated files are up to date |
bash scripts/validate-runtime-plugins.sh | ✅ Validation passed |
python3 scripts/check-markdown-links.py | ✅ Markdown local links are valid |
deferred: 0 件 / rejected: 0 件 / 未解決 thread: 0 件
Uh oh!
There was an error while loading. Please reload this page.
PR #111 の実装プランを plan-to-spec に従って確定情報へ変換する。 Skill の挙動仕様は docs/specifications へ置かず SKILL.md を正とする運用規約に 従い、Skill 仕様書は作らず次の 2 つへ振り分けた。 - runtime-plugin-distribution.md: validate-runtime-plugins.sh に追加した版数・ Skill 数の突き合わせ検査。marketplace.json と .codex-plugin/plugin.json が build の生成対象外であることも明記 - development-history/03-2026-08-15.md: 設計判断の理由、既存理論との対応、 PHPStan / NumPy / TypeScript の実測、CI が検査していなかった箇所、 cross-review の収束判定の落とし穴 plan ファイルは開発履歴へ git mv した。
Summary
分岐・反復・定数を何にどう置き換えるかの判断材料を、構造改善の Skill へ統合します(issue #38)。
草稿(
issues/issue-38-coding-rule.md)に対する既存理論の調査と、その結果を反映した実装です。あわせて
safe-refactoringを/ndf:refactoringへ改名します。公開コマンドの非互換変更のため v8.0.0 です。Skill は 31 個 → 30 個(Claude Code 26 / Codex 24 / Kiro 25)。追加ではなく統合になります。
独立 Skill にしなかった理由
当初は
analyzable-codingという独立 Skill として実装しましたが、発動条件を書けないことが分かりました。quality-gatestdd-cycleanalyzable-coding他の Skill が発動する瞬間を指しているのに対し、この内容は「コードを書くとき」以外に書きようがなく、常に該当するトリガは発動判定として働きません。 読んだエージェントが何を出力し、何をもって適用完了とするかも規定できていませんでした。
内容の重複も統合を裏づけます。既存のコードスメル 14 件のうち 4 件(マジックナンバー・文字列 / 設定の散在 / 深いネスト / 条件分岐の連鎖)と重なっており、棚卸台帳の判断基準「機能が他 Skill と重複するものは統合の対象とし、内容は統合先へ残す」に該当します。
統合により、発動点が「リファクタリングを始めるとき」に定まります。エージェントは既存の手順(テストで守る → スメルを 1 つ選ぶ → 手法を選ぶ → 1 手だけ適用 → テスト → コミット)の手順 3 で
data-representation.mdを参照して置き換え先を決める、という具体的な動作になります。追加した観点
既存 14 観点と重複しない部分だけを残しました。
判断材料の中心は「分岐が多いから表にする」ではなく 変化するから表にする という切り分けです。ガード節・静的に網羅性を検査できる分岐・逐次依存のループ・閉じた状態集合の列挙型は「手を付けないもの」として明示し、機械的な置き換えを防いでいます。
調査で判明した事実(実装に反映済み)
.map()/.apply()/np.vectorizeは一括演算ではない(NumPy 公式が明言)data-orientedを使わない調査結果の全文と経緯は
issues/issue-38-coding-skill-plan.mdにあります。変更内容
plugin.jsonのskills配列をrefactoringへ更新、version 8.0.0ndf-policiesに移行対応表を追加(v9.0.0 で削除)。v7.0.0 の playwright 対応表は予告どおり削除development-workflow(SKILL.md / workflow-modes.md)/tdd-cycle/pr-review/problem-solvingREADME.md/CLAUDE.md/AGENTS.md/docs/specifications/ndf-skill-inventory.md非互換
/ndf:safe-refactoring/ndf:refactoring引数と手順は変わりません。
safe-を外したのは/refactoringで一意に決まり、入力が短くなるためです。Test plan
すべて実行済みです。
python3 scripts/check-skill-frontmatter.py --strict→ Skill 34 個 / エラー 0 / 警告 0bash scripts/build-runtime-plugins.sh --check→ up to datebash scripts/validate-runtime-plugins.sh→ passed(claude plugin validateを含む)python3 scripts/check-markdown-links.py→ validrefactoring/references/5 ファイルが生成され、旧ディレクトリが残っていないことtsc --strict)/ PHP 8.3 で例を実行。反例がTS2322/TS1360/\UnhandledMatchErrorで落ちることも確認match.unhandledの検出と、外部化した対応表が level max でも検出されないことを確認やらないこと
未了
plan-to-specによる確定仕様化。本 PR 承認後に実施しますCloses#38