a decline is an entry — fold declines.md into the event log

loom asked whether .loom/declines.md was a thing or had drifted. It had drifted:
written during the conversion of cart almanac because the cart agreement says a
round emits the artifact and the declines, and made a separate file without
checking against .loom/published/recording-decisions.md, published in this
repository an hour later, which says declines belong in the event log.

A decline is a decision — what you considered and did not do, with the belief
that could later be shown wrong. Splitting them loses the ordering between what
we did and what we did not, and makes a reader know to look in two places.

The seven declines from almanac are now entries, followed by an entry recording
the fix and its general form: a second file for a special case of something that
already has a home is drift, and it is easiest to catch by reading your own
published rules back.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-07 10:40:01 -04:00
co-authored by Claude Opus 5
parent 42d963d24f
commit 0c61c7a42d
2 changed files with 91 additions and 46 deletions
-46
View File
@@ -1,46 +0,0 @@
# Declines
**What was considered and not done, with the reason.** *Only a belief can later
be shown wrong, so each says what was believed and not only what was chosen.*
---
## `cart: almanac`, 2026-09-07
**A registry service, first.** *Considered for three days and deferred.* **We
believe a git host already provides a document with an owner, an address, an
`ETag`, history and rendering** — so the service buys aggregation and a
self-describing entry point, and buys them better after the conventions have been
used. *Entry 78. **Wrong if the conventions turn out to need a server to be
usable at all**, which using them will show.*
**Affordances, stagings, roles and beads, for problems 1 and 2.** *Built out over
three days and then bracketed.* **We believe the model is for describing software
above its implementation, and that infrastructure and practice description is a
different altitude** being forced into it. *Entries 69 and 70. **Wrong if the
documentation layer turns out to need decomposition to answer anything
useful.***
**Bulk recasting a bead across stagings.** **We believe the list is the migration
plan** — resumable, observable, owned by whoever owns each staging — where a bulk
operation is one uninspectable moment that breaks every consumer at once. *Entry
35.*
**Signatures on receipts.** **We believe a content hash catches every accident,
and a signature answers an adversary that does not exist** — one tailnet, one
operator. *Entry 41. **Revisit when a consumer must verify without being able to
ask.***
**`watch`, and any subscription.** **We believe it would be the first thing
giving the registry persistent knowledge of its consumers**, which is the line
drawn at *a pin is not a subscription* — and a conditional `GET` suffices for
documents that change monthly. *Entry 72.*
**Naming what loom kept reaching for — "accommodations", "standard".** **We
believe it is a lifecycle stage with a measurement rather than a kind needing a
name**: a specification is a thing that names roles and casts none of them.
*Entries 45 and 48. **Coin it when we keep needing to say it.***
**An `internal/` directory.** **We believe naming the complement of `published/`
invents a category, and one that looks like a security boundary and is not.**
*Entries 29 and 67.*
+91
View File
@@ -3489,3 +3489,94 @@ buys aggregation and a self-describing surface, and it buys them after the
conventions have been used enough to know their shape.** Entry 12 said there is a
server and that is unchanged — **this says what it is for, and that it is not
first.***
---
**Declined** (2026-09-07, loom + claude-substrate — `cart: almanac`): **a registry
service, first.** *Considered for three days.*
**Because** we believe a git host already provides a document with an owner, an
address, an `ETag`, history and rendering — **so the service buys aggregation and
a self-describing entry point, and buys them better after the conventions have
been used.** *Wrong if the conventions turn out to need a server to be usable at
all, which using them will show.*
---
**Declined** (2026-09-07, loom + claude-substrate — `cart: almanac`):
**affordances, stagings, roles and beads, for infrastructure and practice
description.** *Built out over three days and then bracketed.*
**Because** we believe the model is for describing software above its
implementation, and **that infrastructure and practice description is a different
altitude** being forced into it. *Wrong if the documentation layer turns out to
need decomposition to answer anything useful.*
---
**Declined** (2026-09-07, claude-substrate — `cart: almanac`): **bulk recasting a
bead across stagings.**
**Because** we believe the list is the migration plan — *resumable, observable,
and owned by whoever owns each staging* — where **a bulk operation is one
uninspectable moment that breaks every consumer at once.**
---
**Declined** (2026-09-07, claude-substrate — `cart: almanac`): **signatures.**
**Because** we believe a content hash catches every accident, and **a signature
answers an adversary that does not exist** — one tailnet, one operator. *Revisit
when a consumer must verify without being able to ask.*
---
**Declined** (2026-09-07, claude-substrate — `cart: almanac`): **`watch`, and any
subscription.**
**Because** we believe it would be **the first thing giving a registry persistent
knowledge of its consumers**, which is the line drawn at *a pin is not a
subscription* — and a conditional `GET` suffices for documents that change
monthly.
---
**Declined** (2026-09-07, claude-substrate — `cart: almanac`): **naming the thing
we kept reaching for** — *"accommodations", "standard".*
**Because** we believe it is **a lifecycle stage with a measurement rather than a
kind needing a name**: *a specification is a thing that names roles and casts none
of them.* **Coin it when we keep needing to say it**, which is a better reason
than noticing a gap.
---
**Declined** (2026-09-07, claude-substrate — `cart: almanac`): **an `internal/`
directory.**
**Because** we believe naming the complement of `published/` invents a category —
**and one called `internal/` would look like a security boundary and not be
one.**
---
**Decided** (2026-09-07, loom + claude-substrate — `discovered`, `cart: kestrel`):
**a decline is an entry.** `.loom/declines.md` is removed and its seven entries
are above.
**Advances** one record rather than two, and the ordering between *what we did*
and *what we considered and did not* being visible.
**Because** loom asked whether `declines.md` was a thing or had drifted. **It had
drifted** — written during conversion because the cart agreement says a round
emits the artifact **and** the declines, and made a separate file without checking
against the primitive published in this repository an hour later. *Which says, in
so many words, **declines belong here too.***
> **A decline is a decision: what you considered and did not do, with the belief
> that could later be shown wrong.** *Splitting them loses the ordering, and
> makes a reader know to look in two places.*
*The general form, worth having: **a second file for a special case of something
that already has a home is drift**, and it is easiest to catch by reading your own
published rules back.*