Files
dotfiles/claude/memory/reference-governance-files-are-dotfiles-symlinks.md
T

3.0 KiB

name, description, metadata
name description metadata
governance-files-are-dotfiles-symlinks ~/PENDING.md, ~/REVIEWED.md, ~/CLAUDE.md are symlinks into ~/dotfiles/ — Edit/Write refuse to write through a symlink, so edit the real dotfiles path when appending PENDING/REVIEWED entries.
node_type type originSessionId modified
memory reference 231bdbb9-ae7f-4be8-946d-2ddf952fb7a5 2026-08-06T14:01:43.152Z

The home-level governance files are symlinks into the dotfiles repo (~/dotfiles, git-tracked for restore/setup):

  • ~/PENDING.md → ~/dotfiles/PENDING.md
  • ~/REVIEWED.md → ~/dotfiles/REVIEWED.md
  • ~/CLAUDE.md → ~/dotfiles/CLAUDE.md

The Edit/Write tools refuse to write through a symlink ("Refusing to write through symlink … pass the real target path explicitly"). So when appending a PENDING/REVIEWED entry, edit ~/dotfiles/PENDING.md (or …/REVIEWED.md) directly — reading via the ~/ path is fine; only writing needs the real target. (~/CLAUDE.md is constitutionally not executor-editable anyway.)

Because these live in dotfiles, a PENDING/REVIEWED change is a dotfiles commit — the /wrap-up §6.5 dotfiles push carries it. Confirmed 2026-07-09 (hit the symlink-refusal appending PENDING-52).


⚠ Disclosure — what this note is, as of 2026-08-06 (PENDING-107)

This note documents the route past the only friction that stands between the executor and the constitution. That has to be said on the note itself, because the note is loaded at every wake and the fact is not visible from the convenience tip.

Established against the substrate (~/.claude/settings.json, ~/.claude/hooks/verify-before-compose.sh, both read in full 2026-08-06):

  • The symlink refusal is a tool-behaviour artifact, not a permission check. It protects nothing; it just makes you type a different path.
  • settings.json has no permissions key at all — 0 deny, 0 allow.
  • The one PreToolUse hook has matcher Write|Edit, so it is invoked on an edit aimed at ~/CLAUDE.md — and its first scope guard (*chamber-library*) then exits 0 by design. A mechanism runs on the exact call and declines.
  • Bash is not in that matcher, so a heredoc/sed/Python write triggers no gate at all.

So the parenthetical above — "~/CLAUDE.md is constitutionally not executor-editable anyway" — states a norm with nothing behind it. ~/CLAUDE.md §Constitutional Constraints #1 says the executor cannot modify it; nothing makes that true. Constraint #4 (honest degradation — the system must report its own limits) is why this disclosure sits here rather than in a filed item only.

Standing instruction, unchanged and now un-backed: the executor must not write to ~/CLAUDE.md, ~/REVIEWED.md, or L2 constitutional documents. Those changes are [ESCALATE] unconditionally and are enacted by the steward's hand. A jurist sign-off does not authorize one; that specific offer was made and declined on 2026-08-06 (docketed on PENDING-89). Use the real-dotfiles-path route for PENDING.md and REVIEWED.md only.