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 を一切編集できない状態に陥った。
.claude-plugin/scripts/check-caller-marker.sh を PreToolUse (Edit|Write|NotebookEdit) hook として実装し、 FOLIO_SPEC_PATH (既定 scratch/specs/) 配下の file 編集のみを gate する。 spec_path 配下でない file (decisions/ / research/ / root meta 等) は通過する。
以下の いずれかを満たせば allow、 両方無ければ deny (fail-closed):
FOLIO_ARCHITECT_CONTEXT=folio-architect (launch 時 set).folio/architect-active が存在 (mid-session set 可能)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 する。
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 汚染防止)。
scenarios/caller-marker.yaml 6/6 PASS + e2e walk S-A / S-B1 (marker 無で deny) / S-E1 (set→unset 後 deny 復帰 = fail-open しない) で live 確認 (commit 3bb8cef).folio/ は cwd ごと)。 worktree では worktree cwd に固有 marker が必要| 案 | 採用しなかった理由 |
|---|---|
案 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 を編集可能になる |
.claude-plugin/scripts/check-caller-marker.sh (PreToolUse Edit|Write|NotebookEdit) + skills/folio-architect/SKILL.md (marker set/unset entry)