bee install registers a repo in ~/.config/bee/reposbee's pages cross repos — the wiki, the tickets and the code are separate git repos that link to each other — so bee needs to know which repos it serves. Today the only registry is $HOME/.config/be/tracks, written as a SIDE EFFECT of index() (track(), index/index.js), and bee install wires the merge driver and the pre-commit hook while registering and indexing nothing. This ticket makes install the one registration point, renames the registry to $HOME/.config/bee/repos, and rules that a repo is identified BY ITS PATH — so a linked worktree is not installed.
bee install [<repo>] (merge.js install) writes merge.lite.driver/merge.lite.name through git config, appends * merge=lite to <gitdir>/info/attributes, and plants .git/hooks/pre-commit — then stops. The index is built only when a read verb happens to run.
index/index.js track() appends the repo's abs path to $HOME/.config/be/tracks, deduped on read, when opts.track !== false; main.js's bare run and view/list.js are the only callers that ask for it.INDEXES.mkd and the index/index.js header both document the tracks path, so the rename is a doc change in two places plus README.mkd.<gitdir>/be/*.lite2.idx) and fully derived; the registry is the only cross-repo state bee keeps.One registry of paths, written by install, and an install that leaves the repo wired, listed AND indexed.
$HOME/.config/bee/repos — one absolute worktree path per line, deduped on read, no id column, no other field.bee install [<repo>] = wire git config + attributes + hook, register the path, then index and lindex the repo, one report line.install REFUSES a linked worktree in plain words: identity is the path, and a worktree is a second path over one history.$HOME/.config/be/tracks retires; a run seeds the new file from it once if it is there and the new one is not./home/gritzko/src/bee — gritzko's explicit permission, 2026-08-15, overriding work "no main tree"; no VC ops there.test/index/ (opts.home already lets a test redirect the registry root).io git abc ron hex utf8 sha1 and no ulog, so the registry stays a text file this code writes.index's own registry write keeps working for every other verb; opts.track === false (log, commit) still writes nothing.Ruled by gritzko 2026-08-15 in chat, before any code.
git init — exactly when install runs — has
no commit to hash at all. A path hashlet, if one is ever wanted, is a pure
function of the row and needs no column either.<gitdir>/commondir, which only a linked worktree carries.$HOME/.config/bee/repos, plain lines, dedup on read — the
track() contract as it stands, under the bee name.<ts>\t<verb>\t<uri>, dog/ULOG.*) was weighed
and dropped: the C ULOG has no JS binding here, and an append-only history
of registrations buys nothing a one-column list does not give.install OWNS the bring-up: driver, attributes, hook, registry, index,
lindex. A bare bee run keeps registering as it does today.install in a fixture repo lists the path in <home>/.config/bee/repos and leaves a laneinstall adds no second line; a linked worktree is refusedtrack() writes .config/bee/repos, seeding once from .config/be/tracksinstall registers, then runs index and lindex, and reports both<gitdir>/commondir)README.mkd install line, INDEXES.mkd, index/index.js headertest/index test/lindex test/list test/first greeninstall's git config --get child inherits stdout, so a REINSTALL echoes the driver line before the report line — pre-existing (merge.js run() has no null fd), left alone.test/http fails in the main tree on the UNCOMMITTED render/html.js, and test/pager's pty golden frames fail at HEAD; both verified pre-existing against a git archive HEAD build.Landed in the main tree, uncommitted (gritzko's call whether to keep it).
index/index.js track() -> $HOME/.config/bee/repos, one path per line, deduped on read, seeded ONCE from $HOME/.config/be/tracks; opts.home still overrides.merge.js install() is the bring-up: wire + register + index + lindex, one report line; a linked worktree (<gitdir>/commondir) is refused in words; a commitless repo still installs.README.mkd install line, INDEXES.mkd registry sentence, index/index.js header; the "tracks list" wording retired in the comments that named it.test/index/run.sh leg 4 (6 new checks — register+lane, dedup, worktree refusal, LITE-026, the seed, the old file never read again); the old path renamed in test/first and test/commit.index 135, lindex 31, list 83, first 34, plus commit 45, merge 46, hook 14+7 and 14 more suites.