ADR-0006 — caller marker hook (hybrid: env var OR marker file)

Status: accepted · Date: 2026-05-25 · folio v0.4.2-draft · retrospective (実装 + e2e 検証済)

§1. Context

rules.html §10.1 (REQ-CM-001〜003) は spec 編集を caller marker で gate することを要求し、 folio-self-spec.html §7.3 は caller marker を folio-architect の唯一 author entry mechanism と位置付ける。 ADR-0003 §2.1 は PreToolUse hook「caller marker」 を列挙し、 当初は twill pattern に倣い 環境変数 (FOLIO_ARCHITECT_CONTEXT) 方式を想定した。 marker hook の具体実装は ADR-0003 §3 Neutral に「ADR-0006 候補」 として defer されていた。

試作実装中に chicken-and-egg 問題が顕在化した: folio は自身の spec (scratch/specs/) を編集する必要があるが、 環境変数方式では 実行中の session で marker を set できない。 hook は session 起動時の環境を継承して subprocess 起動するため、 session 開始後に export FOLIO_ARCHITECT_CONTEXT=... しても既存 hook subprocess には伝播しない。 結果、 folio は launch 時に env を set しない限り自分の spec を一切編集できない状態に陥った。

§2. Decision

§2.1 gate 対象 = spec_path 配下のみ

.claude-plugin/scripts/check-caller-marker.shPreToolUse (Edit|Write|NotebookEdit) hook として実装し、 FOLIO_SPEC_PATH (既定 scratch/specs/) 配下の file 編集のみを gate する。 spec_path 配下でない file (decisions/ / research/ / root meta 等) は通過する。

§2.2 hybrid allow 条件 (env var OR marker file)

以下の いずれかを満たせば allow、 両方無ければ deny (fail-closed):

§2.3 hybrid の根拠

env var は cld launch 時に set され hook が session 起動時に継承するが、 mid-session では set 不可 (§1 の chicken-and-egg)。 marker file は cwd 相対で存在判定するため mid-session でも touch/rm で制御可能。 hybrid は launch-time entry (env、 twill pattern parity) と mid-session entry (file、 SKILL 駆動) の双方を cover する。

§2.4 folio-architect SKILL = canonical author entry

skills/folio-architect/SKILL.md (disable-model-invocation: true、 user が /folio-architect 起動) を spec 編集の正規 entry point とする。 SKILL flow: mkdir -p .folio && touch .folio/architect-active → spec 編集 → rm -f .folio/architect-active (Step 3 で 必ず unset MUST、 fail-open 防止 + sandbox caller-marker scenario 汚染防止)。

§3. Consequences

Positive

Negative

Neutral

§4. Alternatives Considered

採用しなかった理由
案 A: 環境変数のみ (FOLIO_ARCHITECT_CONTEXT、 当初 ADR-0003 想定)mid-session で set 不可 (hook は起動時 env 継承)。 chicken-and-egg 未解消 — folio が launch 後に自身の spec を編集できない
案 B: marker file のみlaunch-time の env gating (twill pattern parity) を失う。 cld --plugin-dir launch 時の env entry path が有用
案 C (採用): hybrid (env var OR marker file)launch (env) と mid-session (file) の双方を cover。 chicken-and-egg を file で解消しつつ env path を保持
案 D: gate を設けないfolio-architect の「唯一 spec author」 role (folio-self-spec §7.3、 constitution P-7) を defeat。 任意の context が spec を編集可能になる

§5. Trace