Skip to content

[Fix] next-spec-id のブランチスキャンから is-ancestor フィルタを撤廃 (#196)#199

Merged
BlueEventHorizon merged 3 commits into
developfrom
fix/196-next-spec-id-branch-scan
Jul 13, 2026
Merged

[Fix] next-spec-id のブランチスキャンから is-ancestor フィルタを撤廃 (#196)#199
BlueEventHorizon merged 3 commits into
developfrom
fix/196-next-spec-id-branch-scan

Conversation

@BlueEventHorizon

Copy link
Copy Markdown
Owner

概要

  • forge:next-spec-id のブランチスキャンロジックが、base に追従していないアクティブブランチ(git merge-base --is-ancestor が false)を無条件に除外していたため、そのブランチ上の ID 衝突を検出できず誤った ID を採番していた不具合を修正
  • レビュー指摘を受け、周辺の関連不具合(fetch の stale ref、Issue 更新手順の並行実行衝突リスク、forge ToC の stale/破損)も併せて修正

背景

Issue #196: DocAdvisor リポジトリで feature/14-pyyaml-migration ブランチに既に ADR-007_pyyaml_adoption.md が存在していたにもかかわらず、next-spec-id が同じ番号を採番して衝突した。原因は get_scan_branches() が「base に追従済みのブランチのみ」をスキャン対象にしており、develop 側に後続コミットがあると feature ブランチが is-ancestor false 判定になりスキャン対象から漏れるため。

やったこと

  • scan_spec_ids.pyget_scan_branches() から is-ancestor フィルタを撤廃し、refs/heads/ + refs/remotes/origin/ の全ブランチを無条件でスキャン対象にした
  • git fetch--prune を追加(stale remote ref による ID 押し上げを防止。レビュー指摘対応)
  • get_scan_branches() の単体テストと --prune 検証テストを追加
  • plugins/anvil/skills/impl-issue の Issue 更新手順(references/phase-09-issue-update.md)を修正:
    • gh issue edit --body-file が本文の完全置換であることを明記し、既存本文取得 → 検証 → 結合 → 更新の手順を整備
    • 固定 /tmp/issue_body*.md パスを mktemp -d + trap によるユニークパスに変更(並行実行・前回残骸による誤結合防止。レビュー指摘対応)
    • TEMPLATE.md のコマンド例の重複を解消し、手順本体への参照に一本化
  • forge ToC(plugins/forge/toc/rules/)の stale 状態を修正。全38文書をフル再生成し、旧マージ経路で発生していた無関係エントリの二重エスケープ破損も解消

やらないこと(このプルリクエストのスコープ外とすること)

  • 全ブランチ無条件スキャンによるスキャン対象増加のパフォーマンス最適化(並列化等)は対象外
  • doc-advisor プラグイン(外部リポジトリ)の merge_toc.py 自体の二重エスケープ不具合の根本修正は対象外(本 PR では全文書フル再生成による回避のみ)

レビュー観点

  • scan_spec_ids.pyget_scan_branches() / fetch --prune の変更ロジック
  • phase-09-issue-update.mdmktemp 化した Issue 更新手順
  • forge ToC(rules_toc.yaml 等)は差分行数が大きいですが、フル再生成による全件書き換えです。内容面では plan_principles_spec.md / task_execution_spec.md のメタデータ更新が主眼で、他は表記の再シリアライズです
  • 本ブランチには本 Issue [Bug] next-spec-id: is-ancestor判定でbaseに追従していないブランチが除外され、ID衝突を見逃す #196 対応とは別に、他セッションで実施された「plan strategy 必読化」関連の2コミット(312bf55, 6689f3b)が含まれています

レビューレベル

  • Lv0: まったく見ないでAcceptする
  • Lv1: ぱっとみて違和感がないかチェックしてAcceptする
  • Lv2: 仕様レベルまで理解して、仕様通りに動くかある程度検証してAcceptする
  • Lv3: 実際に環境で動作確認したうえでAcceptする

備考

Closes #196

base に追従していないアクティブブランチ(is-ancestor が false)が
スキャン対象から除外され、ID衝突検出が漏れる不具合を修正。

レビュー指摘を反映:
- fetch に --prune を追加(stale remote ref による ID 押し上げ防止)
- impl-issue の Issue 更新手順を mktemp -d + trap 方式に修正
  (固定 /tmp パスの並行実行衝突リスクを解消)
- forge ToC の stale 状態を修正(全文書フル再生成、旧マージ経路の
  二重エスケープ破損を解消)

Closes #196
@BlueEventHorizon BlueEventHorizon self-assigned this Jul 13, 2026
@BlueEventHorizon
BlueEventHorizon marked this pull request as ready for review July 13, 2026 00:49
@BlueEventHorizon
BlueEventHorizon merged commit b018521 into develop Jul 13, 2026
1 check passed
@BlueEventHorizon
BlueEventHorizon deleted the fix/196-next-spec-id-branch-scan branch July 13, 2026 00:49
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