constitution P-13 (Verification & Traceability) は verification を 2 種に分ける: (a) spec 適合性 (spec graph の link-integrity / JSON-LD 構造 / 双方向完備 = folio validate が担う framework 提供の普遍検証、 専用 dir 不要) と (b) 実装適合性 (実装が spec を満たすかの test = project 固有)。
folio は ADR-0013 で sandbox verification framework の実体を verification/ dir に置き、 ADR-0022 がこれを architecture/ の sibling として canonical layout に組み込んだ。 しかし verification/ はfolio 自身 (bash plugin stack) の (b) impl-test dir にすぎない。 rules §2 / ADR-0022 / ADR-0024 (init) はこの verification/ をconsumer の canonical layout にも規定しており、 これは「(b) は project 固有」 という P-13 と矛盾する過剰規定である。
実際の stack 慣習: bash は tests/ (bats)、 Python は tests/ (pytest)、 Rust は tests/ (cargo)、 TypeScript は tests/ または __tests__/ (jest)。 verification/ という dir 名はどの stack の慣習でもなく、 folio が独自に導入した逸脱だった。 X4-F はこの test-placement model を P-13 整合へ是正する。
| verification の種 | 担当 | dir |
|---|---|---|
| (a) spec 適合性 | folio validate (framework 提供、 全 consumer 普遍) | 専用 dir なし (architecture/ spec graph を走査) |
| (b) 実装適合性 | 各 project の test 体系 (stack 固有) | 各 stack の慣習 location (tests/ 等)、 folio 非 mandate |
spec ↔ test の対応は REQ-ID (REQ-VER-* / REQ-CM-* 等、 location 非依存) で結ぶ。 test の物理 location は folio の関心外 (P-13 (b) project 固有)。
folio の sandbox verification 実体 dir を verification/ から tests/ へ rename する (folio の bash stack 慣習 = tests/ に整合)。 「verification」 は概念として存続する: (i) P-13 の verification 概念、 (ii) verification.html (folio の検証方法論 contract = sandbox-verified の SSoT)、 (iii) folio validate CLI、 (iv) REQ-VER-* ID はすべて改名しない。 rename するのはdir 名のみであり、 概念・contract・spec 名・REQ-ID は dir 名と独立に維持される。
folio は consumer の (b) impl-test dir の location を規定しない (P-13 (b) 尊重)。 具体:
verification/ を除去し、 「(b) test は consumer の stack 慣習 (tests/ 等) に置く、 folio 非規定」 と改訂する。 folio が govern するのは architecture/ の 3-domain のみ。folio init (ADR-0024) は test dir をscaffold しない (verification/.gitkeep 生成を除去)。 init の seed は architecture/{spec,decisions,research}/ + cluster README + architecture/spec/{constitution,overview}.html starter + folio.config.yaml に縮小。 consumer は自 stack の test runner (pytest/cargo/jest 等) が期待する location に test を置く。是正後の model: architecture/ (design-intent、 folio govern・普遍) + folio validate ((a)、 普遍・dir なし) + <stack test dir> ((b)、 全 stack 慣習、 folio 非 mandate)。 folio 自身は tests/ を採るが、 これは bash stack 慣習の de-facto 採用であって consumer への mandate ではない。
本 ADR は以下を revise する (部分。 各 ADR の他の決定は不変ゆえ dc:replaces でなく dc:references + 本 § で trace):
verification/」 → sibling tests/ に。 §2.1 の consumer canonical layout への verification/ 包含を非規定に。 3-domain / sibling 概念 / Diátaxis 除去 / fix 命名は不変。verification/.gitkeep 生成を除去。 idempotency / validate-clean guarantee / 標準 seed の他要素は不変。tests/ に追従、 framework 自体・契約は不変)。rename で移動する実ファイル (verification/e2e/runbook.md / observations-*.json / verification/scenarios/ 配下等) への frozen ADR 内 <a href> (ADR-0004 / ADR-0006 / ADR-0007 / ADR-0017 / ADR-0018 / ADR-0019) は href 属性のみ tests/ に rewrite する (link text は runbook / scenarios/ 等で path を含まないため表示不変)。 これは P-6 link-integrity 維持の link maintenance であり、 X4-C / ADR-0025 §2.3 で許容された frozen ADR cross-ref rewrite と同性質 (ADR 本文の決定改訂ではない)。 一方、 verification/ layout を決定した prose / tree 図 / 見出し (ADR-0013 / ADR-0022 / ADR-0024 等) の dir 名は historical record として据え置く (本 ADR が supersede を記録するため、 superseded ADR 本文の書換は ADR 不変性に反する)。
init の verification/.gitkeep 除去で scenarios/init-scaffold.yaml の golden tree を再生成する。 dir rename は spec @id (architecture/ 配下) を変えないため inventory relations は不変だが、 sandbox runner / scenario / baseline の path 言及は tests/ へ追従する。 REQ-VER-* ID と verification.html spec 名は不変ゆえ inventory.json の spec 集合・relation 構造は本 ADR 起票 (本 § の reverse materialize) を除き変わらない。
tests/ / __tests__/ 等) を自由に採れるtests/ となり、 bash/Python/TS/Rust 全 project で test dir 慣習が一致、 「verification/ vs tests/」 の混乱が消えるfolio validate として保ちつつ、 dir 名は stack 慣習に委ねる明確な model<a href> を touch する (href-only link maintenance、 §2.5)。 verification.html の REQ-VER-001 / 004 等 normative EARS の dir 言及も改訂verification.html と dir 名 tests/ の不一致が生じるため、 概念↔dir 対応を spec / CLAUDE.md に明記する必要がある (混乱防止コスト)git mv + runner.sh / scenarios / baselines / e2e / .gitignore / CLAUDE.md / README.md の path 更新を伴う広い diffverification.html spec 名・folio validate CLI は不変 (概念/contract は dir 名と独立)verification/ は executable HOW の sibling という ADR-0022 の位置づけ (P-3 / P-11、 design-intent 空間外) は tests/ でも不変| 案 | 採用可否 |
|---|---|
| verification/ → tests/ rename + consumer 非規定 (採用) | P-13 (b) 整合、 全 stack uniform、 概念/dir 分離 (AskUq: frozen-ADR href-only / init scaffold なし / PARENT 一括) |
consumer に tests/.gitkeep を init scaffold | 不採用 — 過剰規定先を verification/ から tests/ に替えただけで P-13 (b) 非 mandate に反する。 __tests__/ 等を使う stack で誤った前提になる (AskUq で「何も作らない」 を選択) |
verification/ dir を維持 | 不採用 — consumer への過剰規定 (P-13 (b) 矛盾) が継続。 stack 慣習からの逸脱も残る |
verification.html spec 名・REQ-VER-* も改名 | 不採用 — 「verification」 は概念 (P-13) / contract / CLI として dir 名と独立に存続すべき。 spec 名・REQ-ID の改名は trace churn が大きく利得なし |
| frozen ADR の prose / tree 図も全て tests/ に rewrite | 不採用 — layout を決定した superseded ADR 本文の書換は ADR 不変性に反する。 「rename の度に全 frozen ADR を書換」 前例は audit trail を毀損 (§2.5、 href-only に限定) |
verification/ dir の origin)。 ADR-0022 (verification sibling 確定、 本 ADR が dir 名 + consumer 適用を revise)。 ADR-0024 (init scaffold、 本 ADR が verification/.gitkeep を除去)。verification/ が consumer に過剰規定で P-13 (b) と矛盾) + AskUq (frozen ADR = href-only link maintenance、 init = test dir を scaffold しない、 実行 = PARENT 一括)。git mv verification tests + runner.sh / scenarios / baselines / e2e / .gitignore の path、 rules §2 改訂 (consumer test 非規定)、 verification.html の dir 言及 tests/ 化 + §2.2 用語整理 (black-box sandbox test [§4.1 in-scope] vs white-box 内部 unit test [§2.2 out-of-scope]) + REQ-VER-014 の init scaffold から verification/ 除去、 bin/folio init 修正、 frozen ADR href maintenance (§2.5)、 .claude-plugin/ placeholder 掃除、 CLAUDE.md / README.md 更新、 golden 再生成。