diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..6fef085 --- /dev/null +++ b/TODO.md @@ -0,0 +1,43 @@ +# 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 ~/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-`) 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. + +### Known problem to fix while doing it + +`user/CLAUDE.md` hardcodes `~/projects/claude-mds/tools/mask-secret.py`. That +path is this machine's. Options: have the installer rewrite the path at install +time, put the tools on `PATH` (`~/.local/bin/mask-secret`), or resolve it from +`$CLAUDE_MDS_HOME`. Prefer the `PATH` option — the doc then names a command +rather than a location, which is true everywhere. + +### 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.