engine epic folio-0dv は folio の文書規律を一般化した汎用文書生成エンジンを構築する (engine 設計 doc)。 その §1 は self-dogfood endgame — 「rule-of-three の最終局面 = folio 自身をこのエンジンで dogfood する」— を北極星に置いた。 B1–B5 は engine を組み上げた: core 抽出 (ADR-0042 の決定的 assembler + opus prose)・4 pack (SRS / ADR / research / principle)・照会 graph と HOW-outside enforcement (ADR-0043)。 残る問いは engine が folio 自身の文書を再現できるかである。
構造ギャップ (grounding sweep で確認): (a) 既存 4 pack は SRS / ADR / research / principle のみで folio の design-intent doc-type (rules / self-spec / relations / verification) 用 pack が無い。 (b) architecture/ は手書き HTML で機械 SSoT (contract) が存在しない。 「源も受け皿も無い」のが endgame の構造的障壁である。
SRS-pack は使えない (2 blocker spike で実測確認)。 grounding 当初は「rules は EARS 要件が最多ゆえ SRS-pack に最も近い」と推定したが、 spike で assemble-srs.sh が RTM 三層連結 (上位事業ニーズ → 要件 → 受入基準を集合一致で fail-closed) を必須とすることが判明した。 folio の rules は EARS 規約だが事業ニーズも受入基準も持たない規範文ゆえ、 SRS-pack に挿せば捏造になる。 最も近い既存 pack は principle pack だが、 principle は照会終端 (前方照会を持つと verify FAIL) であり、 前方照会 を多数持つ rules とは終端不変条件が衝突する。 すなわち rules は SRS でも principle でもない第三ジャンルである。
B6 (folio-qf1) の設計 grill (2026-06-22) は scope を (B) 証明優先 — 1 pack + 1 文書 (rules) で「engine が folio 文書型を再現できる」を実証し、 残り 3 文書 (verification / relations / self-spec) は follow-up — と確定した。 本 ADR はその実装 (実装 cell folio-8ct = commit a33af5d) と独立 ceiling 検証 (wf_8367ac81) 後の forward decision を記録する。
folio の design-intent spec (rules / verification / relations) のための新 spec-pack を新設する。 schema は SRS (RTM 三層必須) でも principle (照会終端・tier ベース・EARS 無) でもない第三ジャンル = EARS 章立て規範文 + 前方 (非終端) 照会 + dual-audience。 構成 = assemble-spec.sh (決定的 assembler) / contract/folio-rules.spec.yaml (機械 SSoT) / verify-spec.sh (floor gate) / rolemap/spec.rolemap.yaml (照会 graph 接続) / prose/folio-rules.prose.yaml (opus prose スロット)。
★core (lib/) 無改変が B6 完成サイン: spec-pack は lib/{common,verify-common,graph-common}.sh + inject-prose.sh を 1 バイトも変えず純粋 pack として挿さる (git diff 空で実証)。 これは最も異質な doc-type (非終端照会・EARS 章立て・SRS の RTM も principle の tier も持たない instance#5) が core 無改変で挿さったことを意味し、 engine core 抽出完了の最終確証となる (ADR-0042 の hybrid 生成機構が doc-type 非依存であることの 5 例目の証拠)。 番号を出現順から計算する band() の CHAPN カウンタ等、 既存 core が新 pack に無改変で再利用される。
非終端照会の graph 接続: rules は前方照会 (constitution P-x / ADR / verification REQ-VER) を持つ非終端ノードゆえ、 rolemap/spec.rolemap.yaml が graph.principle_edge (rules → constitution・role=implementation・forward) を宣言し、 ADR-0043 の verify-graph.sh が FOLIO-RULES の principle 終端到達を実証する。 これにより rules は非終端ノードとして principle 終端へ到達し、 照会 graph 上で終端完備となる (B5 の external-ref warn 「inbound from rules.html」解消は §5 Trace 参照)。
contract (機械 SSoT) は HTML から機械抽出する one-shot bootstrap (scripts/extract-rules-spec.sh) で起こす。 rules.html は属性マーク済 (id / data-ears-pattern = SSoT / .ears-id / .section-essence / glossary / .xref) ゆえ構造化層を確実に抽出でき、 捏造リスクを最小化する (人間が contract をゼロから書く手動 author は rules の規模 〔29 spec-row〕 では転記漏れ risk が大きい)。 抽出器は HTML に存在する人間層 (section / EARS 要件 / essence / 表 / 図 / glossary / 照会) を contract 化し、 モデル化しなかった verbose な機械層 prose の件数を stderr に LOG する (no silent caps = 除外を可視化)。 位置づけは「既存 HTML を contract 化する一回限りの bootstrap」で、 以後は contract が SSoT、 HTML は生成物となる。
非破壊: 生成物は /tmp/folio-design-samples/b6-spec/ に置き、 architecture/spec/rules.html を一切編集しない。 validate golden を dirty にせず可逆。 byte-identity 一致は opus prose 充填ゆえ不可能で、 忠実性は内容等価で測る (P-14 人間可読性の生成物適用)。 現 HTML の置換は drift gate を要するため follow-up に繰延。
★自己参照独立 ceiling: folio が自身の spec を生成し、 それを同じ folio CLI (folio validate / verify-graph) で検証すると、 生成ロジックのバグと検証ロジックのバグが同一コードベースで相殺しうる (engine=oracle の fail-open)。 これを断つため、 忠実性判定には folio 自身の gate と独立した read-only ceiling (生成 HTML を原 rules.html + contract と別 agent で突合) を必須とする (ADR-0028 の二層 enforcement を engine≠oracle へ強化)。 とりわけ floor (verify-spec) は「生成が contract から導出されたか」しか検査できず「contract が rules.html を忠実に捉えているか (= 抽出の忠実性)」は構造上検査できないため、 独立 ceiling がこの死角を突く。 floor 単独通過は CEILING=PENDING で GREEN を機械的に禁ずる。
本 self-host が実証する主張水準を正直に限定する。 独立 ceiling (wf_8367ac81 = proof_sound) が確認した事実: 生成物は rules.html の人間層プレゼン を高忠実に再現する (12 section / 26 EARS 要件は規範文まで byte 一致 / 表 / mermaid / glossary 25 / 照会 30 / 捏造ゼロ)。 一方 data-audience="machine" の機械層 prose は extractor が非モデル化する。 ゆえに正当な主張は「engine が rules 文書型の人間層プレゼンを機械 SSoT から決定的・捏造ゼロで生成できる」であり、 「rules.html 全体 (dual-audience) を再現」と無限定に言うと overclaim となる。 この境界は生成物本文に開示する (cover-summary / 照会 lead に「人間層プレゼン であり機械層は source 参照」と明記)。 機械層も含む full dual-audience round-trip は folio-w1f に繰延 (これが完了すると北極星「非エンジニア×機械 両対応」の self-host が full 化する)。
assemble-srs.sh は RTM 三層連結 (上位ニーズ → 要件 → 受入基準) を fail-closed 必須とするが、 folio の規約文書は事業ニーズも受入基準も持たない。 挿せば存在しない上位ニーズ/受入基準の捏造を強いる。design-of-record (探索): engine §1 endgame (research domain・self-dogfood)。 基盤: ADR-0042 (hybrid 生成 = 決定的 assembler + opus prose スロット + 集合一致 fail-closed を spec-pack が無改変共用)。 継承: ADR-0043 (照会 graph 終端完備を spec-pack rolemap が踏襲し、 rules → constitution edge で B5 の external-ref warn を forward 接続)。 一般化: ADR-0028 (二層 enforcement を engine≠oracle の独立 ceiling へ強化・CEILING=PENDING)。 self-host target: rules.html (Layer 1 普遍規約)。 原則接地: P-3 (WHAT/HOW 分離 = 機械層 prose の非モデル化境界) / P-5 (1 entity = 1 canonical name = symbolic id 参照) / P-7 (3-domain = research/decision/spec) / P-10 (ADR 昇格は user 承認) / P-13 (WHAT↔HOW 束縛) / P-14 (人間可読性 = 生成物に適用・gate I)。 追跡: bd engine epic folio-0dv / B6 folio-qf1 (実装 cell folio-8ct = spec-pack + extractor + 生成 commit a33af5d / §0 errata = baefae8)。 検証: floor (verify-spec) PASS / 敵対 spec 38 + graph 19 / sandbox 40/40 / validate clean / core byte-identity / 独立 ceiling wf_8367ac81 = proof_sound・land-with-errata / user walk = gate I 北極星 MET。 follow-up: folio-w1f (機械層 dual-audience round-trip = full self-host) / folio-tr0 (残 3 文書 self-host) / folio-17n (spec-pack 専用 ceiling agents 制度化) / folio-4wz (core emit_glossary latent bug) / folio-2jr (spec-pack polish 束) / folio-wlu (§N symbolic section-ref の間接化)。 決定の経緯: user grill 2026-06-22 (grounding sweep + 2 blocker spike で SRS 不適合 = RTM 三層を実測確認・scope を (B) 証明優先に確定) + 独立 ceiling (engine≠oracle で抽出忠実性の死角を突き proof_sound / land-with-errata 判定) + user walk (gate I 北極星 「前より読みやすい」)。 version: 本 ADR 文書版 = 1.0.0 (記録する実装は engine epic folio-0dv・後方互換 capability 追加)。