Files
claude-mds/TODO.md
T

55 lines
2.6 KiB
Markdown

# TODO
## Bootstrap installer (next session — 2026-08-14)
**Goal:** clone this repo on any machine, run one command, and every file lands
where the tooling expects it.
git clone <this repo> ~/projects/claude-mds && ~/projects/claude-mds/install.sh
### Shape
- **A manifest, not a script full of paths.** Declare `repo path -> target path`
in one file and let `install.sh` walk it. Adding a doc later should mean one
manifest line, not editing shell.
- **Symlinks, not copies.** Same reason as here: two copies drift, and the point
of the repo is that an edit lands in git. `ln -sfn`.
- **Idempotent.** Safe to re-run after every `git pull`. Re-linking an existing
correct link is a no-op.
- **Conditional targets.** `user/CLAUDE.md` installs everywhere. `officer.dev/`
only where that workspace exists. A manifest entry needs a "only if this path
exists" condition.
- **Never clobber silently.** If the target is a real file and not our link,
back it up (`.bak-<date>`) and say so. That file may be the only copy of
something written by hand on that machine.
- **Dry run by default, or at least `--dry-run`.** Show what it would link.
### Tools are installed, not referenced in place — DECIDED
`tools/` stays in the repo as the source, and the installer puts it under
`~/.local/claude-scripts/` (confirm the name), with `mask-secret` linked onto
`~/.local/bin` so it is a command rather than a path.
That fixes a real bug: `user/CLAUDE.md` currently hardcodes
`~/projects/claude-mds/tools/mask-secret.py`, which is only true on this
machine. Once installed, the doc says `mask-secret` and is true everywhere.
Carry `mask-hooks.d/` across with it, keeping the executable bits. The hooks are
the machine-specific half, so the installer should place only the hooks that
belong on that machine — same "only if this path exists" condition as the docs.
`officer-chat-events` should not land on a laptop with no Officer install, even
though it already exits cleanly when it finds no database.
Update `user/CLAUDE.md` to name the command in the same change, or the doc and
the layout disagree the moment this ships.
### Open questions
- Which files are genuinely universal vs this-machine-only? Right now
`officer.dev/CLAUDE.md` is the only machine-specific one, but the
`platform-appstore/` set is a candidate and was never folded in.
- Should `settings.json` / hooks be managed here too, or only `.md` files? The
repo is named for the docs but already carries `tools/`.
- Bootstrapping the bootstrap: the machine needs git and the repo URL before any
of this runs. Worth a one-line `curl | sh`, or deliberately not.