Changes touching this path

  • verbs/: seam scaffold + the repo family (init/clone/config) (#661) 28849eaa · dbf3dbe6…
  • verbs/conflicts: conflicts + resolve (#661) 91726d3d · dbf3dbe6…diff
  • every conflict-stopping verb gets a named way out, and building it corrected the ticket in both directions rather than just adding flags: merge does not stop on a conflict at all, since merge_tips records the triples and fold_onto then signs the merge node and materializes the merged tree, so an abort there is a view step off signed history rather than the forgetting of a stop; while cherry-pick, revert and squash do the opposite and return before writing anything of their own, so their stop leaves even the paths that merged cleanly unapplied. the five named verbs are also not the whole set: converge, pull, adopt and ferrys carry bounce reach the same fold and the same ingest, and the stale-disk settle files a conflict on the way past any capturing verb with no operation behind it at all, so the covered set is now a census rather than an assumption. the state is one position-owned artifact at .loot/position/in-progress carrying the verb, its operand, and the op-log index the view sat at before the verb ran, declared Refuse on malformed content because a torn record read as absent answers nothing to abort over a tree that really is mid-operation, which is the single failure the record exists to prevent. it is a real artifact rather than a derivation because conflicts-are-non-empty-and-the-newest-op-is-a-stopping-verb answers no the instant the last resolve lands, which is exactly when continue must still work. nothing here re-implements a rollback: the inventory row is Captured at ordinal 7, so abort is that one index handed to op restore, which already restores the view, re-materializes the tree, refuses over edits made after the stop, and appends the compensating operation the op-log criterion asked for; force is declared on the five verbs and refused without abort. continue closes the stop rather than replaying it, because the re-run was built first and measured to reproduce the identical conflict: these verbs are capture-first and a resolve on the pre-dock home position never writes the tree, so the closure states instead that the operation applied nothing. status and conflicts name the operation through one derivation, and the pin asserts the identical line in both (#1506) 21b9faf1 · dbf3dbe6…diff
  • loot split, squash, resolve, absorb and a duplicate of the working change run the signing gates loot new runs over what they sign, where they signed content out of the working change with none: through the 0.4.25 binary split, squash, a resolve after a stopped squash --into on the home position, and duplicate of the working change each signed a .env an ungated capture sealed internal by fallthrough, and a peer holding no grant read SECRET=1 with exit 0, while absorb signed a hunk published with no --allow-publish when it folded into an ancestor that published a path the anchor no longer does. Workspace::signing_gates_over is the recorded arm of signing_gates over any tree a signature carries, judging its entries whose object is not the anchor object at that path. the refit executor asks it before any arm writes, of what each plan declares through Refit::signs_unsigned, a wildcard-free match beside Refit::minted_edges, so a new refit does not compile until it says what it signs out of unsigned content; absorb seals every version first, judges the re-sealed entries, then records; resolve builds the resolution with DagRepo::prepare_resolution, judges its tree and records it with record_resolution, so a refusal leaves the conflict standing and the squash stop flow still works on clean content. the five verbs take --allow-reveal, --allow-publish and --allow-lockout as loot new does. ADR 0038 gains a #2471 amendment naming what stays open, and CONTEXT.md and the help say so. pinned through the binary, red first: 4 passed and 4 failed over the eight smoke pins. red under named mutations, each restored: no gate at the refit executor (6 passed and 3 failed over the nine smoke pins), split declaring nothing, split declaring its remainder, squash declaring nothing, duplicate ignoring an unsigned source, absorb unjudged, resolve unjudged, and resolve dropping the consent (8 and 1 each), and resolve recording before the gate, which the smoke pins cannot see (9 and 0) and a workspace pin can (0 and 1). no format, wire or migration byte moves, so this owes no deploy. cargo test green, 4697 passed over 142 binaries with 13 ignored (#2471) 8b0d1c6d · dbf3dbe6…diff

Renames are not followed. loot's tree maps a path to an address, so a rename is a delete and an add. This list is the history of the name, not of the bytes.