ADR-0028 — X5-γ 二層 enforcement モデル + prose-gate 機械化 (validate に REQ-CI-013/014/015、 011/012 は agent-only、 minimal CI)

Status: accepted · Date: 2026-05-26 · folio v0.5.0-draft · forward (X5-γ、 user 承認済 (AskUq 方向性 γ)、 実装は本 ADR 承認後)

§1. Context

rules.html §10.2 は 7 CI gate (REQ-CI-010〜016) を規定するが、 現状 deterministic に実装済なのは REQ-CI-010 (link-integrity) と REQ-CI-016 (json-ld-validation) の 2 gate のみ (folio validateADR-0020)。 残る REQ-CI-011〜015 (prose gate) は table 宣言のみで ADR-0020 が X4+ 完成形へ defer 済。

一方 ADR-0027 (X4-D) が Phase F に LLM review agent 3 個 (ears / vocabulary / ssot) を導入した。 ここで prose gate と review agent が同一 folio 原則を二重に守る緊張が顕在化する: REQ-CI-013 vocabulary ⟷ spec-review-vocabulary (P-5)、 REQ-CI-014 EARS-coverage ⟷ spec-review-ears (§6)、 REQ-CI-011 declarative-form ⟷ temporal 軸 (P-4)、 REQ-CI-012 what-only ⟷ spec-review-ssot (P-7境界)。

X5 方向性として user は γ (選択的完成) を選択 (AskUq、 「長期的に安定する folio plugin」 が目標)。 γ は完成形を額面通り全 build せず、 価値が重複しない要素のみ実装する。 本 ADR は prose gate 群の enforcement 方式をこの γ 方針で確定する (agent セットの確定は ADR-0027 を承けた companion ADR で別途規定)。

§2. Decision

§2.1 二層 enforcement モデル

各 folio 原則の品質 enforcement を以下の 2 層に役割分離する。 同一原則を二つの重い機構で冗長に守らず、 機械化可能な部分集合は floor、 意味的残余は ceiling と分担する。

機構性質タイミング
deterministic floorfolio validate gate決定的・機械化可能部分集合merge / CI (強制)
LLM ceilingPhase F review agent意味的 nuance (floor が捕れない新規 synonym 等)authoring (folio-architect、 advisory)

§2.2 prose-gate 機械化 (validate 拡張)

以下 3 gate を folio validate の deterministic gate として実装する (ADR-0020 の validate scope を 2-gate + broken-reverse から拡張)。

§2.3 agent-only に留める prose gate (hard gate 化しない)

REQ-CI-011 declarative-form (P-4) と REQ-CI-012 what-only (P-3 / P-11) は deterministic hard gate 化しない。 意味的判定であり機械化精度が低く false positive / negative が大きいため、 §2.1 の LLM ceiling のみで担保する (authoring advisory): 011 は temporal 軸 review agent、 012 は spec-review-ssot。 rules §10.2 table の 011/012 は規範として保持するが、 その enforcement 実体は CI hard gate でなく Phase F agent とする。

§2.4 minimal CI

GitHub Actions で PR ごとに folio validate (全 deterministic gate) + tests/runner.sh (sandbox) を auto-run し merge gating する。 verification.html §4.2 「完成形 = 全 scenario PR ごと auto-run + merge gating」 の軽量版。 Inspect AI / Promptfoo 移行は DEFER (独自 bash runner が folio 規模で十分、 §4.2 は WS で optional / future に reconcile)。

§2.5 verification (REQ-VER)

新 deterministic gate は REQ-VER-013 (validate) 傘下で sandbox scenario (validate-clean / validate-violations 拡張) により決定的に検証する。 LLM ceiling 側 (011/012 の agent 検出) は REQ-VER-016 (b) の検出有無 assertion に従う。

§2.6 適用範囲

実装物 (WS1 / WS4): .claude-plugin/bin/folio validate への gate 追加 (013 / 014 / 015) + vocabulary config + sandbox scenario 拡張 + GitHub Actions workflow + rules §10.2 / §7.5 の enforcement 実体注記 + verification §4.2 reconcile (Inspect AI = future)。 実装方式 (PARENT 一括 / SPAWN feature-dev) は本 ADR 承認後に決定

§3. Consequences

Positive

Negative

Neutral

§4. Alternatives Considered

採用可否
二層モデル + 013/014/015 機械化 + 011/012 agent-only (採用)各原則の性質 (機械化可能性) に応じた最適配置。 CI に決定的 floor、 authoring に意味的 ceiling (AskUq γ 方針)
REQ-CI-011〜015 を全機械化 (validate に 5 gate)不採用 — declarative-form / what-only は意味的で機械化精度が低く、 決定的 hard gate 化すると false positive で merge を不当 block
REQ-CI-011〜015 を全 LLM 化 (validate が LLM を呼ぶ)不採用 — 非決定的・低速・API 依存で CI gate が不安定。 validate の決定性 (ADR-0020) を破壊
prose gate を作らず Phase F agent のみ不採用 — CI に deterministic floor がなく、 PR で回帰を merge gate できない (LLM agent は authoring advisory で gate 不可)
Inspect AI / Promptfoo へ全面移行不採用 / DEFER — 独自 bash runner (tests/runner.sh) が現 folio 規模で十分。 完成形候補として §4.2 に future 保持

§5. Trace