aboutsummaryrefslogtreecommitdiff
path: root/claude-rules/cross-project.md
diff options
context:
space:
mode:
Diffstat (limited to 'claude-rules/cross-project.md')
-rw-r--r--claude-rules/cross-project.md12
1 files changed, 11 insertions, 1 deletions
diff --git a/claude-rules/cross-project.md b/claude-rules/cross-project.md
index ed4a19c..c5de962 100644
--- a/claude-rules/cross-project.md
+++ b/claude-rules/cross-project.md
@@ -35,7 +35,9 @@ Two acceptable outcomes:
```
Output filenames follow `YYYY-MM-DD-HHMM-from-<this-project>-<slug>.<ext>` automatically, so the target's next session sees the source + timestamp at a glance without you having to construct the name. Fall back to `Write`/`Edit` only when the script isn't available (e.g. a freshly-cloned project before the first startup-rsync).
-2. **"Switch projects"** — stop. Let the user reopen Claude in the right cwd.
+
+ The wrap-up cross-project router rides this same sanctioned path: at wrap time, `wrap-it-up.org`'s router step delivers `:ROUTE_CANDIDATE:`-tagged keeper tasks to their home projects' inboxes via `route-batch` → `inbox-send` (never a direct foreign `todo.org` write), and the destination's own inbox processing files each task per its conventions.
+2. **"Switch projects"** — stop. Let the user reopen the agent session in the right cwd.
Don't assume which one was meant. Either guess is wrong half the time and the cost of asking once is one short turn.
@@ -48,6 +50,14 @@ whose canonical home is `~/code/rulesets/`. When work in a downstream project
needs one of these files to change, a local edit alone is a stopgap that the
next sync reverts. The durable change happens only in the rulesets canonical.
+Installed global paths such as `~/.claude/rules/`, `~/.claude/hooks/`,
+`~/.claude/skills/`, and rulesets-owned entries in `~/.local/bin/` are
+symlinks into the canonical repository, not downstream copies. Never edit
+through those paths from another project's session: resolving the symlink
+would dirty rulesets outside its own logging and wrap discipline. The
+`rulesets-write-boundary.py` hook mechanically denies Edit/Write targets whose
+real path lands there and directs the proposal through `inbox-send rulesets`.
+
The process, every time:
1. **Make the change locally** in the downstream project so it's usable