ADR-0023 — X4-C scratch→architecture 物理 migration (canonical layout 実体化 + scratch 撤去)

Status: accepted · Date: 2026-05-26 · folio v0.5.0-draft · forward (X4-C、 user 承認済 (AskUq)、 実行は SPAWN + feature-dev)

§1. Context

ADR-0022 (X4-0) で canonical layout (architecture/{spec,decisions,research,assets} + verification/ sibling + hooks/ + .claude-plugin/) を確定し、 spec (folio-self-spec §2 / rules §2) に反映した。 ただし 物理実体は scratch/ のままで、 spec が architecture/ を記述しつつ実体が scratch/ という divergence が残存している (P-1 未来理想 anchor として許容、 plugin.jsonspec_path=scratch/specs/ binding が実体を指す)。 ADR-0022 §2.3 / §5 はこの物理移動を 後続 (SPAWN, X4-C) と明示した。

X4-C はその物理移動を実行し divergence を解消する = 試作卒業 (scratch → 完成形 layout)。 folio 全 session を通じて最大の破壊的変更 (約 25 の HTML 移動 + 全クロス参照 rewrite + CLI/script path + CLAUDE.md + golden 全再生成) であり、 user 主導 MUST。 段取りは本 session の AskUq で確定: ① scratch 完全撤去 + 作業 doc を research/ 退避 (Q1) ② 本 ADR-0023 起票 (Q2、 起票自体が user 承認) ③ 単一 atomic SPAWN で実行 (Q3)。

§2. Decision

§2.1 物理移動 map (git mv)

from (現 scratch)to (canonical)根拠
scratch/specs/{rules,folio-self-spec,relations,verification,README}.htmlarchitecture/spec/F1 (framework-core flat)
scratch/constitution.htmlarchitecture/spec/constitution.htmlF1 (scratch root → spec/ flat)
scratch/decisions/* (ADR 群 + README)architecture/decisions/3-domain (WHY)
scratch/research/*architecture/research/3-domain (exploration)
scratch/assets/* (mermaid vendor)architecture/assets/support (domain でない)
scratch/verification/verification/ (repo-root)P-3/P-11 (executable HOW、 architecture sibling)

§2.2 クロス参照 rewrite (link-integrity 維持 = P-6)

constitution.html が scratch root (specs/ の親) から architecture/spec/ (framework-core の sibling) へ移ることで相対 topology が変化する。 全 HTML の href + JSON-LD @id を以下規則で rewrite し、 folio validate の link-integrity を維持する:

§2.3 scratch 撤去 + 作業 doc 退避 (Q1)

§2.4 実装 path 更新 (HOW harness、 P-11)

§2.5 version align

X4-0 で意図的に据え置いた skew を解消: folio-self-spec / rules / relations / spec-README / decisions-README を 0.5.0-draft に揃える (constitution + plugin.json は既に 0.5.0-draft)。

§2.6 CLAUDE.md 改訂

root CLAUDE.md (Markdown 例外、 P-2) は全面 scratch 前提で書かれている。 X4-C で scratch 制約 → architecture/ 運用へ改訂: §2「architecture/ を作らない」禁止の解除、 §3/§4 作業場所を architecture/spec/ 等へ、 §6 Directory Layout tree を canonical へ、 marker / spec_path 記述の更新。

§2.7 実行方式 + acceptance (Q3)

単一 atomic SPAWN (session:spawn --worktree + feature-dev:feature-dev) で §2.1〜§2.6 を一括実行。 物理移動は中間状態で validate が壊れる (分割不可) ため、 worktree 内で完遂 → GREEN 確認後に git merge --ff-only し、 main を中間 RED 状態にしない。 migration では人工的な RED-first golden を作らず、 既存 verification suite の post-migration GREEN を受け入れ契約とする:

§3. Consequences

Positive

Negative

Neutral

§4. Alternatives Considered

採用可否
単一 atomic SPAWN (採用)物理移動は分割不可。 worktree 完遂 → GREEN → ff-merge で main を中間 RED にしない (Q3)
段階分割 SPAWN (C1 移動+code / C2 CLAUDE.md+align)不採用 — 各段階で main を green に保つ調整コスト増、 移動の atomic 性が崩れる (Q3)
scratch/ を空箱として残置不採用 — canonical layout (x4-plan §5) に scratch なし、 永続/一時混在が再発 (Q1)
planning doc を削除不採用 — user は research/ 退避を選択、 planning trail を historical に保全 (Q1)
inventory を architecture/inventory.json に配置不採用 — x4-plan §5 SSoT が repo-root を指定。 走査 base と出力先を decouple

§5. Trace