mesh-knowledge: the import keeps every field and takes clauses only from the Decision section's own list, and can repair what it held (hq issue 487)
mesh/merge-gate pass: builds mesh-knowledge → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery superseded: a newer head of the same pull request

The import at hq f0892019 lost reconstructed, amended and a research effort's touches, held rests-on only as a
citation, took eight records' clauses from a numbered list inside a ### subsection, and left the 11 records with
no Decision section clause-less with nothing queued. Each is held now; refresh repairs a record only the import
ever wrote, and never one changed since.
This commit is contained in:
2026-10-11 12:18:03 +02:00
parent 300406e0dd
commit 1cc0ab369f
26 changed files with 3592 additions and 80 deletions
+22 -4
View File
@@ -56,8 +56,14 @@ A clause is `proposed`, `in force`, `changed` (a later clause replaces part of i
- `confirmed`: drafted, then confirmed by a second, separate judgement that saw only the record and the drafts.
The links are `supersedes`, `changes` (to a clause: `0276 §4`), `extends`, `became` (from a research effort to a
decision record or design) and `cites` (to any record, an issue, or a design). Each link is stored once, on the
record it goes out from.
decision record or design) and `cites` (to any record, an issue, or a design). Two more hold what hq's records
write and to-be 55 names no kind for (hq issue 487): `rests-on`, from a decision to one it stands on (held to the
rules `extends` is), and `touches`, from a research effort to a record, issue or design it bears on. Each link is
stored once, on the record it goes out from.
Besides the fields every record has, a decision holds `reconstructed` (true or false, where it says) and `amended`
(the days), and a research effort holds what it `touches` that is no record, issue or design ("the tool runtime")
as text. `get` serves each, and any other field a record of hq wrote under `fields`.
## Writing a record
@@ -109,8 +115,20 @@ no counter moves. A second run changes nothing and says so. `dry-run` writes not
`mesh-knowledge dry-run <hq checkout>` gives the same dry run over a checkout on disk, against an empty knowledge
base.
A decision whose Decision section writes numbered statements with a bold lead gets them as `written` clauses. One
written as prose (226 of main's 278 on 2026-10-11) gets none at the import. A background worker then takes one
**`refresh`** (the import's third argument) repairs what an earlier import lost or misread (hq issue 487). For a record held whose every version
was written by the import or a refresh (no one has changed it since, and nothing waits over it), it reads the
record again at the commit and, when what it holds differs, writes it as a new version: "refreshed from hq at
<commit>: <path>", naming each field that differs. A record anyone changed after its import (drafted, accepted
over, corrected) is never touched, and its row says so. A record read again and found the same is left as it is,
so a second refresh changes nothing. With `dry-run` it says, record by record, what it would change.
A decision whose Decision section's own top-level list writes numbered statements with a bold lead gets them as
`written` clauses. A numbered list inside a `###` subsection of the Decision section is that subsection's prose,
never the record's clauses (ADR 0259, 0272, 0273, 0278 and 0288 number steps so; hq issue 487). A decision with no
such list (245 of 278 at hq f0892019, 196 written clauses in the rest) gets none at the import, and so does one
with no Decision section at all (11): it is drafted from what it decides across its sections, all but its
preamble, consequences and references. One too large for one judgement (48 KiB) is marked as having no clauses,
and `get` says why. A background worker then takes one
judgement at a time (`claude-code.claude_code_judge` on this node): it drafts the clauses, then confirms them in a
separate call. A clause the second judgement rejects stays `drafted`, with the reason. hq's `supersedes-in-part`
named a record, not a clause: which clause it changes is judged and then confirmed the same way, and only then is