Files
hq/03-DESIGN/01-to-be/35-reading-the-record.md
T
jschoubben 90b44a48df Issue 006 resolved: the record is read where it is written, and the console lists it
Design 35 implemented with what shipped and the live check; 006 closes on ADR 0025's own test,
run through the console.
2026-09-30 18:10:18 +02:00

5.3 KiB

layer, status, code, updated, decisions
layer status code updated decisions
to-be implemented
mesh-catalog modules/records
2026-09-30
02-DECISIONS/0153-the-record-is-read-by-a-module-and-the-console-lists-it.md
02-DECISIONS/0025-the-design-record-is-read-not-copied.md
02-DECISIONS/0112-a-module-definition-names-no-node-mesh-or-path.md

35 — Reading the record

The design record, answered from a checkout the mesh keeps, at the commit it read. A module, records, holds a working copy of a repository of markdown — this one, for this mesh — and answers where a phrase appears, what a document says, what a folder holds and where the copy stands. The console lists those answers beside every other tool (ADR 0153).

1. What it keeps, and why that is not a copy

A git checkout, cloned from the forge that holds the git seat, brought up to date on every merge the forge announces and every ten minutes besides. The bytes are the repository's; nothing is derived from them and stored. What ADR 0025 refused was a second store that is searched while the first is edited, drifting silently. A checkout cannot drift; it can lag, and the lag is in every answer as the commit it was read at and in records_status as when it was last brought up to date.

The checkout is reset to the origin on every sync, never merged: it is the mesh's, so a local change is nobody's.

2. What it answers

tool answers
records_search every place a phrase appears, as written and case-insensitively: document, line, the nearest heading above it; bounded, and says when it was
records_read one document, whole, or its first part with a note when very long
records_list what a folder holds: sub-folders and documents
records_status repository, forge, commit and its date, last sync, document count, last error
records_sync bring the checkout up to date now

No ranking and no summary, on purpose: a record is found by its own words, and the reasoning is in the document, not in the tool.

3. What it is told, and what it refuses to guess

Three things, none from a manifest (ADR 0112): the directory its checkout lives in (a resource the mesh gives it), the forge's address (the git provision's binding, written into a file as scheme://host:port), and the repository's path on the forge (a setting, {"repository": "<owner>/<name>"}). Without the third it serves no tools and its log says so. Public repositories only; it holds no credential.

4. How it is found

The console asks every module what it serves and lists records_search with a description that says when to call it — search the literal words of a symptom or a term before forming a hypothesis. That is 0025's second half in today's mesh: there is no store to be beside, and an agent choosing from a tool list is the search.

5. Where it runs

Anywhere a node has the forge in reach; one assignment is enough, and a second on another machine is harmless. The mesh session of design 15, when it exists, calls this rather than reading for itself.

How it is checked

Check Defends
a phrase in one document of a repository the test makes comes back from that document, with the commit; a second commit on the origin is pulled and the next answer names it ADR 0025's check, ADR 0153
a path outside the checkout is refused; an empty search is refused the reader reads the repository and nothing else
a sync against an unreachable origin leaves the checkout standing and says why silence and success never look alike
live: through the console, records_search for a phrase that appears only in a design document here returns it issue 006's closing check

What shipped, 2026-09-30

mesh-catalog PR 183, then PR 185. Verified on the live mesh the same evening: records assigned to the control node with {"repository": …} as its setting, its checkout at the repository's main with 478 documents, its five tools listed by the console beside every other tool, and — ADR 0025's check — records_search for a phrase from this document's title returned it from where it is written, with the commit. The first live search missed: the phrase chosen from ADR 0025 straddled a line break under emphasis, and the reader matched single lines. PR 185 matches a line together with the next and ignores emphasis marks, which the module's test now covers; until it rolls, a phrase that wraps is one to shorten.

The reader's consumes names the forge module's event rather than the git seat, because the seat declares none; a merge into the repository was seen and pulled within seconds.

What this does not settle

  • Ranking or meaning. A search that understands a question is the session's job, not the reader's.
  • A private repository. That is a credential the module would have to hold, and a decision about what may read what.

References