入力順に依存する集約は2パスにする

ファイル群を順に読んで「定義(ノード・キー)」と「参照(エッジ・外部キー)」の両方を 集める処理で、あるファイルが後で読むファイルの定義を参照すると、処理順しだいで 前方参照になり KeyError で落ちる。入力の並び順(ファイル名ソート等)が意味的な 依存順と一致する保証はないので、1パスで組もうとすると順序バグが潜む

対策は2パスに分ける

  1. パス1(収集):全ファイルを走査し、定義(キー)だけを先に登録する。
  2. パス2(解決):もう一度走査し、参照を解決する。このとき全キーは既知。

こうすると結果は入力順に非依存になる。単一ファイル単体の検証では前方参照の 相手がまだ見えないので、単体チェックは「その場に無くても許す(既知集合に mentions 等を 足す)」ゆるめに、全体ビルドは2パスで厳密に、と検証の粒度を段階で変えるとよい。

  • 順序依存は再現条件が「ファイルを1つ足したら別の章が落ちる」の形で出るので、 前方参照を1件わざと作る回帰テストを必ず1本置く(plurality-graphtest_build_resolves_forward_reference)。
  • 実例:plurality-graph/build_canvas.py(章をまたぐノード参照の back-fill)。 canon: plurality-graph/README.md §実装ログ 2026-07-16。