You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
A pinned snapshot worktree survived its run: cleanup is not reached on every path, and the cache is the wrong home if snapshots are ever kept #846
snapshot.Pin creates a detached worktree per layer under ${XDG_CACHE_HOME}/devlore/snapshots/<layer>-<hash12>/
and PinAll returns a cleanup that is deferred by the caller. One got left behind:
$ ls ~/.cache/devlore/snapshots/
personal-717b3da041f8
$ git -C ~/.local/share/devlore/writ/repos/personal worktree list
…/writ/repos/personal 27e53171 [main]
…/.cache/devlore/snapshots/personal-717b3da041f8 717b3da0 (detached HEAD)
717b3da0 is not the current HEAD and no run today produced it; it is from an earlier run whose
cleanup did not complete — a refused deploy, an interrupted one, or a path where cleanup is not
reached. Whatever the cause, the checkout (84 MB for personal) and the worktree registration both
persist, and every later Pin at a different hash adds another beside it.
Two things
Cleanup must be reached on every exit — including the early returns in pinLayers and the
refusal paths in pre-flight — or the next Pin should sweep snapshots of the same layer at other
hashes before creating its own. The second is the robust one; the first is still right.
Amended by the owner's ruling of 2026-10-02, lifetimes are generations: writ follows git and Nix. It is stated in docs/architecture/5.1-reconciliation.md § Lifetimes are generations, recorded on #916, and its finding is open question 5 of lane 7's plan, docs/plans/task/926-scope-flag.md (#926). The lane's plan takes this up when the schedule reaches it.
The pin belongs to the run, not the lifetime: a scoped deploy carries the other scopes forward, so one lifetime can hold Home at one commit of a layer and System at another. A kept snapshot is one per layer and commit, holding the scopes deployed from that commit; see the amendment in docs/plans/feature/847-kept-snapshots.md.
Activity
David-Noble-at-work commentedon Sep 28, 2026
Now lane 16 of #916 (PR D), 2026-09-28, under the kept-snapshots design (#847): snapshots are kept state, locked, one per layer per run, in the state home, and never leaked. Lane 17 (#971) waits on it. Plan: https://github.com/NobleFactor/devlore-cli/blob/feature/924-reconcile-repair/docs/plans/feature/847-kept-snapshots.md
doc(writ): kept snapshots complete -- the words against the ref, live…
doc(writ): kept snapshots -- reconcile against the ref that produced …
David-Noble-at-work commentedon Oct 2, 2026
Amended by the owner's ruling of 2026-10-02, lifetimes are generations: writ follows git and Nix. It is stated in
docs/architecture/5.1-reconciliation.md§ Lifetimes are generations, recorded on #916, and its finding is open question 5 of lane 7's plan,docs/plans/task/926-scope-flag.md(#926). The lane's plan takes this up when the schedule reaches it.The pin belongs to the run, not the lifetime: a scoped deploy carries the other scopes forward, so one lifetime can hold Home at one commit of a layer and System at another. A kept snapshot is one per layer and commit, holding the scopes deployed from that commit; see the amendment in
docs/plans/feature/847-kept-snapshots.md.