compact the event log: six dropped, fifty kept, and the result is the finding
recording-decisions now permits compaction and names four kinds that may never be dropped. Applying it removed six entries and left fifty, and the ratio is worth more than the saving. Every entry dropped became droppable by being published. what this tool is, the lock format, unlocked is a state, --help as the documentation surface, and the visibility field all now live in .loom/published/guarantees.md or README.md, and conversion-destroys lives in cart/v2 and cart.usages.md. Nothing was summarised away — the content moved into documents somebody else can lock, which is a stronger place for it than a log only we read. The entry names each one and where it went, so the compaction is auditable rather than trusted. What did not compress is the point. Almost everything left is a decline, a measurement, a supersession, or a belief shown wrong. Declines are not recoverable from code because the code is what they are absent from; measurements are facts about other people's systems that no artifact here holds; supersessions are changes of mind, which is most of what a reader wants. The log is long because the work was exploratory, not because it was padded. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018UTxuSizozEA8yDitPuris
This commit is contained in:
+54
-95
@@ -7,21 +7,6 @@ by saying so.*
|
||||
|
||||
---
|
||||
|
||||
## 2026-09-07 — what this tool is `osprey`
|
||||
|
||||
**Decided:** *`loom-cli` is a fetcher and a comparator.* **It fetches a document
|
||||
you depend on and tells you whether the publisher's copy has moved.** *It reports
|
||||
and never repairs.*
|
||||
|
||||
**Believed to advance:** *every act in the loom model is a file in somebody's
|
||||
repository — publishing is writing one, adopting is fetching a URL, homing a gap
|
||||
is an `mv`.* **Almost nothing needs a program**, so the program should be the
|
||||
part that cannot be done by hand: an HTTP request, repeated.
|
||||
|
||||
**Belief that could be shown wrong:** *that reporting is enough.* **If every
|
||||
report is followed by the same manual act, we have moved the work rather than
|
||||
removed it**, and the missing command will be obvious.
|
||||
|
||||
## 2026-09-07 — the design lives here and not in a spec `osprey`
|
||||
|
||||
**Decided:** *this log is the artifact of `osprey`.* **No specification document
|
||||
@@ -72,40 +57,6 @@ somebody's published surface or from a file they may rename at will.
|
||||
location.* **If anybody writes code that parses it back into a URL, the path
|
||||
should stop looking like one.**
|
||||
|
||||
## 2026-09-07 — the lock, and what it holds `osprey`
|
||||
|
||||
**Decided:** *one record per adopted document in `.loom/externals/.locks`: the
|
||||
**resolved** origin URL, and the `ETag` it came with.*
|
||||
|
||||
**Believed to advance:** *the specimen said there would be no lock file, on the
|
||||
strength of the `ETag`-as-blob-hash claim.* **That claim failed twice**, so the
|
||||
file exists and is named for what it is. *It was briefly called `.etags`, from
|
||||
when we believed there would be one field.*
|
||||
|
||||
**Resolved, and not the short form.** *Measured: gitea `303`s
|
||||
`/loom/externals/raw/externals.md` to `/raw/branch/main/…`* — **so a lock holding a
|
||||
short URL is locked to whatever the default branch is at the time you ask**, and a
|
||||
branch rename reports as a change in the document.
|
||||
|
||||
**Belief that could be shown wrong:** *that one file is cheap.* **Two fetches in
|
||||
one round conflict inside it, and the conflict is in a file no human can resolve
|
||||
by reading.** *If that bites, it becomes one record per document and the tree is
|
||||
mirrored twice.*
|
||||
|
||||
## 2026-09-07 — unlocked is a state `osprey`
|
||||
|
||||
**Decided:** *a document with no lock is reported as unlocked.* **`check` never
|
||||
adopts whatever the remote is currently serving as the lock.**
|
||||
|
||||
**Believed to advance:** *adopting it would assert the local copy is the one being
|
||||
served, which is the thing you were about to check.* **It is the hash assumption
|
||||
in a different coat, and it fails silently in the one case that matters — a copy
|
||||
somebody edited.**
|
||||
|
||||
**Belief that could be shown wrong:** *that anybody will run `pull` again to fix
|
||||
it.* **If unlocked documents simply accumulate, the report is noise and something
|
||||
has to lock them.**
|
||||
|
||||
## 2026-09-07 — `404` is unresolved, and that is no longer provisional `osprey`
|
||||
|
||||
**Decided:** *`check` reports a `404` as unresolvable — the document was withdrawn
|
||||
@@ -450,16 +401,6 @@ unknown.**
|
||||
next token*, **and because if a read scope is not enough, that is the only argument
|
||||
for keeping ssh.**
|
||||
|
||||
## 2026-09-07 — `--help` is the documentation surface `marmalade`
|
||||
|
||||
**Decided:** *`--help` is what a person or an agent actually runs when handed an
|
||||
unfamiliar CLI, so it is the surface that has to be good* — **say what a command
|
||||
does and what it will not do.**
|
||||
|
||||
**A `.loom/published/` for `loomctl` is deferred, not declined.** *The distinction
|
||||
matters because `init` was declined.* **It earns publication when somebody depends
|
||||
on this tool's behaviour rather than reading its help.**
|
||||
|
||||
## 2026-09-07 — decided by fallback: where the credential lives `marmalade`
|
||||
|
||||
**Nobody chose this; the fallback became the decision and that is recorded so it
|
||||
@@ -789,21 +730,6 @@ designed to be ephemeral is the first step in it not being ephemeral.**
|
||||
unit.* **If two presences ever work from different machines, the cart has nowhere
|
||||
to live**, *and everything above stops being true at once.*
|
||||
|
||||
## 2026-09-07 — conversion now destroys, so the log is the only record `quince`
|
||||
|
||||
**Under `cart/v1` the cart is untracked, so converting a round deletes its dailies
|
||||
outright.** *Every previous conversion left them in git.*
|
||||
|
||||
**So an entry that was not written before the `rm` is gone**, *and the write-ahead
|
||||
log is the mechanism* — **stage as you go, because at conversion the cart is the
|
||||
only copy and you are about to delete it.**
|
||||
|
||||
**And it sharpens a conflict recorded in `cart.usages.md`:** *the annotation
|
||||
protocol here says commit before dissolving because git is the only archive.*
|
||||
**With an ignored cart there is no archive, so dissolving a notes file destroys
|
||||
the annotations outright.** *Both documents are loom's; this is where an adopter
|
||||
can see the collision.*
|
||||
|
||||
## 2026-09-07 — declined for now: reference-only adoption `quince`
|
||||
|
||||
**`externals` offers two ways out of the confidentiality rule.** *We implement
|
||||
@@ -1041,27 +967,6 @@ it wrong.*
|
||||
configured one.* **It only pays if it is the same everywhere**, *which is not ours
|
||||
to decide and is with `bedrock`.*
|
||||
|
||||
## 2026-09-08 — the lock records visibility, and the word it will not use `sorrel`
|
||||
|
||||
**Decided:** *the lock carries what the source could be read as when it was
|
||||
fetched, and `check` audits it against this repository's visibility now.*
|
||||
|
||||
**Believed to advance:** *access is verified once, at fetch, and the copy is
|
||||
durable.* **Whether an adoption is still legitimate rests on the relative
|
||||
visibility of two repositories — a fact somebody can change with a checkbox a year
|
||||
later, without ever seeing the adoption.** *Recording it turns a silent permanent
|
||||
hazard into something that runs.*
|
||||
|
||||
**The value is `public` or `not-public`, and never `private`.** *An anonymous
|
||||
request tells those two apart and nothing finer* — **so it cannot see two
|
||||
repositories private to different people, which is the case where adopting between
|
||||
private repositories genuinely widens access.** *The word `private` would claim
|
||||
precision the signal does not have.*
|
||||
|
||||
**Belief that could be shown wrong:** *that the coarse signal is worth having.*
|
||||
**If the cases that matter here are all private-to-private, this alarm will never
|
||||
fire and the field is ceremony.**
|
||||
|
||||
## 2026-09-08 — a probe is not a fetch, and confusing them clears alarms `sorrel`
|
||||
|
||||
**Recorded because the bug was one line and the trap is permanent.**
|
||||
@@ -1151,3 +1056,57 @@ guarantee rather than from anybody's code.*
|
||||
*Consequence nobody predicted: reconciling cleared the banner with no
|
||||
acknowledgement, which is correct — an acknowledgement is for a guide that is
|
||||
behind, and this one was ahead.*
|
||||
|
||||
## 2026-09-08 — compacted, and it barely compressed `tansy`
|
||||
|
||||
**A compaction is itself a decision, so this is the entry `recording-decisions`
|
||||
asks for.** *Six entries dropped, fifty kept. The uncompacted log is in git
|
||||
history, which is where a reader who needs it goes.*
|
||||
|
||||
**Dropped, each because a competent reader can now recover it from the artifact,
|
||||
and here is which artifact:**
|
||||
|
||||
- *`what this tool is`* — **`.loom/published/guarantees.md` and `README.md`**
|
||||
- *`the lock, and what it holds`* — **`guarantees.md` documents the format**
|
||||
- *`unlocked is a state`* — **`guarantees.md`, and `add` refuses in code**
|
||||
- *`--help is the documentation surface`* — **`README.md` says so and points there**
|
||||
- *`the lock records visibility, and the word it will not use`* — **`guarantees.md`
|
||||
carries the field and the refusal of the word `private`**
|
||||
- *`conversion now destroys, so the log is the only record`* — **`cart/v2`, adopted
|
||||
here, and `cart.usages.md` names `wal.md` as the mechanism**
|
||||
|
||||
> **Every one of them became droppable by being published.** *Nothing was
|
||||
> summarised away; the content moved into a document somebody else can lock, which
|
||||
> is a stronger place for it than a log only we read.*
|
||||
|
||||
## What did not compress, and why that is the finding
|
||||
|
||||
**Fifty entries survived, and the reason is the rule rather than sentiment.**
|
||||
*Almost all of them are one of the four kinds that may never be dropped:*
|
||||
|
||||
**Declines** — *`init`, `published check`, a separate `adopt` verb, a plugin
|
||||
boundary, an audience declaration, reference-only adoption, resolving `404` over
|
||||
ssh, a second orientation file, worktrees, a spec, fixing `annotating`.* **Not one
|
||||
is recoverable from the code, because the code is what they are absent from.**
|
||||
|
||||
**Measurements** — *the `ETag` is a blob hash on gitea and not on GitHub; three
|
||||
hosts and one partial clone; only gitea resolves its own short raw URL; a refused
|
||||
write names the token's scopes; a private repository over HTTPS with a read
|
||||
token.* **Facts about other people's systems, which no artifact here holds.**
|
||||
|
||||
**Supersessions** — *publication is not publicness; a cart is not committed; `add`
|
||||
does not replace; `git` is not needed for `list` only; the private path is
|
||||
exercised.* **Each is a change of mind, which is most of what a reader wants.**
|
||||
|
||||
**Beliefs shown wrong** — *the specimen's hash-as-lock; `others` read as
|
||||
`everyone`; a probe treated as a fetch; a banner that claimed a direction two
|
||||
opaque strings cannot support.*
|
||||
|
||||
> **The log is long because the work was exploratory, not because it is padded.**
|
||||
> *A project that mostly built things would compact to a page. This one mostly
|
||||
> found out it was wrong about things, and that is the part the code cannot
|
||||
> hold.*
|
||||
|
||||
**Belief that could be shown wrong:** *that fifty is readable.* **It is today.**
|
||||
*The next remedy is not another compaction — it is the guide `bedrock` needed,
|
||||
and it is not needed yet.*
|
||||
|
||||
Reference in New Issue
Block a user