To-be 55: the rests-on and touches links and the import's refresh; ADR 0248's index now comes from the knowledge base
mesh/delivery superseded: a newer head of the same pull request
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed

This commit is contained in:
2026-10-11 12:29:32 +02:00
parent f08920199d
commit 510f7aecf1
3 changed files with 15 additions and 1 deletions
@@ -10,6 +10,12 @@ supersedes-in-part:
# 248. The decision index is generated when it is read, and never stored
> **The mechanism changed — 2026-10-11, by [ADR 0290](0290-a-decision-record-lives-whole-in-the-knowledge-base-made-of-clauses.md).**
> What still stands: the index is generated when it is read and never stored, in the reading order of the topics.
> What moved: it is generated by the knowledge base (`knowledge-base.holds` per topic, `ask`, `get`) from the records
> it holds, not by the records module from this repository's files; the records module's `records_decisions` is
> retired and names those verbs (issue 488).
## Context
[ADR 0019](0019-how-this-repository-works.md) says two things about the decision index. Every
@@ -112,7 +112,7 @@ rule 8 already decided that the issue tracker hands out decision and research nu
([ADR 0126](0126-a-module-declares-its-own-seats.md)). Its first kinds are the **decision record** and the
**research effort**.
2. **The knowledge base is the truth for a record whole**: its number, kind, title, topic, status, date, deciders, its
typed links (held in both directions), its clauses, and its reasoning (context, options weighed, consequences,
typed links (held in both directions; to-be 55 §2 lists their kinds), its clauses, and its reasoning (context, options weighed, consequences,
how it is checked; a research effort's documents). **Every version is kept**, with who wrote it and when, and any
two versions can be compared. Once the import has run and been checked, no record is written in this repository.
3. **A decision record is made of clauses.** A clause is one numbered statement of what was decided, with a status:
@@ -69,6 +69,8 @@ the records module, as the issue tracker's import does.
| `changes` | a clause or a record → a clause it replaces part of |
| `extends` | a record → a record it builds on |
| `became` | a research effort → a decision record or design |
| `rests-on` | a record → a record its decision rests on |
| `touches` | a research effort → a record or area it bears on (a record by link, an area as text) |
| `cites` | any record → any record or issue it names |
## 3. Clauses
@@ -153,6 +155,12 @@ whole, at its own number, as its first version, naming the commit. It creates wh
advances a counter; a second run changes nothing and says so. Records written in this repository after the import,
while the first slice does not take writes yet, are taken in by running it again.
**Refresh.** `import` with `refresh` re-reads, at the commit given, every record whose only versions were written by
the import, and writes the corrected record as a new version naming why; a record anyone else wrote a version of is
never touched. It repairs what an earlier import misread (issue 487) and is idempotent: a second run changes
nothing. `dry-run` lists what it would change. Once this repository holds no records, `import` refuses rather than
reporting nothing created (issue 488).
Before the records leave this repository (issue 426), every record is compared with its file at the import's commit,
field by field and section by section, and the result is written on issue 426.