declined a separate adopt verb, and say that add will not rewrite

Both parties reached the same deadlock independently: add refusing an existing
path, and check unable to ask about a document with no recorded origin. adopt was
the other way out and is not obviously worse.

Not taken 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 point is that nobody knows whether the local copy is still a copy — and
once it does that, it is add with an origin supplied. A verb earns its place by
naming an act rather than a state, and present-but-unlocked is a condition a
repository is temporarily in.

Recorded with the falsifier: if people and agents keep dropping documents into
externals by hand, and they will, it is a recurring category rather than a
migration, and then it deserves its own word in --help rather than a hint.

Also makes check's hint say that add supplies the origin without rewriting the
local copy, since the previous wording left that to be inferred.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018UTxuSizozEA8yDitPuris
This commit is contained in:
2026-09-07 15:01:56 -04:00
co-authored by Claude Opus 5
parent 021bf63a11
commit c0ae0e892f
2 changed files with 27 additions and 1 deletions
+1 -1
View File
@@ -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 <url>` supplies it"}, 0
return Status{rel, "unlocked", "no origin recorded — `loomctl external add <url>` supplies it without rewriting this copy"}, 0
}
func usagesNote(root, rel string) string {