Sniff: worktree management with one append-only log

Sniff is the worktree dog: its purview is checkout, status, stage, and commit, and it owns one append-only log per worktree at <wt>/.be/wtlog — no objects, caches, or path registry (objects are Keeper's). The goal is worktree attribution that survives across processes with no desyncing cache; the method is mtime-as-pointer: every row sniff writes stamps its files' mtime with the row's ts, so a file's mtime looks up the owning row, and a file outside the stamp-set is a user edit.

API

Sniff follows the Dog three-call contract; the verb ops sit above an AT façade over the wtlog (append, baseline, stamp, scan).

CLI

The sniff CLI mirrors the Verbs; be drives it in normal use, and it adds a status view and an inotify watch daemon.

Change-set at commit time

For each candidate path POST looks up the on-disk mtime in the wtlog and classifies KEEP vs REWRITE vs DROP, in selective or implicit (commit-all) mode.

Boundaries in the wtlog

Two boundaries anchored at the latest GET scope what the next POST consumes; both are found on a single forward scan, no extra verb.

On-disk layout

A worktree holds only .be/wtlog (and a transient watch pidfile); the store (.be/) is keeper's, and sniff never writes objects there directly.