37 lines
3.0 KiB
Markdown
37 lines
3.0 KiB
Markdown
---
|
|
name: governance-files-are-dotfiles-symlinks
|
|
description: "~/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."
|
|
metadata:
|
|
node_type: memory
|
|
type: reference
|
|
originSessionId: 231bdbb9-ae7f-4be8-946d-2ddf952fb7a5
|
|
modified: 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**.
|