venues, and a guide staleness check that could not see an arrival
Adopts bedrock/venues.md and reconciles externals.md, which dropped its four-line venue section in favour of the one sentence that is actually about externals. The staleness check compared only documents present in both the stamp and the locks, so a section gaining a page never flagged its guide — and the bedrock guide enumerates its pages by hand. It went silently incomplete the moment venues was adopted. Now reports changed, added and gone separately, in words that fit each case. Found the same way as the sidebar: by adopting something real for the first time. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vendored
+2
-1
@@ -9,6 +9,7 @@ git.hypertheory-labs.dev/loom/bedrock/publication.md https://git.hypertheory-lab
|
||||
git.hypertheory-labs.dev/loom/bedrock/recording-decisions.md https://git.hypertheory-labs.dev/loom/bedrock/raw/branch/main/.loom/published/recording-decisions.md "d190eeae7929b9a99ecf09211d94e7e5b32635bd" public
|
||||
git.hypertheory-labs.dev/loom/bedrock/sibling-facets.md https://git.hypertheory-labs.dev/loom/bedrock/raw/branch/main/.loom/published/sibling-facets.md "a46446a34ccb8bfc533d3cce19f4c88548c4fa04" public
|
||||
git.hypertheory-labs.dev/loom/bedrock/starting.md https://git.hypertheory-labs.dev/loom/bedrock/raw/branch/main/.loom/published/starting.md "b9eefba0f4668a496ccfc6a1377277f0721456d2" public
|
||||
git.hypertheory-labs.dev/loom/bedrock/venues.md https://git.hypertheory-labs.dev/loom/bedrock/raw/branch/main/.loom/published/venues.md "35e940195e2ba9a30b4b4dc81a57f9383c709f64" public
|
||||
git.hypertheory-labs.dev/loom/cart/cart.md https://git.hypertheory-labs.dev/loom/cart/raw/branch/main/.loom/published/cart.md "15331f1a9cc81bf61a44830cfbb7c274f4c2b119" public
|
||||
git.hypertheory-labs.dev/loom/externals/externals.md https://git.hypertheory-labs.dev/loom/externals/raw/branch/main/.loom/published/externals.md "50673ccffc14d57150ac0a9027b0712d9dcf940d"
|
||||
git.hypertheory-labs.dev/loom/externals/externals.md https://git.hypertheory-labs.dev/loom/externals/raw/branch/main/.loom/published/externals.md "772c67f460f0ff3b9563aee9b38a64c0f3423dbd"
|
||||
git.hypertheory-labs.dev/loom/loom-cli/guarantees.md https://git.hypertheory-labs.dev/loom/loom-cli/raw/branch/main/.loom/published/guarantees.md "e8c697ea61df47838f38af7353e29d9ae3f7070c"
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
# Venues
|
||||
|
||||
**`.loom/venues/<name>.md` — a choice you made about something that has no
|
||||
document of its own to hang it on.**
|
||||
|
||||
*Kafka. React. HTTP. The organisation you work for.* **Things that constrain what
|
||||
you build without ever being invoked, and without publishing anything at you that
|
||||
you could adopt.**
|
||||
|
||||
---
|
||||
|
||||
## Venue and external are two questions, not two kinds of thing
|
||||
|
||||
**`external` is *who published it*. `venue` is *whether you had to decide
|
||||
anything about it*.** *They are orthogonal. A thing may be both, either, or
|
||||
neither.*
|
||||
|
||||
| | published at us | we recorded a choice | files |
|
||||
|---|---|---|---|
|
||||
| Kafka, React, HTTP | yes, by the world | yes — *protobuf for schema* | venue only |
|
||||
| a service another team owns | yes, by them | not yet — the use is in the code | external only |
|
||||
| a cluster your own org publishes | yes | yes | both |
|
||||
| a library you use exactly as documented | yes | no | neither |
|
||||
|
||||
**Both files are governed by the same rule, applied to two different ambients:**
|
||||
|
||||
> **An external entry exists when the reader cannot be assumed to know the
|
||||
> thing.** *A venue file exists when you made a choice worth recording.*
|
||||
|
||||
**Nobody needs telling what Kafka is, so there is no external entry** — *but "we
|
||||
use protobuf for schema" is a choice, so there is a venue file.* **Nobody outside
|
||||
can know what your internal API is for, so there is an external entry** — *and
|
||||
until using it requires an exception or a preference, there is nothing to
|
||||
accommodate and no venue file, because the actual use is in the code.*
|
||||
|
||||
*This is why sorting things into two bins does not work and people keep trying.
|
||||
The bins were never the problem. The question was.*
|
||||
|
||||
## A venue file is an account of your own decisions
|
||||
|
||||
**Which is what makes it local by construction.** *An external is a copy of
|
||||
somebody's document and could in principle be centralised.* **A venue file has no
|
||||
upstream** — *there is nobody to reconcile with, because the only party who
|
||||
decided anything was you.*
|
||||
|
||||
**So it does not go stale the way a copy does.** *It goes stale when you change
|
||||
your mind and do not say so*, which no fetch will ever detect.
|
||||
|
||||
> **A venue file that carries no delta should not exist.** *If you use the thing
|
||||
> exactly as documented, write nothing.* **Recording the adoption is ceremony.**
|
||||
|
||||
## If there is a document, hang the choice on the document
|
||||
|
||||
**Put a choice where reconciliation will look for it.** *When the thing you
|
||||
decided about publishes something you have adopted, the choice belongs in the
|
||||
`.usages.md` beside that copy and not in a venue file* — **because that is the
|
||||
file somebody opens when the document moves**, *and a venue file is not.*
|
||||
|
||||
*The venue file is for what is left: the constraints of a thing that publishes
|
||||
nothing you can hold.*
|
||||
|
||||
## A venue is where an authority claim belongs
|
||||
|
||||
**Because a venue fact carries a reason and can therefore be shown wrong.**
|
||||
|
||||
*The alternative is worse and common: somebody with authority enters a
|
||||
conversation as a voice, and "we do it this way" arrives with no reason attached
|
||||
and nothing that could contradict it.* **Written as a venue constraint, the same
|
||||
instruction becomes a claim about the world**, *and a claim about the world is
|
||||
something a later reader can discover was false.*
|
||||
|
||||
## Checking it is still true
|
||||
|
||||
**Nobody will tell you.** *There is no publisher to ask, no `ETag`, and no
|
||||
conditional request that will ever come back `200`.*
|
||||
|
||||
**So a venue file needs what a published document needs: a date, and the reason
|
||||
underneath the choice.** *The reason is the whole of it* — **"we use protobuf for
|
||||
schema" is unfalsifiable a year later; "we use protobuf because the consumers are
|
||||
in three languages and JSON schema drift was costing us a release a quarter" can
|
||||
be checked against a world that may have changed.**
|
||||
@@ -147,13 +147,16 @@ do; a closed gap is what you needed and got.*
|
||||
**The new copy replaces the old pair wholesale.** *There is no merging a document
|
||||
you do not own.*
|
||||
|
||||
## Venues, for things you cannot fetch
|
||||
## A choice about something you adopted does not go in a venue file
|
||||
|
||||
**`.loom/venues/<name>.md`** — *Kafka, React, HTTP.* **Choices we made about
|
||||
something with no document to hang them on.**
|
||||
**Put a choice where reconciliation will look for it.** *When the thing you
|
||||
decided about publishes a document you hold a copy of, the choice belongs in the
|
||||
`.usages.md` beside that copy* — **because that is the file somebody opens when
|
||||
the document moves.**
|
||||
|
||||
*If there is a document, hang it there instead: **put a choice where
|
||||
reconciliation will look for it.***
|
||||
*Venues are for what is left: things that constrain you without publishing
|
||||
anything you could adopt.* **See
|
||||
[venues](https://git.hypertheory-labs.dev/loom/bedrock/raw/branch/main/.loom/published/venues.md).**
|
||||
|
||||
## Gaps that belong to nobody
|
||||
|
||||
|
||||
Reference in New Issue
Block a user