Skip to content

.ndf/ を追跡するかが Skill の間で食い違い、ルートの .gitignore が .ndf/ を外していても project-mvv.py approve は気づかずに成功する #2157

Closed

Description

@takemi-ohama

何を見つけたか

.ndf/ をリポジトリで追跡する(コミットして共有する)かどうかが、Skill の間で食い違っている。 そのため、リポジトリのルートの .gitignore が .ndf/ を丸ごと外していても、NDF はどこでも気づかずに進む。

場所 書いてあること
skills/development-workflow/references/project-analysis.md:104 「宣言はメインディレクトリの .ndf/ に書き、コミットは利用者に任せる。要らなければコミットしない。.gitignore の対象なら、そのことが出力に出る」
scripts/supervise_lib/commands.py:102 「.ndf/ を追跡しないリポジトリの宣言」を、正規の場合として扱う
skills/development-workflow/references/project-mvv.md:61(策定の 8) 「.ndf/mvv.md・.ndf/mvv.json をコミットし、通常の Pull Request で届ける」。コミットできることが前提になっている
skills/development-workflow/references/handoff.md:24 .ndf/handoff/ は「コミットしない。.gitignore にも書かない」
scripts/worktree-setup.sh:108 .ndf/.gitignore には worktree.local.json だけを書く(既にあれば触らない)

ai-plugins・devbase・novel では、.ndf/ を追跡し、.ndf/.gitignore で worktree.local.json だけを外している。これが事実上の標準だが、そう書いた Skill は無い。

どこで見つけたか

volareinc/carmo-system-console でプロジェクト MVV を策定したとき(ndf 10.23.0、2026-10-29)。

  • このリポジトリのルートの .gitignore は、/ndf:worktree を導入したときに .ndf/ を丸ごと除外していた(「各自の環境で持つ。共有しない」)。当時の worktree.json に、手元の作業状況に依存する base_branch が入っていたため
  • project-mvv.py approve は .ndf/mvv.md・.ndf/mvv.json を書いて成功(0)を返した。8 の「コミットして PR で届ける」に進もうとして、初めて git check-ignore で除外に気づいた
  • approve・check・vet のどれも、除外されていることを出さない。気づかなければ、MVV は書いた人の手元だけで効き、ほかの人の環境や CI には届かない。承認ゲートで人が見る(C7)という前提も成り立たない
  • ルートの .gitignore から .ndf/ を外し、標準の .ndf/.gitignore を置いて解決した(volareinc/carmo-system-console#18927)

決めてほしいこと

  1. .ndf/ は追跡するのが標準だと、1 か所で定める。 個人の値は worktree.local.json(.ndf/.gitignore)、実行時の出力は handoff/・tmp/ の決まりで外す。project-analysis.md:104 の「コミットは利用者に任せる」と、supervise_lib の「追跡しないリポジトリ」をどう扱うかも合わせる
  2. 共有が前提の宣言を書くコマンドは、除外を検出して出す。 project-mvv.py approve / check、project-decl.py write、glossary.py init など。少なくとも approve は、「書いたがコミットできない(<.gitignore の行> が除外している)」を 1 行出す
  3. ファイルごとにチームで共有するか個人で持つかの区別は .ndf/ の定義ファイルに作成・更新の定義が無く、チーム単位と個人単位の区別と .gitignore による分離も無い #1512 で扱っている。この issue は、.ndf/ 全体を追跡するかと、除外されていることを検出する部分に絞る

受け入れ条件

  • 一時のリポジトリでルートの .gitignore に .ndf/ を書いて project-mvv.py approve を打つと → 結果は除外されていること(除外している .gitignore の行と、対象の .ndf/mvv.md・.ndf/mvv.json)を items か要約に出す。status: ok・items: [] の素の成功では返さない(note を添えた ok にするか ok 以外にするかは設計で決める)
  • 同じ一時のリポジトリで、共有が前提の宣言を書く・確かめる他のコマンド(project-mvv.py check、project-decl.py write、glossary.py init)も → 除外を同じ形で出す
  • 退行しない: .ndf/ が追跡され、.ndf/.gitignore が worktree.local.json だけを外すリポジトリでは → approve は今と同じく exit 0・status: ok で、除外の note を出さない
  • 「決めてほしいこと」1(.ndf/ を追跡するのを標準とするか)はどちらの判断でも、上の検出の条件はそのまま成り立つ。判断の結果は Skill の 1 か所に書かれ、project-analysis.md・project-mvv.md・handoff.md・supervise_lib/commands.py の記述がそれと食い違わない

修正レイヤー

親 #2227(全工程の結果を統一した JSON レポートにし、失敗・未収束・未記録を ok で返さない)。宣言を書くコマンドに共通の層(scripts/lib)で除外を確かめ、ok に note を添えるか ok 以外を返す。前例は project-decl.py の _gitignore_note。一時のリポジトリで .ndf/ を除外して project-mvv.py approve を打つと exit 0・status: ok・items: [] で、git check-ignore は .ndf/mvv.md・.ndf/mvv.json を除外対象と返す。「決めてほしいこと」1 は利用者の判断として残る。

進行

モード: — / 進め方: auto

  • 要求と受け入れ条件
  • 作業場所の用意 — 2026-10-31 03:59
  • 設計
  • 素材の収集と出典の確定
  • ドキュメント再構成
  • ドキュメントレビュー
  • 計画 — 2026-10-31 03:58
  • 実装 — 2026-10-31 04:59
  • 構造改善 — 2026-10-31 07:37
  • 実装レビュー — 2026-10-31 09:12
  • 完了判定 — 2026-10-31 05:07
  • Pull Request — 2026-10-31 05:20
  • 確定仕様化 — 2026-10-31 10:59
  • 後片付け — 2026-10-31 10:57
  • 配布 — 2026-10-31 10:33
  • 体裁レビュー
  • リリース後テスト — 2026-10-31 10:56
  • 振り返り — 2026-10-31 11:00
  • 棚卸し — 2026-10-31 11:21

振り返り: #2282 (comment)

Activity

  1. added a commit that references this issue on Oct 31, 2026
  2. takemi-ohama commented on Oct 31, 2026

    @takemi-ohama
    ContributorAuthor

    スプリント(26 自律実行の信頼性のスプリントを閉じる)を通りました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions