Skip to content

feat!: safe-refactoring を refactoring へ改名し、表現の判断材料を統合(issue #38 / v8.0.0) - #111

Merged
takemi-ohama merged 16 commits into
mainfrom
feature/analyzable-coding-skill
Aug 15, 2026
Merged

feat!: safe-refactoring を refactoring へ改名し、表現の判断材料を統合(issue #38 / v8.0.0)#111
takemi-ohama merged 16 commits into
mainfrom
feature/analyzable-coding-skill

Conversation

@takemi-ohama

@takemi-ohamatakemi-ohama commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

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 として実装しましたが、発動条件を書けないことが分かりました。

SkillUse when発動する瞬間
quality-gatesabout to report a change as done完了報告の直前
tdd-cycleadding behavior or fixing a bug振る舞いを足す時
analyzable-codingimplementing or restructuring codeコードを書く時=常時

他の Skill が発動する瞬間を指しているのに対し、この内容は「コードを書くとき」以外に書きようがなく、常に該当するトリガは発動判定として働きません。 読んだエージェントが何を出力し、何をもって適用完了とするかも規定できていませんでした。

内容の重複も統合を裏づけます。既存のコードスメル 14 件のうち 4 件(マジックナンバー・文字列 / 設定の散在 / 深いネスト / 条件分岐の連鎖)と重なっており、棚卸台帳の判断基準「機能が他 Skill と重複するものは統合の対象とし、内容は統合先へ残す」に該当します。

統合により、発動点が「リファクタリングを始めるとき」に定まります。エージェントは既存の手順(テストで守る → スメルを 1 つ選ぶ → 手法を選ぶ → 1 手だけ適用 → テスト → コミット)の手順 3 で data-representation.md を参照して置き換え先を決める、という具体的な動作になります。

追加した観点

既存 14 観点と重複しない部分だけを残しました。

追加したスメル兆候置き換え先
業務ルールの埋め込み料率・区分・しきい値が制御構文の中に書かれている対応表への置き換え
一件ずつの反復往復回数か実行時間が件数に比例して積み上がる一括処理への置き換え
検証のない外部化設定・マスタにスキーマ・版・検証がない★スキーマと版を与え、読み込み境界で検証する

判断材料の中心は「分岐が多いから表にする」ではなく 変化するから表にする という切り分けです。ガード節・静的に網羅性を検査できる分岐・逐次依存のループ・閉じた状態集合の列挙型は「手を付けないもの」として明示し、機械的な置き換えを防いでいます。

調査で判明した事実(実装に反映済み)

事実反映
.map() / .apply() / np.vectorize は一括演算ではない(NumPy 公式が明言)「反復の種類」表で、高階反復への置き換えは何も得られないと明示
PHP 標準に一括演算の基盤はない一括処理を「一括入出力(N+1 解消・bulk insert)」まで含めて言語非依存化
型情報を伴わず実行時ロードした対応表は静的解析の対象から外れる(PHPStan 2.2 で実測)「外部化してよい条件」の根拠に。ビルド時の型生成 → ロード境界のスキーマ検証 → 外部化しない、の順で判断
Data-Oriented Design(Mike Acton)と Data-Oriented Programming は別物名称に data-oriented を使わない

調査結果の全文と経緯は issues/issue-38-coding-skill-plan.md にあります。

変更内容

plugins/ndf-shared/skills/refactoring/ ← safe-refactoring から改名
├── SKILL.md 手順 3 に観点への入口を追加
└── references/
├── code-smells.md 14 → 17 観点
├── refactoring-catalog.md 12 → 14 手法
├── data-representation.md 新規:判定3表・外部化の条件・判断の記録
├── language-notes.md 新規:Python / JavaScript / TypeScript / PHP
└── characterization-tests.md 変更なし
  • manifest 3 ファイルと plugin.jsonskills 配列を refactoring へ更新、version 8.0.0
  • ndf-policies に移行対応表を追加(v9.0.0 で削除)。v7.0.0 の playwright 対応表は予告どおり削除
  • 相互参照を更新: development-workflow(SKILL.md / workflow-modes.md)/ tdd-cycle / pr-review / problem-solving
  • README.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 / 警告 0
  • bash scripts/build-runtime-plugins.sh --check → up to date
  • bash scripts/validate-runtime-plugins.sh → passed(claude plugin validate を含む)
  • python3 scripts/check-markdown-links.py → valid
  • 3 ランタイムの配布物に refactoring/references/ 5 ファイルが生成され、旧ディレクトリが残っていないこと
  • 予算: claude 5,855 / 8,000、codex 5,443 / 8,000、frontmatter 合計 10,612 / 11,200
  • Python 3.12 / TypeScript 5(tsc --strict)/ PHP 8.3 で例を実行。反例が TS2322 / TS1360 / \UnhandledMatchError で落ちることも確認
  • PHPStan 2.2 で match.unhandled の検出と、外部化した対応表が level max でも検出されないことを確認

やらないこと

  • 静的解析ツール(linter ルール)の実装。判断材料の文書化のみ
  • Observability 基盤の導入手順
  • 対象 4 言語以外の言語別手段の記載(判断材料は言語非依存なので追記なしで使えます)

未了

  • 3 ランタイムでの発動実測。配布後に実績が出てから測定します
  • plan-to-spec による確定仕様化。本 PR 承認後に実施します

Closes#38

分岐・反復・定数を検査可能なデータとして表現し、判断の理由を記録可能に
する判断基準を 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-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | codex | REQUEST_CHANGES

一括処理の失敗方針を安全性・原子性に応じて選べる規範へ修正し、言語機能に関する事実主張の適用範囲を限定してください。

Comment threadplugins/ndf-shared/skills/analyzable-coding/SKILL.md Outdated
Comment threadplugins/ndf-shared/skills/analyzable-coding/references/language-notes.md Outdated

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | gemini | REQUEST_CHANGES

[minor / 正確性]
Codex と Kiro の各 README 内にある利用例のパス表記 (7.0.0 の部分) についても、今回のリリースに合わせて 7.1.0 に更新しておくことを推奨します(PR 差分外ですがバージョンの一貫性のため)。

Comment threadREADME.md Outdated
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

Copy link
Copy Markdown
ContributorAuthor

🔧 /ndf:fix サマリ (round 1)

対応件数: critical=0 / major=3 / minor=1 (合計 4 件)
deferred: 0 件 / rejected: 0 件
commit: 5434aeb
CI: 修正前スナップショット SUCCESS(全 7 チェック)

詳細

#指摘元対象再判定対応
1codexplugins/ndf-shared/skills/analyzable-coding/SKILL.md:43major(妥当)MUST の適用範囲を「項目どうしが独立に処理できる場合」へ限定。fail-fast / rollback を MAY へ追加
2codex.../references/language-notes.md:208major(妥当)「PHP に一括演算の基盤はない」→「PHP 標準に〜」へ範囲限定。拡張採用時は計測して選ぶ旨を追記
3geminiREADME.md:105plugins/ndf-codex/.codex-plugin/plugin.jsonmajor(妥当・実在の取り残し)7.0.0 / 24 skills → 7.1.0 / 25 skills
4gemini (review body)Codex / Kiro README の版数表記minor利用例パス・出力例を 7.1.0 へ統一

補足: なぜ #3 が CI をすり抜けたか

plugins/ndf-codex/.codex-plugin/plugin.json生成物ではありません
scripts/build-runtime-plugins.shwrite_codex_mcp_manifestplugins/mcp/codex/*(MCP プラグイン)専用で、
ndf-codex に対しては sync_runtime_if_presentskills/ を同期するだけです。
そのため build-runtime-plugins.sh --check の検査対象に入っておらず、手で更新する必要がありました。

plugins/ndf-claude/README.md:17 などに残る v7.0.0 は「v7.0.0 で playwright-kit へ分離した」という
過去の事実の記述のため、意図的に据え置いています。

設計制約の遵守

  • SKILL.md 本文(原則層・判定層)には言語固有の API 名・ライブラリ名・バージョン番号を持ち込んでいません
  • 禁止規則化していません。fail-fast / rollback は MAY 節に「そのままでよい」ものとして追加しました
  • 配布物 plugins/ndf-{claude,codex,kiro}/skills/plugins/ndf-shared/ を編集し bash scripts/build-runtime-plugins.sh で再生成しました

品質チェック(全て成功)

python3 scripts/check-skill-frontmatter.py --strict # Skill 35 個 / エラー 0 / 警告 0、frontmatter 合計 10782 / 11200
bash scripts/build-runtime-plugins.sh --check # generated files are up to date
bash scripts/validate-runtime-plugins.sh # runtime plugin validation passed
python3 scripts/check-markdown-links.py # Markdown local links are valid

issues/issue-38-coding-skill-plan.md の第 3 部にも「3.4 cross-review round 1 での事実訂正」として上記を追記しました。

@takemi-ohama 再レビューをお願いします。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | codex | REQUEST_CHANGES

言語別ノートの事実記述を 1 件修正してください。

Comment threadplugins/ndf-shared/skills/analyzable-coding/references/language-notes.md Outdated

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | gemini | REQUEST_CHANGES

PR 横断の設計レベルの修正提案です。

  • [major / 更新漏れ].claude-plugin/marketplace.jsondescriptionv7.0.0, 26 skills のままです。v7.1.0, 27 skills へ更新してください。

Comment threadissues/issue-38-chatgpt-response.md
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

Copy link
Copy Markdown
ContributorAuthor

🔧 /ndf:fix サマリ (round 2)

対応件数: critical=0 / major=1 / minor=2 (合計 3 件)
deferred: 0 件 / rejected: 0 件
commit: 6cedc7f
CI: 修正前スナップショット SUCCESS(全 7 チェック)

詳細

#指摘元対象再判定対応
1codex (inline).../analyzable-coding/references/language-notes.md:76minor(妥当).apply() を「行ごとの呼び出し」と断定していた記述を、axis に依存しない「Python の関数を要素・行・列のいずれかの単位で呼ぶ経路である限りは一括演算ではない」へ書き換え
2gemini (inline)issues/issue-38-chatgpt-response.md:31minor(妥当)生ログは改変せず、冒頭の注記ブロック + 該当箇所の 1 行注記で誤出典を明示
3gemini (review body).claude-plugin/marketplace.json:12major(妥当・実在の取り残し)v7.0.0 / 26 focused NDF skillsv7.1.0 / 27 focused NDF skills

#1 の判断根拠

DataFrame.apply は既定 axis=0 で列単位、axis=1 で行単位、さらに ufunc を渡す経路もあるため、.apply() 全般を「行ごと」と断定するのは事実として誤りでした。

判定軸を「どの単位で呼ぶか」ではなく「Python の関数を呼ぶ経路かどうか」に置き換えることで、axis の値に依存せず正しくなります。この節の主題は「.map() / .apply() へ置き換えても実行の実体が変わらないことがある」点なので、pandas の API 仕様の解説には広げず 2 文に収めました。

#2 の判断根拠

issues/issue-38-chatgpt-response.md は ChatGPT の回答の生ログです。本文を書き換えると「ChatGPT が何を返したか」の記録価値が失われるため、元の文言は残したまま注記を追加する方針を取りました。検証済みの事実関係は issue-38-coding-skill-plan.md の「1.4 事実確認の記録」を参照するよう誘導しています。

#3 が CI をすり抜けた理由(round 1 の plugin.json と同型)

.claude-plugin/marketplace.jsonscripts/build-runtime-plugins.sh の生成対象ではありませんscripts/validate-runtime-plugins.sh は JSON としての妥当性と source パスの実在しか検査せず、description 内の版数・skill 数は誰も検査していないため、CI 全 SUCCESS のまま取り残されていました。

skill 数 27 は plugins/ndf-shared/manifests/claude-skills.txt の実数と一致することを確認済みです(claude=27 / codex=25 / kiro=26)。

品質チェック(全て成功)

python3 scripts/check-skill-frontmatter.py --strict # Skill 35 個 / エラー 0 / 警告 0
bash scripts/build-runtime-plugins.sh --check # generated files are up to date
bash scripts/validate-runtime-plugins.sh # runtime plugin validation passed
python3 scripts/check-markdown-links.py # Markdown local links are valid

issues/issue-38-coding-skill-plan.md の第 3 部に「3.5 cross-review round 2 での事実訂正」として上記を追記しました(旧 3.5 未了 → 3.6)。

@takemi-ohama 再レビューをお願いします。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 3 | gemini | APPROVE

前回の指摘事項(pandas .apply() の挙動の正確な記述、ChatGPT生ログ誤出典への注記、marketplace の版数更新)がすべて適切に修正されていることを確認しました。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 3 | codex | REQUEST_CHANGES

仕様適合と調査事実の一般化に修正が必要です。

Comment threadplugins/ndf-shared/skills/analyzable-coding/SKILL.md Outdated
Comment threadissues/issue-38-coding-skill-plan.md Outdated
- 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

Copy link
Copy Markdown
ContributorAuthor

🔧 /ndf:fix サマリ (round 3)

対応件数: critical=0 / major=2 / minor=0 (合計 2 件)
deferred: 0 件 / rejected: 0 件
commit: ef206dc
CI: 修正前スナップショット SUCCESS(全 7 チェック)
gemini: 今ラウンド APPROVE(新規指摘なし)

詳細

#指摘元対象再判定対応
1codex.../analyzable-coding/SKILL.md:134major(妥当)「外部化した時点で静的解析の視界から外れる」を実測が支える条件へ限定し、生成 → スキーマ検証 → 外部化しない の順で選択肢を提示
2codexissues/issue-38-coding-skill-plan.md:223major(妥当)目的の 4 言語と AC-4 / language-notes.md の 3 言語の不整合を、JavaScript を追加する方向で解消

#1 の判断根拠

PHPStan の実測が支えているのは表の 3 行目、つまり array<string, string> という幅の広い型で対応表を実行時に受け取った場合だけです。外部化一般について「静的解析の視界から外れる」と書いていたのは、私(作成者)の過度な一般化でした。

SKILL.md の記述を「型情報を伴わずに実行時ロードすると、その対応表は静的解析の視界から外れる」へ限定したうえで、判定基準を次の順序に改めています。

  1. スキーマから型・定数を生成し、ビルド時に取り込む(外部化しても静的検査は残るので、選べるなら最初に選ぶ)
  2. 生成できないなら、静的検査で守れなくなった分をスキーマ検証で埋める
  3. どちらもできないなら、外部化しない

生成は「スキーマ検証で埋める」より一段良い選択肢なので先頭に置きました。表現は言語非依存の語(コード生成 / 型生成 / ビルド時)に留め、ツール名は書いていません。

language-notes.md の PHPStan 実測表にも「この表が測っているのは型情報を伴わずに実行時ロードした場合である」を明記し、生成による静的検査の維持を補記しました。

#2 の判断根拠と、揃えた方向

スコープを縮めるのではなく、JavaScript を追加しました。 この Skill の対象読者には型注釈なしの JS だけで書くコードが多く、目的側の 4 言語が本来の意図だからです。

references/language-notes.md に JavaScript 列と ## JavaScript 節を追加しました。要点は「手段は TypeScript の節がそのまま使えるが、型注釈がないため静的な網羅性検査が効かない」ことの 1 点に絞り、帰結として (a) MAY の「静的に網羅性を検査できる分岐」の条件が成立しないこと (b) スキーマ検証の必要性が TypeScript より高いこと を、悪い例 / 良い例 1 組とあわせて記述しています。JS 入門にはせず節全体を小さく保ちました。

プラン側は 1.6 見出し・1.6 対応表・AC-4・2.8・Task 4・3.3 の言語表記を 4 言語へ統一しています(AC-9(c) は元から「対象 4 言語」表記のため変更なし)。

設計制約の遵守

  • SKILL.md 本文(原則層・判定層)へ言語固有語を持ち込んでいません。AC-9(b) の grep(numpy|pandas|typescript|javascript|phpstan|readonly|dataclass|array_map|zod|mypy)のヒットは参照節 1 行のみで、これは 3.3 に記録済みの既知の例外です
  • 禁止規則化していません。Sync: takemi-ohama/ai-plugins から最新状態を反映 (e71f099) #1 は選択肢の順序付けとして書いています
  • 配布物は plugins/ndf-shared/ を編集し bash scripts/build-runtime-plugins.sh で再生成しました

品質チェック(全て成功)

python3 scripts/check-skill-frontmatter.py --strict # Skill 35 個 / エラー 0 / 警告 0、frontmatter 合計 10782 / 11200
bash scripts/build-runtime-plugins.sh --check # generated files are up to date
bash scripts/validate-runtime-plugins.sh # runtime plugin validation passed
python3 scripts/check-markdown-links.py # Markdown local links are valid

issues/issue-38-coding-skill-plan.md の第 3 部に「3.6 cross-review round 3 での事実訂正」として上記を追記しました(旧 3.6 未了 → 3.7)。

@takemi-ohama 再レビューをお願いします。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 4 | codex | APPROVE

修正必須の指摘はありません。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 4 | gemini | REQUEST_CHANGES

型定義だけをビルド時に生成し、データ実体は実行時に動的ロードする場合のスキーマ検証の要否について、AIエージェントが誤解しないよう記述を明確化する提案を行いました。詳細はインラインコメントを参照してください。

Comment threadplugins/ndf-shared/skills/analyzable-coding/SKILL.md Outdated
「データ化の前提」の 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

Copy link
Copy Markdown
ContributorAuthor

🔧 /ndf:fix サマリ (round 4)

対応件数: critical=0 / major=1 / minor=0 (合計 1 件)
deferred: 0 件 / rejected: 0 件
commit: 28f1dc0
CI: SUCCESS(push 前スナップショット時点で全 7 チェック成功)

前ラウンドの結果: codex = APPROVE(指摘 0 件) / gemini = REQUEST_CHANGES(major 1)

詳細

#指摘元対象重要度(再判定)対応
1geminiskills/analyzable-coding/SKILL.md:138 付近major / 正確性(維持)修正・Resolve 済

指摘: 「データ化の前提」の 3 段の選択肢が「型・定数を生成できるか」を軸にしていたため、型生成とスキーマ検証が排他の分岐に読めた。「型定義だけをビルド時に生成し、データ実体は実行時にロードする」構成では、型生成ができていてもロード境界のスキーマ検証は必須であり、現状の書き方は無検証キャストへの誘導になりうる。

再判定: 妥当(major 維持)。実体を読んだところ、round 3 で導入した「生成できないなら〜」という条件付けが確かに排他に読め、AI エージェントの誤読を誘発しうる。

対応: 分岐の軸を「データを実行時にロードするか」へ組み替えた。

  • plugins/ndf-shared/skills/analyzable-coding/SKILL.md — (1) データごとビルド時に組み込めるなら型・定数を生成して取り込む →(2) データを実行時にロードするならロード境界をスキーマ検証で守る(型生成は実行時のスキーマ検証の代わりにならない)→(3) どちらも満たせないなら外部化しない。語は言語非依存(ロード境界 / 実行時ロード / 型生成)に限定し、具体的な API 名は本文に持ち込んでいない
  • references/language-notes.md — PHP 節の「生成できないときにだけ、スキーマ検証で埋める」も同じ誤りを含んでいたため訂正。あわせて Python / TypeScript / JavaScript / PHP に「型注釈・型生成は実体を検査しない」ことを示す具体例を各 1〜2 行で追加
  • issues/issue-38-coding-skill-plan.md — 3.7 として round 4 の訂正を記録(旧 3.7「未了」は 3.8 へ繰り下げ)
  • 配布物 plugins/ndf-{claude,codex,kiro}/skills/bash scripts/build-runtime-plugins.sh で再生成

検証

チェック結果
python3 scripts/check-skill-frontmatter.py --strict✅ Skill 35 個 / エラー 0 / 警告 0
bash scripts/build-runtime-plugins.sh --check✅ up to date
bash scripts/validate-runtime-plugins.sh✅ passed
python3 scripts/check-markdown-links.py✅ Markdown local links are valid

@codex@gemini 再レビューをお願いします。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 5 | gemini | APPROVE

Skill の規範が言語非依存に保たれており、MAY 節による機械的置換の防止や事実主張(各言語の静的解析・一括処理の仕様、型生成とスキーマ検証の差異)も正確であることを確認しました。追加の修正提案はありません。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 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-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 6 | codex | REQUEST_CHANGES

冒頭の適用条件と MAY の例外関係を明確化する必要があります。

Comment threadplugins/ndf-shared/skills/analyzable-coding/SKILL.md Outdated

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 6 | gemini | REQUEST_CHANGES

README.md の分類と、実際の SKILL.md 内で定義された役割(工程ではなく判断基準)の間に生じているカテゴリの不整合について、1点のみ修正を提案します。

Comment threadREADME.md Outdated
- 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

Copy link
Copy Markdown
ContributorAuthor

round 6 レビュー対応サマリ (commit 4f75ee7)

codex 1 件 / gemini 1 件、いずれも major と再判定して自動修正しました。deferred / rejected はありません。

#指摘元対象重要度(再判定)対応
1codexplugins/ndf-shared/skills/analyzable-coding/SKILL.md:16major / 仕様適合修正
2geminiREADME.md:14major / 整合性修正

1. 冒頭の確認手順が MAY 節と矛盾していた

冒頭の確認手順がすべての分岐・反復・定数を対象に読め、MAY 節のガード節・逐次依存ループ・列挙型まで書き換え対象になっていました。適用対象を 変化する業務判断 に限定し、MAY に該当するものは「そのままでよい」と冒頭で明示しています。到達点の表(実行前/実行後)は残しました。

2. README の Skill 分類が development-workflow の記述と食い違っていた

development-workflowanalyzable-coding を「工程ではなく判断基準」と明記しているのに対し、README は「開発方法論」へ分類していました。開発方法論 (5) へ戻し、原則・ガイドライン (10) へ移しています。合計 31 個は変わらないため、元Skills(31個) と公開 Skills の 27 / 26 / 25 は据え置きです。README.md の v7.1.0 変更節・CLAUDE.mddocs/specifications/ndf-skill-inventory.md も確認しましたが、同種の食い違いはありませんでした。

検証

検査結果
python3 scripts/check-skill-frontmatter.py --strictSkill 35 個 — エラー 0 / 警告 0
bash scripts/build-runtime-plugins.sh --checkup to date
bash scripts/validate-runtime-plugins.shValidation passed
python3 scripts/check-markdown-links.pyMarkdown local links are valid
markdown-writing 検査(検討過程の痕跡・本文中のフィールド名)無ヒット

配布物 plugins/ndf-{claude,codex,kiro}/bash scripts/build-runtime-plugins.sh で再生成済みです。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 7 | gemini | APPROVE

言語非依存の原則層と各言語固有の手段の分離、網羅性検査や安全性を損なわないための MAY 節の明示を含め、PR の目的と変更内容に矛盾や潜在的な問題は見当たりません。修正提案はありません。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 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-ohamatakemi-ohama changed the title feat: analyzable-coding skill を追加(issue #38 / v7.1.0)feat!: safe-refactoring を refactoring へ改名し、表現の判断材料を統合(issue #38 / v8.0.0)Aug 15, 2026

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 8 | codex | REQUEST_CHANGES

公開リリースメタデータの版と Skill 数を、v8.0.0 の配布内容に統一してください。

Comment thread.claude-plugin/marketplace.json Outdated
Comment threadplugins/ndf-codex/.codex-plugin/plugin.json Outdated

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 8 | gemini | REQUEST_CHANGES

docs/specifications/ndf-skill-inventory.md の Skill 数の推移について、コミットメッセージや計画文書(31個→30個)と矛盾する記載があるため修正をお願いします。

Comment threaddocs/specifications/ndf-skill-inventory.md Outdated
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

Copy link
Copy Markdown
ContributorAuthor

cross-review round 8 の対応(commit 45d411f

未解決の 3 件はすべて major と再判定し、自動修正しました。deferred / rejected はありません。

#レビュアー指摘再判定対応
1gemini.claude-plugin/marketplace.json が v7.1.0 / 27 skills のままmajor(妥当)v8.0.0 / 26 skills へ
2codexplugins/ndf-codex/.codex-plugin/plugin.json が 7.1.0 / 25 skills のままmajor(妥当)8.0.0 / 24 skills へ
3codex「Skill 数は 30 個で変わらない。」が 31 → 30 と矛盾major(妥当)31 個から 30 個へ戻る旨へ訂正 + 予算表に v7.1.0 列を追加

網羅的な洗い出しの結果

指摘 1 と 2 は round 1 / round 2 で同じ場所を指摘された取り残しの再発です。原因は次の 2 つでした。

  • 両ファイルとも scripts/build-runtime-plugins.sh の生成対象外(write_codex_mcp_manifestplugins/mcp/codex/* 専用で、ndf-codexskills/ のみ同期)で、手で維持するファイルである
  • scripts/validate-runtime-plugins.sh は JSON の妥当性と source パスの実在しか見ておらず、description 内の版数・Skill 数を誰も検査していない

そこでリポジトリ全体を 7.1.0 / 7.0.0 / safe-refactoring / analyzable-coding / Skill 数の各パターンで走査し、現在値を示すべき記述を追加で 5 ファイル直しました。

追加で直した箇所(指摘外)

ファイル内容
plugins/ndf-codex/README.mdプラグインキャッシュのパス例 2 箇所と codex plugin list の出力例を 8.0.0 へ
plugins/ndf-kiro/README.md.kiro/agents/ndf.json の description 例を v8.0.0 へ
plugins/ndf-shared/skills/ndf-policies/SKILL.md(+ 3 ランタイムの生成物)「v7.0.0 以前から移行する場合は v7.1.0ndf-policies を参照する」を v7.0.0 へ。v7.1.0 は本 PR のブランチ内だけに存在した中間の版(origin/main は v7.0.0、リリースタグなし)で、参照先として成立しない
plugins/ndf-{claude,codex,kiro}/README.md「移行先の対応表は ndf-policies にある」は、その対応表を v8.0.0 で削除したため成立しない。root README の「NDF v7.0.0 の主な変更(非互換)」へ誘導
issues/issue-38-coding-skill-plan.md「3.8 cross-review round 8 での版数・Skill 数の取り残しの解消」として、直した箇所・据え置いた箇所・再発防止を記録

意図的に据え置いた箇所

過去の事実を述べている記述はそのままにしています。

  • ndf-policies / root README の /ndf:safe-refactoring/ndf:refactoring 移行対応表(移行案内なので残す)
  • root README の「v6.1.0 当時の名称は /ndf:safe-refactoring」注記
  • 棚卸台帳の v6.1.0 節・v7.0.0 節(safe-refactoring の行を含む。当時の実測記録)
  • plugins/ndf-shared/skills/README.md の「v7.0.0 時点の実測 10,559 文字」(運用値 11,200 の根拠となる過去の実測)
  • issues/ 配下の過去の計画文書(issues/ndf-development-skills/ / issues/report01.md / issues/ndf-skill-footprint.md)と、issue-38-coding-skill-plan.md の round 1 / round 2 の記録
  • docs/presentations/2026-08-06-ai-plugins-intro.md(「スキル 25個」「/ndf:review」)。日付を持つ勉強会資料で、v6.0.0 以前の内容のまま本 PR より前から据え置かれている

再発防止

scripts/validate-runtime-plugins.sh に突き合わせ検査を追加しました。Claude 版 plugin.jsonversion を唯一の基準として、次の 3 つを検査します。

  1. Codex 版 plugin.jsonversion が Claude 版と一致すること
  2. marketplace と両 plugin.json の description に書かれた (vX.Y.Z)version と一致すること
  3. description に書かれた Skill 数が manifests/<runtime>-skills.txt の実数と一致すること

plugin family は既存の検出結果(plugins/*-shared/manifests)を使い回すため、family を足しても検査対象から漏れません。今回の指摘そのものを再現させ、ndf-codex の 3 件・marketplace の 2 件がいずれも ERROR になることを確認しています。

検証

$ python3 scripts/check-skill-frontmatter.py --strict
Skill 34 個を検査 — エラー 0 件 / 警告 0 件
claude の初期一覧の合計: 5855 / 8000 文字
codex の初期一覧の合計: 5443 / 8000 文字
frontmatter 合計: 10612 / 11200 文字
$ bash scripts/build-runtime-plugins.sh --check
runtime plugin generated files are up to date
$ bash scripts/validate-runtime-plugins.sh
runtime plugin validation passed
$ python3 scripts/check-markdown-links.py
Markdown local links are valid

push 直前の gh pr checks 111 は 7 件すべて SUCCESS でした(FAILURE なし)。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 9 | codex | REQUEST_CHANGES

調査記録の事実整合性に要修正が 1 件あります。

Comment threadissues/issue-38-coding-skill-plan.md

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 9 | gemini | REQUEST_CHANGES

  • language-notes.md の PHP 8.0 以下の代替手段の節において、「閉じた状態集合をデータ化する」という表現がありますが、data-representation.md の分類と矛盾する懸念があります(理由と提案はインラインに記載しました)。
  • 他の追加されたコードスメルの観点や、言語ごとの具体的な置き換え手段については事実誤認もなく、機械的置換を防ぐ条件も明確に書かれています。

Comment threadplugins/ndf-shared/skills/refactoring/references/language-notes.md Outdated
参照ファイルは読んだときだけコンテキストへ載るため、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

Copy link
Copy Markdown
ContributorAuthor

Round 9 レビュー対応サマリ

指摘 2 件(major 1 / minor 1)すべてに対応しました。commit ab9722e

#重要度対象対応
1majorplugins/ndf-shared/skills/refactoring/references/language-notes.md(PHP 8.0 以下の節)data-representation.md の「閉じた状態集合はコードに残す」という分類との矛盾を解消。「閉じた状態集合は 8.1 以降と同じくコード側に置き、変わるのは外部化した業務ルールの守り方(網羅性検査が効かないぶん実行時スキーマ検証への依存が高まる)」という趣旨へ書き換え
2minorissues/issue-38-coding-skill-plan.md:450 付近「14 件のうち 4 件」と括弧内の 5 項目の食い違いを修正。列挙が正しいため「5 件」へ訂正
  • 対応: 2 件 / deferred: 0 件 / rejected: 0 件

同じコミットに含めた追加変更

language-notes.md を言語ごとの 4 ファイル(lang-php.md ほか)へ分割しました。参照ファイルは読んだときだけコンテキストへ載るため、1 ファイルにまとめていると PHP の作業でも他 3 言語の内容まで読み込まれてしまうのが理由です。SKILL.md には「対象の言語のファイルだけを読む」と明記しています。これに伴い、指摘 1 の記述の現在地は plugins/ndf-shared/skills/refactoring/references/lang-php.md の「8.0 以下」節に移動しています。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 10 | codex | REQUEST_CHANGES

言語非依存の反復分類と、配布メタデータ検証の抜けを修正してください。

Comment threadplugins/ndf-shared/skills/refactoring/references/data-representation.md Outdated
Comment threadplugins/ndf-shared/skills/refactoring/references/lang-javascript.md Outdated
Comment threadscripts/validate-runtime-plugins.sh
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-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 10 | gemini | APPROVE

言語非依存の原則と、それを具体化する各言語ごとの手段が極めてよく整理されています。
とくに data-representation.md での「手を付けないもの」「改善にならない置き換え」の明示は、機械的なコード改変を防ぐための強固なガードレールとして機能しており十分に安全です。
Python/PHP/TypeScript/JavaScript 各言語の仕様や解析ツールに関する事実主張(PHPStan の match.unhandled や、Python の np.vectorize の実態など)についても誤りはなく、適切に参照されています。

全体を通して変更目的と実装は完全に一貫しており、スクリプトへの検証処理の追加も含めて妥当です。このままマージして問題ありません。

takemi-ohamaand others added 2 commits August 15, 2026 02:50
必須化の説明が、通したうえで手を付けない場合の記述に寄っていた。既定は
見つけたスメルを直すことで、見送りは例外である。
- 「今回の変更が触れた範囲に見つけたスメルは直す」を既定として先に置く
- 見送りは 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

Copy link
Copy Markdown
ContributorAuthor

round 10 レビュー対応(commit 7a83207

codex 3 件(major 2 / minor 1)をすべて修正しました。gemini は今ラウンド APPROVE(指摘 0 件)です。

#指摘元再判定対象対応
1codexmajor(妥当)refactoring/references/data-representation.md反復の分類の軸を構文から実行方式へ変更
2codexminor(妥当・正確性に効くため修正)refactoring/references/lang-javascript.mdObject.freeze を浅い凍結と限定し、深い不変性の手段を併記
3codexmajor(妥当)scripts/validate-runtime-plugins.shSkill 数を抽出できないこと自体をエラー化

deferred: 0 件 / rejected: 0 件。

1. 反復の分類を実行方式にする

「高階反復 = 逐次 = 得られるものなし」は、言語非依存の表での誤った一般化でした。高階反復は構文であって実行方式ではなく、言語や API によっては遅延・並行・並列・分散で実行されます。表の見出しを「反復の種類」→「反復の実行方式」に、1 行目を | 高階反復 | 逐次 | なし || 逐次実行 | 1 件ずつ順に処理する | なし | に変更し、直後の説明文も「逐次実行のまま構文だけを高階反復へ置き換えても、この表のどの行にも移動していない」という実行方式を条件にした書き方へ直しました。

同じ絶対的な言い方が残っていた data-representation.md(改善にならない置き換え表)、refactoring-catalog.md:79lang-php.md:88 も揃えています。表名の変更にあわせ、参照側 5 ファイルの記述も更新しました。設計制約どおり data-representation.md に言語固有の API 名は入れていません。

2. Object.freeze の凍結範囲

| 不変性 | Object.freeze || 不変性 | Object.freeze(凍結はトップレベルのみ)。入れ子まで不変にするなら再帰的に凍結するか、構造共有の不変データ構造を使う |。同じ表の「値から値への対応」「閉じた状態集合」も確認しましたが、どちらも値が原始値の対応表・定数を指しており浅い凍結で意図どおりに機能するため、冗長を避けて追記していません。

3. 検査の穴を塞ぐ(負例の確認結果)

described_skill_count()None を返すと検査が素通りする穴を塞ぎ、manifest がある family については抽出できないこと自体をエラーにしました。あわせて、負例を流す過程で旧regexが description 前半の 8 specialized agents8 を誤って拾うことが分かったため、数と skills の間に挟める語を 3 語までに絞っています。

plugins/ndf-claude/.claude-plugin/plugin.json の description を書き換えて bash scripts/validate-runtime-plugins.sh を実行した結果、4 種すべて exit=1 で落ちます

#書き換えexit出力
126 focused NDF skillsfocused NDF skills(Skill 数を削除)1ERROR: ... の description から Skill 数を読み取れない(\<数> ... skills` の形で書く。claude-skills.txt: 26)`
1bfocused NDF capabilitiesskills 語ごと削除)1同上
2twenty-six focused NDF skills(書式変更)1同上
325 focused NDF skills(実数と相違・既存検査の退行確認)1ERROR: ... の 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-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 11 | gemini | APPROVE

修正提案はありません。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 11 | codex | REQUEST_CHANGES

構造改善の適用範囲と完了条件を、振る舞い不変・依頼範囲・MAY 判断が両立するよう修正してください。

Comment threadplugins/ndf-shared/skills/refactoring/references/refactoring-catalog.md Outdated
Comment threadplugins/ndf-shared/skills/refactoring/references/lang-python.md Outdated
- 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

Copy link
Copy Markdown
ContributorAuthor

🔧 /ndf:fix サマリ (round 11)

対応件数: critical=0 / major=2 / minor=1 (合計 3 件、うち 1 件は部分採用)
deferred: 0 件 / rejected: 0 件
commit: 2f0b967
CI: SUCCESS(修正前スナップショット時点で全 7 チェック成功。修正後の再実行は待機せず)

gemini は今ラウンド APPROVE(指摘 0 件)のため、対応は codex の 3 件のみです。

詳細

#ファイル指摘判定対応
1refactoring/references/code-smells.md:78関連範囲まで一律に「直す」のは SKILL.md と衝突。MAY へ戻せ部分採用範囲は維持。SKILL.md との矛盾のみ解消
2refactoring/references/refactoring-catalog.md:65記録追加まで構造改善の完了条件にすると自己矛盾妥当記録可能な構造までに限定
3refactoring/references/lang-python.md:13pandas を一括演算と分類すると .apply() まで誤読される妥当ベクトル化演算へ限定

指摘 1 を部分採用にした理由

範囲の表(呼び出し元・呼び出し先・同一モジュールまでを対象とする)は、リポジトリ所有者の明示的な決定として維持します。 「変更予定のない領域は手を付けない」という以前の書き方だと、読みにくい領域が永久に整理されないまま残るため、今回意図的に範囲を広げたものです。codex はこの決定の背景を持たない状態で以前の状態へ戻すよう求めているため、範囲の縮小は行いません。

ただし、指摘が突いた内部矛盾は実在したため、そこだけ解消しました。

  • SKILL.md「途中で止める条件」の基準を、依頼の文面から定義済みの範囲へ変更
    • 「差分が依頼範囲を超えて広がった」→「差分が code-smells.md の『手を付ける範囲』を超えて広がった」
    • code-smells.md 側の「差分が依頼範囲を大きく超えるなら」も上表の範囲基準へ統一
  • code-smells.md「手を付ける範囲」に、機械的に増やさないための条件を追加
    • 範囲内でもスメル一覧のどれにも当たらない箇所は直さない
    • 手順(1 手ずつ・現状固定テストで守る・差分を分ける)は範囲を広げても変わらない

結果として、範囲は広いまま、範囲内で直す対象はスメル一覧に該当するものへ限定され、手順による安全弁も維持されます。

指摘 2 / 3 の対応

2.refactoring-catalog.md「対応表への置き換え」の手順を「識別子と版を表から取り出せる形にする」へ変更し、「実際に記録を出す実装は振る舞いの変更なので、要件がある場合に別の変更として出す」を追記。data-representation.md「判断を記録できるようにする」の冒頭も「記録できる構造を保って完了」へ整合させました。

3.lang-python.md の一括処理を「NumPy / pandas のベクトル化演算(一括演算)」へ限定。他の lang-*.md も確認し、JS/TS は「一括 API / Promise.all(並行)」、PHP は「一括入出力」と、いずれも実行方式の表記であり同種の問題はありませんでした。

検証

配布物は bash 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

@codex@gemini 再レビューをお願いします。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 12 | codex | APPROVE

ブロッカーはありません。明確な事実誤認 1 件の修正を提案します。

Comment threadplugins/ndf-shared/skills/refactoring/references/lang-php.md Outdated

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 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

Copy link
Copy Markdown
ContributorAuthor

🧹 cross-review 最終スイープ (Step 7.5 / /ndf:fix)

round 12 で codex / gemini とも APPROVE。APPROVE のまま残っていた minor 1 件を処理し、未解決 thread は 0 件になりました。commit: a93b92d

#指摘元対象再判定対応
1codexplugins/ndf-shared/skills/refactoring/references/lang-php.md:88minor(妥当)array_columnarray_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 件

@takemi-ohama
takemi-ohama merged commit 07767ab into mainAug 15, 2026
7 checks passed
takemi-ohama added a commit that referenced this pull request Aug 15, 2026
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 した。
@takemi-ohama
takemi-ohama deleted the feature/analyzable-coding-skill branch August 15, 2026 04:08
Sign up for freeto 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

@takemi-ohama