engine epic folio-0dv は folio の文書規律を一般化した汎用文書生成エンジンを構築する (engine 設計 doc)。 その §3 は doc-type を跨ぐ照会 graph (主張 → 根拠 → 探索 → … → 原則 終端) を、 §4 は WHAT/WHY と実装 HOW を分離する HOW-outside を design intent として置いた。 B1–B4 (clinic ADR / core 抽出 / research pack / principle pack) は per-pack の照会検証 (verify_cross_doc_refs = contract YAML を SSoT に各 doc 内の cross-doc 照会の存在と SET 一致を検証) を実装・実証した。
第一の gap — 局所照会では graph 全体の終端到達を保証できない。 per-pack verify は「この doc が宣言する照会先が存在するか」を局所に検査するが、 corpus 全体を 1 つの graph として見たとき「全チェーンが原則 (principle) 終端へ到達するか」は検査しない。 原則へ繋がらない孤立ノードや、 受け手の無い phantom 照会が局所検証を素通りしうる。 「根拠を原則まで全部見せて」という engine の北極星 (doc-type を跨ぐ説明可能性) は、 graph-level の終端完備性を保証して初めて成立する。
第二の gap — HOW 混入に強制機構が無い。 design-intent 文書 (WHAT/WHY) に実装/環境固有の HOW (P-3 portability 違反・P-11 の具体 primitive) が紛れ込むと、 文書が特定実装に癒着し portability と読みやすさを損なう。 だが B4 時点で HOW 混入を止める機構は助言的 lens 1 本のみで、 CI hard gate は存在しなかった。
B5 (folio-983) の設計 grill (2026-06-21) は reader 要約でなく実 corpus と現行機構を read-only で精査する grounding sweep を 3 本走らせ、 検証済事実に基づき 7 論点を詰めた。 sweep は地図に無かった重大事実 — 終端の 2 系統分裂 / inbound.from の完全無検査 / HOW-leak の hard gate ゼロ / userConfig の runtime 未読 — を炙り出し、 配布方式の推奨を案A から案C へ反転させた。 本 ADR はその確定設計を、 実装 + 検証 (engine §10 の 3 子セルが land 済) 後に forward decision として記録する。
(a) rolemap — pack ごとに rolemap (node-type → 抽象ロール 〔claim / rationale / exploration / verification / principle / implementation〕 の写像表) を pack 側 SSoT として宣言する。 抽象ロールにより「主張 → 根拠 → … → 原則終端」の統一 edge を doc-type 跨ぎで定義でき、 P-5 (1 entity = 1 canonical name) を保ったまま「根拠を原則まで辿る」が成立する。 リーダーは core (additive) に置き、 scope 内 edge のロールは floor で edge.role == rolemap[node.type] を pin する (co-author + enforce = ADR-0033 の規律を踏襲)。 corpus からの draft → 明示宣言 → pin が二重担保となり、 ロールの不在 (例 SRS の exploration 不在) は scan で実証解決する。
(b) reachability — 照会の真の SSoT は contract YAML (ADR-0034 の xref graph を格納・描画基盤に再利用、 HTML data-* は描画用 projection ゆえ別表現への転写を避ける)。 独立 script が contract/ を集約し edge union を作り、 principle 終端への到達可能性を 1 計算で {終端完備 / 孤立 = warn / 逆方向 = 局所} に展開する。 終端は domain-local principle を許容する (ADR inline の原則を graph node に昇格 = repo-local 完備と整合)。 孤立は方向ゼロでなく到達可能性で定義し、 改訂来歴 (amended_by) は meta-edge として reachability から除外する。 既存 core 関数は不変、 graph traversal は独立 script に置く。
design-intent (WHAT/WHY) 本文には HOW を埋めず、 実装/検証 (HOW) へは照会リンクで繋ぐ content boundary を二段 floor + ceiling で強制する。 floor-1 = 照会リンク存在 (本文 <a href> の link-integrity 延長)。 floor-2 = P-11 4-enum の保守的検出 — 環境変数の具体値 / バイナリ path / OS コマンド / 明示ツール起動という明示 primitive の有無を可視テキストから構文検出する。 明示 primitive の有無は意味判定の射程外ゆえ ADR-0028 の prose-gate 精度懸念に当たらない。 ceiling = 概念 HOW (P-3 portability 依存の記述) を既存 spec-review-ssot lens の強化で advisory に検出する (新 agent 不要)。 scope = spec_path (design-intent 空間)・HOW の住処である plugin harness は対象外。 floor-2 は誤検出率を実測する staged rollout を採り、 当初は soft-warn (exit 非影響の advisory) で着地させ、 許容内と確認後に新 ADR (P-10 user 承認) で CI hard gate へ昇格する。
§2.1/§2.2 の規律を 3 つの層で consumer へ配布する。 配布方式は plugin 固定 (新 userConfig 変数 0) — userConfig は runtime 未読 (base_url のみ実読) ゆえ「userConfig 拡張」は新機構実装を要し不採用 (§4)。
folio prime 出力に追記し SessionStart で常時 baked。 progressive disclosure の Tier 1 (= node/edge 数 + 被参照数上位、 詳細は inventory を Tier 2/3 で参照) で文脈を圧迫しない (enforcement の tier1 とは別概念)。CEILING=PENDING の advisory で CI を gate せず、 floor ∧ ceiling の真 GREEN は人間 ratify を要する (ADR-0028 一般化)。contract/ 内 = 厳密検証 / contract/ 外 (folio-self の inbound.from・amended_by.adr) = external-ref として warn し解決は B6 (folio が consumer 兼 engine となる self-dogfood)。 これで B5 は自完結を保ちつつ phantom 照会を silent に通さない。verify_cross_doc_refs / inject-prose) は byte-identity 非回帰を維持し、 graph traversal は独立 script に置く。 rule-of-three の「pack 追加は core 不変」(B4 で MET) とは別軸の capability 追加。folio prime の出力量を僅かに増やす (progressive disclosure で緩和)。 contract/ 外照会 (folio-self への inbound・amended_by) は B6 まで warn 留め。verify_cross_doc_refs が YAML を source に HTML と SET 一致)。 別表現への転写は二重 SSoT = drift 源ゆえ、 contract YAML を graph 検証 SSoT に据え HTML data-* は描画 projection と位置づける。base_url のみ実読) と判明し、 「userConfig 拡張」は新機構実装を要すると分かった。 plugin 固定 (新 config 変数 0・hook 1 本 + prime 追記) なら全 consumer に自動適用でき実装も最小。 consumer 独自 doc-type は実需要ゼロゆえ YAGNI follow-up。design-of-record (探索): engine §10 (research domain・路線「い」 = research に留め実証後 ADR 昇格)。 一般化元: ADR-0028 (二層 enforcement モデル — 決定的 floor / 意味的 ceiling / CEILING=PENDING を engine の照会 graph・HOW-outside へ拡張)・ADR-0007 (SessionStart 注入を tier1 digest へ拡張)。 基盤: ADR-0034 (xref graph を照会 graph の格納・描画基盤に再利用・contract YAML を SSoT)。 継承: ADR-0033 (co-author + enforce を rolemap pin が踏襲)。 規範化先: rules.html (照会 graph / rolemap / HOW-outside contract)・verification.html (graph floor + HOW floor の REQ)。 原則接地: P-3 (WHAT/HOW 分離) / P-7 (3-domain) / P-11 (HOW の隔離) / P-10 (ADR 昇格は user 承認)。 追跡: bd engine epic folio-0dv / B5 folio-983 (子 folio-p4o = graph 終端完備検証 commit 1c48156 / folio-6us = HOW-outside gate commit 2c49a74 / folio-hi6 = tier1/2 配布 + CI 統合 commit 59f3fc9)。 follow-up: folio-pgb (floor-2 hard-gate 昇格・needs-user) / folio-ulz (孤立 SRS warn→block policy・needs-user) / folio-0v0 (rules.html の HOW primitive 言い換え) / folio-1sn (rolemap allowlist 一本化)。 B6 前払い: 照会 graph helper を doc-type 非依存で core に置き folio 自身の横断 graph へ転用し、 folio-self-spec の HOW 参照の <a href> 昇格を B6 (folio-qf1) self-dogfood の deliverable とする。 決定の経緯: user grill 2026-06-21 (grounding sweep 3 本で検証済事実に基づき 7 論点を詰め、 配布推奨を案A → 案C へ反転) + B1–B4 実証 (per-pack 照会検証が load-bearing と確認)。 version: 本 ADR 文書版 = 1.0.0 (記録する実装は engine epic folio-0dv・後方互換 capability 追加)。