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 validate、 ADR-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 で別途規定)。
各 folio 原則の品質 enforcement を以下の 2 層に役割分離する。 同一原則を二つの重い機構で冗長に守らず、 機械化可能な部分集合は floor、 意味的残余は ceiling と分担する。
| 層 | 機構 | 性質 | タイミング |
|---|---|---|---|
| deterministic floor | folio validate gate | 決定的・機械化可能部分集合 | merge / CI (強制) |
| LLM ceiling | Phase F review agent | 意味的 nuance (floor が捕れない新規 synonym 等) | authoring (folio-architect、 advisory) |
以下 3 gate を folio validate の deterministic gate として実装する (ADR-0020 の validate scope を 2-gate + broken-reverse から拡張)。
folio.config.yaml の vocabulary map か専用 spec) は実装時 (WS1) に確定。ears-shall span / data-ears-pattern markup の presence / count を検査 (rules §6)。 rules §10.2 の warn 設計 (merge 許可) を踏襲する。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 とする。
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)。
新 deterministic gate は REQ-VER-013 (validate) 傘下で sandbox scenario (validate-clean / validate-violations 拡張) により決定的に検証する。 LLM ceiling 側 (011/012 の agent 検出) は REQ-VER-016 (b) の検出有無 assertion に従う。
実装物 (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 承認後に決定。
| 案 | 採用可否 |
|---|---|
| 二層モデル + 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 保持 |
folio validate gate 追加 (013/014/015) + vocabulary config + sandbox scenario 拡張 + GitHub Actions CI + rules §10.2 / §7.5 enforcement 実体注記 + verification §4.2 reconcile。