# claude-substrate — cart `osprey` **Opened before you arrived**, so that the first thing here is a round rather than a briefing. --- ## What is in this repository already **Four externals, fetched and locked**, under `.loom/externals/`. *`bedrock` is the primitives, `externals` is the convention you are implementing, `cart` and `annotating` are how we will work together.* **They are copies. Do not edit them** — a facet goes beside a file, never into it. **One specimen: [`proposed-spec.md`](specimens/proposed-spec.md).** *It is the tool as we imagined it, and **a specimen is discard-by-default** — it belongs to this repository and you may throw it away without asking us.* **That is not politeness; it is what a specimen is.** > **`bedrock` and `externals` are not discardable.** *Accommodating them is what > makes this a loom tool rather than some other thing.* **Read them as given. > Argue with the specimen.** ## What we think this is **A fetcher and a comparator, and it should stay one.** *Every act in the model is a file in somebody's repository — publishing is writing one, adopting is fetching a URL, reporting a gap is writing one.* **Nothing sends a service a request.** **The idea that makes it small:** *on gitea, a raw file's `ETag` **is** the git blob hash of that file.* **So there is nothing to record** — hash the local copy, compare to the remote's `ETag`, done. *Verified on both a public and a private repository.* ## Where we expect to be wrong **Where the conventions chafed.** *A thing you had to do twice. A rule you worked around to make a command sane.* **Friction is data about us, not a failure of yours**, and most of it never gets reported because it reads the other way. **Whether `check` can say anything useful about a `404`.** *Over HTTP, "gone" and "you lost access" are the same response.* **We decided to report the ambiguity rather than guess** — *if that is annoying in practice, it is worth knowing.* **Whether the hash-as-lock survives contact.** *It assumes the local copy is byte-identical to the remote. **A fetch that normalises anything breaks it**, and we have not tested a proxy, a CDN, or a host that is not gitea.* ## What we would ask you not to do **Do not build `init` as a scaffolder.** *Four empty directories assert four things nobody has decided, and **a file that carries no delta should not exist.*** *If `init` earns its place, it creates one file and asks one question.* --- ## Question: what isolates your work while a round is open? *The one role we left uncast — see [`cart.usages.md`](../../externals/git.hypertheory-labs.dev/loom/cart/cart.usages.md).* ## Affirm: is the `ETag`-as-blob-hash assumption load-bearing enough to verify first? *If it does not hold, most of the specimen collapses and it is better to find out in an afternoon than in a week.*