From 470085f4220afabb3b487f9342ed6bc35f5feca0 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 17 May 2026 16:05:17 -0500 Subject: docs(inbox): Add handoffs on skill discovery and missing inbox dir --- ...ff-from-dotemacs-rulesets-missing-inbox-dir.org | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 inbox/2026-05-16-handoff-from-dotemacs-rulesets-missing-inbox-dir.org (limited to 'inbox/2026-05-16-handoff-from-dotemacs-rulesets-missing-inbox-dir.org') diff --git a/inbox/2026-05-16-handoff-from-dotemacs-rulesets-missing-inbox-dir.org b/inbox/2026-05-16-handoff-from-dotemacs-rulesets-missing-inbox-dir.org new file mode 100644 index 0000000..5f1e0ea --- /dev/null +++ b/inbox/2026-05-16-handoff-from-dotemacs-rulesets-missing-inbox-dir.org @@ -0,0 +1,75 @@ +#+TITLE: Handoff: rulesets has no top-level =inbox/= directory +#+FROM: dotemacs (~/.emacs.d) +#+DATE: 2026-05-16 + +* Context + +While trying to deliver a cross-project handoff from the dotemacs session +(~/.emacs.d) to the rulesets project, I discovered that +=~/code/rulesets/= has no top-level =inbox/= directory. + +The =inbox-send.py= script (the canonical mechanism documented in +=claude-rules/cross-project.md=) requires the target project to have +*both* =.ai/= AND =inbox/=: + +#+begin_src python +def is_project(path: Path) -> bool: + """A project has a `.ai/` marker AND a top-level `inbox/` directory.""" + return (path / ".ai").is_dir() and (path / "inbox").is_dir() +#+end_src + +(=.ai/scripts/inbox-send.py:61-62=) + +So =inbox-send.py --list= did not list =rulesets= as an available target, +even though it has =.ai/=. I worked around this by: + +1. =mkdir -p ~/code/rulesets/inbox/= +2. =Write= the handoff file directly to that new directory. + +This handoff file landed at: +=~/code/rulesets/inbox/2026-05-16-handoff-from-dotemacs-rulesets-missing-inbox-dir.org= + +(There's a sibling handoff =2026-05-16-handoff-from-dotemacs-review-code-skill-discovery.org= +also in this inbox from the same session.) + +* What's missing + +- =~/code/rulesets/inbox/= didn't exist before this session. +- The directory is not gitignored (per the project's =.gitignore=). +- No prior commits reference =inbox/= except for the =inbox-send.py= + script itself. + +* Why this matters + +The rulesets project is an active Claude-managed project — it has +=.ai/protocols.org=, =.ai/sessions/=, a startup workflow, and its own +=todo.org=. Without an =inbox/= dir: + +- Cross-project handoffs from other projects can't land via the canonical + =inbox-send= mechanism. +- The rulesets startup workflow has no inbox-processing step that would + pick up cross-project messages on session start. +- I had to bypass =inbox-send.py= and =Write= directly, which skips + filename auto-derivation and source-project provenance handling. + +The =claude-templates/= subdir inside rulesets also has =.ai/= but no +=inbox/=, with the same effect. + +* What to fix + +Two changes, low effort: + +1. *Create =~/code/rulesets/inbox/= and commit it.* Add a =.gitkeep= or + a README so the directory exists in the tree from the start. Once it + exists, =inbox-send.py --list= will discover the project and future + cross-project handoffs will route normally. + +2. *(Optional) Same for =~/code/rulesets/claude-templates/inbox/=.* If + claude-templates is considered its own routable project rather than a + subdir-only artifact, mirror the change there. + +* Filing + +This is project-hygiene signal — track in =todo.org= as a single quick +fix (S effort, single =mkdir= + =.gitkeep= + commit), and the +=inbox-send.py= discovery starts working automatically. -- cgit v1.2.3