diff --git a/.loom/event-log.md b/.loom/event-log.md index a59503e..54cf87c 100644 --- a/.loom/event-log.md +++ b/.loom/event-log.md @@ -688,3 +688,29 @@ external, discard does not mean the change goes away** — *the upstream moved whatever we do* — **so discarding is really "knowingly stale", and nothing currently records that choice.** *If people discard often, that silence is the next defect.* + +## 2026-09-07 — declined: a separate `adopt` verb `marmalade` + +**Considered:** *`loomctl external adopt `* — **a command whose job is +to say "this copy came from there"**, *for a document that is present but +unlocked.* **Both parties reached the deadlock independently and this was the +other way out.** + +**Not done, because the byte comparison makes the verb unnecessary.** *Whatever +the command is called, it must not trust the claim* — **it has to fetch and +compare, because the whole point is that nobody knows whether the local copy is +still a copy.** *Once it does that, it is `add` with an origin supplied, and the +user's intent in both cases is the same sentence: **I depend on this document and +here is where it lives.*** + +**And a verb earns its place by naming an act, not a state.** *"Present but +unlocked" is a condition a repository is temporarily in* — **a permanent command +for it advertises a transitional situation as a normal one.** + +**Belief that could be shown wrong:** *that the condition is transitional.* **If +people and agents keep dropping documents into `externals/` by hand — and they +will — it is a recurring category and not a migration**, *and then it deserves its +own word, discoverable in `--help` rather than found in a hint.* + +*The domain word survives regardless: `externals` says adopting is fetching a URL, +and the tool says `adopted` throughout.* diff --git a/internal/external/external.go b/internal/external/external.go index fa0c285..a2ac422 100644 --- a/internal/external/external.go +++ b/internal/external/external.go @@ -311,7 +311,7 @@ func checkUnlocked(cfg *config.Config, root, rel string, locks *lock.Set, open b // Without a lock we have no origin, and the path does not round-trip to a // URL, so there is nothing to ask and nowhere to ask it. Supplying the URL // through add is the only way out. - return Status{rel, "unlocked", "no origin recorded — `loomctl external add ` supplies it"}, 0 + return Status{rel, "unlocked", "no origin recorded — `loomctl external add ` supplies it without rewriting this copy"}, 0 } func usagesNote(root, rel string) string {