## 何を見つけたか cross-refactoring の `init` は、テストの戦略を解く宣言(`.ndf/project.json`)を、Pull Request のブランチの作業ツリー(`work/`)ではなく、**clone したディレクトリ(メインディレクトリ)の宣言から先に読む**。このため、Pull Request が宣言を変えていても、その変更が戦略に入らない。 実行 rf1673(スプリント m1649・PR #1673、NDF 10.17.56)で起きた。 1. 着手の地点 `f85a64fe`(`sprint/m1649`)の宣言には、#1668 が足した静的解析の suite `script-structure` がある 2. 状態ファイル(`cross-refactoring-rf1673-state.json`)の `strategy.suites` は `pytest` の 1 本だけで、静的解析の suite を持たない 3. 同じ時刻(2026-10-03 02:46 UTC)のメインディレクトリは `develop`(`4ed8982d`)で、その宣言に静的解析の suite は 0 本だった 4. 原因の箇所: `plugins/ndf/scripts/lib/project_decl.py` の `read_project_decl_checked` が `repo.main_dir(root)` を `root` より先に探す。cross-refactoring の `init`(`refactor_lib/commands/setup.py` の `project_decl.read_project_decl(str(work))`)はこれを呼ぶ この結果、項目の検証で静的解析の範囲テスト(`targets.lint_runs`)が組まれず、`gate.py` を 509 行にした I-014 が自分の検証で落ちなかった(#1693 の設計の未決 1 で確かめた)。 ## どこで見つけたか - #1693 の設計(`issues/issue-1693-design.md` の「未確認のまま残ること」と決定の記録) - 実行 rf1673 の状態ファイル `/tmp/ndf-worktrees/devbasex--ai-plugins/rf1673/work/.cross_refactoring/cross-refactoring-rf1673-state.json` の `strategy` ## なぜこの変更の範囲外なのか #1693 の受け入れ条件は、宣言から解いた静的解析の suite を項目と最終ゲート修正の検証に当てる経路を扱う。宣言をどのディレクトリから読むかは、cross-refactoring だけでなく `project_decl` を使うすべての Skill(supervise・cross-review ほか)の契約に関わり、#1693 の対象範囲の外にある。現象の場所(cross-refactoring の戦略)と原因の場所(共通の層の宣言の読み込み)が違うため、共通の層で直す。根拠: Value 6(MVV 版 2)。 ## 修正レイヤー - 現象レイヤー: cross-refactoring の状態ファイルの `strategy` に、Pull Request の宣言の suite が入らない - 修正レイヤー: `plugins/ndf/scripts/lib/project_decl.py` の読む順序、または呼ぶ側が読む場所を指定する契約 - 修正方針: Pull Request のブランチを検証する工程(cross-refactoring の `work/`)では、その作業ツリーの宣言を先に読む。メインディレクトリを先に読む理由(worktree に宣言が無い場合の補い)を残すかは設計で決める ## 直さないと何が起きるか - 宣言を変える Pull Request(suite を足す・雛形を直す)では、cross-refactoring が古い宣言で検証し、足した検査が項目の検証に効かない - 項目の違反が自分の検証で落ちず、同じ検査を全体で走らせる別の項目の範囲テストや、push 前の検査で初めて見つかる(#1688・#1693) ## 由来 #1693 の設計(未決 1 の確認)で見つけた。 ## 再発(2026-10-30) - スプリント m2170 の検査(PR https://github.com/devbasex/ai-plugins/pull/2192 )で、スプリントブランチへ足したテストの suite(`factory`、PR https://github.com/devbasex/ai-plugins/pull/2193 )が `read_project_decl_checked` のメインディレクトリ優先で読まれず、factory/ の `*.test.ts` が pytest の suite へ振られて範囲テストの雛形の確認で止まった - 回避: メインディレクトリの `.ndf/project.json` へ同じ suite を手で足して打ち直した ## 閉じた理由 直っています。設定の読み順を lib/decl.py に集めた変更(#2336、コミット f4cdad002)で、.ndf/project.json は呼ばれた作業ツリーの宣言を先に読み、無いときだけメインディレクトリへ戻るようになりました。一時の git worktree で、メインに suite 1 本、作業ツリーに pytest と script-structure の 2 本を置いて project_decl.read_project_decl_checked を作業ツリーから呼ぶと、作業ツリー側の 2 本が返ることを確かめました。
Activity
docs(design): #1693 静的解析の suite の有無の判定元を strategy.suites と明記し、#1709 ま…
Fix: 認可に関わる設定(delivery・production_branch・runtimes.json)をメインディレクトリから読む(#…