EQ_S3B_STAGE_PLAN r02（P28-02-EQ 段階 S3b。EQ_S3B_STAGE_PLAN（r01）は、そのまま有効。この r02 は、r01 の E4 の経路 1 の「引数の選び方」（施設の定義の列挙元）だけを置き換える。SPEC、TASK、6条件、eq/references、eq/registration、補足 r01/r02/r03、段階の計画 r01/r02、S3 の計画 r01/r02 は変更しない）

0. 訂正の理由（計画の参照の誤り。製品・仕様の変更ではない）
- r01 は、施設の定義の一覧を mvp_content_catalog から取るとしていた。しかし scripts/data/mvp_content_catalog.gd:26-31 の DEFAULT_PATHS は人物の4種だけで、施設を含まない。そこから列挙すると一覧が空になり、「配置できる組が無い」という NA が誤って成立してしまう。
- 施設の定義は、autoload/simulation_runtime.gd:446-447 で、FacilityCatalog の FACILITY_PATHS、INFRASTRUCTURE_FACILITY_PATHS、RESCUE_FACILITY_PATHS、ORIGINAL_FACILITY_PATHS、TRANSPORT_FACILITY_PATHS から runtime.definition_registry に登録される。preview_build_facility（:7660）も、同じ definition_registry.get_facility を使う。
- run 7da027a85548460bb008b562a79a52ae の worker は、この誤りを指摘し、空の一覧を NA にせず blocked で返した。これは正しい判断であり、失敗ではない。

1. E4 の経路 1 の引数の選び方（r01 の該当の箇条を置き換える）
- 列挙元: R と O のそれぞれで、その PID の runtime の definition_registry.get_facility_ids()（scripts/core/definition_registry.gd:68-69。Array[StringName]）。R と O の両方とも、元の実際の施設の registry から候補を取る。別の catalog、固定の ID の一覧、R の結果での O の代用は使わない。
- 順序: 取得した ID を、文字列としての ID の順序（String(id) の昇順。Python 側の記録は Unicode の code point の順序）に並べる。registry の登録の順序は、取得した生の一覧として別に記録する。
- cell の走査: r01 のとおり、(x, y, z) の辞書順。走査の範囲は、その版の世界の公開の寸法から、固定の規則で決め、その規則と範囲を記録する。rotation は 0 に固定する（他の値は試さない）。
- 判定: 製品の公開の SimulationRuntime.preview_build_facility(definition_id, origin, rotation) だけを使う。ID の順序の外側のループ、cell の順序の内側のループで、最初に配置できると返った組を選ぶ。
- 実行: 選んだ組で submit_command(&"build_facility", {definition_id, origin, rotation})（:476、:305、:7717-7720）を submit する。記録の時点（submit の直後と、advance_minutes(1) の後）は r01 のとおり。

2. 保存する記録（R と O のそれぞれ）
- get_facility_ids() の生の一覧（登録の順序）と、その件数。
- 並べた後の一覧と、並べ方の規則。
- cell の走査の規則と範囲。
- 試した各候補（definition_id、origin、rotation）と、preview_build_facility の戻り値の全体（typed tree）。試行の件数が多い場合も、全件を記録する（省略しない）。
- 選んだ候補と、その submit の戻り値と、command の結果。
- 適用しなかった場合の理由。

3. NA の条件
- NA にしてよいのは、get_facility_ids() の実際の一覧が空でなく、走査の範囲の全ての組で preview_build_facility が配置できないと返した場合だけ。そのときは、上の 2 の全ての記録とともに、理由つきの NA とする。
- 一覧が空の場合は NA にせず、registry の取得の誤りとして失敗にし、その事実を記録する。間違った列挙元や空の一覧からの NA（false NA）は禁止する。
- NA を PASS として数えない。施設の値を作らない。この経路の外で建設しない。
- check_eq.py に、次の拒否を加える: 列挙元が definition_registry.get_facility_ids() 以外であること、空の一覧での NA、preview の記録が無い候補の選択、試行の記録の欠落、並べ方の規則の違反、R と O で列挙元が違うこと。

4. 変更しないこと
- E4 の経路 2〜5、E5 の 4×2×2、全ての状態とイベントの typed tree での記録、既存の aliasing の不具合としての記録、S1/S2/S3a の型・path・schema・API・code の再利用、E3 と既存の91件の試験の本体と失敗の履歴（失敗した試験が求める修正を除く）、engine を使わない python3 test_eq.py の全件 PASS と生出力の保存、PROGRESS.md の更新、正式な JSON の status を blocked にし findings を「段階 S3b 完了（失敗ではない。次は S4）」とすること、提出しないこと、engine・git の書込み・製品の変更・全回帰をしないこと。いずれも r01 のとおり。
- 通常の実装上の判断は、記録して進める。
