Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
206fa31
Merge branch 'main' into feat/admission-surprise-verbs
REPPL Sep 25, 2026
61fb62c
feat(recordid,readingitem): admission and surprise grammars and locator
REPPL Sep 25, 2026
948934d
feat(capture): admit and surprise over one gated disposition writer
REPPL Sep 25, 2026
48228c7
feat(record): abcd adm-N and srp-N describe the record and its joins
REPPL Sep 25, 2026
a96657a
feat(lint): a closed surprise occasion and a per-run widening count
REPPL Sep 25, 2026
a43dbc9
feat(cli): capture admit and capture surprise front doors
REPPL Sep 25, 2026
7bcfcdd
chore: capture the stale reading-item producer paragraph
REPPL Sep 25, 2026
94b775c
docs(capture): the reading-item producer ships; four verbs act on its…
REPPL Sep 25, 2026
b0a7683
chore: resolve iss-2609251711096816 — reading-item producer paragraph
REPPL Sep 25, 2026
30f22aa
chore: ship itd-2609020625400194 by closing spc-2609020626040342
REPPL Sep 25, 2026
0d86729
test(evals): rehearse the widening ordering gate before the decline
REPPL Sep 25, 2026
113059c
docs(decisions): record why run A delivers the admission verbs beside…
REPPL Sep 25, 2026
8f8c9d4
feat(capture): the reframe record, its fingerprints, and its exclusio…
REPPL Sep 25, 2026
60c040e
feat(cli): capture reframe and abcd rfm-N as front doors onto the ref…
REPPL Sep 25, 2026
ee19ca4
feat(lint): record_schema judges a reframe record
REPPL Sep 25, 2026
f61c120
test(evals): the reframe plant carries a body, and its comparative ro…
REPPL Sep 25, 2026
1a81070
chore: capture the comparative coverage rows claiming a leak their mu…
REPPL Sep 25, 2026
ba81132
test(evals): the comparative derived-row coverage is caught by path, …
REPPL Sep 25, 2026
4de2d10
chore: resolve iss-2609251812216267 — comparative coverage rows caugh…
REPPL Sep 25, 2026
6b9da26
chore: ship itd-2609020625402518 by closing spc-2609020626048705
REPPL Sep 25, 2026
85e5f37
style(evals): gofmt the reframe sentinel row
REPPL Sep 25, 2026
dd35b5c
chore: correct the Phase 9 decision's figures and capture three admis…
REPPL Sep 25, 2026
5428aa4
feat(reading): every bundle carries the per-run context stamp of its run
REPPL Sep 25, 2026
30a7fde
feat(history): record context stamps at capture and check session sep…
REPPL Sep 25, 2026
c9aa577
feat(scribe): assemble the scribe's context from the ledger and inges…
REPPL Sep 25, 2026
0aa1eda
docs(agents): the scribe definition names its verbs and the ledger's …
REPPL Sep 25, 2026
2462737
test(evals): plant a scribe manifest beside a prior run as exhaust
REPPL Sep 25, 2026
044454c
chore: ship itd-2609020625402599 by closing spc-2609020626045177
REPPL Sep 25, 2026
68ed091
fix(scribe): the plugin page carries the binary-resolution ladder
REPPL Sep 25, 2026
41a6697
feat(lint): the principles family is a declared record store with typ…
REPPL Sep 25, 2026
611fd9d
feat(reading): a principle travels to a reading as its statement alone
REPPL Sep 25, 2026
c1d2686
test(evals): the principle coverage rows name the mechanism that caug…
REPPL Sep 25, 2026
885bf3b
feat(lifeboat): disembark principles carries the four claim keys
REPPL Sep 25, 2026
b83cf01
chore: capture the lint chapter's stale count of prose_citation_resol…
REPPL Sep 25, 2026
49b5400
docs(brief): the lint chapter counts the ten stores prose_citation_re…
REPPL Sep 25, 2026
a2f5ecb
chore: resolve iss-2609252159470046 — lint chapter store count
REPPL Sep 25, 2026
228d4d3
chore: ship itd-2609020625405170 by closing spc-2609020626042471
REPPL Sep 25, 2026
83fd55e
chore: capture the reframe review's four findings
REPPL Sep 25, 2026
b534f1c
fix(capture): the reframe whole write walks first parents, not dates
REPPL Sep 25, 2026
44ad3c4
fix(capture): a reframe with no fingerprintable prior state says so
REPPL Sep 25, 2026
3d06143
test(evals): the comparative derived rows declare their leak half a gap
REPPL Sep 25, 2026
cbb5435
feat(lint): cross_store_id_claim names a reframe record outside its s…
REPPL Sep 25, 2026
c66f37e
chore: resolve iss-2609252243284279 — the reframe whole write walks f…
REPPL Sep 25, 2026
1f314ca
chore: resolve iss-2609252243286219 — the reframe refusal names the f…
REPPL Sep 25, 2026
29a9a18
chore: resolve iss-2609252243299568 — the comparative rows declare th…
REPPL Sep 25, 2026
efe9ba9
chore: resolve iss-2609252243290965 — record-lint names a reframe out…
REPPL Sep 25, 2026
b8d632d
chore: capture review-scribe's findings against the scribe verbs
REPPL Sep 26, 2026
c164a12
chore: capture review-principles' three findings on the principle rea…
REPPL Sep 26, 2026
1d82650
fix(scribe): hold a disposition's state to the item's own supplied line
REPPL Sep 26, 2026
aaaedc2
chore: resolve iss-2609261036355193 — the state is held to the item's…
REPPL Sep 26, 2026
21dce52
fix(scribe): authenticate the parked pair against the researcher's ow…
REPPL Sep 26, 2026
c4449c4
chore: resolve iss-2609261036354146 — the parked pair is held to the …
REPPL Sep 26, 2026
a5f5a26
fix(reading,lint): one derivation of a principle's statement for both…
REPPL Sep 26, 2026
4e8b7f7
chore: resolve review-principles' three findings on the principle rea…
REPPL Sep 26, 2026
68c58b8
fix(scribe): promote the manifest only when the ingest landed a record
REPPL Sep 26, 2026
b451103
chore: resolve iss-2609261036355918 — an ingest that lands nothing le…
REPPL Sep 26, 2026
c74a932
fix(scribe): refuse a symlinked ancestor of the ledger's allow list
REPPL Sep 26, 2026
7dd93c7
chore: resolve iss-2609261036363663 — a symlinked ledger ancestor is …
REPPL Sep 26, 2026
6aae399
fix(scribe): percent-encode hidden runes in the ingest's JSON render
REPPL Sep 26, 2026
bfab32e
chore: resolve iss-2609261036366114 — the ingest JSON encodes hidden …
REPPL Sep 26, 2026
86c00ff
docs(scribe): record the lane's departures and disclose the verbatim …
REPPL Sep 26, 2026
14679e1
chore: capture the setext principle title the projection drops
REPPL Sep 26, 2026
795c72e
chore: capture review2-scribe's three LOW findings on scribe ingest
REPPL Sep 26, 2026
118b46a
fix(scribe): end the state check's lines at CR and the Unicode separa…
REPPL Sep 26, 2026
e8c1257
fix(scribe): hold a state to the item's own part of a line naming sev…
REPPL Sep 26, 2026
3edb368
fix(scribe): refuse a symlinked readings or run directory before the …
REPPL Sep 26, 2026
2bcce24
chore: resolve iss-2609261205176571 — the state check's lines end at …
REPPL Sep 26, 2026
1f70f12
chore: resolve iss-2609261205178776 — a state is held to the item's p…
REPPL Sep 26, 2026
de6796a
chore: resolve iss-2609261205185463 — the ingest refuses a symlinked …
REPPL Sep 26, 2026
a2a2853
chore: re-anchor iss-2609261036363114's deferral on v0.11.0
REPPL Sep 26, 2026
4d47cb9
Merge feat/admission-surprise-verbs (lane admission) into integ/land-3
REPPL Sep 26, 2026
39c7f8f
Merge feat/reframe-record (lane reframe) into integ/land-3
REPPL Sep 26, 2026
afd3021
chore: capture the reframe whole write's rebase reading (review2-refr…
REPPL Sep 26, 2026
1296a10
docs(capture): a reframe body stripped of its signals is plain prose …
REPPL Sep 26, 2026
10838c5
Merge feat/scribe-verbs (lane scribe) into integ/land-3
REPPL Sep 26, 2026
d791f54
docs(brief): the scribe chapter takes surface row 32
REPPL Sep 26, 2026
93082a9
Merge feat/principles-read-object (lane principles) into integ/land-3
REPPL Sep 26, 2026
4228e4f
chore: recalibrate the reading windows at the integration tip
REPPL Sep 26, 2026
121ff0f
merge: bring main (#726) into the integration branch
REPPL Sep 26, 2026
4a51e87
fix(scribe): refuse a repeated key in the scribe payload rather than …
REPPL Sep 26, 2026
07381a3
chore: resolve iss-2609261036363114 — the scribe payload refuses a re…
REPPL Sep 26, 2026
dbf2193
test(capture): pin the status line's open folder to capture's own con…
REPPL Sep 26, 2026
d36b5b9
chore: recalibrate the reading windows at the re-merged integration tip
REPPL Sep 26, 2026
a4d23d0
docs(record): code-span the example link forms in a resolved principl…
REPPL Sep 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions .abcd/config/reading-presets.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@
"test"
],
"window": {
"tokens_est": 1130000,
"measured_tokens_est": 1115292,
"measured_bytes": 4293878,
"measured_at": "8fd646fa043cd76a9d839b69ac797e1b3de3d5af"
"tokens_est": 1200000,
"measured_tokens_est": 1179078,
"measured_bytes": 4539453,
"measured_at": "dbf21939341e47a9cc7869c6a89c325bb81701a6"
}
},
"entailment": {
Expand Down Expand Up @@ -133,9 +133,9 @@
],
"window": {
"tokens_est": 370000,
"measured_tokens_est": 357546,
"measured_bytes": 1376554,
"measured_at": "8fd646fa043cd76a9d839b69ac797e1b3de3d5af"
"measured_tokens_est": 363669,
"measured_bytes": 1400129,
"measured_at": "dbf21939341e47a9cc7869c6a89c325bb81701a6"
}
},
"comparative": {
Expand Down Expand Up @@ -216,10 +216,10 @@
"test"
],
"window": {
"tokens_est": 1140000,
"measured_tokens_est": 1124328,
"measured_bytes": 4328666,
"measured_at": "8fd646fa043cd76a9d839b69ac797e1b3de3d5af"
"tokens_est": 1200000,
"measured_tokens_est": 1188114,
"measured_bytes": 4574241,
"measured_at": "dbf21939341e47a9cc7869c6a89c325bb81701a6"
}
}
}
Expand Down
5 changes: 4 additions & 1 deletion .abcd/development/brief/04-surfaces/02-disembark.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,10 @@ present only when no transcript tier grounded the package, so an unmarked
lifeboat marshals as it always has and embark can say which it is.

The synthesis sub-verbs add the rest afterwards: the press release writes
`press-release.{json,md}`, the principles write `principles.{json,md}`, the review
`press-release.{json,md}`, the principles write `principles.{json,md}` (schema
version 2: each principle carries `claim_type`, `reference` and `comparison`
beside its evidence, a declined claim as `null`, per
[adr-2609021016270132](../../decisions/adrs/2609021016270132-the-principles-family-is-a-declared-record-store-whose-entri.md)), the review
writes the verdict artefact, and the graveyard validates and writes the lesson
JSON. None of these exist at pack time.

Expand Down
141 changes: 131 additions & 10 deletions .abcd/development/brief/04-surfaces/06-capture.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,17 @@ binary.

| Verb | Bucket | Status |
|---|---|---|
| `admit` | — | shipped |
| `defer` | — | shipped |
| `disposition` | — | shipped |
| `link` | — | shipped |
| `list` | — | shipped |
| `mentions` | — | shipped |
| `migrate` | — | shipped |
| `promote` | — | shipped |
| `reframe` | — | shipped |
| `resolve` | — | shipped |
| `surprise` | — | shipped |
| `wontfix` | — | shipped |


Expand Down Expand Up @@ -165,6 +168,67 @@ naming the earlier items it recurs from; that is a recorded recognition, never a
join a machine derived. Two hold-shaping flags are reserved and dormant, and a
populated value is refused until activation is ruled.

**At the widening position the order is fixed: characterise first, admit
second** (itd-2609020625400194, spc-2609020626040342). No disposition in any
state, and no admission, is written for a widening item until a committed
comparative run names the item's run; a comparative run committed with an empty
item set, the position not exercised, satisfies this as a characterising run
does. The refusal names the run it is waiting on. It is one gate in the one
disposition writer every verb routes through, so the disposition verb, the
admission verb and a scribe's ingest all refuse the same way. The other
positions are answered with no comparative run anywhere.

**Admitting** a widening proposal is one act that writes two records under the
ledger lock: the item's `accepted` disposition and the admission record
(`adm-N`, under `admissions/<run-id>/`) that joins it to its run's candidate
set, both carrying the one ground the verb was given. Where an `accepted`
disposition already stands, the admission is written alone, and only on the
ground that disposition states. The ground is free text held to the same
substance floor as every grounds primitive. Everything else is refused with
nothing written: an item at any other position, an item already admitted, a
standing disposition in any other state (named with its state), a contested or
cyclic disposition set, a blank or degenerate ground, and any admission before
characterisation. If the admission fails to write, the disposition this act
wrote is removed.

**Recording a surprise** writes one surprise entry (`srp-N`, under
`surprises/`) as its own record, the surprise itself as its body and
`occasioned_by` as its whole join. The occasion is a reading item, an admission
or a disposition this ledger holds, and nothing else: prose, a record of any
other family, and a handle naming nothing are refused before anything is
minted. No disposition is written on this path. The record gate holds a
hand-written surprise to the same closed form.

**Recording a reframe** writes one reframe record (`rfm-N`, under
`reframes/`) when a reading occasions a rewrite of the frame
(spc-2609020626048705). The frame is three committed surfaces at fixed paths:
the framing chapter's `Construal` section, the glossary terms (indexes and the
scaffold excepted) and the scope chapter. The record carries the occasion (a
reading item, a disposition or a surprise), the SHA-256 fingerprint of each
surface before and after, which surfaces changed, and the ground, and no text of
any surface. The verb reads the surfaces at `HEAD`, in the working tree and
along their history, so the operator supplies no hash. Written after the
rewrite's commit it is one write, against the previous distinct state along
first parents, so a rewrite a merge brought in is recorded as a squash of the
same branch would record it, whatever the commits' timestamps; written before
it, a first half records the
before fingerprints and a second write finishes it once the rewrite is
committed, walking back across as many commits as the rewrite took, merges
included. Every render names the half it wrote. The occasion
is checked in one respect: the commit that added it precedes the rewrite.
Refused with nothing written: an occasion outside the three families or naming
no record, one not committed or committed after the rewrite, a degenerate
ground, uncommitted surface changes outside a first half, a frame with no distinct
prior state within its fingerprintable history (named with how far back that
history reaches), a second open record, a completion in which nothing moved, and a
before state the history no longer holds within 64 commits touching the frame. The
readings keep the record out by its store's path, so record-lint's
`cross_store_id_claim` refuses a reframe-shaped file (an `rfm-N` name, an
`rfm-N` id, or `occasioned_by` beside a before fingerprint) anywhere else. A
reframe's text copied out with all three signals stripped is plain prose to
that check and reaches a reading like any other prose, a limit of detecting
the record by its signals.

**Resolving** marks an issue resolved and moves it to
`resolved/`. Impact is required, and resolving without it is refused with
nothing written; grounds are recorded when given, their absence parked by
Expand Down Expand Up @@ -361,6 +425,27 @@ for ad-hoc scribbles.
unless it cites the standing one, empty grounds (or a hold with no exit
condition) is refused, and a state the item's position does not make available
is refused with the availability rule named.
- **Given** a widening item with no admission and no disposition, and a
committed comparative run over its run, **when** the user admits it with a
ground above the floor, **then** an `accepted` disposition and one admission
record exist naming the item and the run; a second admission refuses, a
standing `declined` or `held` refuses naming the disposition, and before any
comparative run names the run both the admission and a disposition refuse
naming what they wait for.
- **Given** a surprise whose occasion resolves to a reading item, an admission
or a disposition, **when** the user records it, **then** one surprise record
exists as its own file and no disposition was touched.
- **Given** a reading item and any of the three frame surfaces rewritten and
committed, **when** the user records a reframe with the item as occasion and a
ground, **then** one reframe record exists carrying the occasion, the before
fingerprint of each surface's previously committed state, the after
fingerprint of each surface's current state, which surfaces changed and the
ground; a frame with no distinct prior state, or a before state the history
no longer holds, is refused naming the mismatch.
- **Given** a run of widening items, **when** the bare board or `abcd lint`
runs, **then** it counts the run's admitted, declined and held proposals and
names each one carrying neither an admission nor a `declined` or `held`
disposition.
- **Given** a reading item carrying no disposition, **when** the user tries to
promote it, **then** the promote is refused and no draft is minted: acceptance
is one record, and the action it licenses is a separate admission. The same
Expand Down Expand Up @@ -397,15 +482,24 @@ the only caller that writes them (see [`23-reading.md`](23-reading.md)). That
sequencing is spc-58's own, and it is why the ingest primitive is exported
rather than made a verb of this surface.

Admission and surprise records (itd-189, spc-67) ship as **schemas only**,
declared beside the reading families and wired to `record_schema` rather than to
a verb. A declined proposal is no third record type: it is the disposition in
its `declined` state. This surface has no sub-verb that writes either shape, so
what is armed today is the committed-tree gate: a blank grounds, an absent
proposal, an occasioned-by pointer naming no record, and either family filed in
the other's store are each a blocker. The command-side write is a later
iteration, and the sequencing is the reading families' own: no reading has run,
so there is nothing to write yet.
Admission and surprise records (itd-189, spc-67) have their schemas beside the
reading families, wired to `record_schema`, and their writers in
`internal/core/capture/admit.go` and `surprise.go` (spc-2609020626040342). A
declined proposal is no third record type: it is the disposition in its
`declined` state. The committed-tree gate stays armed for a record written by
hand: a blank grounds, an absent proposal, an occasion outside the closed form
or naming no record, and either family filed in the other's store are each a
blocker. `abcd <adm-N>` and `abcd <srp-N>` describe the record and its joins;
the reading families `rdi`, `dsp` and `rdg` have no record dispatch.

The reframe record (itd-2609020625402518, spc-2609020626048705) has its schema
beside them in `internal/core/issueschema`, wired to `record_schema`, and its
writer, the three surface readers and the fingerprints in
`internal/core/capture/reframe.go`. The gate refuses a hand-written reframe with
a blank ground, a missing or mis-shaped fingerprint, a partial after half, a
`changed` outside the three surface names, or an occasion outside the closed
form. `abcd <rfm-N>` describes it. The family is warm: the cold-reading
assembler's exclusion floor names it at every position.

<!-- surface-appendix:begin — generated from the command tree by `go generate ./internal/surface/cli`; never edit by hand -->

Expand All @@ -415,7 +509,7 @@ _Generated from the command tree; a drift test fails `go test` when this appendi

### `abcd capture`

Sub-verbs: `abcd capture defer`, `abcd capture disposition`, `abcd capture link`, `abcd capture list`, `abcd capture mentions`, `abcd capture migrate`, `abcd capture promote`, `abcd capture resolve`, `abcd capture wontfix`.
Sub-verbs: `abcd capture admit`, `abcd capture defer`, `abcd capture disposition`, `abcd capture link`, `abcd capture list`, `abcd capture mentions`, `abcd capture migrate`, `abcd capture promote`, `abcd capture reframe`, `abcd capture resolve`, `abcd capture surprise`, `abcd capture wontfix`.

| Flag | Type |
|---|---|
Expand All @@ -429,6 +523,14 @@ Sub-verbs: `abcd capture defer`, `abcd capture disposition`, `abcd capture link`
| `--slug` | string |
| `--source` | string |

### `abcd capture admit`

Sub-verbs: none.

| Flag | Type |
|---|---|
| `--grounds` | string |

### `abcd capture defer`

Sub-verbs: none.
Expand Down Expand Up @@ -498,6 +600,17 @@ Sub-verbs: none.
| `--intent` | string |
| `--production-mode` | string |

### `abcd capture reframe`

Sub-verbs: none.

| Flag | Type |
|---|---|
| `--complete` | string |
| `--grounds` | string |
| `--occasioned-by` | string |
| `--open` | bool |

### `abcd capture resolve`

Sub-verbs: none.
Expand All @@ -512,6 +625,14 @@ Sub-verbs: none.
| `--shipped-in` | string |
| `--spec` | string |

### `abcd capture surprise`

Sub-verbs: none.

| Flag | Type |
|---|---|
| `--occasioned-by` | string |

### `abcd capture wontfix`

Sub-verbs: none.
Expand Down
11 changes: 9 additions & 2 deletions .abcd/development/brief/04-surfaces/08-abcd.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,15 @@ and which of the `.abcd/` work tiers exist. The plugin command invokes its JSON
form.

**`abcd <record-id>`** takes a single positional matching `iss-N`, `itd-N`,
`spc-N` or `adr-N` and reports, read-only, what that record is, where it lives,
and the concrete next move for its lifecycle state. Bare answers *what can I
`spc-N`, `adr-N`, `adm-N`, `srp-N` or `rfm-N` and reports, read-only, what that
record is, where it lives, and the concrete next move for its lifecycle state.
An admission and a surprise are the issue ledger's two folderless families
(spc-2609020626040342): their status reads `admitted` and `recorded`, their links
are the records they join to, and neither has a next move. A reframe record
(`rfm-N`, spc-2609020626048705) reads `open` until its after half is written and
`complete` after; its links are its occasion, the before fingerprints and, once
complete, the after fingerprints and the surfaces that changed, and an open one's
next move is its completion. The reading families have no record dispatch. Bare answers *what can I
do*; the id form answers *what is this, and what is my next move* (spc-26,
itd-121). A positional on the namespace root is not a `show` sub-verb, so the
form stays inside the naming discipline. For an issue id it also names the
Expand Down
19 changes: 18 additions & 1 deletion .abcd/development/brief/04-surfaces/11-history.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ ahoy's registry stays under `~/.abcd/history/` and holds no transcripts.
| `list` | — | shipped |
| `migrate` | — | shipped |
| `reconstruct` | — | shipped |
| `separation` | audit | shipped |
| `show` | — | shipped |
| `staged` | — | shipped |

Expand Down Expand Up @@ -63,6 +64,16 @@ ahoy's registry stays under `~/.abcd/history/` and holds no transcripts.
- **Draining** redacts and stores every staged transcript, then deletes the raw
copy. It exits non-zero when anything failed, and this verb runs the backlog to
completion where the session-start hook drains a bounded number.
- **The separation check** reports whether any retained transcript held both a
reading and the ledger of one run, which brief invariant 15 forbids. Every
reading bundle and every scribe context carries a per-run context stamp; capture
records the stamps a transcript carried as metadata, and the check reads that
metadata and never a body. It names a transcript carrying the reading stamp and
the scribe stamp of one run and exits non-zero; otherwise it says the property
held for the runs it saw, or that it is unobserved when no retained transcript
carries a stamp, and never that it is clean
([adr-2609021016275803](../../decisions/adrs/2609021016275803-no-session-holds-both-a-reading-and-the-ledger-and-a-per-run.md)).
The listing's text render ends with the same one line.

- **Ingesting** — redact and store transcripts that are already on disk, at the
paths given, and were never captured. The **destination repository is an
Expand Down Expand Up @@ -326,7 +337,7 @@ _Generated from the command tree; a drift test fails `go test` when this appendi

### `abcd history`

Sub-verbs: `abcd history capture`, `abcd history discard`, `abcd history drain`, `abcd history ingest`, `abcd history list`, `abcd history migrate`, `abcd history reconstruct`, `abcd history show`, `abcd history staged`.
Sub-verbs: `abcd history capture`, `abcd history discard`, `abcd history drain`, `abcd history ingest`, `abcd history list`, `abcd history migrate`, `abcd history reconstruct`, `abcd history separation`, `abcd history show`, `abcd history staged`.

Flags: none.

Expand Down Expand Up @@ -390,6 +401,12 @@ Sub-verbs: none.
| `--mode` | string |
| `--out` | string |

### `abcd history separation`

Sub-verbs: none.

Flags: none.

### `abcd history show`

Sub-verbs: none.
Expand Down
15 changes: 15 additions & 0 deletions .abcd/development/brief/04-surfaces/23-reading.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,21 @@ The table is Go data, rendered into the readings family's charter under a test
holding the two to each other. The exclusion floor rides in every manifest, each
entry with the signal by which a reader detects it.

**The knowledge record travels as statements**
([adr-2609021016270132](../../decisions/adrs/2609021016270132-the-principles-family-is-a-declared-record-store-whose-entri.md)).
The principles family is admitted at the widening, entailment and detection
positions and projected to one field: each principle's H1 title above its
`**The rule.**` paragraph, with every inline or reference-style link unwrapped to
its label. A `## The rule` heading is never read as the statement, and a principle
with no such paragraph contributes no item. Its four claim keys and its citations
stay behind, and the floor asserts both; an assembly whose principle item still
carries a record handle, a bare URL or an autolink is refused rather than stamped,
and record-lint's `principle_claims` judges a typed principle's title and
paragraph by the same reading first. The
table admits the family, and a committed entry naming the `principle` kind is what
hands it to a run; the committed entries name no such kind, so no reading
receives the knowledge record until one does.

## Two artefacts, and where they land

Assembly writes the assembled input and the manifest as two separate files: the
Expand Down
Loading
Loading