From ba7b455719d83487d0a7e9874e29e33cbc2f5040 Mon Sep 17 00:00:00 2001 From: jochen Date: Sun, 11 Oct 2026 04:58:35 +0200 Subject: [PATCH] Add mesh-knowledge, the knowledge base's first slice (hq issue 425, ADR 0290) An agent learns what a decision says only by reading whole records. This module holds every decision record and research effort whole in a database in the store, with clauses that carry their own status and source, typed links read from both ends, and every version. It answers ask, get and holds within a stated bound, and takes a record through reserve, propose (refused on any of the 29 per-record rules), review by someone other than the author, and acceptance, on the operator's proven warrant when the record needs it. The 4 whole-set rules make the module unhealthy when they fail. The import reads hq at a commit through the records module, never overwrites, and changes nothing when run again. Prose decisions get drafted clauses that a second judgement must confirm before they are served. --- .gitignore | 2 + modules/mesh-knowledge/README.md | 140 +++ .../cmd/mesh-knowledge/answers.go | 689 +++++++++++++ .../cmd/mesh-knowledge/bound_test.go | 132 +++ .../cmd/mesh-knowledge/bus_test.go | 390 ++++++++ .../cmd/mesh-knowledge/daemon-lines | 73 ++ .../cmd/mesh-knowledge/draft.go | 463 +++++++++ .../cmd/mesh-knowledge/draft_test.go | 243 +++++ .../cmd/mesh-knowledge/history_test.go | 112 +++ .../mesh-knowledge/cmd/mesh-knowledge/hq.go | 128 +++ .../cmd/mesh-knowledge/import.go | 289 ++++++ .../cmd/mesh-knowledge/import_test.go | 182 ++++ .../mesh-knowledge/cmd/mesh-knowledge/kb.go | 576 +++++++++++ .../cmd/mesh-knowledge/kit_test.go | 430 ++++++++ .../mesh-knowledge/cmd/mesh-knowledge/main.go | 934 ++++++++++++++++++ .../cmd/mesh-knowledge/manifest_test.go | 198 ++++ ...cords-their-versions-clauses-and-links.sql | 73 ++ .../cmd/mesh-knowledge/operator.go | 273 +++++ .../cmd/mesh-knowledge/parse.go | 365 +++++++ .../cmd/mesh-knowledge/pgstore.go | 558 +++++++++++ .../cmd/mesh-knowledge/pgstore_test.go | 133 +++ .../cmd/mesh-knowledge/record.go | 442 +++++++++ .../cmd/mesh-knowledge/reference.go | 222 +++++ .../cmd/mesh-knowledge/review_test.go | 276 ++++++ .../cmd/mesh-knowledge/rules.go | 533 ++++++++++ .../cmd/mesh-knowledge/rules_test.go | 221 +++++ .../cmd/mesh-knowledge/schema.sql | 73 ++ .../cmd/mesh-knowledge/store.go | 319 ++++++ .../mesh-knowledge/testdata/hq-main.commit | 1 + .../mesh-knowledge/testdata/hq-main.tar.gz | Bin 0 -> 1207833 bytes .../testdata/hq/00-META/glossary.md | 680 +++++++++++++ .../00-overview.md | 86 ++ .../01-findings.md | 259 +++++ .../00-overview.md | 112 +++ .../01-findings.md | 295 ++++++ ...anaged-files-are-generated-never-edited.md | 64 ++ .../0127-amqp-is-a-provision-not-the-bus.md | 104 ++ ...g-on-the-mesh-speaks-to-the-broker-seat.md | 94 ++ ...e-produces-a-tiered-plan-the-mesh-keeps.md | 142 +++ ...s-healthy-and-the-node-engine-judges-it.md | 275 ++++++ ...-and-a-declared-order-outranks-them-all.md | 99 ++ ...one-walk-with-one-commit-per-repository.md | 249 +++++ ...-its-merge-and-a-core-module-within-ten.md | 236 +++++ ...e-in-the-knowledge-base-made-of-clauses.md | 187 ++++ .../testdata/hq/02-DECISIONS/README.md | 172 ++++ .../cmd/mesh-knowledge/testdata/hq/COMMIT | 1 + .../cmd/mesh-knowledge/wholeset_test.go | 92 ++ modules/mesh-knowledge/go.mod | 28 + modules/mesh-knowledge/go.sum | 53 + modules/mesh-knowledge/module.json | 185 ++++ 50 files changed, 11883 insertions(+) create mode 100644 modules/mesh-knowledge/README.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/answers.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/bound_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/bus_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/daemon-lines create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/draft.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/draft_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/history_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/hq.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/import.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/import_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/kb.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/kit_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/main.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/manifest_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/migrations/0001-the-knowledge-base-holds-records-their-versions-clauses-and-links.sql create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/operator.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/parse.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/pgstore.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/pgstore_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/record.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/reference.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/review_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/rules.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/rules_test.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/schema.sql create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/store.go create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq-main.commit create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq-main.tar.gz create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/00-META/glossary.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/042-the-mesh-keeps-its-own-issues/00-overview.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/042-the-mesh-keeps-its-own-issues/01-findings.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/045-a-knowledge-base-the-mesh-writes/00-overview.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/045-a-knowledge-base-the-mesh-writes/01-findings.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0011-managed-files-are-generated-never-edited.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0127-amqp-is-a-provision-not-the-bus.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0131-everything-on-the-mesh-speaks-to-the-broker-seat.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0162-a-merge-produces-a-tiered-plan-the-mesh-keeps.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0249-a-delivery-groups-order-rules-have-a-precedence-and-a-declared-order-outranks-them-all.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0282-a-fix-to-a-leaf-module-runs-healthy-on-every-node-within-five-minutes-of-its-merge-and-a-core-module-within-ten.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0290-a-decision-record-lives-whole-in-the-knowledge-base-made-of-clauses.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/README.md create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/COMMIT create mode 100644 modules/mesh-knowledge/cmd/mesh-knowledge/wholeset_test.go create mode 100644 modules/mesh-knowledge/go.mod create mode 100644 modules/mesh-knowledge/go.sum create mode 100644 modules/mesh-knowledge/module.json diff --git a/.gitignore b/.gitignore index 0c8e31a7..18c2b03c 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ modules/dnsmasq/dnsmasq modules/mesh-delivery/mesh-delivery modules/mesh-issues/cmd/mesh-issues/mesh-issues modules/mounts/cmd/mounts/mounts +modules/mesh-knowledge/cmd/mesh-knowledge/mesh-knowledge +modules/mesh-knowledge/mesh-knowledge diff --git a/modules/mesh-knowledge/README.md b/modules/mesh-knowledge/README.md new file mode 100644 index 00000000..661d62a6 --- /dev/null +++ b/modules/mesh-knowledge/README.md @@ -0,0 +1,140 @@ +# mesh-knowledge — the knowledge base + +The mesh's decision records and research efforts, held whole in one module (novox/hq ADR 0290, to-be 55; +the first slice, hq issue 425). One instance on the control-node holds the seat `knowledge-base`, once for the +mesh. Each record keeps its number, kind, title, topic, status, date and deciders. It also keeps its typed links, +read from both ends, and its reasoning in sections. A decision also keeps its **clauses**: each numbered statement +it makes, with its own status and source. Every version of every record is kept, with who made it, when and why. + +An agent asks what holds and gets the clauses in force, the records they come from, what changed them since, and +how to read the reasoning, all in one call under 4 KiB. A record is proposed and checked when it is written, then +reviewed by someone who did not write it, then accepted. When its author says it needs the operator, it is +accepted only on the operator's Approve, given on a channel that proves who answered. + +## The verbs (seat `knowledge-base`) + +| Verb | Takes | Answers | +|---|---|---| +| `ask` | `question`, `bound` | the records and clauses bearing on the question, ranked; each clause says whether it holds, what changed it, or that it is only drafted; each record says what changed it since and how to read its reasoning | +| `get` | `number`, `kind`, `reasoning`, `section`, `version`, `bound` | one record: clauses, links both ways, what changed it since, versions, reviews, the operator's ask; its reasoning only when asked | +| `holds` | `topic` or `number`, `bound` | the clauses in force for a topic of the reading order or for one record; never a drafted clause | +| `links` | `number`, `kind` | the record's typed links, out and in | +| `history` | `number`, `kind`, `from`, `to` | every version; with `from` and `to`, the difference between the two, line by line | +| `reserve` | `kind`, `for` | the next decision or research number, asked of the issue tracker (`issue-tracker.reserve`); spent whether or not its record is accepted | +| `propose` | the record whole | proposed, or refused naming every rule it breaks; an accepted record changes only by a progressive insight (`insight`) | +| `review` | `number`, `verdict` (approve or changes), `findings` | accepted, asked of the operator, or kept proposed with the findings | +| `import` | `dry-run`, `commit` | hq's decision records and research efforts at the commit the records module stands at, each whole at its own number | +| `return` | `number`, `reason` | drafted clauses sent back to be drafted again | + +`ask`, `get` and `holds` stay within `bound` bytes (4096 unless asked for, at most 65536) and say what they cut +and how to read the rest. The module's own tool `knowledge_health` answers its health (below). + +**Who acted** is the caller as the runtime proves it, never an argument: no verb takes one. The runtime does not +hand a module its caller yet (hq issue 365), so every change is recorded as by `unproven`. Until it does, +**every review is refused**. A review by the record's author is refused, and with no proven caller a review +cannot be told from one by the author. + +## What a record holds + +A clause is `proposed`, `in force`, `changed` (a later clause replaces part of it, named in `changed-by`) or +`superseded`. Its source is one of three: + +- `written`: written as a clause by its author; +- `drafted`: drafted from a prose Decision section by the agent's judgement at the import, and never served as in + force; +- `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. + +## Writing a record + +1. `reserve` a number for its kind. +2. `propose` the record whole. It is refused, naming every reason at once, when it breaks one of the **29 rules + that judge one record or its prose**. They are hq's checks moved to the write; `PerRecordRules` in `rules.go` + lists each one with the check it comes from: + - 25 on the structure: kind, reserved number, title, topic, date, deciders, research status, at least one + clause, clause numbering, bold lead, clause size, the Context, Consequences and "How it is checked" sections, + a research effort's overview, link kind, link target, link fit, no link to itself, what it extends, what it + supersedes or changes is accepted, a changed clause is in force, a superseded record cited beside its + superseder, a graduated effort says what it became, and the links in its text resolve; + - 4 on the prose: no word the glossary retired, no daemon's line, a deferral names its tracking issue, and a + progressive insight in the dated, marked form. +3. Revise it by proposing again; every version is kept. +4. A `review` by someone else either approves it or asks for changes. On approve the record and its clauses are + accepted and in force. Every clause it changes moves to `changed`, and every record it supersedes moves to + `superseded`, each as a new version of that record. A record marked `needs-operator` is first asked of the + operator: an ask with Approve and Decline, both at the level approve, each bound to this version's digest. It is + accepted only on the router's warrant for Approve, read back from the router's own record and held to the ask + composed again. A record changed after it was asked finds the digests differ, and nothing is accepted. The + warrant is kept with the record. +5. After every acceptance, the **4 rules that judge the whole record set** run: + - `cited`: a decision accepted here is cited by another record or names a home in hq; + - `supersession`: both ends of a supersession agree; + - `partial`: both ends of a change agree; + - `rests-on-live`: no accepted record extends a superseded one. + + A failure is kept as a finding and makes the module unhealthy, so the mesh raises a condition naming the rule + and the records. The acceptance stands. + +## The import + +`import` reads hq through the records module at the commit its checkout stands at. With `commit`, it refuses a +checkout standing elsewhere. It writes every decision record and research effort whole, as version 1, naming the +commit and path it came from. It creates only what is absent and never overwrites. It never asks for a number, so +no counter moves. A second run changes nothing and says so. `dry-run` writes nothing. From a terminal, +`mesh-knowledge dry-run ` 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 +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 +the older clause marked `changed`. When every prose record of a topic has been through both judgements, the +operator is told once (`operator-channel.notify`, a warning) with the counts. `return` sends a record back to be +drafted again. + +## Where it keeps its records + +In a database in the store: the module requires a `postgres-database` provision named `knowledge`, as +`claude-licence-manager` does, and reaches it through the address in `${dir:state}/database.url`. Ranked search is +the database's full-text search (`ask`). The schema is numbered migrations (`cmd/mesh-knowledge/migrations/`), and +the consolidated schema for a fresh database is `schema.sql`. A test holds the two equal on a real postgres. + +## Its processes + +- **the bundle**: the verbs, `knowledge_health`, the operator's answers heard, and once a minute the router's + record read, reservations never proposed withdrawn, and the drafting worker. It never changes the schema, and + refuses to serve while the schema is behind. +- **`prepare`** (run once): brings the schema to this version. +- **`keep`** (judged by its unit): judges the whole record set every five minutes and keeps the findings. +- **`watch`** (judged by `knowledge_health`): every minute, reads whether the database serves and what the + findings say, and leaves its verdict in `${dir:state}/health.json`. That is the file the health tool answers + from. A verdict older than three minutes is unhealthy. + +## Settings + +| Setting | Default | What it does | +|---|---|---| +| `judge-model` | `sonnet` | the model the drafting and confirming judgements ask | +| `drafting` | `on` | `off` stops drafting and confirming clauses | +| `reserved-for` | `168h` | how long a reserved number waits for its proposal before it is withdrawn | + +## What it needs at release + +- assignment to the control-node, and a postgres provider for its `postgres-database` provision; +- `issue-tracker.reserve` (hq issue 424) before `reserve` works; until then reserve says the tracker did not hand + out a number, and writes nothing; +- the runtime proving the caller (hq issue 365) before any review is taken; +- the import run once, then checked against hq record by record (hq issue 426). + +## Tests + +`go test ./...` in this directory. The store tests run over memory and over a real postgres. That postgres is +either `MESH_TEST_POSTGRES` or a private server the tests start from the machine's `initdb` on a socket of its own, +listening on no port. A machine with neither skips the postgres half and says so. The fixtures are real hq files: +`testdata/hq` holds eleven records at the commit in its `COMMIT` file, and `testdata/hq-main.tar.gz` holds the +whole of main at `testdata/hq-main.commit`. The bus test starts the bundle as the runtime does and plays the +runtime over a real NATS server. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/answers.go b/modules/mesh-knowledge/cmd/mesh-knowledge/answers.go new file mode 100644 index 00000000..f0dba155 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/answers.go @@ -0,0 +1,689 @@ +package main + +// The answers (novox/hq ADR 0290 rule 6, to-be 55 §2 and §3): ask, get, holds, links and history, each the shape +// an agent needs. ask, get and holds stay under a bound they state, 4 KiB unless the caller asks for more, and say +// when they were cut and how to read the rest. A drafted clause is marked as such and never served as in force. + +import ( + "context" + "encoding/json" + "fmt" + "sort" + "strconv" + "strings" +) + +// The bound of an answer. +const ( + DefaultBound = 4 << 10 + MostBound = 64 << 10 + LeastBound = 1 << 10 +) + +func boundOf(b int) int { + switch { + case b <= 0: + return DefaultBound + case b < LeastBound: + return LeastBound + case b > MostBound: + return MostBound + } + return b +} + +func size(v any) int { + raw, _ := json.Marshal(v) + return len(raw) +} + +// fit is the largest n (from 0 to total) whose answer stays within the bound. +func fit(total, bound int, build func(n int) any) (any, int) { + lo, hi := 0, total + for lo < hi { + mid := (lo + hi + 1) / 2 + if size(build(mid)) <= bound { + lo = mid + } else { + hi = mid - 1 + } + } + return build(lo), lo +} + +func clip(s string, n int) string { + s = strings.Join(strings.Fields(s), " ") + if len([]rune(s)) <= n { + return s + } + return string([]rune(s)[:n-1]) + "…" +} + +// held says, for a clause, whether it holds and what changed it, in the words an agent reads. +func held(r *Record, c Clause) string { + switch { + case c.Source == SourceDrafted: + s := "drafted, not confirmed: not the record's word, never in force" + if c.Unconfirmed != "" { + s += " (the second judgement did not confirm it: " + c.Unconfirmed + ")" + } + return s + case r.Status == StatusProposed || c.Status == ClauseProposed: + return "proposed: not in force" + case c.Status == ClauseChanged: + return "changed by " + strings.Join(c.ChangedBy, ", ") + ": read both" + case c.Status == ClauseSuperseded: + if len(c.ChangedBy) > 0 { + return "superseded by " + strings.Join(c.ChangedBy, ", ") + } + return "superseded" + case c.Source == SourceConfirmed: + return "in force (drafted from prose, confirmed)" + } + return "in force" +} + +// Served says whether a clause may be served as holding: in force or changed, and not drafted. +func Served(r *Record, c Clause) bool { + return r.Accepted() && c.Source != SourceDrafted && (c.Status == ClauseInForce || c.Status == ClauseChanged) +} + +// AnswerClause is one clause in an answer. +type AnswerClause struct { + N int `json:"n"` + Text string `json:"text"` + Holds string `json:"holds"` + Source string `json:"source,omitempty"` +} + +// AnswerRecord is one record in an answer to ask. +type AnswerRecord struct { + Record string `json:"record"` + Title string `json:"title"` + Status string `json:"status"` + Clauses []AnswerClause `json:"clauses,omitempty"` + Note string `json:"note,omitempty"` + Since []string `json:"changed-since,omitempty"` + Read string `json:"read"` +} + +// Asked is the answer to ask. +type Asked struct { + Question string `json:"question"` + Records []AnswerRecord `json:"records"` + Cut string `json:"cut,omitempty"` + Bound int `json:"bound"` + Says string `json:"says,omitempty"` +} + +func readHow(k Key) string { + return fmt.Sprintf("get {\"kind\": %q, \"number\": %d, \"reasoning\": true}", k.Kind, k.Number) +} + +// since is what changed a record since it was accepted: the accepted records that supersede or change it. +func (k *KB) since(ctx context.Context, key Key) []string { + in, err := k.Store.Inbound(ctx, key) + if err != nil { + return nil + } + var out []string + for _, x := range in { + if x.Link.Kind != LinkSupersedes && x.Link.Kind != LinkChanges { + continue + } + from, err := k.Store.Get(ctx, x.From) + if err != nil || from == nil || !from.Current.Accepted() { + continue + } + s := x.From.String() + if x.Link.From > 0 { + s += fmt.Sprintf(" §%d", x.Link.From) + } + switch { + case x.Link.Kind == LinkSupersedes: + s += " supersedes it" + case x.Link.To.Clause > 0: + s += fmt.Sprintf(" changes §%d", x.Link.To.Clause) + default: + s += " changes it in part; which clause is not judged yet" + } + out = append(out, s) + } + return out +} + +// Ask is the records and clauses bearing on a question, ranked, each saying whether it holds or what changed it. +func (k *KB) Ask(question string, bound int) (*Asked, error) { + ctx := context.Background() + question = strings.TrimSpace(question) + if question == "" { + return nil, fmt.Errorf("ask needs a question, in plain words") + } + bound = boundOf(bound) + hits, err := k.Store.Search(ctx, question, 80) + if err != nil { + return nil, fmt.Errorf("the knowledge base cannot be searched (%v)", err) + } + type group struct { + key Key + clauses []int + record bool + // score is the record's own rank, its best clause's, and a little of each other clause's. + score, best, rest float64 + } + var order []*group + byKey := map[Key]*group{} + for _, h := range hits { + g := byKey[h.Key] + if g == nil { + g = &group{key: h.Key} + byKey[h.Key] = g + order = append(order, g) + } + if h.Clause > 0 { + g.clauses = append(g.clauses, h.Clause) + if h.Rank > g.best { + g.rest += g.best + g.best = h.Rank + } else { + g.rest += h.Rank + } + } else { + g.record = true + g.score += h.Rank + } + } + for _, g := range order { + g.score += g.best + g.rest/4 + } + sort.SliceStable(order, func(i, j int) bool { return order[i].score > order[j].score }) + var records []AnswerRecord + for _, g := range order { + e, err := k.Store.Get(ctx, g.key) + if err != nil || e == nil { + continue + } + r := e.Current + ar := AnswerRecord{Record: g.key.String(), Title: r.Title, Status: r.Status, Read: readHow(g.key), Since: k.since(ctx, g.key)} + sort.Ints(g.clauses) + for _, n := range g.clauses { + if c := r.Clause(n); c != nil { + ar.Clauses = append(ar.Clauses, AnswerClause{N: n, Text: clip(c.Text, 220), Holds: held(r, *c), Source: c.Source}) + } + } + if len(ar.Clauses) == 0 { + drafted := 0 + for _, c := range r.Clauses { + if c.Source == SourceDrafted { + drafted++ + } + } + switch { + case len(r.Clauses) == 0 && r.Kind == KindDecision: + ar.Note = "its decision is written as prose and its clauses are not drafted yet: read its Decision section" + case drafted > 0: + ar.Note = fmt.Sprintf("%d of its clauses are drafted and not confirmed: none of them is served as in force", drafted) + } + } + records = append(records, ar) + } + out := &Asked{Question: question, Bound: bound} + if len(records) == 0 { + out.Records = []AnswerRecord{} + out.Says = "nothing the knowledge base holds bears on that; ask in other words" + return out, nil + } + // Within the bound: the most records that fit; when not even one fits whole, its clauses shortened. + build := func(n int) any { + a := *out + a.Records = records[:n] + if n < len(records) { + names := []string{} + for _, r := range records[n:min(len(records), n+6)] { + names = append(names, r.Record) + } + a.Cut = fmt.Sprintf("%d more record(s) bear on it and are not shown within %d bytes (%s…): ask with a larger bound, or narrower words", + len(records)-n, bound, strings.Join(names, ", ")) + } + return &a + } + v, n := fit(len(records), bound, build) + if n == 0 { + first := records[0] + for i := range first.Clauses { + first.Clauses[i].Text = clip(first.Clauses[i].Text, 80) + } + records[0] = first + v, _ = fit(len(records), bound, build) + } + return v.(*Asked), nil +} + +// ---- get ----------------------------------------------------------------------------------------------------- + +// GetAsk is what get takes. +type GetAsk struct { + Kind string + Number int + Reasoning bool + Section string + Version int + Bound int +} + +// Got is the answer to get. +type Got struct { + Record string `json:"record"` + Title string `json:"title"` + Status string `json:"status"` + Topic string `json:"topic,omitempty"` + Date string `json:"date,omitempty"` + Deciders []string `json:"deciders,omitempty"` + Version int `json:"version"` + Versions int `json:"versions"` + Clauses []AnswerClause `json:"clauses,omitempty"` + Links []string `json:"links,omitempty"` + LinkedFrom []string `json:"linked-from,omitempty"` + Since []string `json:"changed-since,omitempty"` + Sections []string `json:"sections,omitempty"` + Reasoning []Section `json:"reasoning,omitempty"` + Insights []Insight `json:"insights,omitempty"` + Pending string `json:"pending,omitempty"` + Waiting string `json:"waiting,omitempty"` + Reviews []Review `json:"reviews,omitempty"` + Drafting *Drafting `json:"drafting,omitempty"` + Source string `json:"source,omitempty"` + Reserved string `json:"reserved,omitempty"` + NeedsOperat bool `json:"needs-operator,omitempty"` + Cut string `json:"cut,omitempty"` + Bound int `json:"bound"` + Read string `json:"read,omitempty"` +} + +// Get is one record: its clauses, its links both ways, what changed it since; its reasoning only when asked. +func (k *KB) Get(a GetAsk) (*Got, error) { + ctx := context.Background() + if a.Kind == "" { + a.Kind = KindDecision + } + key := Key{a.Kind, a.Number} + e, err := k.Store.Get(ctx, key) + if err != nil { + return nil, fmt.Errorf("the knowledge base cannot be read (%v)", err) + } + if e == nil { + return nil, fmt.Errorf("the knowledge base holds no %s", key) + } + r, version := e.Current, e.CurrentVersion + if a.Version > 0 { + vs, err := k.Store.Versions(ctx, key) + if err != nil { + return nil, err + } + if a.Version > len(vs) { + return nil, fmt.Errorf("%s has %d version(s); there is no version %d", key, len(vs), a.Version) + } + r, version = vs[a.Version-1].Record, a.Version + } + bound := boundOf(a.Bound) + g := &Got{Record: key.String(), Title: r.Title, Status: r.Status, Topic: r.Topic, Date: r.Date, Deciders: r.Deciders, + Version: version, Versions: e.Versions, Insights: r.Insights, Reviews: r.Reviews, Drafting: r.Drafting, Source: r.Source, + NeedsOperat: r.NeedsOperator, Bound: bound, Since: k.since(ctx, key)} + if r.Status == StatusReserved || r.Status == StatusWithdrawn { + g.Reserved = fmt.Sprintf("reserved by %s at %s for %q", r.ReservedBy, r.ReservedAt.Format("2006-01-02 15:04 UTC"), r.ReservedFor) + } + if e.Pending != nil && a.Version == 0 { + g.Pending = fmt.Sprintf("version %d, a progressive insight, waits for its review: history shows what it changes", e.PendingVersion) + } + if r.Ask != nil { + g.Waiting = "the operator's ask: " + r.Ask.Said + } + for _, c := range r.Clauses { + g.Clauses = append(g.Clauses, AnswerClause{N: c.N, Text: c.Text, Holds: held(r, c), Source: c.Source}) + } + for _, l := range r.Links { + g.Links = append(g.Links, l.String()) + } + if in, err := k.Store.Inbound(ctx, key); err == nil { + for _, x := range in { + s := x.From.String() + " " + if x.Link.From > 0 { + s += fmt.Sprintf("§%d ", x.Link.From) + } + s += x.Link.Kind + if x.Link.To.Clause > 0 { + s += fmt.Sprintf(" §%d", x.Link.To.Clause) + } + g.LinkedFrom = append(g.LinkedFrom, s) + } + } + for _, s := range r.Sections { + g.Sections = append(g.Sections, s.Name) + if a.Reasoning || (a.Section != "" && strings.EqualFold(a.Section, s.Name)) { + g.Reasoning = append(g.Reasoning, s) + } + } + if a.Section != "" && len(g.Reasoning) == 0 { + return nil, fmt.Errorf("%s has no section %q; it has %s", key, a.Section, strings.Join(g.Sections, ", ")) + } + if !a.Reasoning && a.Section == "" { + g.Read = "its reasoning: " + readHow(key) + ", or one section with section" + } + if size(g) <= bound { + return g, nil + } + // Cut: the reasoning first, section by section from the end, then the reviews but the last, then the links + // from the end, then the clauses' text, then clauses; each cut is said. Room is kept for saying it. + room := bound - 600 + var cut []string + if len(g.Reasoning) > 0 { + reasoning := g.Reasoning + v, n := fit(len(reasoning), room, func(n int) any { c := *g; c.Reasoning = reasoning[:n]; return &c }) + *g = *(v.(*Got)) + if n < len(reasoning) { + left := []string{} + for _, s := range reasoning[n:] { + left = append(left, s.Name) + } + cut = append(cut, fmt.Sprintf("the sections %s are not shown within %d bytes: ask for one with section, or raise bound", strings.Join(left, ", "), bound)) + if spare := room - size(g); n == 0 && spare > 400 { + s := reasoning[0] + s.Text = clip(s.Text, spare/2) + g.Reasoning = []Section{s} + cut[len(cut)-1] = fmt.Sprintf("the section %s is shortened, and %s not shown: ask for one with section, or raise bound", + s.Name, strings.Join(append([]string{}, left[1:]...), ", ")) + } + } + } + if size(g) > room && len(g.Reviews) > 1 { + cut = append(cut, fmt.Sprintf("%d earlier review(s) are not shown: history lists every version", len(g.Reviews)-1)) + g.Reviews = g.Reviews[len(g.Reviews)-1:] + } + for _, which := range []string{"linked-from", "links"} { + if size(g) <= room { + break + } + list := func(c *Got) *[]string { + if which == "links" { + return &c.Links + } + return &c.LinkedFrom + } + full := *list(g) + v, n := fit(len(full), room, func(n int) any { c := *g; *list(&c) = full[:n]; return &c }) + if n < len(full) { + *g = *(v.(*Got)) + cut = append(cut, fmt.Sprintf("%d of its %s are not shown: links lists them all", len(full)-n, which)) + } + } + if size(g) > room { + for i := range g.Clauses { + g.Clauses[i].Text = clip(g.Clauses[i].Text, 160) + } + cut = append(cut, "the clauses are shortened: raise bound to read them whole") + } + if size(g) > room { + clauses := g.Clauses + v, n := fit(len(clauses), room, func(n int) any { c := *g; c.Clauses = clauses[:n]; return &c }) + *g = *(v.(*Got)) + cut = append(cut, fmt.Sprintf("%d clause(s) are not shown: raise bound", len(clauses)-n)) + } + g.Cut = strings.Join(cut, "; ") + return g, nil +} + +// ---- holds --------------------------------------------------------------------------------------------------- + +// HeldClause is one clause in force, with the record it comes from. +type HeldClause struct { + Record string `json:"record"` + N int `json:"n"` + Text string `json:"text"` + Holds string `json:"holds"` +} + +// Holding is the answer to holds. +type Holding struct { + Of string `json:"of"` + Clauses []HeldClause `json:"clauses"` + NotYet string `json:"not-served,omitempty"` + Cut string `json:"cut,omitempty"` + Bound int `json:"bound"` +} + +// Holds is the clauses in force for a topic or a record: never a drafted one, and a confirmed one marked. +func (k *KB) Holds(topic string, key *Key, bound int) (*Holding, error) { + ctx := context.Background() + bound = boundOf(bound) + var records []*Record + of := "" + switch { + case key != nil: + e, err := k.Store.Get(ctx, *key) + if err != nil { + return nil, err + } + if e == nil { + return nil, fmt.Errorf("the knowledge base holds no %s", key) + } + records, of = []*Record{e.Current}, key.String() + case strings.TrimSpace(topic) != "": + all, err := k.Store.All(ctx) + if err != nil { + return nil, err + } + for _, e := range all { + if e.Current.Topic == topic { + records = append(records, e.Current) + } + } + of = "the topic " + topic + if len(records) == 0 { + return nil, fmt.Errorf("no record has the topic %q", topic) + } + default: + return nil, fmt.Errorf("holds takes a topic or a record's number") + } + out := &Holding{Of: of, Bound: bound, Clauses: []HeldClause{}} + drafted, prose := 0, 0 + for _, r := range records { + if r.Kind == KindDecision && r.Accepted() && len(r.Clauses) == 0 { + prose++ + } + for _, c := range r.Clauses { + if c.Source == SourceDrafted && r.Accepted() && c.Status != ClauseSuperseded { + drafted++ + } + if Served(r, c) { + out.Clauses = append(out.Clauses, HeldClause{Record: r.Key().String(), N: c.N, Text: c.Text, Holds: held(r, c)}) + } + } + } + var notes []string + if drafted > 0 { + notes = append(notes, fmt.Sprintf("%d drafted clause(s) are not served: they are not confirmed as the record's word", drafted)) + } + if prose > 0 { + notes = append(notes, fmt.Sprintf("%d accepted decision(s) write their decision as prose and have no clauses yet", prose)) + } + out.NotYet = strings.Join(notes, "; ") + clauses := out.Clauses + v, n := fit(len(clauses), bound, func(n int) any { + c := *out + c.Clauses = clauses[:n] + if n < len(clauses) { + c.Cut = fmt.Sprintf("%d more clause(s) are in force and not shown within %d bytes: raise bound, or ask holds of one record", len(clauses)-n, bound) + } + return &c + }) + if n == 0 && len(clauses) > 0 { + for i := range clauses { + clauses[i].Text = clip(clauses[i].Text, 160) + } + v, _ = fit(len(clauses), bound, func(n int) any { + c := *out + c.Clauses = clauses[:n] + c.Cut = fmt.Sprintf("the clauses are shortened, and %d not shown within %d bytes: raise bound", len(clauses)-n, bound) + return &c + }) + } + return v.(*Holding), nil +} + +// ---- links --------------------------------------------------------------------------------------------------- + +// Linked is the answer to links. +type Linked struct { + Record string `json:"record"` + Out []LinkRow `json:"out"` + In []LinkRow `json:"in"` +} + +// LinkRow is one link, read from either end. +type LinkRow struct { + Kind string `json:"kind"` + From string `json:"from"` + To string `json:"to"` + Source string `json:"source,omitempty"` + Unresolved bool `json:"unresolved,omitempty"` +} + +// Links is a record's links, both ways. +func (k *KB) Links(key Key) (*Linked, error) { + ctx := context.Background() + e, err := k.Store.Get(ctx, key) + if err != nil { + return nil, err + } + if e == nil { + return nil, fmt.Errorf("the knowledge base holds no %s", key) + } + out := &Linked{Record: key.String(), Out: []LinkRow{}, In: []LinkRow{}} + from := func(k Key, clause int) string { + if clause > 0 { + return k.String() + " §" + strconv.Itoa(clause) + } + return k.String() + } + for _, l := range e.Current.Links { + out.Out = append(out.Out, LinkRow{Kind: l.Kind, From: from(key, l.From), To: l.To.String(), Source: l.Source, Unresolved: l.Unresolved}) + } + in, err := k.Store.Inbound(ctx, key) + if err != nil { + return nil, err + } + for _, x := range in { + out.In = append(out.In, LinkRow{Kind: x.Link.Kind, From: from(x.From, x.Link.From), To: x.Link.To.String(), Source: x.Link.Source}) + } + return out, nil +} + +// ---- history ------------------------------------------------------------------------------------------------- + +// VersionRow is one version in a history. +type VersionRow struct { + N int `json:"n"` + By string `json:"by"` + At string `json:"at"` + Why string `json:"why"` + Status string `json:"status"` + Insight bool `json:"insight,omitempty"` + Served bool `json:"served,omitempty"` + Pending bool `json:"pending,omitempty"` +} + +// Historied is the answer to history. +type Historied struct { + Record string `json:"record"` + Versions []VersionRow `json:"versions"` + From int `json:"from,omitempty"` + To int `json:"to,omitempty"` + Diff []string `json:"diff,omitempty"` + Same bool `json:"same,omitempty"` +} + +// History is a record's versions, and the difference between two of them, line by line. +func (k *KB) History(key Key, from, to int) (*Historied, error) { + ctx := context.Background() + e, err := k.Store.Get(ctx, key) + if err != nil { + return nil, err + } + if e == nil { + return nil, fmt.Errorf("the knowledge base holds no %s", key) + } + vs, err := k.Store.Versions(ctx, key) + if err != nil { + return nil, err + } + out := &Historied{Record: key.String()} + for _, v := range vs { + out.Versions = append(out.Versions, VersionRow{N: v.N, By: v.By, At: v.At.UTC().Format("2006-01-02 15:04:05 UTC"), Why: v.Why, + Status: v.Record.Status, Insight: v.Insight, Served: v.N == e.CurrentVersion, Pending: v.N == e.PendingVersion}) + } + if from == 0 && to == 0 { + return out, nil + } + if from < 1 || to < 1 || from > len(vs) || to > len(vs) { + return nil, fmt.Errorf("%s has versions 1 to %d; from and to name two of them", key, len(vs)) + } + out.From, out.To = from, to + out.Diff = Diff(Render(vs[from-1].Record), Render(vs[to-1].Record)) + out.Same = len(out.Diff) == 0 + return out, nil +} + +// Diff is the difference of two texts, line by line: each hunk headed "@@ -a,n +b,m @@", its lines "-" removed +// and "+" added, by the longest common subsequence of their lines. +func Diff(a, b string) []string { + x, y := strings.Split(a, "\n"), strings.Split(b, "\n") + n, m := len(x), len(y) + lcs := make([][]int, n+1) + for i := range lcs { + lcs[i] = make([]int, m+1) + } + for i := n - 1; i >= 0; i-- { + for j := m - 1; j >= 0; j-- { + if x[i] == y[j] { + lcs[i][j] = lcs[i+1][j+1] + 1 + } else { + lcs[i][j] = max(lcs[i+1][j], lcs[i][j+1]) + } + } + } + var out []string + var hunk []string + ha, hb, ca, cb := 0, 0, 0, 0 + flush := func() { + if len(hunk) > 0 { + out = append(out, fmt.Sprintf("@@ -%d,%d +%d,%d @@", ha, ca, hb, cb)) + out = append(out, hunk...) + hunk = nil + } + } + i, j := 0, 0 + for i < n || j < m { + switch { + case i < n && j < m && x[i] == y[j]: + flush() + i++ + j++ + case i < n && (j == m || lcs[i+1][j] >= lcs[i][j+1]): + if len(hunk) == 0 { + ha, hb, ca, cb = i+1, j+1, 0, 0 + } + hunk = append(hunk, "-"+x[i]) + ca++ + i++ + default: + if len(hunk) == 0 { + ha, hb, ca, cb = i+1, j+1, 0, 0 + } + hunk = append(hunk, "+"+y[j]) + cb++ + j++ + } + } + flush() + return out +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/bound_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/bound_test.go new file mode 100644 index 00000000..3f47ac3e --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/bound_test.go @@ -0,0 +1,132 @@ +package main + +import ( + "encoding/json" + "strings" + "testing" +) + +// to-be 55 §10: "An answer stays within its bound — the module's test over the full import of main at a recorded +// commit (testdata/hq-main.commit): every ask, get and holds of a fixed question list." + +var questions = []string{ + "what holds about the merge window, and why", + "how is a module's health judged", + "who hands out decision numbers", + "what is a seat", + "can the mesh create a symlink", + "how does a node reach the bus", + "how are secrets kept", + "what does the operator approve and on which channel", + "what is the knowledge base", + "how is a delivery walked across the nodes", + "what does the firewall allow", + "the", + "zebra quantum", +} + +func TestEveryAnswerStaysWithinItsBoundOverTheWholeOfMain(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := newWorld(t, s, hqMain(t)) + if _, err := w.k.Import("import@test", ImportAsk{}, hqMain(t)); err != nil { + t.Fatal(err) + } + // Draft and confirm a few prose records, so drafted and confirmed clauses are in the answers too. + for i := 0; i < 12; i++ { + if _, err := w.k.DraftStep(); err != nil { + t.Fatal(err) + } + } + within := func(what string, v any, bound int) { + t.Helper() + raw, _ := json.Marshal(v) + if len(raw) > bound { + t.Errorf("%s: %d bytes, over its bound of %d", what, len(raw), bound) + } + } + cuts := 0 + for _, q := range questions { + for _, bound := range []int{0, 2048, 16 << 10} { + a, err := w.k.Ask(q, bound) + if err != nil { + t.Fatalf("%q: %v", q, err) + } + within("ask "+q, a, boundOf(bound)) + if a.Cut != "" { + cuts++ + } + } + } + if cuts == 0 { + t.Error("no answer was cut: the bound was never tested") + } + all, _ := s.All(t.Context()) + topics := map[string]bool{} + for _, e := range all { + k := e.Current.Key() + for _, get := range []GetAsk{{Kind: k.Kind, Number: k.Number}, {Kind: k.Kind, Number: k.Number, Reasoning: true}} { + g, err := w.k.Get(get) + if err != nil { + t.Fatalf("get %s: %v", k, err) + } + within("get "+k.String(), g, DefaultBound) + if get.Reasoning && len(g.Sections) > 0 && g.Cut == "" && len(g.Reasoning) < len(g.Sections) { + t.Errorf("get %s left out reasoning without saying so", k) + } + } + h, err := w.k.Holds("", &k, 0) + if err != nil { + t.Fatal(err) + } + within("holds "+k.String(), h, DefaultBound) + topics[e.Current.Topic] = true + } + for topic := range topics { + h, err := w.k.Holds(topic, nil, 0) + if err != nil { + t.Fatal(err) + } + within("holds "+topic, h, DefaultBound) + } + }) +} + +// The acceptance sentence, over the whole of main: "what holds about the merge window, and why" answers, in one +// call under 4 KiB, the clauses in force of the record that decided it, what changed them since, and how to read +// its reasoning. +func TestTheMergeWindowQuestionIsAnsweredInOneCallUnderFourKiB(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := newWorld(t, s, hqMain(t)) + if _, err := w.k.Import("import@test", ImportAsk{}, hqMain(t)); err != nil { + t.Fatal(err) + } + a, err := w.k.Ask("what holds about the merge window, and why", 0) + if err != nil { + t.Fatal(err) + } + raw, _ := json.Marshal(a) + if len(raw) > 4096 || len(a.Records) == 0 { + t.Fatalf("%d bytes, %d records", len(raw), len(a.Records)) + } + var r276 *AnswerRecord + for i, r := range a.Records[:min(3, len(a.Records))] { + if r.Record == "ADR 0276" { + r276 = &a.Records[i] + } + } + if r276 == nil { + t.Fatalf("ADR 0276 is not among the first three: %s", raw) + } + if len(r276.Clauses) == 0 || !strings.Contains(r276.Clauses[0].Holds, "in force") || !strings.Contains(r276.Read, "reasoning") { + t.Fatalf("0276 as answered: %+v", r276) + } + changed := false + for _, s := range r276.Since { + changed = changed || strings.Contains(s, "ADR 0282") + } + if !changed { + t.Fatalf("what changed 0276 since is not said: %+v", r276.Since) + } + t.Logf("%d bytes: %s", len(raw), raw) + }) +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/bus_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/bus_test.go new file mode 100644 index 00000000..32b6df67 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/bus_test.go @@ -0,0 +1,390 @@ +package main + +import ( + "bufio" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + "sync" + "testing" + "time" + + "github.com/nats-io/nats-server/v2/server" + "github.com/nats-io/nats.go" + "github.com/nats-io/nats.go/jetstream" +) + +// Over a real bus: a JetStream server is linked into the test and started for it alone; the module is this test +// binary started again as the bundle, speaking MCP on its standard streams to a runtime played here, which does +// what the tool runner does with a bundle: a tool it calls is a request on the bus, an event a publish on the +// module's event subject, an ask a publish on the router's subject, the router's record a key of a bucket only +// the router writes. On the other side of the bus stand the issue tracker's reserve, the agent's judgement, the +// records module (reading the fixture), and the router, played by the test. + +// busWorld is one test's bus and what answers on it. +type busWorld struct { + t *testing.T + nc *nats.Conn + router jetstream.KeyValue + mu sync.Mutex + events []map[string]any + asked map[string][]json.RawMessage +} + +func newBusWorld(t *testing.T) *busWorld { + t.Helper() + s, err := server.NewServer(&server.Options{Host: "127.0.0.1", Port: server.RANDOM_PORT, JetStream: true, StoreDir: t.TempDir(), NoLog: true, NoSigs: true}) + if err != nil { + t.Fatal(err) + } + go s.Start() + if !s.ReadyForConnections(30 * time.Second) { + t.Fatal("no bus within 30s") + } + t.Cleanup(func() { s.Shutdown(); s.WaitForShutdown() }) + nc, err := nats.Connect(s.ClientURL()) + if err != nil { + t.Fatal(err) + } + t.Cleanup(nc.Close) + js, _ := jetstream.New(nc) + kv, err := js.CreateKeyValue(context.Background(), jetstream.KeyValueConfig{Bucket: "router"}) + if err != nil { + t.Fatal(err) + } + w := &busWorld{t: t, nc: nc, router: kv, asked: map[string][]json.RawMessage{}} + // The module's events, as anyone on the bus hears them. + if _, err := nc.Subscribe("mesh.mod.mesh-knowledge.event.>", func(m *nats.Msg) { + var body map[string]any + _ = json.Unmarshal(m.Data, &body) + body["event"] = strings.TrimPrefix(m.Subject, "mesh.mod.mesh-knowledge.event.") + w.mu.Lock() + w.events = append(w.events, body) + w.mu.Unlock() + }); err != nil { + t.Fatal(err) + } + // What stands on the other side: the issue tracker, the records module, the agent's judgement. + records := fixture() + answer := func(key string, do func(body json.RawMessage) (any, error)) { + if _, err := nc.Subscribe("ask."+key, func(m *nats.Msg) { + w.mu.Lock() + w.asked[key] = append(w.asked[key], m.Data) + w.mu.Unlock() + out, err := do(m.Data) + if err != nil { + _ = m.Respond([]byte(`{"error":` + strconv.Quote(err.Error()) + `}`)) + return + } + raw, _ := json.Marshal(map[string]any{"result": out}) + _ = m.Respond(raw) + }); err != nil { + t.Fatal(err) + } + } + next := 300 + answer("seat:issue-tracker.reserve", func(body json.RawMessage) (any, error) { + var a struct{ Kind, For string } + _ = json.Unmarshal(body, &a) + next++ + return map[string]any{"kind": a.Kind, "number": next - 1}, nil + }) + answer("records.records_status", func(json.RawMessage) (any, error) { + c, err := records.Standing() + return map[string]any{"commit": c}, err + }) + answer("records.records_list", func(body json.RawMessage) (any, error) { + var a struct{ Folder string } + _ = json.Unmarshal(body, &a) + f, d, err := records.List(a.Folder) + return map[string]any{"folders": f, "documents": d}, err + }) + answer("records.records_read", func(body json.RawMessage) (any, error) { + var a struct{ Path string } + _ = json.Unmarshal(body, &a) + c, commit, err := records.Read(a.Path) + return map[string]any{"content": c, "commit": commit}, err + }) + j := &judge{} + answer("claude-code.claude_code_judge@test", func(body json.RawMessage) (any, error) { + var a struct { + Question string `json:"question"` + Schema map[string]any `json:"schema"` + Model string `json:"model"` + } + _ = json.Unmarshal(body, &a) + out, by, err := j.judge(a.Question, a.Schema, a.Model) + return map[string]any{"answer": out, "model": a.Model, "node": "test", "by": by}, err + }) + return w +} + +func (w *busWorld) of(event string) []map[string]any { + w.mu.Lock() + defer w.mu.Unlock() + var out []map[string]any + for _, e := range w.events { + if e["event"] == event { + out = append(out, e) + } + } + return out +} + +// bundle is the knowledge base running as the runtime launches it, and the runtime's half of its conversation. +type bundle struct { + t *testing.T + w *busWorld + in io.WriteCloser + mu sync.Mutex + next int + wait map[string]chan json.RawMessage +} + +func (w *busWorld) start(t *testing.T) (*bundle, string) { + t.Helper() + dir := t.TempDir() + settings := filepath.Join(dir, "settings.json") + _ = os.WriteFile(settings, []byte(`{"judge-model": "sonnet", "drafting": "off"}`), 0o600) + status := filepath.Join(dir, "health.json") + cmd := exec.Command(os.Args[0], "-test.run=^$") + cmd.Env = append(os.Environ(), bundleVar+"=1", "MESH_KNOWLEDGE_SETTINGS="+settings, "MESH_KNOWLEDGE_STATUS="+status, + "MESH_SERVED_MODULE="+Module, "MESH_MODULE="+Module, "MESH_NODE=test") + in, _ := cmd.StdinPipe() + out, _ := cmd.StdoutPipe() + cmd.Stderr = logWriter{t} + if err := cmd.Start(); err != nil { + t.Fatal(err) + } + b := &bundle{t: t, w: w, in: in, wait: map[string]chan json.RawMessage{}} + go b.read(out) + t.Cleanup(func() { _ = in.Close(); _ = cmd.Wait() }) + return b, status +} + +type logWriter struct{ t *testing.T } + +func (l logWriter) Write(p []byte) (int, error) { l.t.Logf("bundle: %s", p); return len(p), nil } + +func (b *bundle) say(m map[string]any) { + m["jsonrpc"] = "2.0" + raw, _ := json.Marshal(m) + b.mu.Lock() + defer b.mu.Unlock() + _, _ = b.in.Write(append(raw, '\n')) +} + +func (b *bundle) read(out io.Reader) { + sc := bufio.NewScanner(out) + sc.Buffer(make([]byte, 1<<20), 1<<24) + for sc.Scan() { + var m struct { + ID json.RawMessage `json:"id"` + Method string `json:"method"` + Params json.RawMessage `json:"params"` + } + if json.Unmarshal(sc.Bytes(), &m) != nil { + continue + } + if m.Method == "" { + var id string + _ = json.Unmarshal(m.ID, &id) + b.mu.Lock() + ch := b.wait[id] + delete(b.wait, id) + b.mu.Unlock() + if ch != nil { + ch <- append([]byte(nil), sc.Bytes()...) + } + continue + } + go b.runtime(m.ID, m.Method, m.Params) + } +} + +// runtime is what the tool runner does for the bundle, over the bus. +func (b *bundle) runtime(id json.RawMessage, method string, params json.RawMessage) { + var p struct { + Key string `json:"key"` + Body json.RawMessage `json:"body"` + Subject string `json:"subject"` + Headers map[string]string `json:"headers"` + } + _ = json.Unmarshal(params, &p) + result, err := func() (any, error) { + switch method { + case "mesh/ask": + msg, err := b.w.nc.Request("ask."+p.Key, p.Body, 30*time.Second) + if err != nil { + return nil, fmt.Errorf("nothing answers %s: %v", p.Key, err) + } + var r struct { + Result json.RawMessage `json:"result"` + Error string `json:"error"` + } + _ = json.Unmarshal(msg.Data, &r) + if r.Error != "" { + return nil, errors.New(r.Error) + } + return r.Result, nil + case "mesh/publish": + if p.Headers["x-source"] != Module { + return nil, fmt.Errorf("an event not said as %s", Module) + } + return map[string]any{}, b.w.nc.Publish("mesh.mod."+Module+".event."+p.Key, p.Body) + case "mesh/seat.publish": + return map[string]any{}, b.w.nc.Publish(p.Subject, p.Body) + case "mesh/seat.record": + e, err := b.w.router.Get(context.Background(), p.Key) + if errors.Is(err, jetstream.ErrKeyNotFound) { + return nil, nil + } + if err != nil { + return nil, err + } + return map[string]any{"key": p.Key, "value": json.RawMessage(e.Value()), "revision": e.Revision()}, nil + case "mesh/subscribe": + return map[string]any{}, nil + } + return nil, fmt.Errorf("the runtime offers no %s", method) + }() + if err != nil { + b.say(map[string]any{"id": id, "error": map[string]any{"code": -32000, "message": err.Error()}}) + return + } + b.say(map[string]any{"id": id, "result": result}) +} + +// call is one tools/call, as the tool runner makes it. +func (b *bundle) call(tool string, args map[string]any) (json.RawMessage, error) { + b.mu.Lock() + b.next++ + id := "runtime-" + strconv.Itoa(b.next) + ch := make(chan json.RawMessage, 1) + b.wait[id] = ch + b.mu.Unlock() + b.say(map[string]any{"id": id, "method": "tools/call", "params": map[string]any{"name": tool, "arguments": args}}) + select { + case raw := <-ch: + var m struct { + Result struct { + Content []struct { + Text string `json:"text"` + } `json:"content"` + IsError bool `json:"isError"` + } `json:"result"` + } + if err := json.Unmarshal(raw, &m); err != nil || len(m.Result.Content) == 0 { + return nil, fmt.Errorf("an answer that is not one: %s", raw) + } + if m.Result.IsError { + return nil, errors.New(m.Result.Content[0].Text) + } + return json.RawMessage(m.Result.Content[0].Text), nil + case <-time.After(60 * time.Second): + return nil, fmt.Errorf("%s did not answer in 60 s", tool) + } +} + +func TestTheKnowledgeBaseOverTheBus(t *testing.T) { + w := newBusWorld(t) + b, _ := w.start(t) + must := func(raw json.RawMessage, err error) json.RawMessage { + t.Helper() + if err != nil { + t.Fatal(err) + } + return raw + } + // The import, read through the records module over the bus; run twice. + var imp Imported + _ = json.Unmarshal(must(b.call(Seat+".import", map[string]any{})), &imp) + if imp.Created != 11 || imp.Refused != 0 { + t.Fatalf("import over the bus: %+v", imp) + } + _ = json.Unmarshal(must(b.call(Seat+".import", map[string]any{})), &imp) + if imp.Created != 0 || !strings.Contains(imp.Said, "Nothing changed") { + t.Fatalf("a second import: %s", imp.Said) + } + // A number from the issue tracker's reserve, asked with its contract. + var r Reserved + _ = json.Unmarshal(must(b.call(Seat+".reserve", map[string]any{"kind": "decision", "for": "a merge window that closes sooner"})), &r) + if r.Number != 300 { + t.Fatalf("reserved %+v", r) + } + w.mu.Lock() + var asked map[string]any + _ = json.Unmarshal(w.asked["seat:issue-tracker.reserve"][0], &asked) + w.mu.Unlock() + if asked["kind"] != "decision" || asked["for"] != "a merge window that closes sooner" || len(asked) != 2 { + t.Fatalf("the tracker was asked %v", asked) + } + // A proposal, its sections and links as an agent sends them; refused naming the rule, then taken. + p := valid(300) + links := []map[string]any{} + for _, l := range p.Links { + links = append(links, map[string]any{"kind": l.Kind, "to": l.To, "from": l.From}) + } + sections := []map[string]any{} + for _, s := range p.Sections { + sections = append(sections, map[string]any{"name": s.Name, "text": s.Text}) + } + args := map[string]any{"number": 300, "title": p.Title, "topic": "gardening", "date": p.Date, "deciders": []string{"jochen"}, + "clauses": p.Clauses, "sections": sections, "links": links} + if _, err := b.call(Seat+".propose", args); err == nil || !strings.Contains(err.Error(), "- topic:") { + t.Fatalf("a proposal with an unknown topic: %v", err) + } + if _, err := b.call(Seat+".propose", map[string]any{"number": 300, "title": "x", "by": "someone@else"}); err == nil || + !strings.Contains(err.Error(), "does not take by") { + t.Fatalf("an argument naming the caller: %v", err) + } + args["topic"] = "the mesh" + var prop Proposed + _ = json.Unmarshal(must(b.call(Seat+".propose", args)), &prop) + if prop.Status != StatusProposed { + t.Fatalf("%+v", prop) + } + // The runtime proves no caller yet: the review is refused, and says why. + if _, err := b.call(Seat+".review", map[string]any{"number": 300, "verdict": "approve"}); err == nil || !strings.Contains(err.Error(), "issue 365") { + t.Fatalf("a review by an unproven caller over the bus: %v", err) + } + // What holds, in one call within its bound. + raw := must(b.call(Seat+".ask", map[string]any{"question": "what holds about the merge window, and why"})) + if len(raw) > DefaultBound || !strings.Contains(string(raw), "ADR 0276") { + t.Fatalf("%d bytes: %s", len(raw), raw) + } + var g Got + _ = json.Unmarshal(must(b.call(Seat+".get", map[string]any{"number": 300})), &g) + if g.Status != StatusProposed || len(g.Clauses) != 2 || g.Clauses[0].Holds != "proposed: not in force" { + t.Fatalf("get: %+v", g) + } + var h Historied + _ = json.Unmarshal(must(b.call(Seat+".history", map[string]any{"number": 300, "from": 1, "to": 2})), &h) + if len(h.Versions) != 2 || len(h.Diff) == 0 { + t.Fatalf("history: %+v", h) + } + // Every change said on the bus, as the module, with who acted. + deadline := time.Now().Add(5 * time.Second) + for time.Now().Before(deadline) && len(w.of(EventProposed)) == 0 { + time.Sleep(50 * time.Millisecond) + } + if len(w.of(EventImported)) != 11 || len(w.of(EventReserved)) != 1 || len(w.of(EventProposed)) != 1 { + t.Fatalf("events: %d imported, %d reserved, %d proposed", len(w.of(EventImported)), len(w.of(EventReserved)), len(w.of(EventProposed))) + } + if e := w.of(EventProposed)[0]; e["by"] != Unproven || e["record"] != "ADR 0300" { + t.Fatalf("the proposed event: %v", e) + } + // The health tool says what the watch last saw: here it has seen nothing. + var health HealthAnswer + _ = json.Unmarshal(must(b.call(HealthTool, map[string]any{})), &health) + if health.Healthy || !strings.Contains(health.Why, "no verdict") { + t.Fatalf("health: %+v", health) + } +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/daemon-lines b/modules/mesh-knowledge/cmd/mesh-knowledge/daemon-lines new file mode 100644 index 00000000..be1c6592 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/daemon-lines @@ -0,0 +1,73 @@ +# The daemons' lines a record never writes (novox/hq ADR 0272): a copy of the catalogue's retired-lines, which +# the test TestTheDaemonLinesAreTheCataloguesCopy holds equal. One line each, ` `; a trailing ' …' +# marks a command that is a line only with an argument after it. +mesh-controller adopt +mesh-controller artifacts … +mesh-controller ask … +mesh-controller assign +mesh-controller broker +mesh-controller builds … +mesh-controller bus … +mesh-controller cancel +mesh-controller cleanup +mesh-controller collect +mesh-controller collection … +mesh-controller conditions +mesh-controller converge +mesh-controller data … +mesh-controller delivery … +mesh-controller doctor +mesh-controller durations +mesh-controller hand-act +mesh-controller hand-acts +mesh-controller healers +mesh-controller identity +mesh-controller images … +mesh-controller kill +mesh-controller licence +mesh-controller migrate +mesh-controller mirrors … +mesh-controller module … +mesh-controller node … +mesh-controller operator +mesh-controller overlay … +mesh-controller pause +mesh-controller pin +mesh-controller plan +mesh-controller plans … +mesh-controller prepare +mesh-controller push +mesh-controller queue … +mesh-controller rebuild +mesh-controller rehearse +mesh-controller replay +mesh-controller resume +mesh-controller retire +mesh-controller rollout +mesh-controller rotate +mesh-controller seat … +mesh-controller seats … +mesh-controller secret +mesh-controller settings +mesh-controller status +mesh-controller take … +mesh-controller token +mesh-controller unassign +mesh-controller unpin +mesh-controller upgrade +mesh-controller version … +mesh-host apply +mesh-host bundle +mesh-host enrol +mesh-host enroll +mesh-host hand-over +mesh-host help +mesh-host inventory +mesh-host key +mesh-host overlay +mesh-host owned +mesh-host profile +mesh-host reconcile +mesh-host run +mesh-host version +nox-mesh-host hand-over diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/draft.go b/modules/mesh-knowledge/cmd/mesh-knowledge/draft.go new file mode 100644 index 00000000..2dda7547 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/draft.go @@ -0,0 +1,463 @@ +package main + +// Drafting and confirming clauses at the import (novox/hq ADR 0290 rule 8, to-be 55 §7). For a decision whose +// Decision section is prose, one judgement drafts its clauses: the section in, numbered statements out, each one +// sentence saying nothing the section does not. They are kept `drafted`, and never served as in force. A second +// judgement, a separate call that sees only the record and the drafts, answers per clause whether the record says +// exactly that: a clause it accepts becomes `confirmed`, one it rejects stays `drafted` with the reason. Which +// clause of an older record a supersedes-in-part changes is judged and confirmed the same way. When every record +// of a topic has been through both, the operator is told once, with the counts. `return` sends a record back to +// be drafted again. +// +// The judgements are the agent's on this node (claude-code.claude_code_judge, ADR 0278): no tools, no session, +// at most 25 seconds each, one at a time. The worker takes one step at a time in the background. + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "strconv" + "strings" + "time" +) + +// DefaultJudgeModel is the model the judgements ask unless the settings name another. +const DefaultJudgeModel = "sonnet" + +// MostDraftTries is how many times a record's drafting is tried before it is left failed, said by its get. +const MostDraftTries = 3 + +var draftSchema = map[string]any{ + "type": "object", + "properties": map[string]any{ + "clauses": map[string]any{"type": "array", "items": map[string]any{ + "type": "object", + "properties": map[string]any{ + "lead": map[string]any{"type": "string", "description": "a few words naming what is decided, ending with a full stop"}, + "text": map[string]any{"type": "string", "description": "the one sentence of the statement, after the lead"}, + }, + "required": []string{"lead", "text"}, + }}, + }, + "required": []string{"clauses"}, +} + +var confirmSchema = map[string]any{ + "type": "object", + "properties": map[string]any{ + "verdicts": map[string]any{"type": "array", "items": map[string]any{ + "type": "object", + "properties": map[string]any{ + "clause": map[string]any{"type": "integer"}, + "exact": map[string]any{"type": "boolean", "description": "true when the record says exactly this, nothing more"}, + "reason": map[string]any{"type": "string", "description": "when not exact: what the record says instead"}, + }, + "required": []string{"clause", "exact"}, + }}, + }, + "required": []string{"verdicts"}, +} + +var whichSchema = map[string]any{ + "type": "object", + "properties": map[string]any{ + "clauses": map[string]any{"type": "array", "items": map[string]any{"type": "integer"}, + "description": "the numbers of the older record's clauses the newer record replaces part of"}, + "reason": map[string]any{"type": "string"}, + }, + "required": []string{"clauses", "reason"}, +} + +var whichConfirmSchema = map[string]any{ + "type": "object", + "properties": map[string]any{ + "exact": map[string]any{"type": "boolean"}, + "reason": map[string]any{"type": "string"}, + }, + "required": []string{"exact", "reason"}, +} + +// DraftQuestion is the first judgement's question: the record's Decision section, nothing else of the mesh. +func DraftQuestion(r *Record, section, returned string) string { + var b strings.Builder + fmt.Fprintf(&b, "Below is the Decision section of a decision record, %s: %q. It is written as prose. Write what it decides as numbered "+ + "clauses: each one statement, one sentence, with a lead of a few words naming what is decided. A clause says nothing the section "+ + "does not say: no inference, no context from elsewhere, nothing added. Every decision the section makes is in one clause; a "+ + "sentence that only explains is in none. Keep the section's own words where you can.\n", r.Key(), r.Title) + if returned != "" { + fmt.Fprintf(&b, "\nAn earlier draft was sent back, with this reason: %s\n", returned) + } + b.WriteString("\nThe Decision section:\n\n" + section) + return b.String() +} + +// ConfirmQuestion is the second judgement's question: the record and the drafts, nothing else. +func ConfirmQuestion(r *Record, section string, drafts []Clause) string { + var b strings.Builder + fmt.Fprintf(&b, "Below are the Decision section of a decision record, %s: %q, and clauses drafted from it by someone else. For each "+ + "clause, answer whether the section says exactly that: exact is true only when the clause says nothing the section does not, "+ + "and leaves out nothing that changes its meaning. When it is not exact, say in reason what the section says instead.\n\n"+ + "The Decision section:\n\n%s\n\nThe drafted clauses:\n\n", r.Key(), r.Title, section) + for _, c := range drafts { + fmt.Fprintf(&b, "%d. %s\n", c.N, c.Text) + } + return b.String() +} + +func (k *KB) judgeModel() string { + if m := strings.TrimSpace(k.settings().JudgeModel); m != "" { + return m + } + return DefaultJudgeModel +} + +// DraftStep takes one step of the drafting and confirming: the first record waiting to be drafted or confirmed, +// then the first changes link whose clause is not yet judged. It answers what it did, or "" when nothing waits. +func (k *KB) DraftStep() (string, error) { + if k.Judge == nil || strings.EqualFold(strings.TrimSpace(k.settings().Drafting), "off") { + return "", nil + } + ctx := context.Background() + all, err := k.Store.All(ctx) + if err != nil { + return "", err + } + for _, e := range all { + d := e.Current.Drafting + if d == nil || d.State == DraftDone || (d.State == DraftFailed && d.Tries >= MostDraftTries) { + continue + } + if d.State == DraftFailed && k.now().Sub(d.At) < time.Duration(d.Tries)*10*time.Minute { + continue + } + return k.draftOne(ctx, e.Current.Key()) + } + for _, e := range all { + if !e.Current.Accepted() { + continue + } + for i, l := range e.Current.Links { + if l.Kind == LinkChanges && (l.Source == LinkPending || l.Source == SourceDrafted) && !l.Unresolved { + return k.judgeChange(ctx, e.Current.Key(), i) + } + } + } + return "", nil +} + +// draftOne drafts or confirms one record's clauses, under the write lock only to read and to write. +func (k *KB) draftOne(ctx context.Context, key Key) (string, error) { + k.mu.Lock() + e, err := k.Store.Get(ctx, key) + k.mu.Unlock() + if err != nil || e == nil { + return "", err + } + r := e.Current.Clone() + section, ok := decisionSection(r) + if !ok { + r.Drafting = &Drafting{State: DraftDone, Reason: "it has no Decision section", At: k.now()} + return k.saveDraft(ctx, e, r, EventDrafted, "no Decision section to draft from") + } + model := k.judgeModel() + fail := func(step string, err error) (string, error) { + // Tried again after a pause that grows with each try, at the step it failed at, up to MostDraftTries. + r.Drafting.State, r.Drafting.Reason, r.Drafting.At = DraftFailed, step+": "+err.Error(), k.now() + r.Drafting.Tries++ + _, serr := k.saveDraft(ctx, e, r, EventDrafted, step+" failed: "+err.Error()) + if serr != nil { + return "", serr + } + return "", fmt.Errorf("%s %s: %v", step, key, err) + } + if r.Drafting == nil { + r.Drafting = &Drafting{State: DraftWaiting} + } + // A failed record goes back to the step it failed at: confirming when it holds drafts, drafting otherwise. + confirming := r.Drafting.State == DraftDrafted || (r.Drafting.State == DraftFailed && hasDrafts(r)) + if !confirming { + answer, by, err := k.Judge(DraftQuestion(r, section, r.Drafting.Returned), draftSchema, model) + if err != nil { + return fail("drafting", err) + } + var drafted struct { + Clauses []struct { + Lead string `json:"lead"` + Text string `json:"text"` + } `json:"clauses"` + } + if err := json.Unmarshal(answer, &drafted); err != nil || len(drafted.Clauses) == 0 { + return fail("drafting", errors.New("the judgement drafted no clause")) + } + r.Clauses = nil + for i, c := range drafted.Clauses { + lead := strings.TrimSpace(strings.Trim(c.Lead, "* ")) + if !strings.HasSuffix(lead, ".") { + lead += "." + } + r.Clauses = append(r.Clauses, Clause{N: i + 1, Text: "**" + lead + "** " + strings.TrimSpace(c.Text), + Status: clauseStatusOf(r.Status), Source: SourceDrafted}) + } + r.Drafting = &Drafting{State: DraftDrafted, Drafter: by, Returned: r.Drafting.Returned, Tries: r.Drafting.Tries, At: k.now()} + return k.saveDraft(ctx, e, r, EventDrafted, fmt.Sprintf("%d clauses drafted by %s", len(r.Clauses), by)) + } + answer, by, err := k.Judge(ConfirmQuestion(r, section, r.Clauses), confirmSchema, model) + if err != nil { + return fail("confirming", err) + } + var verdicts struct { + Verdicts []struct { + Clause int `json:"clause"` + Exact bool `json:"exact"` + Reason string `json:"reason"` + } `json:"verdicts"` + } + if err := json.Unmarshal(answer, &verdicts); err != nil { + return fail("confirming", errors.New("the judgement answered no verdicts")) + } + confirmed := 0 + for i := range r.Clauses { + r.Clauses[i].Unconfirmed = "the second judgement gave no verdict on it" + for _, v := range verdicts.Verdicts { + if v.Clause != r.Clauses[i].N { + continue + } + if v.Exact { + r.Clauses[i].Source, r.Clauses[i].Unconfirmed = SourceConfirmed, "" + confirmed++ + } else { + r.Clauses[i].Unconfirmed = strings.TrimSpace(v.Reason) + if r.Clauses[i].Unconfirmed == "" { + r.Clauses[i].Unconfirmed = "not exact" + } + } + } + } + r.Drafting.State, r.Drafting.Checker, r.Drafting.At, r.Drafting.Reason = DraftDone, by, k.now(), "" + said, err := k.saveDraft(ctx, e, r, EventConfirmed, fmt.Sprintf("%d of %d drafted clauses confirmed by %s", confirmed, len(r.Clauses), by)) + if err != nil { + return "", err + } + k.tellTopic(ctx, r.Topic) + return said, nil +} + +func hasDrafts(r *Record) bool { + for _, c := range r.Clauses { + if c.Source == SourceDrafted { + return true + } + } + return false +} + +func (k *KB) saveDraft(ctx context.Context, e *Entry, r *Record, event, why string) (string, error) { + k.mu.Lock() + defer k.mu.Unlock() + by := "the knowledge base" + if r.Drafting != nil && event == EventDrafted && r.Drafting.Drafter != "" { + by = r.Drafting.Drafter + } + if r.Drafting != nil && event == EventConfirmed && r.Drafting.Checker != "" { + by = r.Drafting.Checker + } + if err := k.Store.Save(ctx, Version{By: by, At: k.now(), Why: why, Record: r}, true, false, e.Revision); err != nil { + return "", fmt.Errorf("%s could not be kept (%v)", r.Key(), err) + } + k.emit(event, r, by, why, e.Versions+1) + return r.Key().String() + ": " + why, nil +} + +// tellTopic tells the operator, once, when every prose record of a topic has been drafted and confirmed. +func (k *KB) tellTopic(ctx context.Context, topic string) { + if k.Notify == nil || topic == "" { + return + } + all, err := k.Store.All(ctx) + if err != nil { + return + } + records, confirmed, drafted := 0, 0, 0 + for _, e := range all { + r := e.Current + if r.Topic != topic || r.Drafting == nil { + continue + } + if r.Drafting.State != DraftDone { + return + } + records++ + for _, c := range r.Clauses { + if c.Source == SourceConfirmed { + confirmed++ + } else if c.Source == SourceDrafted { + drafted++ + } + } + } + if records == 0 { + return + } + first, err := k.Store.Told(ctx, topic) + if err != nil || !first { + return + } + summary := fmt.Sprintf("The clauses of %d prose decisions on %s are drafted and checked: %d confirmed, %d still drafted.", records, topic, confirmed, drafted) + explanation := "A second judgement confirmed each clause against its record; a clause still drafted is never served as in force. " + + "You may send any record back with the knowledge base's return, and its clauses are drafted again. Nothing needs you otherwise." + if err := k.Notify("knowledge.clauses."+strings.ReplaceAll(topic, " ", "-"), summary, "Clauses drafted for "+topic, explanation); err != nil { + k.logf("[mesh-knowledge] the operator could not be told about %s's clauses: %v", topic, err) + } +} + +// judgeChange judges, then confirms, which clause of an older record a supersedes-in-part of hq changes. +func (k *KB) judgeChange(ctx context.Context, from Key, i int) (string, error) { + k.mu.Lock() + e, err := k.Store.Get(ctx, from) + var t *Entry + if err == nil && e != nil && i < len(e.Current.Links) { + if to, ok := e.Current.Links[i].To.Record(); ok { + t, err = k.Store.Get(ctx, to) + } + } + k.mu.Unlock() + if err != nil || e == nil || t == nil { + return "", err + } + r := e.Current.Clone() + l := &r.Links[i] + older := t.Current + served := 0 + for _, c := range older.Clauses { + if c.Source != SourceDrafted { + served++ + } + } + if served == 0 { + return "", nil // the older record's clauses are not confirmed yet: judged once they are + } + model := k.judgeModel() + newer, _ := decisionSection(r) + var b strings.Builder + fmt.Fprintf(&b, "%s says it replaces part of an older record, %s. Below are the clauses of %s and the Decision section of %s.\n\n", r.Key(), older.Key(), older.Key(), r.Key()) + for _, c := range older.Clauses { + fmt.Fprintf(&b, "%d. %s\n", c.N, c.Text) + } + fmt.Fprintf(&b, "\nThe Decision section of %s:\n\n%s\n", r.Key(), newer) + if l.Source == LinkPending { + answer, by, err := k.Judge(b.String()+"\nWhich of the older record's clauses does the newer record replace part of? Name their numbers.", whichSchema, model) + if err != nil { + return "", fmt.Errorf("judging which clause %s changes: %v", r.Key(), err) + } + var which struct { + Clauses []int `json:"clauses"` + Reason string `json:"reason"` + } + if json.Unmarshal(answer, &which) != nil || len(which.Clauses) == 0 || older.Clause(which.Clauses[0]) == nil { + return "", fmt.Errorf("judging which clause %s changes: the judgement named no clause of %s", r.Key(), older.Key()) + } + base := *l + l.To.Clause, l.Source = which.Clauses[0], SourceDrafted + for _, n := range which.Clauses[1:] { + if older.Clause(n) != nil { + extra := base + extra.To.Clause, extra.Source = n, SourceDrafted + r.Links = append(r.Links, extra) + } + } + return k.saveLinks(ctx, e, r, by, fmt.Sprintf("which clause of %s it changes drafted: §%s (%s)", older.Key(), joinInts(which.Clauses), which.Reason)) + } + answer, by, err := k.Judge(b.String()+fmt.Sprintf("\nA first judgement said %s replaces part of clause %d of %s. Is that exact?", r.Key(), l.To.Clause, older.Key()), whichConfirmSchema, model) + if err != nil { + return "", fmt.Errorf("confirming which clause %s changes: %v", r.Key(), err) + } + var v struct { + Exact bool `json:"exact"` + Reason string `json:"reason"` + } + if json.Unmarshal(answer, &v) != nil { + return "", fmt.Errorf("confirming which clause %s changes: no verdict", r.Key()) + } + if !v.Exact { + clause := l.To.Clause + l.To.Clause, l.Source = 0, SourceDrafted+": not confirmed" + return k.saveLinks(ctx, e, r, by, fmt.Sprintf("that it changes %s §%d was not confirmed: %s", older.Key(), clause, v.Reason)) + } + l.Source = SourceConfirmed + said, err := k.saveLinks(ctx, e, r, by, fmt.Sprintf("that it changes %s §%d confirmed by %s", older.Key(), l.To.Clause, by)) + if err != nil { + return "", err + } + // The older clause is changed now, as an acceptance would have made it. + k.mu.Lock() + defer k.mu.Unlock() + t, err = k.Store.Get(ctx, older.Key()) + if err != nil || t == nil { + return said, err + } + c := t.Current.Clone() + if cl := c.Clause(l.To.Clause); cl != nil && cl.Status == ClauseInForce { + cl.Status = ClauseChanged + cl.ChangedBy = append(cl.ChangedBy, r.Key().String()) + what := fmt.Sprintf("§%d changed by %s (as hq said, its clause judged and confirmed)", l.To.Clause, r.Key()) + if err := k.Store.Save(ctx, Version{By: by, At: k.now(), Why: what, Record: c}, true, false, t.Revision); err != nil { + return said, err + } + k.emit(EventChanged, c, by, what, t.Versions+1) + } + return said, nil +} + +func (k *KB) saveLinks(ctx context.Context, e *Entry, r *Record, by, why string) (string, error) { + k.mu.Lock() + defer k.mu.Unlock() + if err := k.Store.Save(ctx, Version{By: by, At: k.now(), Why: why, Record: r}, true, false, e.Revision); err != nil { + return "", fmt.Errorf("%s could not be kept (%v)", r.Key(), err) + } + event := EventDrafted + if strings.Contains(why, "confirmed") { + event = EventConfirmed + } + k.emit(event, r, by, why, e.Versions+1) + return r.Key().String() + ": " + why, nil +} + +func joinInts(ns []int) string { + s := make([]string, len(ns)) + for i, n := range ns { + s[i] = strconv.Itoa(n) + } + return strings.Join(s, ", §") +} + +// Return sends a record's drafted or confirmed clauses back to be drafted again, with the reason, which the next +// drafting reads. +func (k *KB) Return(caller string, key Key, reason string) (map[string]any, error) { + ctx := context.Background() + reason = strings.TrimSpace(reason) + if reason == "" { + return nil, errors.New("return needs reason: what is wrong with the clauses drafted") + } + k.mu.Lock() + defer k.mu.Unlock() + e, err := k.Store.Get(ctx, key) + if err != nil { + return nil, err + } + if e == nil { + return nil, fmt.Errorf("the knowledge base holds no %s", key) + } + r := e.Current.Clone() + if r.Drafting == nil { + return nil, fmt.Errorf("%s's clauses were written by its author, not drafted: a written clause is changed by a new record", key) + } + r.Clauses = nil + r.Drafting = &Drafting{State: DraftWaiting, Returned: reason, At: k.now()} + why := "returned to be drafted again: " + reason + if err := k.Store.Save(ctx, Version{By: caller, At: k.now(), Why: why, Record: r}, true, false, e.Revision); err != nil { + return nil, err + } + k.emit(EventReturned, r, caller, why, e.Versions+1) + return map[string]any{"record": key.String(), "says": fmt.Sprintf("%s's clauses are taken back and will be drafted again, with your reason; until then it serves none.", key)}, nil +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/draft_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/draft_test.go new file mode 100644 index 00000000..83d60a5b --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/draft_test.go @@ -0,0 +1,243 @@ +package main + +import ( + "context" + "strings" + "testing" +) + +// to-be 55 §10: "A drafted clause is never served as in force — the module's test: holds over a record with only +// drafted clauses answers none, and ask marks them." And §7: two separate judgements, the second seeing only the +// record and the drafts; the operator told once per topic; return drafts again. + +// draftUntil takes drafting steps until the record's drafting reaches a state, at most a few. +func draftUntil(t *testing.T, w *world, k Key, state string) *Record { + t.Helper() + for i := 0; i < 40; i++ { + r := mustGet(t, w.k.Store, k).Current + if r.Drafting != nil && r.Drafting.State == state { + return r + } + if _, err := w.k.DraftStep(); err != nil { + t.Fatal(err) + } + } + t.Fatalf("%s's drafting never reached %s", k, state) + return nil +} + +func TestADraftedClauseIsNeverServedAsInForce(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := imported(t, s) + k := Key{KindDecision, 240} + r := draftUntil(t, w, k, DraftDrafted) + if len(r.Clauses) == 0 || r.Clauses[0].Source != SourceDrafted { + t.Fatalf("drafted: %+v", r.Clauses) + } + h, err := w.k.Holds("", &k, 0) + if err != nil { + t.Fatal(err) + } + if len(h.Clauses) != 0 || !strings.Contains(h.NotYet, "drafted clause(s) are not served") { + t.Fatalf("holds over a record with only drafted clauses: %+v", h) + } + // The topic's holds leaves them out too. + ht, _ := w.k.Holds(r.Topic, nil, 64<<10) + for _, c := range ht.Clauses { + if c.Record == k.String() { + t.Fatalf("the topic's holds served a drafted clause: %+v", c) + } + } + a, err := w.k.Ask("a module says how it is healthy and the node-engine judges it", 0) + if err != nil { + t.Fatal(err) + } + marked := false + for _, rec := range a.Records { + for _, c := range rec.Clauses { + if rec.Record == k.String() { + if !strings.HasPrefix(c.Holds, "drafted, not confirmed") { + t.Fatalf("ask served a drafted clause as %q", c.Holds) + } + marked = true + } + } + if rec.Record == k.String() && len(rec.Clauses) == 0 && strings.Contains(rec.Note, "drafted") { + marked = true + } + } + if !marked { + t.Fatalf("ask did not show 0240's drafted clauses as drafted: %+v", a) + } + // get marks each one. + g, _ := w.k.Get(GetAsk{Kind: KindDecision, Number: 240}) + for _, c := range g.Clauses { + if !strings.HasPrefix(c.Holds, "drafted") { + t.Fatalf("get: %+v", c) + } + } + }) +} + +func TestClausesAreDraftedThenConfirmedByASeparateJudgementThatSeesOnlyTheRecordAndTheDrafts(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := imported(t, s) + k := Key{KindDecision, 240} + r := draftUntil(t, w, k, DraftDone) + var draftQ, confirmQ string + n := 0 + for _, q := range w.judge.questions { + if !strings.Contains(q, "ADR 0240") { + continue + } + n++ + if strings.Contains(q, "drafted from it by someone else") { + confirmQ = q + } else { + draftQ = q + } + } + if n != 2 || draftQ == "" || confirmQ == "" { + t.Fatalf("0240 was not drafted and confirmed by two separate judgements: %d questions", n) + } + section, _ := decisionSection(r) + if !strings.Contains(confirmQ, section) || !strings.Contains(confirmQ, r.Clauses[0].Text) { + t.Fatal("the confirming judgement was not shown the record and the drafts") + } + // It sees only those: nothing of the mesh but the record, and none of the first judgement's own words. + for _, other := range []string{"Write what it decides as numbered", "An earlier draft"} { + if strings.Contains(confirmQ, other) { + t.Fatalf("the confirming judgement was shown %q", other) + } + } + if !strings.Contains(draftQ, section) || strings.Contains(draftQ, "The drafted clauses") { + t.Fatal("the drafting judgement's question is not the section alone") + } + for _, c := range r.Clauses { + if c.Source != SourceConfirmed { + t.Fatalf("not confirmed: %+v", c) + } + } + if len(w.said.of(EventDrafted)) == 0 || len(w.said.of(EventConfirmed)) == 0 { + t.Fatalf("events: %v", w.said.events) + } + // Now confirmed, holds serves them, marked. + h, _ := w.k.Holds("", &k, 0) + if len(h.Clauses) != len(r.Clauses) || !strings.Contains(h.Clauses[0].Holds, "confirmed") { + t.Fatalf("holds after confirming: %+v", h) + } + }) +} + +func TestAClauseTheSecondJudgementRejectsStaysDraftedWithTheReason(t *testing.T) { + w := imported(t, newMemStore()) + k := Key{KindDecision, 240} + r := draftUntil(t, w, k, DraftDrafted) + ctx := context.Background() + e := mustGet(t, w.k.Store, k) + r = e.Current.Clone() + r.Clauses[0].Text += " NOT EXACT" + if err := w.k.Store.Save(ctx, Version{By: "test", Why: "a draft the checker will reject", Record: r}, true, false, e.Revision); err != nil { + t.Fatal(err) + } + r = draftUntil(t, w, k, DraftDone) + if r.Clauses[0].Source != SourceDrafted || r.Clauses[0].Unconfirmed == "" { + t.Fatalf("a rejected clause: %+v", r.Clauses[0]) + } + h, _ := w.k.Holds("", &k, 0) + for _, c := range h.Clauses { + if c.N == 1 { + t.Fatal("a clause the second judgement rejected is served") + } + } +} + +func TestTheOperatorIsToldOncePerTopicAndReturnDraftsAgain(t *testing.T) { + w := imported(t, newMemStore()) + for i := 0; i < 40; i++ { + said, err := w.k.DraftStep() + if err != nil { + t.Fatal(err) + } + if said == "" { + break + } + } + // Every prose record of the fixture's topics drafted and confirmed; each topic told once. + topics := map[string]int{} + for _, s := range w.told { + topics[s]++ + } + if len(w.told) == 0 { + t.Fatal("the operator was told of no topic") + } + for s, n := range topics { + if n != 1 { + t.Fatalf("told %d times: %s", n, s) + } + } + told := len(w.told) + k := Key{KindDecision, 240} + if _, err := w.k.Return("operator@shanks", Key{KindDecision, 276}, "x"); err == nil { + t.Fatal("a record whose author wrote its clauses was returned") + } + if _, err := w.k.Return("operator@shanks", k, "clause 2 says more than the section"); err != nil { + t.Fatal(err) + } + r := mustGet(t, w.k.Store, k).Current + if len(r.Clauses) != 0 || r.Drafting.State != DraftWaiting || len(w.said.of(EventReturned)) != 1 { + t.Fatalf("returned: %+v", r) + } + r = draftUntil(t, w, k, DraftDone) + last := "" + for _, q := range w.judge.questions { + if strings.Contains(q, "An earlier draft was sent back") { + last = q + } + } + if !strings.Contains(last, "clause 2 says more than the section") { + t.Fatal("the drafting after a return did not read its reason") + } + if len(w.told) != told { + t.Fatal("the operator was told of the topic again") + } +} + +// A supersedes-in-part hq wrote names the record; which clause it changes is judged, then confirmed, and only then +// is the older clause changed. +func TestWhichClauseAPartialSupersessionChangesIsJudgedThenConfirmed(t *testing.T) { + w := imported(t, newMemStore()) + for i := 0; i < 40; i++ { + if said, err := w.k.DraftStep(); err != nil { + t.Fatal(err) + } else if said == "" { + break + } + } + r := mustGet(t, w.k.Store, Key{KindDecision, 282}).Current + var l *Link + for i := range r.Links { + if r.Links[i].Kind == LinkChanges && r.Links[i].To.Number == 276 { + l = &r.Links[i] + } + } + if l == nil || l.Source != SourceConfirmed || l.To.Clause != 1 { + t.Fatalf("0282's change of 0276: %+v", l) + } + c := mustGet(t, w.k.Store, Key{KindDecision, 276}).Current.Clause(1) + if c.Status != ClauseChanged || c.ChangedBy[0] != "ADR 0282" { + t.Fatalf("0276 §1: %+v", c) + } +} + +func TestADraftingThatFailsIsSaidAndTriedAgainLater(t *testing.T) { + w := imported(t, newMemStore()) + w.judge.fail = true + if _, err := w.k.DraftStep(); err == nil { + t.Fatal("a failed judgement was not said") + } + r := mustGet(t, w.k.Store, Key{KindDecision, 11}).Current + if r.Drafting.State != DraftFailed || r.Drafting.Tries != 1 || !strings.Contains(r.Drafting.Reason, "licence") { + t.Fatalf("%+v", r.Drafting) + } +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/history_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/history_test.go new file mode 100644 index 00000000..54783d32 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/history_test.go @@ -0,0 +1,112 @@ +package main + +import ( + "fmt" + "reflect" + "strings" + "testing" +) + +// to-be 55 §10: "Every version is kept and comparable — the module's test: three versions, history lists them, +// the difference of the first and third is exact." +func TestThreeVersionsAreKeptAndTheFirstAndThirdCompareExactly(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := imported(t, s) + n := w.reserved(t, "author@g14") // version 1: the reservation + p := valid(n) + if _, err := w.k.Propose("author@g14", p); err != nil { // version 2 + t.Fatal(err) + } + p.Clauses[1] = "**A batch is delivered by one walk.** At most one commit per repository." + p.Why = "the bound named" + if _, err := w.k.Propose("author@g14", p); err != nil { // version 3 + t.Fatal(err) + } + h, err := w.k.History(Key{KindDecision, n}, 0, 0) + if err != nil { + t.Fatal(err) + } + if len(h.Versions) != 3 || h.Versions[0].Status != StatusReserved || h.Versions[1].Why != "proposed" || + h.Versions[2].Why != "the bound named" || !h.Versions[2].Served || h.Versions[0].By != "author@g14" { + t.Fatalf("history: %+v", h.Versions) + } + d, err := w.k.History(Key{KindDecision, n}, 1, 3) + if err != nil { + t.Fatal(err) + } + vs, _ := s.Versions(t.Context(), Key{KindDecision, n}) + // Exact: applying the difference to the first version's text gives the third's, line for line. + if got := applyDiff(Render(vs[0].Record), d.Diff); got != Render(vs[2].Record) { + t.Fatalf("the difference does not turn version 1 into version 3:\n%s\n---\n%s", got, Render(vs[2].Record)) + } + // And it is the difference: what changed between the reservation and the revised proposal, nothing else. + want := []string{"-status: reserved", "+status: proposed", "+topic: the mesh", "+date: 2026-10-11"} + for _, line := range want { + if !containsLine(d.Diff, line) { + t.Errorf("the difference lacks %q: %v", line, d.Diff) + } + } + if containsLine(d.Diff, "-# "+strings.TrimPrefix(itoaKey(n), "ADR ")+". a test record") == false { + t.Errorf("the title's change is not in the difference: %v", d.Diff) + } + // Versions 2 and 3 differ in clause 2 alone. + d23, _ := w.k.History(Key{KindDecision, n}, 2, 3) + var changed []string + for _, l := range d23.Diff { + if !strings.HasPrefix(l, "@@") { + changed = append(changed, l) + } + } + if !reflect.DeepEqual(changed, []string{"-2. **A batch is delivered by one walk.** One commit per repository.", + "+2. **A batch is delivered by one walk.** At most one commit per repository."}) { + t.Fatalf("2 to 3: %v", d23.Diff) + } + if d22, _ := w.k.History(Key{KindDecision, n}, 2, 2); !d22.Same || len(d22.Diff) != 0 { + t.Fatalf("a version against itself: %+v", d22) + } + }) +} + +func containsLine(lines []string, s string) bool { + for _, l := range lines { + if l == s { + return true + } + } + return false +} + +// applyDiff applies a difference as Diff writes it to the text it was taken from. +func applyDiff(a string, diff []string) string { + src := strings.Split(a, "\n") + var out []string + at := 0 + for i := 0; i < len(diff); i++ { + var oa, ca, ob, cb int + if _, err := fmt.Sscanf(diff[i], "@@ -%d,%d +%d,%d @@", &oa, &ca, &ob, &cb); err != nil { + continue + } + for at < oa-1 { + out = append(out, src[at]) + at++ + } + for i+1 < len(diff) && !strings.HasPrefix(diff[i+1], "@@") { + i++ + if strings.HasPrefix(diff[i], "-") { + at++ + } else { + out = append(out, diff[i][1:]) + } + } + } + out = append(out, src[at:]...) + return strings.Join(out, "\n") +} + +func TestDiffIsExactOnSmallTexts(t *testing.T) { + for _, c := range [][2]string{{"a\nb\nc", "a\nc"}, {"a", "b"}, {"", "x\ny"}, {"x\ny", ""}, {"a\nb\nc\nd", "b\nc\nd\ne"}} { + if got := applyDiff(c[0], Diff(c[0], c[1])); got != c[1] { + t.Errorf("%q to %q: %q (%v)", c[0], c[1], got, Diff(c[0], c[1])) + } + } +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/hq.go b/modules/mesh-knowledge/cmd/mesh-knowledge/hq.go new file mode 100644 index 00000000..fe0d8916 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/hq.go @@ -0,0 +1,128 @@ +package main + +// hq as the knowledge base reads it: through the records module over the bus (to-be 55 §1: "it holds no +// checkout of this repository; the import reads it through the records module, as the issue tracker's import +// does"), or a checkout on disk for the terminal's dry run and the tests. + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "strings" + + stdio "git.novox.be/novox/mesh-sdk/go" +) + +// Records is hq as the records module serves it: where its checkout stands, what a folder holds, and one +// document whole with the commit it was read at. +type Records interface { + Standing() (string, error) + List(folder string) (folders, documents []string, err error) + Read(path string) (content, commit string, err error) +} + +// busRecords is Records over the bus: the records module's tools, called as this module. +type busRecords struct{} + +func (busRecords) Standing() (string, error) { + raw, err := stdio.Ask("records.records_status", map[string]any{}) + if err != nil { + return "", err + } + var s struct { + Commit string `json:"commit"` + LastError string `json:"lastError"` + } + if err := json.Unmarshal(raw, &s); err != nil { + return "", fmt.Errorf("records_status answered something else: %v", err) + } + if s.Commit == "" { + return "", fmt.Errorf("the record's checkout stands at no commit yet (%s)", s.LastError) + } + return s.Commit, nil +} + +func (busRecords) List(folder string) ([]string, []string, error) { + raw, err := stdio.Ask("records.records_list", map[string]any{"folder": folder}) + if err != nil { + return nil, nil, err + } + var f struct { + Folders []string `json:"folders"` + Documents []string `json:"documents"` + } + if err := json.Unmarshal(raw, &f); err != nil { + return nil, nil, fmt.Errorf("records_list answered something else: %v", err) + } + return f.Folders, f.Documents, nil +} + +func (busRecords) Read(path string) (string, string, error) { + raw, err := stdio.Ask("records.records_read", map[string]any{"path": path}) + if err != nil { + return "", "", err + } + var d struct { + Content string `json:"content"` + Commit string `json:"commit"` + Truncated bool `json:"truncated"` + } + if err := json.Unmarshal(raw, &d); err != nil { + return "", "", fmt.Errorf("records_read answered something else: %v", err) + } + if d.Truncated { + return "", "", fmt.Errorf("%s is longer than the records module answers whole", path) + } + return d.Content, d.Commit, nil +} + +// dirRecords is Records over a checkout on disk. Its commit is the file COMMIT at its root when there is one (a +// fixture copied from hq at a commit), else the checkout's HEAD, else `dir:` and the directory. +type dirRecords struct{ dir string } + +func (d dirRecords) Standing() (string, error) { + if st, err := os.Stat(d.dir); err != nil || !st.IsDir() { + return "", fmt.Errorf("%s is not a checkout", d.dir) + } + if raw, err := os.ReadFile(filepath.Join(d.dir, "COMMIT")); err == nil { + return strings.TrimSpace(string(raw)), nil + } + if out, err := os.ReadFile(filepath.Join(d.dir, ".git", "HEAD")); err == nil { + ref := strings.TrimSpace(string(out)) + if strings.HasPrefix(ref, "ref: ") { + if sha, err := os.ReadFile(filepath.Join(d.dir, ".git", strings.TrimPrefix(ref, "ref: "))); err == nil { + return strings.TrimSpace(string(sha)), nil + } + } else if ref != "" { + return ref, nil + } + } + return "dir:" + d.dir, nil +} + +func (d dirRecords) List(folder string) ([]string, []string, error) { + entries, err := os.ReadDir(filepath.Join(d.dir, filepath.FromSlash(folder))) + if err != nil { + return nil, nil, err + } + var folders, docs []string + for _, e := range entries { + switch { + case e.IsDir(): + folders = append(folders, e.Name()) + case strings.HasSuffix(e.Name(), ".md"): + docs = append(docs, e.Name()) + } + } + return folders, docs, nil +} + +func (d dirRecords) Read(path string) (string, string, error) { + raw, err := os.ReadFile(filepath.Join(d.dir, filepath.FromSlash(path))) + if err != nil { + return "", "", err + } + commit, _ := d.Standing() + return string(raw), commit, nil +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/import.go b/modules/mesh-knowledge/cmd/mesh-knowledge/import.go new file mode 100644 index 00000000..10973c07 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/import.go @@ -0,0 +1,289 @@ +package main + +// The import (novox/hq ADR 0290 rule 8, to-be 55 §8): every decision record and research effort of hq, read at +// one commit through the records module, written whole at its own number as its first version, naming the commit +// and path it came from. It creates what is absent and never overwrites; it never asks the issue tracker for a +// number, so no counter moves; a second run changes nothing and says so. A dry run reads everything, writes +// nothing, and says what it would do. A record whose Decision section is prose is written with no clauses and +// waits for the drafting and confirming of its clauses (draft.go). + +import ( + "context" + "errors" + "fmt" + "regexp" + "sort" + "strings" + "sync" +) + +// The folders of hq the import reads. +const ( + DecisionsFolder = "02-DECISIONS" + ResearchFolder = "01-RESEARCH" +) + +// LinkPending is the source of a `changes` link the import read from hq's supersedes-in-part, which named the +// record and not the clause: which clause it changes is drafted and confirmed by the judgement (to-be 55 §7). +const LinkPending = "pending" + +var commitPrefix = regexp.MustCompile(`^[0-9a-f]{7,40}$`) + +// ImportAsk is what an import takes. +type ImportAsk struct { + Commit string + DryRun bool +} + +// ImportRow is what the import did, or would do, with one record. +type ImportRow struct { + Record string `json:"record"` + Action string `json:"action"` + Status string `json:"status,omitempty"` + From string `json:"from"` + Why string `json:"why,omitempty"` +} + +// The actions of an import. +const ( + ImportCreate = "create" + ImportHeld = "held" + ImportRefused = "refused" + ImportWould = "would-create" +) + +// Imported is the answer to an import. +type Imported struct { + DryRun bool `json:"dry-run"` + Commit string `json:"commit"` + Read int `json:"read"` + Created int `json:"created"` + Held int `json:"held"` + Refused int `json:"refused"` + Clauses int `json:"written-clauses"` + ToDraft int `json:"prose-decisions"` + Rows []ImportRow `json:"rows"` + Odd []string `json:"odd,omitempty"` + Cut string `json:"cut,omitempty"` + Said string `json:"said"` + Findings []Finding `json:"whole-set-findings,omitempty"` + Unresolved int `json:"unresolved-links"` +} + +// MostImportRows is how many rows an import answers; the counts are always whole. +const MostImportRows = 60 + +const importReaders = 8 + +type importCandidate struct { + path string + parsed *ParsedRecord + err error +} + +// Import reads hq at its commit and writes every record it does not hold. +func (k *KB) Import(caller string, a ImportAsk, records Records) (*Imported, error) { + commit, err := records.Standing() + if err != nil { + return nil, fmt.Errorf("hq cannot be read through the records module (%v); nothing was imported", err) + } + want := strings.TrimSpace(a.Commit) + if want != "" && !commitPrefix.MatchString(want) { + return nil, errors.New("commit is a commit's id or a prefix of it, 7 to 40 hexadecimal digits; nothing was imported") + } + if want != "" && !strings.HasPrefix(commit, want) { + return nil, fmt.Errorf("the record stands at hq commit %s, not %s: bring it there (records_sync), or name the commit it "+ + "stands at. Nothing was imported", short(commit), want) + } + _, docs, err := records.List(DecisionsFolder) + if err != nil { + return nil, fmt.Errorf("hq's %s cannot be listed (%v); nothing was imported", DecisionsFolder, err) + } + efforts, _, err := records.List(ResearchFolder) + if err != nil { + return nil, fmt.Errorf("hq's %s cannot be listed (%v); nothing was imported", ResearchFolder, err) + } + var cands []*importCandidate + for _, d := range docs { + if adrFile.MatchString(d) { + cands = append(cands, &importCandidate{path: DecisionsFolder + "/" + d}) + } + } + for _, f := range efforts { + if regexp.MustCompile(`^\d{3}-`).MatchString(f) { + cands = append(cands, &importCandidate{path: ResearchFolder + "/" + f}) + } + } + // Read and parse, a few at a time, every document at the one commit. + var moved error + var movedMu sync.Mutex + read := func(path string) (string, error) { + text, at, err := records.Read(path) + if err != nil { + return "", err + } + if at != commit { + movedMu.Lock() + moved = fmt.Errorf("hq moved while it was read: it stood at %s and %s was read at %s. Run the import again", short(commit), path, short(at)) + movedMu.Unlock() + } + return text, nil + } + var wg sync.WaitGroup + sem := make(chan struct{}, importReaders) + for _, c := range cands { + wg.Add(1) + sem <- struct{}{} + go func(c *importCandidate) { + defer wg.Done() + defer func() { <-sem }() + if strings.HasPrefix(c.path, DecisionsFolder) { + text, err := read(c.path) + if err != nil { + c.err = fmt.Errorf("could not be read: %v", err) + return + } + c.parsed, c.err = ParseDecision(c.path, text) + return + } + _, names, err := records.List(c.path) + if err != nil { + c.err = fmt.Errorf("could not be listed: %v", err) + return + } + texts := map[string]string{} + for _, n := range names { + text, err := read(c.path + "/" + n) + if err != nil { + c.err = fmt.Errorf("%s could not be read: %v", n, err) + return + } + texts[n] = text + } + c.parsed, c.err = ParseResearch(docName(c.path), texts) + }(c) + } + wg.Wait() + if moved != nil { + return nil, fmt.Errorf("%v; nothing was imported", moved) + } + + out := &Imported{DryRun: a.DryRun, Commit: commit, Rows: []ImportRow{}} + byKey := map[Key][]*importCandidate{} + for _, c := range cands { + if c.parsed != nil { + byKey[c.parsed.Record.Key()] = append(byKey[c.parsed.Record.Key()], c) + } + } + for key, cs := range byKey { + if len(cs) > 1 { + paths := make([]string, len(cs)) + for i, c := range cs { + paths[i] = c.path + } + for _, c := range cs { + c.err = fmt.Errorf("%s is the number of %s: a number names one record", key, strings.Join(paths, " and ")) + } + } + } + sort.Slice(cands, func(i, j int) bool { return cands[i].path < cands[j].path }) + + ctx := context.Background() + k.mu.Lock() + defer k.mu.Unlock() + known := map[Key]bool{} + for key := range byKey { + known[key] = true + } + all, err := k.Store.All(ctx) + if err != nil { + return nil, fmt.Errorf("the knowledge base cannot be read (%v); nothing was imported", err) + } + held := map[Key]bool{} + for _, e := range all { + held[e.Current.Key()] = true + known[e.Current.Key()] = true + } + at := k.now() + var rows []ImportRow + for _, c := range cands { + row := ImportRow{From: c.path} + if c.err != nil { + row.Action, row.Why = ImportRefused, c.err.Error() + row.Record = c.path + out.Refused++ + rows = append(rows, row) + continue + } + r := c.parsed.Record + row.Record, row.Status = r.Key().String(), r.Status + out.Read++ + out.Odd = append(out.Odd, c.parsed.Odd...) + if held[r.Key()] { + row.Action = ImportHeld + out.Held++ + continue + } + for i, l := range r.Links { + if to, ok := l.To.Record(); ok && !known[to] { + r.Links[i].Unresolved = true + out.Unresolved++ + out.Odd = append(out.Odd, fmt.Sprintf("%s %s %s, which hq does not hold at this commit", r.Key(), l.Kind, to)) + } + if l.Kind == LinkChanges && l.To.Clause == 0 { + r.Links[i].Source = LinkPending + } + } + r.Source = "hq@" + commit + ":" + c.path + out.Clauses += len(r.Clauses) + if r.Drafting != nil { + out.ToDraft++ + } + row.Action = ImportWould + if !a.DryRun { + err := k.Store.Create(ctx, Version{By: caller, At: at, Why: "imported from hq at " + short(commit) + ": " + c.path, Record: r}) + switch { + case errors.Is(err, ErrExists): + row.Action = ImportHeld + out.Held++ + continue + case err != nil: + row.Action, row.Why = ImportRefused, err.Error() + out.Refused++ + rows = append(rows, row) + continue + } + row.Action = ImportCreate + k.emit(EventImported, r, caller, "imported from hq at "+short(commit), 1) + } + out.Created++ + rows = append(rows, row) + } + if len(rows) > MostImportRows { + out.Cut = fmt.Sprintf("%d more row(s) are not shown; the counts are whole", len(rows)-MostImportRows) + rows = rows[:MostImportRows] + } + out.Rows = append(out.Rows, rows...) + if len(out.Odd) > 40 { + out.Odd = append(out.Odd[:40], fmt.Sprintf("and %d more", len(out.Odd)-40)) + } + verb := "created" + if a.DryRun { + verb = "would create" + } + out.Said = fmt.Sprintf("Read %d records of hq at commit %s: %s %d, already held %d, refused %d; %d clauses written as such, "+ + "%d decisions written as prose wait for their clauses to be drafted and confirmed.", + out.Read, short(commit), verb, out.Created, out.Held, out.Refused, out.Clauses, out.ToDraft) + switch { + case a.DryRun: + out.Said += " Nothing was written: a dry run." + case out.Created == 0 && out.Refused == 0: + out.Said += " Nothing changed: every record is already held." + case out.Created == 0: + out.Said += " Nothing changed: every record not refused is already held." + } + if !a.DryRun && out.Created > 0 { + out.Findings = k.judgeSet(ctx) + } + return out, nil +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/import_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/import_test.go new file mode 100644 index 00000000..9214e138 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/import_test.go @@ -0,0 +1,182 @@ +package main + +import ( + "context" + "os" + "path/filepath" + "strings" + "testing" +) + +// to-be 55 §10: "The import changes nothing on a second run, and loses nothing — the module's test over a fixture +// repository." The fixture is real hq records copied at the commit testdata/hq/COMMIT names. + +func TestTheImportWritesEveryRecordWholeAndASecondRunChangesNothing(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := newWorld(t, s, fixture()) + ctx := context.Background() + dry, err := w.k.Import("import@test", ImportAsk{DryRun: true}, fixture()) + if err != nil { + t.Fatal(err) + } + if all, _ := s.All(ctx); len(all) != 0 || dry.Created != 11 || !strings.Contains(dry.Said, "a dry run") { + t.Fatalf("the dry run wrote %d records, or would create %d: %s", len(all), dry.Created, dry.Said) + } + first, err := w.k.Import("import@test", ImportAsk{}, fixture()) + if err != nil { + t.Fatal(err) + } + if first.Created != 11 || first.Refused != 0 || first.Held != 0 || first.ToDraft != 5 { + t.Fatalf("first run: %+v", first) + } + if len(w.said.of(EventImported)) != 11 { + t.Fatalf("%d imported events", len(w.said.of(EventImported))) + } + // Loses nothing: every file's record, whole. + commit := strings.TrimSpace(readFile(t, "testdata/hq/COMMIT")) + entries, _ := os.ReadDir("testdata/hq/02-DECISIONS") + for _, f := range entries { + if !adrFile.MatchString(f.Name()) { + continue + } + text := readFile(t, filepath.Join("testdata/hq/02-DECISIONS", f.Name())) + p, err := ParseDecision(f.Name(), text) + if err != nil { + t.Fatal(err) + } + e := mustGet(t, s, p.Record.Key()) + r := e.Current + if r.Title != p.Record.Title || r.Status != p.Record.Status || r.Topic != p.Record.Topic || r.Date != p.Record.Date || + len(r.Sections) != len(p.Record.Sections) || len(r.Clauses) != len(p.Record.Clauses) || e.Versions != 1 || + r.Source != "hq@"+commit+":02-DECISIONS/"+f.Name() { + t.Errorf("%s is not held whole: %+v", f.Name(), r) + } + for i, sec := range p.Record.Sections { + if r.Sections[i] != sec { + t.Errorf("%s's section %s differs", f.Name(), sec.Name) + } + } + // Every section of the file, read back in order, is the file's body after its heading. + if body := sectionsText(r); !strings.Contains(text, strings.TrimSpace(r.Sections[len(r.Sections)-1].Text)) || body == "" { + t.Errorf("%s's last section is not the file's", f.Name()) + } + } + // 0276 writes nine numbered clauses with a bold lead: written and in force. 0240 writes prose: none yet, + // waiting to be drafted. 0127 is superseded by 0131. + r276 := mustGet(t, s, Key{KindDecision, 276}).Current + if len(r276.Clauses) != 9 || r276.Clauses[0].Source != SourceWritten || r276.Clauses[0].Status != ClauseInForce || + !strings.HasPrefix(r276.Clauses[0].Text, "**A rolling merge window.**") { + t.Fatalf("0276's clauses: %+v", r276.Clauses) + } + if r := mustGet(t, s, Key{KindDecision, 240}).Current; len(r.Clauses) != 0 || r.Drafting == nil || r.Drafting.State != DraftWaiting { + t.Fatalf("0240: %+v", r.Drafting) + } + if r := mustGet(t, s, Key{KindDecision, 127}).Current; r.Status != StatusSuperseded { + t.Fatalf("0127: %s", r.Status) + } + // 0282 supersedes part of 0276, as hq wrote it: the link is held, its clause waiting to be judged. + r282 := mustGet(t, s, Key{KindDecision, 282}).Current + var changes *Link + for i, l := range r282.Links { + if l.Kind == LinkChanges && l.To.Number == 276 { + changes = &r282.Links[i] + } + } + if changes == nil || changes.Source != LinkPending || changes.To.Clause != 0 { + t.Fatalf("0282's change of 0276: %+v", r282.Links) + } + in, _ := s.Inbound(ctx, Key{KindDecision, 276}) + if len(in) == 0 { + t.Fatal("0276 reads no link from its end") + } + // Research: 045 and 042, every document a section. + r45 := mustGet(t, s, Key{KindResearch, 45}).Current + if r45.Status != StatusGraduated || len(r45.Sections) != 2 || r45.Sections[0].Name != "00-overview.md" { + t.Fatalf("research 045: %s %v", r45.Status, r45.Sections) + } + // A second run changes nothing, and says so. + before := countVersions(t, s) + second, err := w.k.Import("import@test", ImportAsk{}, fixture()) + if err != nil { + t.Fatal(err) + } + if second.Created != 0 || second.Held != 11 || !strings.Contains(second.Said, "Nothing changed") || countVersions(t, s) != before { + t.Fatalf("second run: %+v", second) + } + if len(w.said.of(EventImported)) != 11 { + t.Fatal("the second run said an import") + } + }) +} + +// The import never overwrites: a record changed here keeps its change through a later import. +func TestTheImportNeverOverwrites(t *testing.T) { + w := imported(t, newMemStore()) + ctx := context.Background() + e := mustGet(t, w.k.Store, Key{KindDecision, 11}) + r := e.Current.Clone() + r.Title = "changed here" + if err := w.k.Store.Save(ctx, Version{By: "test", Why: "changed", Record: r}, true, false, e.Revision); err != nil { + t.Fatal(err) + } + if _, err := w.k.Import("import@test", ImportAsk{}, fixture()); err != nil { + t.Fatal(err) + } + if got := mustGet(t, w.k.Store, Key{KindDecision, 11}).Current.Title; got != "changed here" { + t.Fatalf("overwritten: %q", got) + } +} + +func TestTheImportRefusesACommitTheRecordDoesNotStandAt(t *testing.T) { + w := newWorld(t, newMemStore(), fixture()) + if _, err := w.k.Import("import@test", ImportAsk{Commit: "0000000"}, fixture()); err == nil || !strings.Contains(err.Error(), "not 0000000") { + t.Fatalf("%v", err) + } + commit := strings.TrimSpace(readFile(t, "testdata/hq/COMMIT")) + if out, err := w.k.Import("import@test", ImportAsk{Commit: commit[:9]}, fixture()); err != nil || out.Created != 11 { + t.Fatalf("%v %+v", err, out) + } + if _, err := w.k.Import("import@test", ImportAsk{Commit: "not-hex"}, fixture()); err == nil { + t.Fatal("a commit that is not one was taken") + } +} + +// The whole of main at a recorded commit is imported without a refusal, and leaves the whole set consistent. +func TestTheWholeOfMainImports(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := newWorld(t, s, hqMain(t)) + out, err := w.k.Import("import@test", ImportAsk{}, hqMain(t)) + if err != nil { + t.Fatal(err) + } + if out.Refused != 0 || out.Created < 300 { + t.Fatalf("%s; rows %+v", out.Said, out.Rows) + } + if len(out.Findings) != 0 { + t.Fatalf("the whole set of main fails: %+v", out.Findings) + } + t.Log(out.Said) + }) +} + +func readFile(t *testing.T, path string) string { + t.Helper() + raw, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + return string(raw) +} + +func countVersions(t *testing.T, s Store) int { + t.Helper() + all, err := s.All(context.Background()) + if err != nil { + t.Fatal(err) + } + n := 0 + for _, e := range all { + n += e.Versions + } + return n +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/kb.go b/modules/mesh-knowledge/cmd/mesh-knowledge/kb.go new file mode 100644 index 00000000..e675a135 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/kb.go @@ -0,0 +1,576 @@ +package main + +// The knowledge base's writes (novox/hq ADR 0290 rules 4 and 5, to-be 55 §4, §5 and §6): a number reserved from +// the issue tracker, a record proposed and judged by the 29 rules, reviewed by someone who did not write it, and +// accepted — at once, or on the operator's proven warrant when it needs the operator — with every clause it +// changes or supersedes moved accordingly and the whole record set judged after. + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "regexp" + "strconv" + "strings" + "sync" + "time" +) + +// Unproven is who acted, as recorded, while the runtime does not tell a module who called it (hq issue 365). The +// caller is never taken from an argument. +const Unproven = "unproven" + +// proven says whether a caller is one the runtime proved. +func proven(caller string) bool { return caller != "" && caller != Unproven } + +// The events this module says (ADR 0290 rule 7): every change, with what changed and who changed it. +const ( + EventReserved = "reserved" + EventProposed = "proposed" + EventReviewed = "reviewed" + EventAccepted = "accepted" + EventChanged = "changed" + EventImported = "imported" + EventDrafted = "drafted" + EventConfirmed = "confirmed" + EventReturned = "returned" +) + +// Events are the events, in the order the manifest declares them. +var Events = []string{EventReserved, EventProposed, EventReviewed, EventAccepted, EventChanged, EventImported, + EventDrafted, EventConfirmed, EventReturned} + +// Settings are the operator's values for this module, merged by the mesh into one JSON file. +type Settings struct { + // JudgeModel is the model the drafting and confirming judgements ask; sonnet when empty. + JudgeModel string `json:"judge-model,omitempty"` + // Drafting is "off" to stop drafting and confirming clauses; anything else is on. + Drafting string `json:"drafting,omitempty"` + // ReservedFor is how long a reserved number waits for its proposal before it is withdrawn, as a duration + // such as 168h; DefaultReservedFor when empty. + ReservedFor string `json:"reserved-for,omitempty"` +} + +// DefaultReservedFor is how long a reservation waits for its proposal unless the settings say otherwise. +const DefaultReservedFor = 7 * 24 * time.Hour + +// Reserver asks the issue tracker for the next number of a kind (issue-tracker.reserve). +type Reserver func(kind, title string) (int, error) + +// Judgement asks the agent on the node one question with no tools (claude-code.claude_code_judge), and answers +// the structured answer and who judged. +type Judgement func(question string, schema map[string]any, model string) (json.RawMessage, string, error) + +// Notifier tells the operator's channel something (operator-channel.notify). +type Notifier func(key, summary, headline, explanation string) error + +// KB is the knowledge base. +type KB struct { + Store Store + Records Records + Reserve Reserver + Judge Judgement + Asks AskBus + Notify Notifier + Emit func(event string, body any) error + Settings func() (Settings, error) + Now func() time.Time + Logf func(format string, a ...any) + + // mu serialises the writes: one instance holds the seat, and a write reads, judges and writes as one. + mu sync.Mutex + + refMu sync.Mutex + ref *Reference + refAt time.Time +} + +func (k *KB) now() time.Time { + if k.Now != nil { + return k.Now().UTC() + } + return time.Now().UTC() +} + +func (k *KB) logf(format string, a ...any) { + if k.Logf != nil { + k.Logf(format, a...) + } +} + +func (k *KB) settings() Settings { + if k.Settings == nil { + return Settings{} + } + s, err := k.Settings() + if err != nil { + k.logf("[mesh-knowledge] the settings cannot be read (%v): the defaults hold", err) + } + return s +} + +// emit says a change. A change that could not be said is logged and kept: the store holds it whole, and its +// versions are the record of who changed what. +func (k *KB) emit(event string, r *Record, by, what string, version int) { + if k.Emit == nil { + return + } + body := map[string]any{"kind": r.Kind, "number": r.Number, "record": r.Key().String(), "by": by, "at": k.now(), + "what": what, "version": version, "status": r.Status} + if err := k.Emit(event, body); err != nil { + k.logf("[mesh-knowledge] the event %s for %s could not be said: %v", event, r.Key(), err) + } +} + +// reference is the reading order and the glossary, read again after ten minutes. +func (k *KB) reference() (*Reference, error) { + k.refMu.Lock() + defer k.refMu.Unlock() + if k.ref != nil && k.now().Sub(k.refAt) < 10*time.Minute { + return k.ref, nil + } + if k.Records == nil { + return nil, errors.New("hq cannot be read: the module has no way to the records module") + } + ref, err := LoadReference(k.Records) + if err != nil { + if k.ref != nil { + return k.ref, nil + } + return nil, err + } + k.ref, k.refAt = ref, k.now() + return ref, nil +} + +func (k *KB) lookup(ctx context.Context) Lookup { + return func(key Key) *Record { + e, err := k.Store.Get(ctx, key) + if err != nil || e == nil { + return nil + } + return e.Current + } +} + +var kindNumber = regexp.MustCompile(`^\d{1,4}$`) + +// ---- reserve ----------------------------------------------------------------------------------------------- + +// Reserved is the answer to reserve. +type Reserved struct { + Kind string `json:"kind"` + Number int `json:"number"` + Record string `json:"record"` + Says string `json:"says"` +} + +// ReserveNumber asks the issue tracker for the next number of a kind and holds it as reserved, with who reserved +// it and when (to-be 55 §6). The knowledge base keeps no counter. +func (k *KB) ReserveNumber(caller, kind, title string) (*Reserved, error) { + if !contains(Kinds, kind) { + return nil, fmt.Errorf("kind is decision or research, not %q; nothing was reserved", kind) + } + title = strings.TrimSpace(title) + if title == "" || strings.Contains(title, "\n") || len([]rune(title)) > 200 { + return nil, errors.New("for is the record's title, one line of at most 200 characters; nothing was reserved") + } + if k.Reserve == nil { + return nil, errors.New("the issue tracker cannot be asked for a number here; nothing was reserved") + } + n, err := k.Reserve(kind, title) + if err != nil { + return nil, fmt.Errorf("the issue tracker did not hand out a %s number (%v); nothing was reserved", kind, err) + } + k.mu.Lock() + defer k.mu.Unlock() + ctx := context.Background() + at := k.now() + r := &Record{Kind: kind, Number: n, Title: title, Status: StatusReserved, ReservedBy: caller, ReservedAt: at, ReservedFor: title} + err = k.Store.Create(ctx, Version{By: caller, At: at, Why: "number reserved from the issue tracker", Record: r}) + if errors.Is(err, ErrExists) { + return nil, fmt.Errorf("the issue tracker handed out %s, which the knowledge base already holds: the number is spent, "+ + "and its counter stands below what the knowledge base holds. Reserve again, and tell the operator", r.Key()) + } + if err != nil { + return nil, fmt.Errorf("%s was handed out and could not be kept (%v): the number is spent; reserve again", r.Key(), err) + } + k.emit(EventReserved, r, caller, "reserved for "+title, 1) + return &Reserved{Kind: kind, Number: n, Record: r.Key().String(), + Says: fmt.Sprintf("%s is reserved for %q. Propose the record under this number; a number never proposed is withdrawn, and never handed out again.", r.Key(), title)}, nil +} + +// ---- propose ----------------------------------------------------------------------------------------------- + +// LinkAsk is a link as a proposal gives it: its kind, its target as written ("0276 §4"), the clause it goes out +// from. +type LinkAsk struct { + Kind string `json:"kind"` + To string `json:"to"` + From int `json:"from,omitempty"` +} + +// ProposeAsk is a record proposed whole. +type ProposeAsk struct { + Kind string + Number int + Title string + Topic string + Date string + Deciders []string + Clauses []string + Sections []Section + Links []LinkAsk + Homes []string + NeedsOperator bool + // Status is a research effort's: active, graduated or abandoned. + Status string + // Insight, for an accepted record, is what stood before: the proposal is a progressive insight. + Insight string + Why string +} + +// Proposed is the answer to propose. +type Proposed struct { + Record string `json:"record"` + Version int `json:"version"` + Status string `json:"status"` + Says string `json:"says"` +} + +var numberedClause = regexp.MustCompile(`^(\d+)\.\s+`) + +// MostRecordBytes is the most one record may hold. +const MostRecordBytes = 512 << 10 + +// Propose writes a record whole as proposed, or refuses it naming every rule it breaks. A proposal is revised +// as new versions until it is reviewed; an accepted record is changed only by a progressive insight (Insight), +// which waits for its own review while the accepted version stays the one served. +func (k *KB) Propose(caller string, a ProposeAsk) (*Proposed, error) { + ctx := context.Background() + k.mu.Lock() + defer k.mu.Unlock() + if !contains(Kinds, a.Kind) { + return nil, fmt.Errorf("kind is decision or research, not %q; nothing was proposed", a.Kind) + } + key := Key{a.Kind, a.Number} + held, err := k.Store.Get(ctx, key) + if err != nil { + return nil, fmt.Errorf("the knowledge base cannot be read (%v); nothing was proposed", err) + } + ref, err := k.reference() + if err != nil { + return nil, fmt.Errorf("the rules cannot be judged: %v. Nothing was proposed", err) + } + r := &Record{Kind: a.Kind, Number: a.Number, Title: strings.TrimSpace(a.Title), Topic: strings.TrimSpace(a.Topic), + Status: StatusProposed, Date: strings.TrimSpace(a.Date), Deciders: a.Deciders, Effort: a.Status, + NeedsOperator: a.NeedsOperator, Sections: a.Sections, Homes: a.Homes, Author: caller} + if r.Date == "" { + r.Date = k.now().Format("2006-01-02") + } + var refusals []Refusal + for i, text := range a.Clauses { + n := i + 1 + text = strings.TrimSpace(text) + if m := numberedClause.FindStringSubmatch(text); m != nil { + n, _ = strconv.Atoi(m[1]) + text = strings.TrimSpace(text[len(m[0]):]) + } + r.Clauses = append(r.Clauses, Clause{N: n, Text: text, Status: ClauseProposed, Source: SourceWritten}) + } + for _, l := range a.Links { + to, err := ParseRef(l.To) + if err != nil { + refusals = append(refusals, Refusal{Rule: "link-target", Says: err.Error()}) + continue + } + r.Links = append(r.Links, Link{Kind: l.Kind, From: l.From, To: to, Source: SourceWritten}) + } + current := true + why := strings.TrimSpace(a.Why) + if held != nil { + switch w := held.Working(); { + case held.Current.Status == StatusReserved: + r.ReservedBy, r.ReservedAt, r.ReservedFor = held.Current.ReservedBy, held.Current.ReservedAt, held.Current.ReservedFor + if why == "" { + why = "proposed" + } + case w.Status == StatusProposed && held.Pending == nil: + // A revision of a proposal: a new version, its earlier reviews kept with the versions they reviewed. + r.Author, r.Reviews, r.ReservedBy, r.ReservedAt, r.ReservedFor = w.Author, w.Reviews, w.ReservedBy, w.ReservedAt, w.ReservedFor + if a.Insight != "" { + refusals = append(refusals, Refusal{Rule: "reserved", Says: "a proposal not yet accepted is revised, not corrected by an insight"}) + } + if why == "" { + why = "revised" + } + case held.Current.Accepted(): + if strings.TrimSpace(a.Insight) == "" { + return nil, fmt.Errorf("%s is %s: it changes only by a new record, or by a progressive insight, a correction of fact "+ + "that leaves the decision standing (give insight: what stood before). Nothing was proposed", key, held.Current.Status) + } + current = false + r.Author = caller + r.AcceptedAt = held.Current.AcceptedAt + r.Pending = &PendingState{Insight: Insight{Date: k.now().Format("2006-01-02"), Before: strings.TrimSpace(a.Insight), By: caller}} + r.Date = held.Current.Date + r.Effort = a.Status + if why == "" { + why = "a progressive insight proposed" + } + default: + return nil, fmt.Errorf("%s is %s and takes no proposal; nothing was proposed", key, held.Working().Status) + } + } + if !current && a.Kind == KindResearch && r.Effort == "" { + r.Effort = held.Current.Status + } + refusals = append(refusals, JudgeRecord(r, held, k.lookup(ctx), ref)...) + if raw, _ := json.Marshal(r); len(raw) > MostRecordBytes { + refusals = append(refusals, Refusal{Rule: "size", Says: fmt.Sprintf("the record is %d bytes; a record holds at most %d", len(raw), MostRecordBytes)}) + } + if len(refusals) > 0 { + lines := make([]string, len(refusals)) + for i, x := range refusals { + lines[i] = x.String() + } + return nil, fmt.Errorf("%s is refused by %d rule(s), and nothing was written:\n- %s", key, len(refusals), strings.Join(lines, "\n- ")) + } + v := Version{By: caller, At: k.now(), Why: why, Record: r, Insight: !current} + if err := k.Store.Save(ctx, v, current, false, held.Revision); err != nil { + return nil, fmt.Errorf("%s could not be written (%v); nothing was proposed", key, err) + } + n := held.Versions + 1 + k.emit(EventProposed, r, caller, why, n) + says := fmt.Sprintf("%s is proposed as version %d. Nothing of it is in force until a review by someone who did not write it approves it", key, n) + if r.NeedsOperator { + says += ", and then the operator's Approve" + } + if !current { + says = fmt.Sprintf("A progressive insight to %s is proposed as version %d; the accepted version is served until a review approves it", key, n) + } + return &Proposed{Record: key.String(), Version: n, Status: StatusProposed, Says: says + "."}, nil +} + +// ---- review and acceptance --------------------------------------------------------------------------------- + +// ReviewAsk is one review. +type ReviewAsk struct { + Kind string + Number int + Verdict string + Findings string +} + +// Reviewed is the answer to review. +type Reviewed struct { + Record string `json:"record"` + Verdict string `json:"verdict"` + Status string `json:"status"` + Says string `json:"says"` +} + +// Review takes a review of the version proposed, by someone who did not write it. On approve the record is +// accepted, or, when it needs the operator, asked of the operator; on changes it stays proposed, the findings +// kept with it. +func (k *KB) Review(caller string, a ReviewAsk) (*Reviewed, error) { + ctx := context.Background() + k.mu.Lock() + defer k.mu.Unlock() + key := Key{a.Kind, a.Number} + if a.Verdict != VerdictApprove && a.Verdict != VerdictChanges { + return nil, fmt.Errorf("verdict is approve or changes, not %q; nothing was reviewed", a.Verdict) + } + if a.Verdict == VerdictChanges && strings.TrimSpace(a.Findings) == "" { + return nil, errors.New("a review that asks for changes says them in findings; nothing was reviewed") + } + held, err := k.Store.Get(ctx, key) + if err != nil { + return nil, fmt.Errorf("the knowledge base cannot be read (%v); nothing was reviewed", err) + } + if held == nil || held.Working().Status != StatusProposed { + status := "not held" + if held != nil { + status = held.Working().Status + } + return nil, fmt.Errorf("%s is %s: only a proposed record is reviewed", key, status) + } + if !proven(caller) { + return nil, fmt.Errorf("the runtime does not prove who calls (hq issue 365), so a review cannot be told from one by %s's "+ + "author, and none is taken until it does. Nothing was reviewed", key) + } + w := held.Working().Clone() + if caller == w.Author { + return nil, fmt.Errorf("%s was written by %s, who called this review: a record is reviewed by someone who did not write it. "+ + "Nothing was reviewed", key, caller) + } + reviewed := held.CurrentVersion + if held.Pending != nil { + reviewed = held.PendingVersion + } + w.Reviews = append(w.Reviews, Review{By: caller, At: k.now(), Verdict: a.Verdict, Findings: strings.TrimSpace(a.Findings), Version: reviewed}) + if a.Verdict == VerdictChanges { + if err := k.Store.Save(ctx, Version{By: caller, At: k.now(), Why: "reviewed: changes asked", Record: w, Insight: held.Pending != nil}, + held.Pending == nil, false, held.Revision); err != nil { + return nil, fmt.Errorf("the review could not be kept (%v)", err) + } + k.emit(EventReviewed, w, caller, "changes asked", held.Versions+1) + return &Reviewed{Record: key.String(), Verdict: a.Verdict, Status: StatusProposed, + Says: fmt.Sprintf("%s stays proposed; the findings are kept with version %d for its author to answer with a revision.", key, reviewed)}, nil + } + if w.NeedsOperator { + return k.askOperator(ctx, held, w, caller) + } + k.emit(EventReviewed, w, caller, "approved", held.Versions+1) + r, err := k.accept(ctx, held, w, caller, "accepted after a review by "+caller, "") + if err != nil { + return nil, err + } + return &Reviewed{Record: key.String(), Verdict: a.Verdict, Status: r.Status, + Says: fmt.Sprintf("%s is %s and its clauses are in force.", key, r.Status)}, nil +} + +// accept makes a reviewed version the one served: accepted, its clauses in force, every clause and record it +// changes or supersedes moved; then the whole record set is judged. by is who acted; warrant, the operator's word +// it rests on. +func (k *KB) accept(ctx context.Context, held *Entry, w *Record, by, why, warrant string) (*Record, error) { + r := w.Clone() + insight := r.Pending != nil + at := k.now() + if insight { + in := r.Pending.Insight + r.Pending = nil + r.Insights = append(r.Insights, in) + r.Status = held.Current.Status + if r.Kind == KindResearch && contains(ResearchStatuses, r.Effort) && held.Current.Status != StatusSuperseded { + r.Status = r.Effort + } + for i, c := range r.Clauses { + r.Clauses[i].Status = ClauseInForce + if old := held.Current.Clause(c.N); old != nil && (old.Status == ClauseChanged || old.Status == ClauseSuperseded) { + r.Clauses[i].Status, r.Clauses[i].ChangedBy = old.Status, old.ChangedBy + } + } + } else { + r.Status = StatusAccepted + if r.Kind == KindResearch { + r.Status = r.Effort + } + r.AcceptedAt = at + for i := range r.Clauses { + r.Clauses[i].Status = ClauseInForce + } + } + r.Effort = "" + if warrant != "" { + why += "; " + warrant + } + if err := k.Store.Save(ctx, Version{By: by, At: at, Why: why, Record: r, Insight: insight}, true, true, held.Revision); err != nil { + return nil, fmt.Errorf("%s could not be accepted (%v); it stays proposed", r.Key(), err) + } + k.emit(EventAccepted, r, by, why, held.Versions+1) + // What it changes and supersedes, each a new version of that record. + for _, l := range r.Links { + to, ok := l.To.Record() + if !ok || (l.Kind != LinkSupersedes && l.Kind != LinkChanges) || (insight && hasLink(held.Current, l)) { + continue + } + t, err := k.Store.Get(ctx, to) + if err != nil || t == nil { + k.logf("[mesh-knowledge] %s %s %s, which cannot be read now (%v): the whole-set rules will say so", r.Key(), l.Kind, to, err) + continue + } + c := t.Current.Clone() + var what string + switch l.Kind { + case LinkSupersedes: + c.Status = StatusSuperseded + c.Extra = addExtra(c.Extra, "superseded-by", r.Key().String()) + for i := range c.Clauses { + c.Clauses[i].Status = ClauseSuperseded + c.Clauses[i].ChangedBy = append(c.Clauses[i].ChangedBy, r.Key().String()) + } + what = "superseded by " + r.Key().String() + case LinkChanges: + cl := c.Clause(l.To.Clause) + if cl == nil || cl.Status == ClauseSuperseded { + continue + } + cl.Status = ClauseChanged + from := r.Key().String() + if l.From > 0 { + from += " §" + strconv.Itoa(l.From) + } + cl.ChangedBy = append(cl.ChangedBy, from) + what = fmt.Sprintf("§%d changed by %s", l.To.Clause, from) + } + if err := k.Store.Save(ctx, Version{By: by, At: at, Why: what, Record: c}, true, false, t.Revision); err != nil { + k.logf("[mesh-knowledge] %s could not be marked %s (%v): the whole-set rules will say so", to, what, err) + continue + } + k.emit(EventChanged, c, by, what, t.Versions+1) + } + k.judgeSet(ctx) + return r, nil +} + +// judgeSet holds the whole record set to its 4 rules and keeps what fails, which the module's health answers. +func (k *KB) judgeSet(ctx context.Context) []Finding { + all, err := k.Store.All(ctx) + if err != nil { + k.logf("[mesh-knowledge] the whole record set cannot be read to judge it: %v", err) + return nil + } + records := make([]*Record, len(all)) + for i, e := range all { + records[i] = e.Current + } + findings := JudgeSet(records) + at := k.now() + for i := range findings { + findings[i].At = at + } + if err := k.Store.SetFindings(ctx, findings); err != nil { + k.logf("[mesh-knowledge] the whole-set findings could not be kept: %v", err) + } + for _, f := range findings { + k.logf("[mesh-knowledge] the whole-set rule %s fails: %s", f.Rule, f.Says) + } + return findings +} + +// ---- reservations that were never proposed ------------------------------------------------------------------- + +// Withdraw withdraws every number reserved longer ago than the settings allow and never proposed: it stays spent, +// with who reserved it and when. +func (k *KB) Withdraw() (int, error) { + ctx := context.Background() + k.mu.Lock() + defer k.mu.Unlock() + bound := DefaultReservedFor + if s := strings.TrimSpace(k.settings().ReservedFor); s != "" { + if d, err := time.ParseDuration(s); err == nil && d > 0 { + bound = d + } + } + all, err := k.Store.All(ctx) + if err != nil { + return 0, err + } + n := 0 + for _, e := range all { + if e.Current.Status != StatusReserved || k.now().Sub(e.Current.ReservedAt) < bound { + continue + } + r := e.Current.Clone() + r.Status = StatusWithdrawn + why := fmt.Sprintf("withdrawn: reserved by %s at %s and never proposed", r.ReservedBy, r.ReservedAt.Format(time.RFC3339)) + if err := k.Store.Save(ctx, Version{By: "the knowledge base", At: k.now(), Why: why, Record: r}, true, false, e.Revision); err != nil { + return n, err + } + k.emit(EventChanged, r, "the knowledge base", why, e.Versions+1) + n++ + } + return n, nil +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/kit_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/kit_test.go new file mode 100644 index 00000000..98cea051 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/kit_test.go @@ -0,0 +1,430 @@ +package main + +// What the tests stand on: the knowledge base over each store — in memory always, and on a real postgres when one +// can be had (MESH_TEST_POSTGRES, or a private server started here from the machine's initdb on a socket of its own, +// listening on no port) — hq as real files copied from it at a commit (testdata/hq, and testdata/hq-main.tar.gz, +// the whole of main), and the issue tracker, the agent's judgement and the router played here. + +import ( + "archive/tar" + "compress/gzip" + "context" + "encoding/json" + "fmt" + "io" + "net/url" + "os" + "os/exec" + "path/filepath" + "regexp" + "strings" + "sync" + "testing" + "time" + + stdio "git.novox.be/novox/mesh-sdk/go" + "git.novox.be/novox/mesh-sdk/go/asks" +) + +const bundleVar = "MESH_KNOWLEDGE_TEST_BUNDLE" + +func TestMain(m *testing.M) { + if os.Getenv(bundleVar) == "1" { + // The bundle the bus test starts: the knowledge base as the runtime launches it, its store in memory. + k := newKB(newMemStore()) + serve(k, os.Getenv("MESH_KNOWLEDGE_STATUS")) + os.Exit(0) + } + code := m.Run() + stopPostgres() + os.Exit(code) +} + +// ---- postgres ------------------------------------------------------------------------------------------------ + +var ( + pgOnce sync.Once + pgBase string + pgDir string + pgWhy string + pgCount int + pgMu sync.Mutex +) + +func startPostgres() { + if url := os.Getenv("MESH_TEST_POSTGRES"); url != "" { + pgBase = url + return + } + initdb, err := exec.LookPath("initdb") + if err != nil { + pgWhy = "no postgres: MESH_TEST_POSTGRES is unset and the machine has no initdb" + return + } + pgctl := filepath.Join(filepath.Dir(initdb), "pg_ctl") + dir, err := os.MkdirTemp("", "mkpg") + if err != nil { + pgWhy = err.Error() + return + } + pgDir = dir + if out, err := exec.Command(initdb, "-D", dir+"/data", "-U", "postgres", "-A", "trust", "-E", "UTF8", "--no-locale").CombinedOutput(); err != nil { + pgWhy = fmt.Sprintf("initdb: %v: %s", err, out) + return + } + // A socket in its own directory and no port: nothing on this machine can reach it but these tests. + if out, err := exec.Command(pgctl, "-D", dir+"/data", "-l", dir+"/log", "-w", "-o", + "-k "+dir+" -c listen_addresses='' -F", "start").CombinedOutput(); err != nil { + pgWhy = fmt.Sprintf("pg_ctl start: %v: %s", err, out) + return + } + pgBase = "postgres://postgres@/postgres?host=" + dir +} + +func stopPostgres() { + if pgDir == "" { + return + } + if initdb, err := exec.LookPath("initdb"); err == nil { + _ = exec.Command(filepath.Join(filepath.Dir(initdb), "pg_ctl"), "-D", pgDir+"/data", "-m", "immediate", "stop").Run() + } + _ = os.RemoveAll(pgDir) +} + +// freshDatabase is a database of its own for one test, on the test postgres, or a skip saying why there is none. +func freshDatabase(t *testing.T) string { + t.Helper() + pgOnce.Do(startPostgres) + if pgBase == "" { + t.Skipf("NOT TESTED ON POSTGRES: %s", pgWhy) + } + pgMu.Lock() + pgCount++ + name := fmt.Sprintf("kb_%d_%d", os.Getpid(), pgCount) + pgMu.Unlock() + ctx := context.Background() + admin, err := OpenPgStore(ctx, pgBase) + if err != nil { + t.Fatal(err) + } + defer admin.Close() + if _, err := admin.pool.Exec(ctx, "create database "+name); err != nil { + t.Fatal(err) + } + return replaceDatabase(pgBase, name) +} + +func replaceDatabase(base, name string) string { + u, err := url.Parse(base) + if err != nil { + return base + } + u.Path = "/" + name + return u.String() +} + +// pgStore is a prepared store on a fresh database. +func pgStore(t *testing.T) *PgStore { + t.Helper() + url := freshDatabase(t) + s, err := OpenPgStore(context.Background(), url) + if err != nil { + t.Fatal(err) + } + t.Cleanup(s.Close) + if _, err := s.Prepare(context.Background()); err != nil { + t.Fatal(err) + } + return s +} + +// eachStore runs a test over the store in memory and over postgres. +func eachStore(t *testing.T, run func(t *testing.T, s Store)) { + t.Run("memory", func(t *testing.T) { run(t, newMemStore()) }) + t.Run("postgres", func(t *testing.T) { run(t, pgStore(t)) }) +} + +// ---- hq --------------------------------------------------------------------------------------------------------- + +// fixture is the handful of real hq files copied at one commit. +func fixture() dirRecords { return dirRecords{dir: filepath.Join("testdata", "hq")} } + +var ( + mainOnce sync.Once + mainDir string + mainErr error +) + +// hqMain is the whole of hq's main at the commit testdata/hq-main.commit names, unpacked once. +func hqMain(t *testing.T) dirRecords { + t.Helper() + mainOnce.Do(func() { + dir, err := os.MkdirTemp("", "kb-hq-main") + if err != nil { + mainErr = err + return + } + mainDir = dir + f, err := os.Open(filepath.Join("testdata", "hq-main.tar.gz")) + if err != nil { + mainErr = err + return + } + defer f.Close() + gz, err := gzip.NewReader(f) + if err != nil { + mainErr = err + return + } + tr := tar.NewReader(gz) + for { + h, err := tr.Next() + if err == io.EOF { + break + } + if err != nil { + mainErr = err + return + } + path := filepath.Join(dir, filepath.FromSlash(h.Name)) + if h.Typeflag == tar.TypeDir { + _ = os.MkdirAll(path, 0o755) + continue + } + _ = os.MkdirAll(filepath.Dir(path), 0o755) + raw, err := io.ReadAll(tr) + if err != nil { + mainErr = err + return + } + if err := os.WriteFile(path, raw, 0o644); err != nil { + mainErr = err + return + } + } + commit, _ := os.ReadFile(filepath.Join("testdata", "hq-main.commit")) + mainErr = os.WriteFile(filepath.Join(dir, "hq", "COMMIT"), commit, 0o644) + }) + if mainErr != nil { + t.Fatal(mainErr) + } + return dirRecords{dir: filepath.Join(mainDir, "hq")} +} + +// ---- what the knowledge base reaches, played here ------------------------------------------------------------ + +// tracker is the issue tracker's counters, played: the next number of a kind, from where hq's main stands. +type tracker struct { + mu sync.Mutex + next map[string]int + asked []map[string]string +} + +func newTracker() *tracker { + return &tracker{next: map[string]int{KindDecision: 300, KindResearch: 50}} +} + +func (tr *tracker) reserve(kind, title string) (int, error) { + tr.mu.Lock() + defer tr.mu.Unlock() + tr.asked = append(tr.asked, map[string]string{"kind": kind, "for": title}) + n := tr.next[kind] + tr.next[kind]++ + return n, nil +} + +// judge is the agent's judgement, played: it drafts a clause from each sentence of a section that says "is", "are" +// or "decid", confirms every clause but those whose text holds "NOT EXACT", and names clause 1 for a change. +type judge struct { + mu sync.Mutex + questions []string + fail bool +} + +func (j *judge) judge(question string, schema map[string]any, model string) (json.RawMessage, string, error) { + j.mu.Lock() + defer j.mu.Unlock() + j.questions = append(j.questions, question) + if j.fail { + return nil, "", fmt.Errorf("the agent holds no licence") + } + props := schema["properties"].(map[string]any) + switch { + case props["verdicts"] != nil: + var verdicts []map[string]any + for _, line := range strings.Split(question[strings.Index(question, "The drafted clauses:"):], "\n") { + m := regexp.MustCompile(`^(\d+)\. `).FindStringSubmatch(line) + if m == nil { + continue + } + exact := !strings.Contains(line, "NOT EXACT") + v := map[string]any{"clause": atoi(m[1]), "exact": exact} + if !exact { + v["reason"] = "the section says it of the controller only" + } + verdicts = append(verdicts, v) + } + raw, _ := json.Marshal(map[string]any{"verdicts": verdicts}) + return raw, "the agent on test (" + model + ")", nil + case props["clauses"] != nil && props["reason"] != nil: + return json.RawMessage(`{"clauses":[1],"reason":"it replaces the first"}`), "the agent on test (" + model + ")", nil + case props["exact"] != nil: + return json.RawMessage(`{"exact":true,"reason":"it does"}`), "the agent on test (" + model + ")", nil + } + section := question[strings.Index(question, "The Decision section:")+len("The Decision section:"):] + var clauses []map[string]string + for _, s := range regexp.MustCompile(`[^.]+\.`).FindAllString(strings.Join(strings.Fields(section), " "), -1) { + s = strings.TrimSpace(s) + if len(clauses) < 4 && len(s) > 20 && regexp.MustCompile(`(?i)\b(is|are|decid)`).MatchString(s) { + clauses = append(clauses, map[string]string{"lead": "Drafted " + fmt.Sprint(len(clauses)+1), "text": s}) + } + } + if len(clauses) == 0 { + clauses = append(clauses, map[string]string{"lead": "Drafted 1", "text": "what the section decides."}) + } + raw, _ := json.Marshal(map[string]any{"clauses": clauses}) + return raw, "the agent on test (" + model + ")", nil +} + +// router is the operator channel, played: the asks published, and its own record of each, which only it writes. +type router struct { + mu sync.Mutex + asked []asks.Ask + records map[string]routerRecord +} + +func newRouter() *router { return &router{records: map[string]routerRecord{}} } + +func (r *router) Publish(subject string, body any, id string) error { + r.mu.Lock() + defer r.mu.Unlock() + if subject != asks.AskSubject(Module) { + return fmt.Errorf("published on %s", subject) + } + a := body.(asks.Ask) + r.asked = append(r.asked, a) + cp := a + r.records[a.ID] = routerRecord{State: "open", Ask: &cp} + return nil +} + +func (r *router) Record(id string) (*stdio.StateEntry, error) { + r.mu.Lock() + defer r.mu.Unlock() + rec, ok := r.records[id] + if !ok { + return nil, nil + } + raw, _ := json.Marshal(rec) + return &stdio.StateEntry{Key: id, Value: raw, Revision: 1}, nil +} + +// answer closes an ask as the router does when the operator taps an option on a channel that proves who answered. +func (r *router) answer(id, option string, at time.Time) asks.Warrant { + r.mu.Lock() + defer r.mu.Unlock() + rec := r.records[id] + o, _ := rec.Ask.Option(option) + w := asks.Warrant{Ask: id, Asker: Module, About: rec.Ask.About, Outcome: asks.OutcomeChosen, Option: o.ID, Label: o.Label, + Level: o.Level, By: &asks.Person{Who: asks.Operator, Kind: "telegram", Identity: "1", Verified: "user id verified"}, + Channel: "telegram", At: at, AskDigest: rec.Ask.Digest()} + rec.State, rec.Warrant = "closed", &w + r.records[id] = rec + return w +} + +// said is the events said. +type said struct { + mu sync.Mutex + events []map[string]any +} + +func (s *said) emit(event string, body any) error { + s.mu.Lock() + defer s.mu.Unlock() + b := body.(map[string]any) + cp := map[string]any{"event": event} + for k, v := range b { + cp[k] = v + } + s.events = append(s.events, cp) + return nil +} + +func (s *said) of(event string) []map[string]any { + s.mu.Lock() + defer s.mu.Unlock() + var out []map[string]any + for _, e := range s.events { + if e["event"] == event { + out = append(out, e) + } + } + return out +} + +// world is one knowledge base and everything it reaches, played. +type world struct { + k *KB + tracker *tracker + judge *judge + router *router + said *said + told []string + clock time.Time +} + +func newWorld(t *testing.T, s Store, records Records) *world { + t.Helper() + w := &world{tracker: newTracker(), judge: &judge{}, router: newRouter(), said: &said{}, + clock: time.Date(2026, 10, 11, 9, 0, 0, 0, time.UTC)} + w.k = &KB{Store: s, Records: records, Reserve: w.tracker.reserve, Judge: w.judge.judge, Asks: w.router, + Emit: w.said.emit, Settings: func() (Settings, error) { return Settings{}, nil }, Now: func() time.Time { return w.clock }, + Logf: func(f string, a ...any) { t.Logf(f, a...) }, + Notify: func(key, summary, headline, explanation string) error { w.told = append(w.told, summary); return nil }} + return w +} + +// valid is a proposal every rule takes, for the record numbered n, against the fixture's records. +func valid(n int) ProposeAsk { + return ProposeAsk{Kind: KindDecision, Number: n, Title: "A merge window closes after ninety seconds of quiet", + Topic: "the mesh", Date: "2026-10-11", Deciders: []string{"jochen"}, + Clauses: []string{"**The window closes after ninety seconds of quiet.** A merge opens or extends it.", + "**A batch is delivered by one walk.** One commit per repository."}, + Sections: []Section{ + {Name: "Context", Text: "The merge window of [ADR 0276](0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md) waits too long."}, + {Name: "Considered Options", Text: "1. **Keep it.** Rejected."}, + {Name: "Consequences", Text: "Merges land sooner."}, + {Name: "How it is checked", Text: "The controller's merge-window tests."}, + }, + Links: []LinkAsk{{Kind: LinkExtends, To: "0276"}, {Kind: LinkChanges, To: "0276 §1", From: 1}}} +} + +// imported is a world whose knowledge base holds the fixture's records. +func imported(t *testing.T, s Store) *world { + t.Helper() + w := newWorld(t, s, fixture()) + if _, err := w.k.Import("import@test", ImportAsk{}, fixture()); err != nil { + t.Fatal(err) + } + return w +} + +// reserved reserves a decision number and answers it. +func (w *world) reserved(t *testing.T, caller string) int { + t.Helper() + r, err := w.k.ReserveNumber(caller, KindDecision, "a test record") + if err != nil { + t.Fatal(err) + } + return r.Number +} + +func mustGet(t *testing.T, s Store, k Key) *Entry { + t.Helper() + e, err := s.Get(context.Background(), k) + if err != nil || e == nil { + t.Fatalf("%s: %v %v", k, e, err) + } + return e +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/main.go b/modules/mesh-knowledge/cmd/mesh-knowledge/main.go new file mode 100644 index 00000000..0b84ceb0 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/main.go @@ -0,0 +1,934 @@ +// mesh-knowledge: the knowledge base, holder of the knowledge-base seat (novox/hq ADR 0290, to-be 55). A Go +// bundle the control-node's runtime launches. It holds every decision record and research effort whole — its +// fields, its clauses each with a status and a source, its typed links read from both ends, its reasoning — with +// every version kept, in a database in the store; answers what holds in one bounded call; takes a record proposed, +// checked when it is written, reviewed by someone who did not write it and accepted, on the operator's proven +// word when it needs it; and imports hq's records at a commit. stdout is the MCP channel; what this module says, +// it says on stderr. +// +// mesh-knowledge the bundle: the seat's verbs and the health tool +// mesh-knowledge prepare the preparation step: the database's schema brought to this version's +// mesh-knowledge keep acts: judges the whole record set every few minutes and keeps the findings +// mesh-knowledge watch judges: reads whether the database serves and what the findings say, every +// minute, and leaves its verdict in the status file the health tool reads +// mesh-knowledge dry-run the import's dry run over a checkout on disk, against no database +// +// The two long-running processes are the act and the judge, as the mounts module's are: keep is judged by its +// unit, watch by the health tool, so the module never judges itself by its own tool alone (ADR 0240 rule 2). +package main + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "math" + "os" + "sort" + "strings" + "sync" + "time" + + stdio "git.novox.be/novox/mesh-sdk/go" + "git.novox.be/novox/mesh-sdk/go/asks" +) + +// Seat is the role this module holds, once for the mesh. +const Seat = "knowledge-base" + +// Verbs are the seat's verbs, as the manifest declares and claims them (ADR 0290 rule 6). +var Verbs = []string{"ask", "get", "holds", "links", "history", "reserve", "propose", "review", "import", "return"} + +// HealthTool is the module's own tool the node-engine asks how it is. +const HealthTool = "knowledge_health" + +func logf(format string, a ...any) { fmt.Fprintf(os.Stderr, format+"\n", a...) } + +func readSettings(path string) (Settings, error) { + var s Settings + if path == "" { + return s, errors.New("the module was started without a settings file") + } + raw, err := os.ReadFile(path) + if err != nil { + return s, err + } + if err := json.Unmarshal(raw, &s); err != nil { + return s, fmt.Errorf("the settings file is not the module's settings: %v", err) + } + return s, nil +} + +func main() { + if len(os.Args) > 1 { + switch os.Args[1] { + case "prepare": + os.Exit(prepare()) + case "keep": + os.Exit(keep()) + case "watch": + os.Exit(watch(os.Getenv("MESH_KNOWLEDGE_STATUS"))) + case "dry-run": + os.Exit(dryRunAtTheTerminal(os.Args[2:])) + } + } + st := &lazyStore{open: func(ctx context.Context) (*PgStore, error) { return PgStoreFromEnv(ctx) }} + k := newKB(st) + serve(k, os.Getenv("MESH_KNOWLEDGE_STATUS")) +} + +// newKB is the knowledge base as the runtime launches it: everything it reaches, over the bus. +func newKB(store Store) *KB { + file := os.Getenv("MESH_KNOWLEDGE_SETTINGS") + return &KB{ + Store: store, + Records: busRecords{}, + Reserve: busReserver, + Judge: busJudgement(os.Getenv("MESH_NODE")), + Asks: sdkAskBus{}, + Notify: busNotifier, + Emit: func(event string, body any) error { return stdio.Emit(event, body) }, + Settings: func() (Settings, error) { return readSettings(file) }, + Logf: logf, + } +} + +// serve runs the bundle: the verbs, the operator's answers heard, and the background work. +func serve(k *KB, status string) { + go hear(k) + go background(k) + if err := stdio.Serve("", append(Tools(k, callerOf), healthTool(status, k.now))); err != nil { + logf("%v", err) + os.Exit(1) + } +} + +// callerOf is who called, as the runtime proves it. The runtime does not hand a module its caller yet (hq issue +// 365), so it is Unproven; it is never read from the call's arguments, so no caller can name another. +func callerOf(map[string]any) string { return Unproven } + +// hear subscribes to the router's word on this module's asks, asked again until the runtime takes it. +func hear(k *KB) { + for wait := 2 * time.Second; ; wait = min(wait*2, time.Minute) { + time.Sleep(wait) + err := stdio.Subscribe(asks.Seat+".decided."+Module, func(e stdio.Envelope) error { + var w asks.Warrant + if json.Unmarshal(e.Body, &w) == nil { + k.HeardEnd(w) + } + return nil + }) + if err == nil { + logf("[mesh-knowledge] hears the operator's answers") + return + } + logf("[mesh-knowledge] does not hear the operator's answers yet (%v); asking again in %s", err, wait) + } +} + +// background reads the router's record of every waiting ask once a minute, withdraws reservations never +// proposed, and drafts and confirms clauses one step at a time. +func background(k *KB) { + tick := time.NewTicker(time.Minute) + defer tick.Stop() + time.Sleep(5 * time.Second) + for { + if said, err := k.Reconcile(); err != nil { + logf("[mesh-knowledge] reading the operator's answers: %v", err) + } else { + for _, s := range said { + logf("[mesh-knowledge] %s", s) + } + } + if n, err := k.Withdraw(); err != nil { + logf("[mesh-knowledge] withdrawing reservations: %v", err) + } else if n > 0 { + logf("[mesh-knowledge] withdrew %d reservation(s) never proposed", n) + } + for { + said, err := k.DraftStep() + if err != nil { + logf("[mesh-knowledge] %v", err) + break + } + if said == "" { + break + } + logf("[mesh-knowledge] %s", said) + } + <-tick.C + } +} + +// ---- the bus ------------------------------------------------------------------------------------------------- + +// busReserver asks the issue tracker for a number (issue-tracker.reserve, hq issue 424). +func busReserver(kind, title string) (int, error) { + raw, err := stdio.Ask("seat:issue-tracker.reserve", map[string]any{"kind": kind, "for": title}) + if err != nil { + return 0, err + } + var out struct { + Kind string `json:"kind"` + Number int `json:"number"` + } + if err := json.Unmarshal(raw, &out); err != nil || out.Number < 1 || out.Kind != kind { + return 0, fmt.Errorf("the issue tracker's answer is not a %s number: %.200s", kind, raw) + } + return out.Number, nil +} + +// busJudgement asks the agent module on this node for one judgement (ADR 0278). +func busJudgement(node string) Judgement { + return func(question string, schema map[string]any, model string) (json.RawMessage, string, error) { + key := "claude-code.claude_code_judge" + if node != "" { + key += "@" + node + } + raw, err := stdio.Ask(key, map[string]any{"question": question, "schema": schema, "model": model}) + if err != nil { + return nil, "", err + } + var out struct { + Answer json.RawMessage `json:"answer"` + Model string `json:"model"` + Node string `json:"node"` + } + if err := json.Unmarshal(raw, &out); err != nil || len(out.Answer) == 0 { + return nil, "", fmt.Errorf("the agent module's answer is not a judgement: %.200s", raw) + } + return out.Answer, fmt.Sprintf("the agent on %s (%s)", out.Node, out.Model), nil + } +} + +// busNotifier tells the operator's channel, as a warning: it is the one severity below urgent. +func busNotifier(key, summary, headline, explanation string) error { + _, err := stdio.Ask("seat:operator-channel.notify", map[string]any{"key": key, "subject": "the knowledge base", + "severity": "warning", "summary": summary, "headline": headline, "explanation": explanation}) + return err +} + +// ---- the store, opened when it is first needed ------------------------------------------------------------ + +// lazyStore opens the database on the first call, and again after a failure, so a database that arrives late is +// not fatal; and refuses to serve a schema behind this version. +type lazyStore struct { + open func(context.Context) (*PgStore, error) + mu sync.Mutex + pg *PgStore +} + +func (l *lazyStore) store(ctx context.Context) (*PgStore, error) { + l.mu.Lock() + defer l.mu.Unlock() + if l.pg == nil { + pg, err := l.open(ctx) + if err != nil { + return nil, fmt.Errorf("the knowledge base's database cannot be opened: %w", err) + } + l.pg = pg + } + if err := l.pg.Ready(ctx); err != nil { + return nil, err + } + return l.pg, nil +} + +// Ready says why the store cannot serve, or nil. +func (l *lazyStore) Ready(ctx context.Context) error { _, err := l.store(ctx); return err } + +func (l *lazyStore) Get(ctx context.Context, k Key) (*Entry, error) { + s, err := l.store(ctx) + if err != nil { + return nil, err + } + return s.Get(ctx, k) +} +func (l *lazyStore) All(ctx context.Context) ([]*Entry, error) { + s, err := l.store(ctx) + if err != nil { + return nil, err + } + return s.All(ctx) +} +func (l *lazyStore) Create(ctx context.Context, v Version) error { + s, err := l.store(ctx) + if err != nil { + return err + } + return s.Create(ctx, v) +} +func (l *lazyStore) Save(ctx context.Context, v Version, current, clearPending bool, revision int64) error { + s, err := l.store(ctx) + if err != nil { + return err + } + return s.Save(ctx, v, current, clearPending, revision) +} +func (l *lazyStore) Versions(ctx context.Context, k Key) ([]Version, error) { + s, err := l.store(ctx) + if err != nil { + return nil, err + } + return s.Versions(ctx, k) +} +func (l *lazyStore) Search(ctx context.Context, q string, limit int) ([]Hit, error) { + s, err := l.store(ctx) + if err != nil { + return nil, err + } + return s.Search(ctx, q, limit) +} +func (l *lazyStore) Inbound(ctx context.Context, k Key) ([]Inbound, error) { + s, err := l.store(ctx) + if err != nil { + return nil, err + } + return s.Inbound(ctx, k) +} +func (l *lazyStore) SetFindings(ctx context.Context, f []Finding) error { + s, err := l.store(ctx) + if err != nil { + return err + } + return s.SetFindings(ctx, f) +} +func (l *lazyStore) Findings(ctx context.Context) ([]Finding, error) { + s, err := l.store(ctx) + if err != nil { + return nil, err + } + return s.Findings(ctx) +} +func (l *lazyStore) Told(ctx context.Context, topic string) (bool, error) { + s, err := l.store(ctx) + if err != nil { + return false, err + } + return s.Told(ctx, topic) +} + +// ---- prepare, check, dry-run -------------------------------------------------------------------------------- + +func prepare() int { + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) + defer cancel() + s, err := PgStoreFromEnv(ctx) + if err != nil { + logf("[mesh-knowledge] preparing the database: %v", err) + return 1 + } + defer s.Close() + said, err := s.Prepare(ctx) + for _, line := range said { + logf("[mesh-knowledge] %s", line) + } + if err != nil { + logf("[mesh-knowledge] preparing the database failed: %v", err) + return 1 + } + return 0 +} + +// KeepEvery is how often keep judges the whole record set; WatchEvery how often watch looks. +const ( + KeepEvery = 5 * time.Minute + WatchEvery = time.Minute +) + +// keep judges the whole record set every few minutes and keeps the findings in the database: a change that +// reached the database by any way is judged within minutes, not only one an acceptance made. +func keep() int { + for { + ctx, cancel := context.WithTimeout(context.Background(), time.Minute) + s, err := PgStoreFromEnv(ctx) + if err == nil { + if err = s.Ready(ctx); err == nil { + k := &KB{Store: s, Logf: logf} + f := k.judgeSet(ctx) + logf("[mesh-knowledge] the whole record set judged: %d finding(s)", len(f)) + } + s.Close() + } + if err != nil { + logf("[mesh-knowledge] the whole record set cannot be judged now: %v", err) + } + cancel() + time.Sleep(KeepEvery) + } +} + +// watch reads, every minute, whether the database serves this version and what the whole-set findings say, +// and leaves its verdict in the status file. +func watch(status string) int { + if status == "" { + logf("[mesh-knowledge] watch was started without MESH_KNOWLEDGE_STATUS") + return 2 + } + for { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + var answer HealthAnswer + s, err := PgStoreFromEnv(ctx) + if err != nil { + answer = HealthAnswer{State: "unhealthy", Why: "the knowledge base's database cannot be opened: " + err.Error()} + } else { + answer = (&KB{Store: s}).Health(s) + s.Close() + } + cancel() + answer.At = time.Now().UTC() + if err := writeStatus(status, answer); err != nil { + logf("[mesh-knowledge] the status could not be written: %v", err) + } + time.Sleep(WatchEvery) + } +} + +func writeStatus(path string, a HealthAnswer) error { + raw, err := json.Marshal(a) + if err != nil { + return err + } + tmp := path + ".next" + if err := os.WriteFile(tmp, raw, 0o600); err != nil { + return err + } + return os.Rename(tmp, path) +} + +// StatusStale is how old the watch's verdict may be before the health tool says the watch stopped looking. +const StatusStale = 3 * WatchEvery + +// ReadStatus is the watch's last verdict, as the health tool answers it: unhealthy when there is none, or when it +// is older than StatusStale. +func ReadStatus(path string, now time.Time) HealthAnswer { + raw, err := os.ReadFile(path) + if err != nil { + return HealthAnswer{State: "unhealthy", Why: "the watch has left no verdict yet: " + err.Error()} + } + var a HealthAnswer + if err := json.Unmarshal(raw, &a); err != nil || (a.State != "healthy" && a.State != "unhealthy") { + return HealthAnswer{State: "unhealthy", Why: "the watch's verdict cannot be read"} + } + if age := now.Sub(a.At); age > StatusStale { + return HealthAnswer{State: "unhealthy", Why: fmt.Sprintf("the watch has not looked for %s (its last verdict: %s)", age.Round(time.Second), a.Why)} + } + a.Healthy = a.State == "healthy" + return a +} + +// dryRunAtTheTerminal is the import's dry run over a checkout on disk, against an empty knowledge base: what the +// import would create, before the module is rolled out. Only the verb writes. +func dryRunAtTheTerminal(args []string) int { + if len(args) != 1 { + logf("usage: mesh-knowledge dry-run ") + return 2 + } + k := &KB{Store: newMemStore(), Logf: logf} + out, err := k.Import(Unproven, ImportAsk{DryRun: true}, dirRecords{dir: args[0]}) + if err != nil { + logf("%v", err) + return 1 + } + enc := json.NewEncoder(os.Stdout) + enc.SetIndent("", " ") + _ = enc.Encode(out) + return 0 +} + +// ---- health --------------------------------------------------------------------------------------------------- + +// Healther is a store that can say why it cannot serve. +type Healther interface { + Ready(ctx context.Context) error +} + +// HealthAnswer is the health tool's answer (novox/hq ADR 0240, ADR 0283): healthy or unhealthy, and why; At is +// when the watch looked. +type HealthAnswer struct { + State string `json:"state"` + Healthy bool `json:"healthy"` + Why string `json:"why"` + At time.Time `json:"at,omitempty"` +} + +// Health is how the knowledge base is: unhealthy when its database cannot serve, or when a rule that judges the +// whole record set fails — the mesh raises a condition naming the rule and the records. +func (k *KB) Health(ready Healther) HealthAnswer { + ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second) + defer cancel() + if ready != nil { + if err := ready.Ready(ctx); err != nil { + return HealthAnswer{State: "unhealthy", Why: err.Error()} + } + } + findings, err := k.Store.Findings(ctx) + if err != nil { + return HealthAnswer{State: "unhealthy", Why: "the whole-set findings cannot be read: " + err.Error()} + } + if len(findings) > 0 { + var says []string + for _, f := range findings { + says = append(says, "the rule "+f.Rule+": "+f.Says) + } + sort.Strings(says) + if len(says) > 8 { + says = append(says[:8], fmt.Sprintf("and %d more", len(says)-8)) + } + return HealthAnswer{State: "unhealthy", Why: fmt.Sprintf("%d rule(s) that judge the whole record set fail: %s", len(findings), strings.Join(says, "; "))} + } + return HealthAnswer{State: "healthy", Healthy: true, Why: "the database serves, and every rule that judges the whole record set holds"} +} + +func healthTool(status string, now func() time.Time) stdio.Tool { + return stdio.Tool{Name: HealthTool, + Description: "How the knowledge base is, as its watch last saw it: healthy when its database serves this version and every " + + "rule that judges the whole record set holds; unhealthy otherwise, naming the rule and the records — a decision accepted " + + "that nothing cites, a supersession or a change said on one end only, a record extending a superseded one.", + Run: func(map[string]any) (any, error) { return ReadStatus(status, now()), nil }} +} + +// ---- the verbs -------------------------------------------------------------------------------------------------- + +// args reads one call's arguments strictly: an argument the verb does not take is refused, never ignored — and no +// argument can say who the caller is. +type args struct { + verb string + m map[string]any +} + +func readArgs(verb string, m map[string]any, takes ...string) (args, error) { + allowed := map[string]bool{} + for _, k := range takes { + allowed[k] = true + } + var unknown []string + for k := range m { + if !allowed[k] { + unknown = append(unknown, k) + } + } + if len(unknown) > 0 { + sort.Strings(unknown) + return args{}, fmt.Errorf("%s takes %s; it does not take %s", verb, strings.Join(takes, ", "), strings.Join(unknown, ", ")) + } + return args{verb: verb, m: m}, nil +} + +func (a args) str(k string) (string, error) { + v, ok := a.m[k] + if !ok || v == nil { + return "", nil + } + s, ok := v.(string) + if !ok { + return "", fmt.Errorf("%s is text", k) + } + return s, nil +} + +func (a args) strs(k string) ([]string, error) { + v, ok := a.m[k] + if !ok || v == nil { + return nil, nil + } + switch t := v.(type) { + case string: + return []string{t}, nil + case []any: + out := make([]string, 0, len(t)) + for _, e := range t { + s, ok := e.(string) + if !ok { + return nil, fmt.Errorf("every entry of %s is text", k) + } + out = append(out, s) + } + return out, nil + } + return nil, fmt.Errorf("%s is a list of text", k) +} + +func (a args) num(k string, required bool) (int, error) { + v, ok := a.m[k] + if !ok || v == nil { + if required { + return 0, fmt.Errorf("%s needs %s", a.verb, k) + } + return 0, nil + } + switch t := v.(type) { + case float64: + if t >= 0 && t <= 1e6 && t == math.Trunc(t) { + return int(t), nil + } + case string: + if kindNumber.MatchString(strings.TrimSpace(t)) { + return atoi(strings.TrimSpace(t)), nil + } + } + return 0, fmt.Errorf("%s is a whole number, such as 276", k) +} + +func (a args) flag(k string) (bool, error) { + v, ok := a.m[k] + if !ok || v == nil { + return false, nil + } + b, ok := v.(bool) + if !ok { + return false, fmt.Errorf("%s is true or false", k) + } + return b, nil +} + +// key reads kind (decision when absent) and number. +func (a args) key() (Key, error) { + kind, err := a.str("kind") + if err != nil { + return Key{}, err + } + if kind == "" { + kind = KindDecision + } + if !contains(Kinds, kind) { + return Key{}, fmt.Errorf("kind is decision or research, not %q", kind) + } + n, err := a.num("number", true) + if err != nil { + return Key{}, err + } + if n < 1 { + return Key{}, errors.New("number is a record's number, from 1") + } + return Key{kind, n}, nil +} + +func text(d string) map[string]any { return map[string]any{"type": "string", "description": d} } +func texts(d string) map[string]any { + return map[string]any{"type": "array", "items": map[string]any{"type": "string"}, "description": d} +} +func integer(d string) map[string]any { + return map[string]any{"type": "integer", "minimum": 1, "description": d} +} +func flag(d string) map[string]any { return map[string]any{"type": "boolean", "description": d} } +func kindArg() map[string]any { + return map[string]any{"type": "string", "enum": Kinds, "description": "decision (the default) or research"} +} +func boundArg() map[string]any { + return map[string]any{"type": "integer", "minimum": LeastBound, "maximum": MostBound, + "description": "the most bytes the answer may hold (default 4096)"} +} + +func schema(required []string, props map[string]any) map[string]any { + s := map[string]any{"type": "object", "properties": props, "additionalProperties": false} + if len(required) > 0 { + s["required"] = required + } + return s +} + +// Tools are the seat's verbs, each said in plain words: what it does and what it refuses. caller is who called, +// as the runtime proves it. +func Tools(k *KB, caller func(map[string]any) string) []stdio.Tool { + return []stdio.Tool{ + {Name: Seat + ".ask", + Description: "Ask what holds about something, in plain words — \"what holds about the merge window, and why\" — and get the " + + "decision records and research efforts that bear on it, ranked, with their matching clauses: each clause says whether " + + "it is in force, what changed or superseded it, or that it is only drafted and not the record's word; each record says " + + "what changed it since and how to read its reasoning. One call, within a bound it states (4 KiB unless asked for more), " + + "saying what it cut.", + Input: schema([]string{"question"}, map[string]any{"question": text("the question, in plain words"), "bound": boundArg()}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("ask", m, "question", "bound") + if err != nil { + return nil, err + } + q, err := a.str("question") + if err != nil { + return nil, err + } + b, err := a.num("bound", false) + if err != nil { + return nil, err + } + return k.Ask(q, b) + }}, + {Name: Seat + ".get", + Description: "One record by its number: its title, status, topic, date and deciders; its clauses, each with whether it holds; " + + "its links both ways; what changed it since; its versions; its reviews, and the operator's ask when it waits for one. " + + "Its reasoning (context, options, consequences, how it is checked; a research effort's documents) only with reasoning, " + + "or one section by name; an earlier version with version. Within a bound it states, 4 KiB unless asked for more, " + + "saying what it cut.", + Input: schema([]string{"number"}, map[string]any{"kind": kindArg(), "number": integer("the record's number, such as 276"), + "reasoning": flag("include its reasoning whole"), "section": text("only this section of its reasoning, by name"), + "version": integer("an earlier version"), "bound": boundArg()}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("get", m, "kind", "number", "reasoning", "section", "version", "bound") + if err != nil { + return nil, err + } + key, err := a.key() + if err != nil { + return nil, err + } + g := GetAsk{Kind: key.Kind, Number: key.Number} + if g.Reasoning, err = a.flag("reasoning"); err != nil { + return nil, err + } + if g.Section, err = a.str("section"); err != nil { + return nil, err + } + if g.Version, err = a.num("version", false); err != nil { + return nil, err + } + if g.Bound, err = a.num("bound", false); err != nil { + return nil, err + } + return k.Get(g) + }}, + {Name: Seat + ".holds", + Description: "The clauses in force now, for a topic of the reading order or for one record, each with the record it comes " + + "from; a clause changed in part says by what. Never a clause only drafted from prose: those are counted and not served. " + + "Within a bound it states, 4 KiB unless asked for more, saying what it cut.", + Input: schema(nil, map[string]any{"topic": text("a topic, such as the mesh"), "kind": kindArg(), + "number": integer("one record's number"), "bound": boundArg()}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("holds", m, "topic", "kind", "number", "bound") + if err != nil { + return nil, err + } + topic, err := a.str("topic") + if err != nil { + return nil, err + } + b, err := a.num("bound", false) + if err != nil { + return nil, err + } + var key *Key + if _, given := m["number"]; given { + kk, err := a.key() + if err != nil { + return nil, err + } + key = &kk + } + if key != nil && topic != "" { + return nil, errors.New("holds takes a topic or a record's number, not both") + } + return k.Holds(topic, key, b) + }}, + {Name: Seat + ".links", + Description: "A record's typed links, both ways: what it supersedes, changes (clause by clause), extends, became or cites, " + + "and every record that points at it, each with how it was found.", + Input: schema([]string{"number"}, map[string]any{"kind": kindArg(), "number": integer("the record's number")}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("links", m, "kind", "number") + if err != nil { + return nil, err + } + key, err := a.key() + if err != nil { + return nil, err + } + return k.Links(key) + }}, + {Name: Seat + ".history", + Description: "A record's versions, every one kept: who made it, when, why, and whether it was a progressive insight; with " + + "from and to, the difference between those two versions, line by line.", + Input: schema([]string{"number"}, map[string]any{"kind": kindArg(), "number": integer("the record's number"), + "from": integer("the earlier version to compare"), "to": integer("the later version to compare")}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("history", m, "kind", "number", "from", "to") + if err != nil { + return nil, err + } + key, err := a.key() + if err != nil { + return nil, err + } + from, err := a.num("from", false) + if err != nil { + return nil, err + } + to, err := a.num("to", false) + if err != nil { + return nil, err + } + return k.History(key, from, to) + }}, + {Name: Seat + ".reserve", + Description: "Reserve the next decision or research number for a record you are about to propose, from the issue " + + "tracker's counter: never one another caller got. The number is spent whether or not its record is ever accepted; " + + "one never proposed is withdrawn after a week. Refused: a kind other than decision or research, an empty title.", + Input: schema([]string{"kind", "for"}, map[string]any{"kind": map[string]any{"type": "string", "enum": Kinds}, + "for": text("the title of the record the number is for")}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("reserve", m, "kind", "for") + if err != nil { + return nil, err + } + kind, err := a.str("kind") + if err != nil { + return nil, err + } + title, err := a.str("for") + if err != nil { + return nil, err + } + return k.ReserveNumber(caller(m), kind, title) + }}, + {Name: Seat + ".propose", + Description: "Propose a record whole under a reserved number: its title, topic, date and deciders; for a decision its " + + "clauses, each opening with a bold lead (\"**What is decided.** …\"), and its reasoning in sections (Context, " + + "Considered Options, Consequences, How it is checked, References); for a research effort its status and documents; its " + + "links (supersedes, changes \"0276 §4\", extends, became, cites), and whether it needs the operator. Refused, naming " + + "every reason at once and writing nothing, when it breaks one of the 29 rules that judge one record or its prose — a " + + "link to nothing, a clause without a bold lead, a superseded record cited alone, an unknown topic, a retired word. A " + + "proposal is revised by proposing it again; an accepted record changes only by a progressive insight (insight: what " + + "stood before). Nothing proposed is in force.", + Input: schema([]string{"number", "title"}, map[string]any{ + "kind": kindArg(), "number": integer("the number reserve gave"), "title": text("one line"), + "topic": text("for a decision: a topic of the reading order, such as the mesh"), + "date": text("the day, YYYY-MM-DD (today when absent)"), + "deciders": texts("who decided"), + "clauses": texts("a decision's clauses in order, each \"**Lead.** the statement\""), + "sections": map[string]any{"type": "array", "description": "the reasoning, in order: each a name and its markdown", + "items": map[string]any{"type": "object", "properties": map[string]any{"name": text("such as Context"), "text": text("markdown")}, + "required": []string{"name", "text"}}}, + "links": map[string]any{"type": "array", "description": "its links: kind, to (\"0276\", \"0276 §4\", \"research 045\", \"issue 365\", a design's path), from (the clause it goes out from)", + "items": map[string]any{"type": "object", "properties": map[string]any{"kind": map[string]any{"type": "string", "enum": LinkKinds}, + "to": text("the target"), "from": integer("the clause of this record it goes out from")}, "required": []string{"kind", "to"}}}, + "homes": texts("hq documents that cite it, such as a design's path"), + "needs-operator": flag("it holds only once the operator approves it"), + "status": map[string]any{"type": "string", "enum": ResearchStatuses, "description": "a research effort's status"}, + "insight": text("for an accepted record: a progressive insight, saying what stood before"), + "why": text("one line: why this version"), + }), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("propose", m, "kind", "number", "title", "topic", "date", "deciders", "clauses", "sections", + "links", "homes", "needs-operator", "status", "insight", "why") + if err != nil { + return nil, err + } + key, err := a.key() + if err != nil { + return nil, err + } + p := ProposeAsk{Kind: key.Kind, Number: key.Number} + for _, f := range []struct { + k string + p *string + }{{"title", &p.Title}, {"topic", &p.Topic}, {"date", &p.Date}, {"status", &p.Status}, {"insight", &p.Insight}, {"why", &p.Why}} { + if *f.p, err = a.str(f.k); err != nil { + return nil, err + } + } + for _, f := range []struct { + k string + p *[]string + }{{"deciders", &p.Deciders}, {"clauses", &p.Clauses}, {"homes", &p.Homes}} { + if *f.p, err = a.strs(f.k); err != nil { + return nil, err + } + } + if p.NeedsOperator, err = a.flag("needs-operator"); err != nil { + return nil, err + } + if err := decode(m["sections"], &p.Sections, "sections is a list of {name, text}"); err != nil { + return nil, err + } + if err := decode(m["links"], &p.Links, "links is a list of {kind, to, from}"); err != nil { + return nil, err + } + return k.Propose(caller(m), p) + }}, + {Name: Seat + ".review", + Description: "Review a proposed record you did not write: approve, or ask for changes with your findings (name the section " + + "and clause). Approved, it is accepted and its clauses are in force, and every clause it changes or supersedes moves; a " + + "record that needs the operator is asked of the operator first, on a channel that proves who answered, and accepted only " + + "on their Approve. Refused: a review by the record's author, a record not proposed, changes without findings.", + Input: schema([]string{"number", "verdict"}, map[string]any{"kind": kindArg(), "number": integer("the record's number"), + "verdict": map[string]any{"type": "string", "enum": []string{VerdictApprove, VerdictChanges}}, + "findings": text("what you found, by section and clause")}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("review", m, "kind", "number", "verdict", "findings") + if err != nil { + return nil, err + } + key, err := a.key() + if err != nil { + return nil, err + } + r := ReviewAsk{Kind: key.Kind, Number: key.Number} + if r.Verdict, err = a.str("verdict"); err != nil { + return nil, err + } + if r.Findings, err = a.str("findings"); err != nil { + return nil, err + } + return k.Review(caller(m), r) + }}, + {Name: Seat + ".import", + Description: "Import hq's decision records and research efforts, read through the records module at the commit its checkout " + + "stands at, each whole at its own number as its first version naming that commit. It only creates a record that is not " + + "held, never overwrites one, never moves a number counter, and run again changes nothing and says so. A decision written " + + "as prose waits for its clauses to be drafted and confirmed. With dry-run it writes nothing and says what it would do; " + + "with commit it refuses a checkout standing elsewhere.", + Input: schema(nil, map[string]any{"dry-run": flag("read everything, write nothing, say what would be done"), + "commit": text("the commit of hq the record must stand at (a prefix is enough)")}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("import", m, "dry-run", "commit") + if err != nil { + return nil, err + } + var ask ImportAsk + if ask.DryRun, err = a.flag("dry-run"); err != nil { + return nil, err + } + if ask.Commit, err = a.str("commit"); err != nil { + return nil, err + } + return k.Import(caller(m), ask, k.Records) + }}, + {Name: Seat + ".return", + Description: "Send the clauses drafted from a prose decision back to be drafted again, with your reason, which the next " + + "drafting reads. Until they are drafted and confirmed again the record serves none. Refused: a record whose clauses its " + + "author wrote, an empty reason.", + Input: schema([]string{"number", "reason"}, map[string]any{"kind": kindArg(), "number": integer("the record's number"), + "reason": text("what is wrong with the drafted clauses")}), + Run: func(m map[string]any) (any, error) { + a, err := readArgs("return", m, "kind", "number", "reason") + if err != nil { + return nil, err + } + key, err := a.key() + if err != nil { + return nil, err + } + reason, err := a.str("reason") + if err != nil { + return nil, err + } + return k.Return(caller(m), key, reason) + }}, + } +} + +// decode reads a structured argument strictly. +func decode(v any, into any, says string) error { + if v == nil { + return nil + } + raw, err := json.Marshal(v) + if err != nil { + return errors.New(says) + } + dec := json.NewDecoder(strings.NewReader(string(raw))) + dec.DisallowUnknownFields() + if err := dec.Decode(into); err != nil { + return fmt.Errorf("%s (%v)", says, err) + } + return nil +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/manifest_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/manifest_test.go new file mode 100644 index 00000000..bee4ab69 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/manifest_test.go @@ -0,0 +1,198 @@ +package main + +import ( + "encoding/json" + "os" + "path/filepath" + "reflect" + "strings" + "testing" + "time" +) + +// The manifest says what the code does (novox/hq to-be 55 §1): the seat it declares and holds once for the mesh +// with the verbs it serves, the events it says, what it uses and invokes, the database it requires, its two +// long-running processes with their health, and its settings. + +type manifest struct { + Module string `json:"module"` + Requires []string `json:"requires"` + Contributes map[string]map[string]any `json:"contributes"` + Seats []seat `json:"seats"` + Claims []seat `json:"claims"` + Tools []string `json:"tools"` + Emits []string `json:"emits"` + Consumes []string `json:"consumes"` + Uses []string `json:"uses"` + Invokes []string `json:"invokes"` + State []json.RawMessage `json:"state"` + Resources []map[string]any `json:"resources"` + Build struct { + Artifacts []struct { + From string `json:"from"` + Binary string `json:"binary"` + Loads []string `json:"loads"` + Env map[string]string `json:"env"` + } `json:"artifacts"` + } `json:"build"` +} + +type seat struct { + Name string `json:"name"` + Scope string `json:"scope"` + Serves []string `json:"serves"` +} + +func readManifest(t *testing.T) (manifest, string) { + t.Helper() + raw, err := os.ReadFile(filepath.Join("..", "..", "module.json")) + if err != nil { + t.Fatal(err) + } + var m manifest + if err := json.Unmarshal(raw, &m); err != nil { + t.Fatal(err) + } + return m, string(raw) +} + +func TestItDeclaresAndHoldsTheKnowledgeBaseSeatOnceForTheMesh(t *testing.T) { + m, raw := readManifest(t) + want := []seat{{Name: Seat, Scope: "mesh", Serves: Verbs}} + if m.Module != Module || !reflect.DeepEqual(m.Seats, want) || !reflect.DeepEqual(m.Claims, want) { + t.Fatalf("module %q, seats %+v, claims %+v", m.Module, m.Seats, m.Claims) + } + if !reflect.DeepEqual(Verbs, []string{"ask", "get", "holds", "links", "history", "reserve", "propose", "review", "import", "return"}) { + t.Fatalf("the verbs are not ADR 0290 rule 6's: %v", Verbs) + } + if !reflect.DeepEqual(m.Emits, Events) { + t.Fatalf("emits %v, the code says %v", m.Emits, Events) + } + // Its records are in a database in the store (ADR 0290 rule 7), not in buckets. + if !reflect.DeepEqual(m.Requires, []string{"postgres-database"}) || m.Contributes["postgres-database"]["name"] != "knowledge" || len(m.State) != 0 { + t.Fatalf("requires %v, contributes %v, state %v", m.Requires, m.Contributes, m.State) + } + // It asks the operator on the router, hears the router's word, and calls exactly what it calls. + if !reflect.DeepEqual(m.Uses, []string{"operator-channel"}) || len(m.Consumes) != 0 { + t.Fatalf("uses %v, consumes %v", m.Uses, m.Consumes) + } + if !reflect.DeepEqual(m.Invokes, []string{"seat:issue-tracker.reserve", "claude-code.claude_code_judge", "records.records_status", + "records.records_list", "records.records_read", "seat:operator-channel.notify"}) { + t.Fatalf("invokes %v", m.Invokes) + } + src := "" + for _, f := range []string{"main.go", "hq.go"} { + src += readFile(t, f) + } + for _, inv := range m.Invokes { + if !strings.Contains(src, `"`+inv) { + t.Errorf("the manifest invokes %s, which the code never calls", inv) + } + } + if len(m.Build.Artifacts) != 1 || m.Build.Artifacts[0].From != "cmd/mesh-knowledge" || m.Build.Artifacts[0].Binary != Module || + m.Build.Artifacts[0].Env["DATABASE_URL_FILE"] == "" || m.Build.Artifacts[0].Env["MESH_KNOWLEDGE_SETTINGS"] == "" || + m.Build.Artifacts[0].Env["MESH_KNOWLEDGE_STATUS"] == "" || !reflect.DeepEqual(m.Build.Artifacts[0].Loads, []string{Module}) { + t.Fatalf("build %+v", m.Build) + } + for _, never := range []string{"/home/", "jochen", "shanks", "novox.be"} { + if strings.Contains(strings.ToLower(raw), never) { + t.Errorf("module.json names %q", never) + } + } +} + +// Its processes: the preparation step once, keep judged by its unit, watch by the health tool, which the module +// serves; the status file watch writes is the one the bundle's health tool reads. +func TestItsProcessesAreThePreparationTheActAndTheJudge(t *testing.T) { + m, _ := readManifest(t) + byID := map[string]map[string]any{} + for _, r := range m.Resources { + byID[r["id"].(string)] = r + } + prep, keep, watch := byID["prepare"], byID["keep"], byID["watch"] + if prep == nil || prep["run-once"] != true || prep["run"].([]any)[1] != "prepare" { + t.Fatalf("prepare %v", prep) + } + if keep == nil || keep["run"].([]any)[1] != "keep" || keep["health"].(map[string]any)["kind"] != "unit" { + t.Fatalf("keep %v", keep) + } + h, _ := watch["health"].(map[string]any) + if watch == nil || watch["run"].([]any)[1] != "watch" || h["kind"] != "tool" || h["tool"] != HealthTool || + !reflect.DeepEqual(m.Tools, []string{HealthTool}) { + t.Fatalf("watch %v, tools %v", watch, m.Tools) + } + if watch["env"].(map[string]any)["MESH_KNOWLEDGE_STATUS"] != m.Build.Artifacts[0].Env["MESH_KNOWLEDGE_STATUS"] { + t.Fatal("watch writes another status file than the health tool reads") + } + settings := byID["settings"] + var s Settings + if err := json.Unmarshal([]byte(settings["content"].(string)), &s); err != nil || s.JudgeModel == "" || s.ReservedFor != "168h" { + t.Fatalf("the settings the manifest writes are not the module's: %v %+v", err, s) + } + if d, err := time.ParseDuration(s.ReservedFor); err != nil || d != DefaultReservedFor { + t.Fatalf("reserved-for %q is not the default the code holds", s.ReservedFor) + } +} + +// The tools are the seat's verbs and the health tool, each said in plain words with what it refuses. +func TestTheToolsAreTheSeatsVerbsAndSayWhatTheyDo(t *testing.T) { + m, _ := readManifest(t) + var verbs []string + for _, tool := range Tools(&KB{}, callerOf) { + s, verb, ok := strings.Cut(tool.Name, ".") + if !ok || s != Seat { + t.Errorf("%s is not a verb of %s", tool.Name, Seat) + } + verbs = append(verbs, verb) + if len(tool.Description) < 120 { + t.Errorf("%s says too little of what it does", tool.Name) + } + for _, internal := range []string{"ADR", "to-be", "bucket", "postgres", "KV"} { + if strings.Contains(tool.Description, internal) { + t.Errorf("%s's description uses the internal name %q", tool.Name, internal) + } + } + } + if !reflect.DeepEqual(verbs, m.Claims[0].Serves) { + t.Fatalf("verbs %v, claim %v", verbs, m.Claims[0].Serves) + } +} + +// No argument can name the caller: who acted is the runtime's word, unproven until it gives one. +func TestNoArgumentNamesTheCaller(t *testing.T) { + for _, tool := range Tools(&KB{}, callerOf) { + props := tool.Input["properties"].(map[string]any) + for _, who := range []string{"by", "caller", "author", "reviewer", "who"} { + if _, ok := props[who]; ok { + t.Errorf("%s takes %s", tool.Name, who) + } + } + if tool.Input["additionalProperties"] != false { + t.Errorf("%s takes arguments it does not name", tool.Name) + } + } + if callerOf(map[string]any{"by": "someone@else"}) != Unproven { + t.Fatal("the caller was read from an argument") + } +} + +func TestTheHealthToolReadsTheWatchsVerdictAndSaysWhenItIsStale(t *testing.T) { + path := filepath.Join(t.TempDir(), "health.json") + now := time.Date(2026, 10, 11, 9, 0, 0, 0, time.UTC) + if a := ReadStatus(path, now); a.Healthy { + t.Fatal("healthy with no verdict") + } + if err := writeStatus(path, HealthAnswer{State: "unhealthy", Why: "the rule cited: ADR 0300 is accepted and nothing cites it", At: now}); err != nil { + t.Fatal(err) + } + if a := ReadStatus(path, now.Add(time.Minute)); a.Healthy || !strings.Contains(a.Why, "ADR 0300") { + t.Fatalf("%+v", a) + } + _ = writeStatus(path, HealthAnswer{State: "healthy", Why: "fine", At: now}) + if a := ReadStatus(path, now.Add(time.Minute)); !a.Healthy { + t.Fatalf("%+v", a) + } + if a := ReadStatus(path, now.Add(StatusStale+time.Second)); a.Healthy || !strings.Contains(a.Why, "has not looked") { + t.Fatalf("a stale verdict: %+v", a) + } +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/migrations/0001-the-knowledge-base-holds-records-their-versions-clauses-and-links.sql b/modules/mesh-knowledge/cmd/mesh-knowledge/migrations/0001-the-knowledge-base-holds-records-their-versions-clauses-and-links.sql new file mode 100644 index 00000000..44b4fba4 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/migrations/0001-the-knowledge-base-holds-records-their-versions-clauses-and-links.sql @@ -0,0 +1,73 @@ +-- The knowledge base (novox/hq ADR 0290, to-be 55): every decision record and research effort, whole, with every +-- version kept; the clauses and links of the version each record serves, for ranked search and links read from +-- both ends; the findings of the rules that judge the whole record set; and the topics the operator was told of. + +create table record ( + kind text not null check (kind in ('decision', 'research')), + number integer not null check (number > 0), + status text not null, + topic text not null default '', + current_version integer not null, + pending_version integer, + revision bigint not null default 1, + search tsvector not null default ''::tsvector, + primary key (kind, number) +); + +create index record_search on record using gin (search); +create index record_topic on record (topic); + +create table version ( + kind text not null, + number integer not null, + n integer not null check (n > 0), + by text not null, + at timestamptz not null, + why text not null, + insight boolean not null default false, + body jsonb not null, + primary key (kind, number, n), + foreign key (kind, number) references record (kind, number) +); + +create table clause ( + kind text not null, + number integer not null, + n integer not null check (n > 0), + text text not null, + status text not null, + source text not null, + search tsvector not null, + primary key (kind, number, n), + foreign key (kind, number) references record (kind, number) +); + +create index clause_search on clause using gin (search); + +create table link ( + from_kind text not null, + from_number integer not null, + from_clause integer not null default 0, + kind text not null, + to_kind text not null, + to_number integer not null default 0, + to_clause integer not null default 0, + to_path text not null default '', + body jsonb not null, + foreign key (from_kind, from_number) references record (kind, number) +); + +create index link_from on link (from_kind, from_number); +create index link_to on link (to_kind, to_number); + +create table finding ( + rule text not null, + records text[] not null, + says text not null, + at timestamptz not null +); + +create table told ( + topic text primary key, + at timestamptz not null default now() +); diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/operator.go b/modules/mesh-knowledge/cmd/mesh-knowledge/operator.go new file mode 100644 index 00000000..43d7fbfd --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/operator.go @@ -0,0 +1,273 @@ +package main + +// A record that needs the operator (novox/hq ADR 0290 rule 4, to-be 55 §5): once an independent review approves +// it, the operator is asked on the router with Approve and Decline, both at the level approve, so only a channel +// that proves who answered can carry either (ADR 0259, as claude-code's proposals ask it, ADR 0274). Each option +// binds the act it authorises: this record, this version's digest. The knowledge base accepts the record only on +// the router's warrant for Approve, read back from the router's own record of the ask (which only the router +// writes) and held to the ask composed again from the record: the same digest, an option it offered, at its +// level, in time, and the act the option bound. A record changed after it was asked finds the digests differ, and +// nothing is accepted. The warrant is kept with the record. + +import ( + "context" + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "regexp" + "strconv" + "strings" + "time" + + stdio "git.novox.be/novox/mesh-sdk/go" + "git.novox.be/novox/mesh-sdk/go/asks" +) + +// Module is this module's name: the one the bus grants its asks under. +const Module = "mesh-knowledge" + +// The two answers, both at the level approve. +const ( + OptionApprove = "approve" + OptionDecline = "decline" +) + +// AskLasts is how long the operator has to answer: a day less a margin, under the router's bound for an approval. +const AskLasts = asks.ApproveLasts - 10*time.Minute + +// The states of an operator's ask, as the record keeps them. +const ( + AskWaiting = "waiting for the operator's answer" + AskApproved = "approved by the operator" + AskDeclined = "declined by the operator" +) + +// AskBus is the operator channel as this module reaches it: publish an ask under its own name, and read the +// router's record of one of its asks. +type AskBus interface { + Publish(subject string, body any, id string) error + Record(id string) (*stdio.StateEntry, error) +} + +type sdkAskBus struct{} + +func (sdkAskBus) Publish(subject string, body any, id string) error { + return stdio.SeatPublish(subject, body, id) +} +func (sdkAskBus) Record(id string) (*stdio.StateEntry, error) { return stdio.SeatRecord("", id) } + +// act is what an answer binds: this record's version, by its digest, and the answer. +func act(r *Record, a *OperatorAsk, option string) asks.Act { + return asks.Act{"verb": "knowledge-base.accept", "option": option, "ask": a.ID, "kind": r.Kind, + "number": strconv.Itoa(r.Number), "version": strconv.Itoa(a.Version), "digest": r.Digest()} +} + +var ( + unshownPath = regexp.MustCompile(`[/\\@~$]|\d+\.\d+\.\d+|[A-Za-z0-9+/=_]{24,}|(?i)\b[a-z0-9-]+\.[a-z]{2,12}\b`) +) + +// shown is a line the operator's phone may be shown: no path, address, host-like name or long unbroken word — +// narrower than the router's own rule, so the ask is not refused for its words. +func shown(line string) bool { return !unshownPath.MatchString(line) } + +// fingerprint is a digest as the operator is shown it: its first 24 hexadecimal digits in groups of four. +func fingerprint(digest string) string { + h := strings.TrimPrefix(digest, "sha256:") + if len(h) < 24 { + return h + } + var g []string + for i := 0; i < 24; i += 4 { + g = append(g, h[i:i+4]) + } + return strings.Join(g, " ") +} + +// composeAsk is the ask for a record, composed from the record and its ask alone: asked once, and composed +// again to hold the warrant to it. +func composeAsk(r *Record, a *OperatorAsk) asks.Ask { + name := r.Key().String() + headline := "Accept " + name + "?" + var b strings.Builder + fmt.Fprintf(&b, "%s was proposed by %s and approved by an independent review. Its author says it needs your approval before it holds.", name, r.Author) + if shown(r.Title) { + fmt.Fprintf(&b, "\n\nIts title: %s.", strings.TrimSuffix(r.Title, ".")) + } + if len(r.Clauses) > 0 { + fmt.Fprintf(&b, "\n\nIts %d clause(s):", len(r.Clauses)) + size, hidden := 0, 0 + for _, c := range r.Clauses { + lead := c.Lead() + if !shown(lead) || size+len(lead) > 1200 { + hidden++ + continue + } + size += len(lead) + fmt.Fprintf(&b, "\n%d. %s", c.N, lead) + } + if hidden > 0 { + fmt.Fprintf(&b, "\n(%d lead(s) not shown here)", hidden) + } + } + fmt.Fprintf(&b, "\n\nRead it whole with the knowledge base's get, number %d; its fingerprint is %s.", r.Number, fingerprint(r.Digest())) + out := asks.Ask{ID: a.ID, Headline: headline, Explanation: b.String(), Who: asks.Operator, + Expires: a.At.Add(AskLasts), OnExpiry: "the record stays proposed; nothing of it is in force", + About: "knowledge." + r.Kind + "." + strconv.Itoa(r.Number)} + for _, o := range []struct{ id, label, does string }{ + {OptionApprove, "Approve", "the record is accepted and its clauses are in force"}, + {OptionDecline, "Decline", "the record stays proposed; nothing of it is in force"}, + } { + binds, _ := asks.ActDigest(act(r, a, o.id)) + out.Options = append(out.Options, asks.Option{ID: o.id, Label: o.label, Does: o.does, Level: asks.Approve, Binds: binds}) + } + return out +} + +func newAskID(r *Record) string { + var b [4]byte + _, _ = rand.Read(b[:]) + return fmt.Sprintf("kb-%s-%d-%s", r.Kind, r.Number, hex.EncodeToString(b[:])) +} + +// askOperator asks the operator to approve a reviewed record, and keeps the ask with it. +func (k *KB) askOperator(ctx context.Context, held *Entry, w *Record, by string) (*Reviewed, error) { + if k.Asks == nil { + return nil, fmt.Errorf("%s needs the operator, and the operator cannot be asked from here; it stays proposed", w.Key()) + } + version := held.CurrentVersion + if held.Pending != nil { + version = held.PendingVersion + } + oa := &OperatorAsk{ID: newAskID(w), At: k.now(), Version: version, Said: AskWaiting} + ask := composeAsk(w, oa) + if err := ask.Check(k.now()); err != nil { + return nil, fmt.Errorf("the ask for %s could not be made (%v); it stays proposed", w.Key(), err) + } + w.Ask = oa + if err := k.Store.Save(ctx, Version{By: by, At: k.now(), Why: "reviewed: approved; the operator is asked", Record: w, Insight: held.Pending != nil}, + held.Pending == nil, false, held.Revision); err != nil { + return nil, fmt.Errorf("the review could not be kept (%v); the operator was not asked", err) + } + k.emit(EventReviewed, w, by, "approved; the operator is asked", held.Versions+1) + if err := k.Asks.Publish(asks.AskSubject(Module), ask, ask.ID); err != nil { + k.logf("[mesh-knowledge] the ask for %s could not be published: %v", w.Key(), err) + return nil, fmt.Errorf("the review is kept, and the operator could not be asked (%v): %s stays proposed; review it again to ask again", err, w.Key()) + } + return &Reviewed{Record: w.Key().String(), Verdict: VerdictApprove, Status: StatusProposed, + Says: fmt.Sprintf("%s needs the operator: asked on a channel that proves who answers (%q). It is accepted only on the operator's Approve; until then nothing of it is in force.", w.Key(), ask.Headline)}, nil +} + +// routerRecord is the router's record of one ask, as far as this module reads it. +type routerRecord struct { + State string `json:"state"` + Ask *asks.Ask `json:"ask"` + Warrant *asks.Warrant `json:"warrant"` +} + +// Reconcile decides every record waiting for the operator whose ask the router has closed: accepted on a warrant +// for Approve that holds, left proposed on Decline, an expiry or a warrant that does not hold. It answers a line +// for each decision. +func (k *KB) Reconcile() ([]string, error) { + if k.Asks == nil { + return nil, nil + } + ctx := context.Background() + k.mu.Lock() + defer k.mu.Unlock() + all, err := k.Store.All(ctx) + if err != nil { + return nil, err + } + var said []string + for _, e := range all { + w := e.Working() + if w.Status != StatusProposed || w.Ask == nil || w.Ask.Said != AskWaiting { + continue + } + entry, err := k.Asks.Record(w.Ask.ID) + if err != nil || entry == nil { + if err == nil && k.now().After(w.Ask.At.Add(AskLasts+time.Hour)) { + said = append(said, k.endAsk(ctx, e, w, "ended: the router keeps no record of its ask (refused before it was taken, or forgotten)")) + } + continue + } + var rec routerRecord + if json.Unmarshal(entry.Value, &rec) != nil || rec.State == "open" || rec.Warrant == nil { + continue + } + said = append(said, k.decide(ctx, e, w, *rec.Warrant)) + } + return said, nil +} + +// endAsk records an ask ended without the operator's choice: the record stays proposed. +func (k *KB) endAsk(ctx context.Context, e *Entry, w *Record, why string) string { + w = w.Clone() + w.Ask.Said = why + if err := k.Store.Save(ctx, Version{By: "the knowledge base", At: k.now(), Why: "the operator's ask " + why, Record: w, Insight: e.Pending != nil}, + e.Pending == nil, false, e.Revision); err != nil { + return fmt.Sprintf("%s: the end of its ask could not be kept (%v)", w.Key(), err) + } + k.emit(EventReviewed, w, "the knowledge base", "the operator's ask "+why, e.Versions+1) + return fmt.Sprintf("%s: the operator's ask %s; it stays proposed", w.Key(), why) +} + +// decide holds one closed ask's warrant to the record, and accepts the record when it is the operator's Approve. +func (k *KB) decide(ctx context.Context, e *Entry, w *Record, warrant asks.Warrant) string { + if warrant.Outcome != asks.OutcomeChosen { + why := "ended " + string(warrant.Outcome) + if warrant.Words != "" { + why += " (" + warrant.Words + ")" + } + return k.endAsk(ctx, e, w, why) + } + ask := composeAsk(w, w.Ask) + option, err := warrant.For(Module, ask) + if err == nil { + err = option.Performs(act(w, w.Ask, option.ID)) + } + if err != nil { + k.logf("[mesh-knowledge] REFUSED the answer to the ask for %s: %v", w.Key(), err) + return k.endAsk(ctx, e, w, "was answered, and the answer does not hold here: "+err.Error()) + } + switch option.ID { + case OptionApprove: + w = w.Clone() + w.Ask.Said, w.Ask.Warrant = AskApproved, warrant.Says() + r, err := k.accept(ctx, e, w, "the operator", "accepted on the operator's Approve after an independent review", "warrant: "+warrant.Says()) + if err != nil { + return err.Error() + } + return fmt.Sprintf("%s: %s on the operator's warrant (%s)", r.Key(), r.Status, warrant.Says()) + case OptionDecline: + w = w.Clone() + w.Ask.Warrant = warrant.Says() + return k.endAsk(ctx, e, w, "declined by the operator") + } + return k.endAsk(ctx, e, w, "was answered with "+option.ID+", which it does not offer") +} + +// HeardEnd takes the router's word that one of this module's asks ended without a choice: nothing is accepted on +// such a word, so it needs no proof beyond its subject. A choice is only ever taken from the router's record. +func (k *KB) HeardEnd(w asks.Warrant) { + if w.Asker != Module || w.Outcome == asks.OutcomeChosen { + if _, err := k.Reconcile(); err != nil { + k.logf("[mesh-knowledge] reading the router's answers: %v", err) + } + return + } + ctx := context.Background() + k.mu.Lock() + defer k.mu.Unlock() + all, err := k.Store.All(ctx) + if err != nil { + return + } + for _, e := range all { + r := e.Working() + if r.Ask != nil && r.Ask.ID == w.Ask && r.Ask.Said == AskWaiting { + k.logf("[mesh-knowledge] %s", k.decide(ctx, e, r, w)) + } + } +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/parse.go b/modules/mesh-knowledge/cmd/mesh-knowledge/parse.go new file mode 100644 index 00000000..dc6bfe26 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/parse.go @@ -0,0 +1,365 @@ +package main + +// Reading hq's records as they are written (novox/hq ADR 0290 rule 8, to-be 55 §8): a decision record's +// frontmatter, heading and sections, its clauses where its Decision section writes numbered statements with a +// bold lead, and its links; a research effort's overview and documents. Read the way hq's own checks read them +// (00-META/checks/records.py and cycle.py), so the import takes what those checks judged. + +import ( + "fmt" + "path" + "regexp" + "sort" + "strconv" + "strings" +) + +// frontmatter is the block between the first two --- lines: each key with its scalar or its list. +func frontmatter(text string) (map[string][]string, string, bool) { + if !strings.HasPrefix(text, "---\n") { + return nil, text, false + } + end := strings.Index(text[4:], "\n---") + if end < 0 { + return nil, text, false + } + block := text[4 : 4+end] + rest := text[4+end+4:] + rest = strings.TrimPrefix(rest, "\n") + out := map[string][]string{} + key := "" + for _, line := range strings.Split(block, "\n") { + if m := listItem.FindStringSubmatch(line); m != nil && key != "" { + out[key] = append(out[key], strings.TrimSpace(m[1])) + continue + } + m := pair.FindStringSubmatch(line) + if m == nil { + continue + } + key = m[1] + v := strings.TrimSpace(m[2]) + switch { + case strings.HasPrefix(v, "[") && strings.HasSuffix(v, "]"): + out[key] = nil + for _, x := range strings.Split(v[1:len(v)-1], ",") { + if x = strings.TrimSpace(x); x != "" { + out[key] = append(out[key], x) + } + } + case v == "": + out[key] = nil + default: + out[key] = []string{v} + } + } + return out, rest, true +} + +var ( + listItem = regexp.MustCompile(`^\s+-\s+(.*)$`) + pair = regexp.MustCompile(`^([A-Za-z_-]+):\s*(.*)$`) + heading = regexp.MustCompile(`(?m)^# (\d+)\.\s*(.+)$`) + h1 = regexp.MustCompile(`(?m)^# (.+)$`) + // adrFile is a decision record's file name; it appears in a frontmatter value or a link target. + adrFile = regexp.MustCompile(`(?:^|/)(\d{4})-[0-9a-z-]+\.md`) + // researchFolder is a research effort's folder in a path. + researchFolder = regexp.MustCompile(`01-RESEARCH/(\d{3})-[0-9a-z-]+`) + issueFolder = regexp.MustCompile(`04-ISSUES/(\d{3,5})-[0-9a-z-]+`) + designPath = regexp.MustCompile(`03-DESIGN/0[01]-[a-z-]+/[0-9a-z-]+\.md`) + mdLink = regexp.MustCompile(`\]\(([^)\s]+)\)`) + // clauseStart is a numbered statement with a bold lead, at the start of a line: records.py's CLAUSE. + clauseStart = regexp.MustCompile(`(?m)^(\d+)\. (\*\*.*)$`) +) + +func first(f map[string][]string, k string) string { + if v := f[k]; len(v) > 0 { + return v[0] + } + return "" +} + +// splitSections cuts a body at its `## ` headings: the text before the first (after the `# ` heading) is the +// section "preamble". +func splitSections(body string) []Section { + var out []Section + name := "preamble" + var cur []string + flush := func() { + text := strings.Trim(strings.Join(cur, "\n"), "\n") + if text != "" || name != "preamble" { + out = append(out, Section{Name: name, Text: text}) + } + } + inFence := false + for _, line := range strings.Split(body, "\n") { + if strings.HasPrefix(strings.TrimSpace(line), "```") { + inFence = !inFence + } + if !inFence && strings.HasPrefix(line, "## ") { + flush() + name, cur = strings.TrimSpace(line[3:]), nil + continue + } + cur = append(cur, line) + } + flush() + return out +} + +// WrittenClauses are the numbered statements with a bold lead of a Decision section, each with the lines that +// continue it, in order. None when the section is prose. +func WrittenClauses(section string) []Clause { + lines := strings.Split(section, "\n") + var out []Clause + var cur []string + n := 0 + flush := func() { + if n > 0 { + out = append(out, Clause{N: n, Text: strings.TrimSpace(strings.Join(cur, "\n"))}) + } + } + for _, line := range lines { + if m := clauseStart.FindStringSubmatch(line); m != nil { + flush() + n, _ = strconv.Atoi(m[1]) + cur = []string{m[2]} + continue + } + if n == 0 { + continue + } + // A clause goes on over its indented lines and the blank lines between them; a line at the margin that + // is not a clause ends it. + if strings.TrimSpace(line) == "" || strings.HasPrefix(line, " ") || strings.HasPrefix(line, "\t") { + cur = append(cur, strings.TrimSpace(line)) + continue + } + flush() + n, cur = 0, nil + } + flush() + for i := range out { + out[i].Text = collapseBlankRuns(out[i].Text) + } + return out +} + +func collapseBlankRuns(s string) string { + for strings.Contains(s, "\n\n\n") { + s = strings.ReplaceAll(s, "\n\n\n", "\n\n") + } + return s +} + +// ParsedRecord is a record read from hq, and what the reading found odd. +type ParsedRecord struct { + Record *Record + Odd []string +} + +// ParseDecision reads one decision record file of hq. +func ParseDecision(file, text string) (*ParsedRecord, error) { + m := adrFile.FindStringSubmatch(file) + if m == nil { + return nil, fmt.Errorf("%s is not a decision record's file (NNNN-slug.md)", file) + } + number, _ := strconv.Atoi(m[1]) + front, body, ok := frontmatter(text) + if !ok { + return nil, fmt.Errorf("%s has no frontmatter", file) + } + h := heading.FindStringSubmatch(body) + if h == nil { + return nil, fmt.Errorf("%s has no '# N. Title' heading", file) + } + if hn, _ := strconv.Atoi(h[1]); hn != number { + return nil, fmt.Errorf("%s says %d in its file name and %d in its heading", file, number, hn) + } + p := &ParsedRecord{} + r := &Record{Kind: KindDecision, Number: number, Title: strings.TrimSpace(h[2]), Topic: first(front, "topic"), + Status: first(front, "status"), Date: first(front, "date"), Extra: map[string]string{}} + for _, d := range strings.Split(first(front, "deciders"), ",") { + if d = strings.TrimSpace(d); d != "" { + r.Deciders = append(r.Deciders, d) + } + } + after := body[strings.Index(body, h[0])+len(h[0]):] + r.Sections = splitSections(after) + known := map[string]bool{"topic": true, "status": true, "date": true, "deciders": true, "extends": true, + "supersedes": true, "superseded-by": true, "supersedes-in-part": true} + keys := make([]string, 0, len(front)) + for k := range front { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + if !known[k] { + r.Extra[k] = strings.Join(front[k], ", ") + } + } + if len(r.Extra) == 0 { + r.Extra = nil + } + // Links from the frontmatter: each stored once, on the record it goes out from. + add := func(kind string, values []string, field string) { + for _, v := range values { + mm := adrFile.FindStringSubmatch(v) + if mm == nil { + mm = regexp.MustCompile(`^(\d{4})$`).FindStringSubmatch(strings.TrimSpace(v)) + } + if mm == nil { + p.Odd = append(p.Odd, fmt.Sprintf("%s's %s names %q, which is not a decision record", file, field, v)) + continue + } + n, _ := strconv.Atoi(mm[1]) + r.Links = append(r.Links, Link{Kind: kind, To: Ref{Kind: KindDecision, Number: n}, Source: SourceWritten}) + } + } + add(LinkExtends, front["extends"], "extends") + add(LinkSupersedes, front["supersedes"], "supersedes") + add(LinkChanges, front["supersedes-in-part"], "supersedes-in-part") + if by := first(front, "superseded-by"); by != "" { + r.Extra = addExtra(r.Extra, "superseded-by", by) + } + for _, rest := range front["rests-on"] { + add(LinkCites, []string{rest}, "rests-on") + } + r.Links = append(r.Links, citations(r, after)...) + // Clauses: written, where the Decision section writes them. + for _, s := range r.Sections { + if strings.HasPrefix(s.Name, "Decision") { + r.Clauses = WrittenClauses(s.Text) + break + } + } + for i := range r.Clauses { + r.Clauses[i].Source = SourceWritten + r.Clauses[i].Status = clauseStatusOf(r.Status) + if r.Clauses[i].N != i+1 { + p.Odd = append(p.Odd, fmt.Sprintf("%s numbers its clauses out of order (clause %d is the %d.)", file, r.Clauses[i].N, i+1)) + } + } + if len(r.Clauses) == 0 && r.Section("Decision") != "" { + r.Drafting = &Drafting{State: DraftWaiting} + } + p.Record = r + return p, nil +} + +func addExtra(m map[string]string, k, v string) map[string]string { + if m == nil { + m = map[string]string{} + } + m[k] = v + return m +} + +// clauseStatusOf is a clause's status under its record's. +func clauseStatusOf(status string) string { + switch status { + case StatusAccepted: + return ClauseInForce + case StatusSuperseded: + return ClauseSuperseded + } + return ClauseProposed +} + +// citations are the records, issues and designs a record's text links to, once each, as `cites`; a record its +// frontmatter already links is not cited again. +func citations(r *Record, text string) []Link { + linked := map[Ref]bool{{Kind: r.Kind, Number: r.Number}: true} + for _, l := range r.Links { + linked[Ref{Kind: l.To.Kind, Number: l.To.Number}] = true + } + var out []Link + addRef := func(ref Ref) { + if !linked[ref] { + linked[ref] = true + out = append(out, Link{Kind: LinkCites, To: ref, Source: SourceWritten}) + } + } + for _, m := range mdLink.FindAllStringSubmatch(text, -1) { + target := m[1] + switch { + case adrFile.MatchString(target) && !strings.Contains(target, "01-RESEARCH") && !strings.Contains(target, "04-ISSUES"): + n, _ := strconv.Atoi(adrFile.FindStringSubmatch(target)[1]) + addRef(Ref{Kind: KindDecision, Number: n}) + case researchFolder.MatchString(target): + n, _ := strconv.Atoi(researchFolder.FindStringSubmatch(target)[1]) + addRef(Ref{Kind: KindResearch, Number: n}) + case issueFolder.MatchString(target): + n, _ := strconv.Atoi(issueFolder.FindStringSubmatch(target)[1]) + addRef(Ref{Kind: TargetIssue, Number: n}) + case designPath.MatchString(target): + addRef(Ref{Kind: TargetDesign, Path: designPath.FindString(target)}) + } + } + return out +} + +// ParseResearch reads one research effort: its folder's name, its overview, and every document of it. +func ParseResearch(folder string, docs map[string]string) (*ParsedRecord, error) { + m := regexp.MustCompile(`^(\d{3})-[0-9a-z-]+$`).FindStringSubmatch(folder) + if m == nil { + return nil, fmt.Errorf("%s is not a research effort's folder (NNN-slug)", folder) + } + number, _ := strconv.Atoi(m[1]) + overview, ok := docs["00-overview.md"] + if !ok { + return nil, fmt.Errorf("%s has no 00-overview.md", folder) + } + front, body, ok := frontmatter(overview) + if !ok { + return nil, fmt.Errorf("%s/00-overview.md has no frontmatter", folder) + } + p := &ParsedRecord{} + r := &Record{Kind: KindResearch, Number: number, Status: first(front, "status"), Date: first(front, "initiated"), + Topic: "research", Extra: map[string]string{}} + if h := h1.FindStringSubmatch(body); h != nil { + r.Title = strings.TrimSpace(h[1]) + } else { + r.Title = folder + p.Odd = append(p.Odd, folder+"/00-overview.md has no '# ' heading; the folder's name is its title") + } + for k, v := range front { + if k != "status" && k != "initiated" && k != "became" { + r.Extra[k] = strings.Join(v, ", ") + } + } + if len(r.Extra) == 0 { + r.Extra = nil + } + for _, b := range front["became"] { + switch { + case adrFile.MatchString(b) && strings.Contains(b, "02-DECISIONS"): + n, _ := strconv.Atoi(adrFile.FindStringSubmatch(b)[1]) + r.Links = append(r.Links, Link{Kind: LinkBecame, To: Ref{Kind: KindDecision, Number: n}, Source: SourceWritten}) + case designPath.MatchString(b): + r.Links = append(r.Links, Link{Kind: LinkBecame, To: Ref{Kind: TargetDesign, Path: designPath.FindString(b)}, Source: SourceWritten}) + default: + p.Odd = append(p.Odd, fmt.Sprintf("research %03d became %q, which is neither a decision record nor a design", number, b)) + } + } + names := make([]string, 0, len(docs)) + for name := range docs { + names = append(names, name) + } + sort.Strings(names) + var all strings.Builder + for _, name := range names { + text := docs[name] + if name == "00-overview.md" { + text = body + } + r.Sections = append(r.Sections, Section{Name: name, Text: strings.Trim(text, "\n")}) + all.WriteString(text + "\n") + } + r.Links = append(r.Links, citations(r, all.String())...) + p.Record = r + return p, nil +} + +// docName is a research document's name within its folder. +func docName(p string) string { return path.Base(p) } diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/pgstore.go b/modules/mesh-knowledge/cmd/mesh-knowledge/pgstore.go new file mode 100644 index 00000000..c5c55204 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/pgstore.go @@ -0,0 +1,558 @@ +package main + +// The store on the mesh's postgres (novox/hq ADR 0290 rule 7): the database the mesh provisions for this module +// (the postgres-database provision), its address in the file DATABASE_URL_FILE names. Its schema is numbered +// migrations in migrations/, applied by the preparation step (`mesh-knowledge prepare`, ADR 0135) and recorded +// in the database itself; a fresh database is given the consolidated schema, schema.sql, at once, and every +// migration is recorded as applied. The serving bundle never changes the schema: it refuses to serve one that is +// behind, and says so. + +import ( + "context" + "crypto/sha256" + "embed" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io/fs" + "os" + "path" + "regexp" + "sort" + "strconv" + "strings" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" + "github.com/jackc/pgx/v5/pgxpool" +) + +//go:embed migrations/*.sql +var migrationFiles embed.FS + +//go:embed schema.sql +var consolidated string + +// Migration is one numbered change of the schema. +type Migration struct { + Number int + Name string + SQL string + Checksum string +} + +var migrationFile = regexp.MustCompile(`^(\d{4})-([a-z0-9-]+)\.sql$`) + +// Migrations are the migrations this binary carries, in order. A misnamed file, two of one number or an empty +// one is refused: each would make the schema something nobody wrote down. +func Migrations() ([]Migration, error) { + entries, err := fs.ReadDir(migrationFiles, "migrations") + if err != nil { + return nil, err + } + var out []Migration + seen := map[int]string{} + for _, e := range entries { + m := migrationFile.FindStringSubmatch(e.Name()) + if m == nil { + return nil, fmt.Errorf("%s is not a migration's name (NNNN-what-it-does.sql)", e.Name()) + } + n, _ := strconv.Atoi(m[1]) + if other, twice := seen[n]; twice { + return nil, fmt.Errorf("two migrations are numbered %04d: %s and %s", n, other, e.Name()) + } + seen[n] = e.Name() + body, err := fs.ReadFile(migrationFiles, path.Join("migrations", e.Name())) + if err != nil { + return nil, err + } + if strings.TrimSpace(string(body)) == "" { + return nil, fmt.Errorf("%s is empty", e.Name()) + } + sum := sha256.Sum256(body) + out = append(out, Migration{Number: n, Name: m[2], SQL: string(body), Checksum: hex.EncodeToString(sum[:])}) + } + sort.Slice(out, func(i, j int) bool { return out[i].Number < out[j].Number }) + for i, m := range out { + if m.Number != i+1 { + return nil, fmt.Errorf("the migrations are not numbered 0001 on without a gap: %04d is the %d. one", m.Number, i+1) + } + } + return out, nil +} + +// ledger is the record of what ran, kept in the database it describes. +const ledger = `create table if not exists migration ( + number integer primary key, + name text not null, + checksum text not null, + applied timestamptz not null default now())` + +// lockKey is the advisory lock every migration run takes, so two preparations never interleave. +const lockKey int64 = 4_250_290_425 + +// PgStore is the Store on postgres. +type PgStore struct{ pool *pgxpool.Pool } + +// PgStoreFromEnv opens the store the mesh provisioned, its address in the file DATABASE_URL_FILE names. +func PgStoreFromEnv(ctx context.Context) (*PgStore, error) { + file := os.Getenv("DATABASE_URL_FILE") + if file == "" { + return nil, errors.New("DATABASE_URL_FILE is not set: the knowledge base's database is a requirement the mesh resolves") + } + raw, err := os.ReadFile(file) + if err != nil { + return nil, fmt.Errorf("the database's address cannot be read: %w", err) + } + return OpenPgStore(ctx, strings.TrimSpace(string(raw))) +} + +// OpenPgStore opens a store at an address. +func OpenPgStore(ctx context.Context, url string) (*PgStore, error) { + pool, err := pgxpool.New(ctx, url) + if err != nil { + return nil, err + } + return &PgStore{pool: pool}, nil +} + +// Close closes the store. +func (s *PgStore) Close() { s.pool.Close() } + +// Prepare brings the schema to what this version needs, and says what it did: on a database that holds nothing +// of it, the consolidated schema with every migration recorded; otherwise every migration not yet applied, each +// in its own transaction with its row in the ledger. A migration that ran and whose file changed since, or one +// numbered below the highest applied that never ran, stops it: the database's contents are then not known. +func (s *PgStore) Prepare(ctx context.Context) ([]string, error) { + migrations, err := Migrations() + if err != nil { + return nil, err + } + conn, err := s.pool.Acquire(ctx) + if err != nil { + return nil, err + } + defer conn.Release() + if _, err := conn.Exec(ctx, `select pg_advisory_lock($1)`, lockKey); err != nil { + return nil, fmt.Errorf("the migration lock cannot be taken: %w", err) + } + defer func() { _, _ = conn.Exec(context.WithoutCancel(ctx), `select pg_advisory_unlock($1)`, lockKey) }() + if _, err := conn.Exec(ctx, ledger); err != nil { + return nil, err + } + applied, err := appliedMigrations(ctx, conn.Conn()) + if err != nil { + return nil, err + } + var said []string + if len(applied) == 0 { + var exists bool + if err := conn.QueryRow(ctx, `select to_regclass('record') is not null`).Scan(&exists); err != nil { + return nil, err + } + if exists { + return nil, errors.New("the database holds the knowledge base's tables and no record of a migration: its contents are not known, so nothing is changed") + } + tx, err := conn.Begin(ctx) + if err != nil { + return nil, err + } + defer func() { _ = tx.Rollback(context.WithoutCancel(ctx)) }() + if _, err := tx.Exec(ctx, consolidated); err != nil { + return nil, fmt.Errorf("the consolidated schema failed, and nothing of it was kept: %w", err) + } + for _, m := range migrations { + if _, err := tx.Exec(ctx, `insert into migration (number, name, checksum) values ($1, $2, $3)`, m.Number, m.Name, m.Checksum); err != nil { + return nil, err + } + } + if err := tx.Commit(ctx); err != nil { + return nil, err + } + return []string{fmt.Sprintf("a fresh database: the consolidated schema, through migration %04d", len(migrations))}, nil + } + highest := 0 + var problems []string + byNumber := map[int]appliedMigration{} + for _, a := range applied { + byNumber[a.number] = a + highest = max(highest, a.number) + } + var pending []Migration + for _, m := range migrations { + a, ran := byNumber[m.Number] + switch { + case ran && a.checksum != m.Checksum: + problems = append(problems, fmt.Sprintf("migration %04d-%s ran, and its file has changed since: write a new one", m.Number, m.Name)) + case !ran && m.Number < highest: + problems = append(problems, fmt.Sprintf("migration %04d-%s never ran, and %04d did: renumber it above %04d", m.Number, m.Name, highest, highest)) + case !ran: + pending = append(pending, m) + } + } + if len(problems) > 0 { + return nil, errors.New("this database and these migrations disagree: " + strings.Join(problems, "; ")) + } + for _, m := range pending { + err := func() error { + tx, err := conn.Begin(ctx) + if err != nil { + return err + } + defer func() { _ = tx.Rollback(context.WithoutCancel(ctx)) }() + if _, err := tx.Exec(ctx, m.SQL); err != nil { + return fmt.Errorf("migration %04d-%s failed, and nothing it did was kept: %w", m.Number, m.Name, err) + } + if _, err := tx.Exec(ctx, `insert into migration (number, name, checksum) values ($1, $2, $3)`, m.Number, m.Name, m.Checksum); err != nil { + return err + } + return tx.Commit(ctx) + }() + if err != nil { + return said, err + } + said = append(said, fmt.Sprintf("migration %04d-%s applied", m.Number, m.Name)) + } + if len(said) == 0 { + said = []string{fmt.Sprintf("the schema is at migration %04d, as this version needs", len(migrations))} + } + return said, nil +} + +type appliedMigration struct { + number int + checksum string +} + +func appliedMigrations(ctx context.Context, conn *pgx.Conn) ([]appliedMigration, error) { + rows, err := conn.Query(ctx, `select number, checksum from migration order by number`) + if err != nil { + return nil, err + } + defer rows.Close() + var out []appliedMigration + for rows.Next() { + var a appliedMigration + if err := rows.Scan(&a.number, &a.checksum); err != nil { + return nil, err + } + out = append(out, a) + } + return out, rows.Err() +} + +// Ready says why the store cannot serve this version, or nil: the schema must be at the migrations it carries. +func (s *PgStore) Ready(ctx context.Context) error { + migrations, err := Migrations() + if err != nil { + return err + } + var at int + err = s.pool.QueryRow(ctx, `select coalesce(max(number), 0) from migration`).Scan(&at) + var pgErr *pgconn.PgError + if errors.As(err, &pgErr) && pgErr.Code == "42P01" { + at = 0 + } else if err != nil { + return fmt.Errorf("the database cannot be reached: %w", err) + } + if at != len(migrations) { + return fmt.Errorf("the database's schema is at migration %04d and this version needs %04d: the preparation step "+ + "(mesh-knowledge prepare) has not run", at, len(migrations)) + } + return nil +} + +const entryColumns = `r.kind, r.number, r.current_version, coalesce(r.pending_version, 0), r.revision, + (select count(*) from version v where v.kind = r.kind and v.number = r.number), + (select body from version v where v.kind = r.kind and v.number = r.number and v.n = r.current_version), + (select body from version v where v.kind = r.kind and v.number = r.number and v.n = r.pending_version)` + +func scanEntry(row pgx.Row) (*Entry, error) { + var e Entry + var kind string + var number int + var current, pending []byte + if err := row.Scan(&kind, &number, &e.CurrentVersion, &e.PendingVersion, &e.Revision, &e.Versions, ¤t, &pending); err != nil { + return nil, err + } + e.Current = &Record{} + if err := json.Unmarshal(current, e.Current); err != nil { + return nil, fmt.Errorf("%s's version %d cannot be read: %w", Key{kind, number}, e.CurrentVersion, err) + } + if len(pending) > 0 { + e.Pending = &Record{} + if err := json.Unmarshal(pending, e.Pending); err != nil { + return nil, fmt.Errorf("%s's version %d cannot be read: %w", Key{kind, number}, e.PendingVersion, err) + } + } + return &e, nil +} + +func (s *PgStore) Get(ctx context.Context, k Key) (*Entry, error) { + e, err := scanEntry(s.pool.QueryRow(ctx, `select `+entryColumns+` from record r where r.kind = $1 and r.number = $2`, k.Kind, k.Number)) + if errors.Is(err, pgx.ErrNoRows) { + return nil, nil + } + return e, err +} + +func (s *PgStore) All(ctx context.Context) ([]*Entry, error) { + rows, err := s.pool.Query(ctx, `select `+entryColumns+` from record r order by r.kind, r.number`) + if err != nil { + return nil, err + } + defer rows.Close() + var out []*Entry + for rows.Next() { + e, err := scanEntry(rows) + if err != nil { + return nil, err + } + out = append(out, e) + } + return out, rows.Err() +} + +func sectionsText(r *Record) string { + var b strings.Builder + for _, s := range r.Sections { + b.WriteString(s.Text) + b.WriteString("\n") + } + return b.String() +} + +// served writes the rows of the version a record serves: its status, topic and search vector, its clauses and +// its links. +func served(ctx context.Context, tx pgx.Tx, r *Record) error { + if _, err := tx.Exec(ctx, `update record set status = $3, topic = $4, + search = setweight(to_tsvector('english', $5), 'A') || setweight(to_tsvector('english', $4), 'B') || + setweight(to_tsvector('english', $6), 'D') + where kind = $1 and number = $2`, r.Kind, r.Number, r.Status, r.Topic, r.Title, sectionsText(r)); err != nil { + return err + } + if _, err := tx.Exec(ctx, `delete from clause where kind = $1 and number = $2`, r.Kind, r.Number); err != nil { + return err + } + for _, c := range r.Clauses { + if _, err := tx.Exec(ctx, `insert into clause (kind, number, n, text, status, source, search) + values ($1, $2, $3, $4, $5, $6, setweight(to_tsvector('english', $4), 'A'))`, + r.Kind, r.Number, c.N, c.Text, c.Status, c.Source); err != nil { + return err + } + } + if _, err := tx.Exec(ctx, `delete from link where from_kind = $1 and from_number = $2`, r.Kind, r.Number); err != nil { + return err + } + for _, l := range r.Links { + body, _ := json.Marshal(l) + if _, err := tx.Exec(ctx, `insert into link (from_kind, from_number, from_clause, kind, to_kind, to_number, to_clause, to_path, body) + values ($1, $2, $3, $4, $5, $6, $7, $8, $9)`, r.Kind, r.Number, l.From, l.Kind, l.To.Kind, l.To.Number, l.To.Clause, l.To.Path, body); err != nil { + return err + } + } + return nil +} + +func insertVersion(ctx context.Context, tx pgx.Tx, v Version) error { + body, err := json.Marshal(v.Record) + if err != nil { + return err + } + _, err = tx.Exec(ctx, `insert into version (kind, number, n, by, at, why, insight, body) values ($1, $2, $3, $4, $5, $6, $7, $8)`, + v.Record.Kind, v.Record.Number, v.N, v.By, v.At, v.Why, v.Insight, body) + return err +} + +func (s *PgStore) Create(ctx context.Context, v Version) error { + tx, err := s.pool.Begin(ctx) + if err != nil { + return err + } + defer func() { _ = tx.Rollback(context.WithoutCancel(ctx)) }() + r := v.Record + tag, err := tx.Exec(ctx, `insert into record (kind, number, status, topic, current_version) values ($1, $2, $3, $4, 1) + on conflict do nothing`, r.Kind, r.Number, r.Status, r.Topic) + if err != nil { + return err + } + if tag.RowsAffected() == 0 { + return ErrExists + } + v.N = 1 + if err := insertVersion(ctx, tx, v); err != nil { + return err + } + if err := served(ctx, tx, r); err != nil { + return err + } + return tx.Commit(ctx) +} + +func (s *PgStore) Save(ctx context.Context, v Version, current, clearPending bool, revision int64) error { + tx, err := s.pool.Begin(ctx) + if err != nil { + return err + } + defer func() { _ = tx.Rollback(context.WithoutCancel(ctx)) }() + r := v.Record + var held int64 + var versions int + err = tx.QueryRow(ctx, `select revision, (select count(*) from version v where v.kind = r.kind and v.number = r.number) + from record r where kind = $1 and number = $2 for update`, r.Kind, r.Number).Scan(&held, &versions) + if errors.Is(err, pgx.ErrNoRows) { + return fmt.Errorf("%s is not held", r.Key()) + } + if err != nil { + return err + } + if held != revision { + return ErrChanged + } + v.N = versions + 1 + if err := insertVersion(ctx, tx, v); err != nil { + return err + } + if current { + if _, err := tx.Exec(ctx, `update record set current_version = $3 where kind = $1 and number = $2`, r.Kind, r.Number, v.N); err != nil { + return err + } + if err := served(ctx, tx, r); err != nil { + return err + } + } else { + if _, err := tx.Exec(ctx, `update record set pending_version = $3 where kind = $1 and number = $2`, r.Kind, r.Number, v.N); err != nil { + return err + } + } + if clearPending { + if _, err := tx.Exec(ctx, `update record set pending_version = null where kind = $1 and number = $2`, r.Kind, r.Number); err != nil { + return err + } + } + if _, err := tx.Exec(ctx, `update record set revision = revision + 1 where kind = $1 and number = $2`, r.Kind, r.Number); err != nil { + return err + } + return tx.Commit(ctx) +} + +func (s *PgStore) Versions(ctx context.Context, k Key) ([]Version, error) { + rows, err := s.pool.Query(ctx, `select n, by, at, why, insight, body from version where kind = $1 and number = $2 order by n`, k.Kind, k.Number) + if err != nil { + return nil, err + } + defer rows.Close() + var out []Version + for rows.Next() { + var v Version + var body []byte + if err := rows.Scan(&v.N, &v.By, &v.At, &v.Why, &v.Insight, &body); err != nil { + return nil, err + } + v.Record = &Record{} + if err := json.Unmarshal(body, v.Record); err != nil { + return nil, err + } + out = append(out, v) + } + return out, rows.Err() +} + +// Search ranks by the database's full-text search: any of the question's words, a clause weighing more than a +// record's sections, a title most. +func (s *PgStore) Search(ctx context.Context, question string, limit int) ([]Hit, error) { + words := questionWords(question) + if len(words) == 0 { + return nil, nil + } + if limit <= 0 { + limit = 200 + } + rows, err := s.pool.Query(ctx, `with q as (select replace(plainto_tsquery('english', $1)::text, ' & ', ' | ')::tsquery as q) + select kind, number, clause, rank from ( + select c.kind, c.number, c.n as clause, ts_rank_cd(c.search, q.q) as rank + from clause c join record r on r.kind = c.kind and r.number = c.number, q + where c.search @@ q.q and r.status not in ('reserved', 'withdrawn') + union all + select r.kind, r.number, 0, ts_rank_cd(r.search, q.q) + from record r, q where r.search @@ q.q and r.status not in ('reserved', 'withdrawn') + ) hits order by rank desc, number desc, clause limit $2`, strings.Join(words, " "), limit) + if err != nil { + return nil, err + } + defer rows.Close() + var out []Hit + for rows.Next() { + var h Hit + if err := rows.Scan(&h.Key.Kind, &h.Key.Number, &h.Clause, &h.Rank); err != nil { + return nil, err + } + out = append(out, h) + } + return out, rows.Err() +} + +func (s *PgStore) Inbound(ctx context.Context, k Key) ([]Inbound, error) { + rows, err := s.pool.Query(ctx, `select from_kind, from_number, body from link where to_kind = $1 and to_number = $2 + order by from_number, kind`, k.Kind, k.Number) + if err != nil { + return nil, err + } + defer rows.Close() + var out []Inbound + for rows.Next() { + var in Inbound + var body []byte + if err := rows.Scan(&in.From.Kind, &in.From.Number, &body); err != nil { + return nil, err + } + if err := json.Unmarshal(body, &in.Link); err != nil { + return nil, err + } + out = append(out, in) + } + return out, rows.Err() +} + +func (s *PgStore) SetFindings(ctx context.Context, f []Finding) error { + tx, err := s.pool.Begin(ctx) + if err != nil { + return err + } + defer func() { _ = tx.Rollback(context.WithoutCancel(ctx)) }() + if _, err := tx.Exec(ctx, `delete from finding`); err != nil { + return err + } + for _, x := range f { + if _, err := tx.Exec(ctx, `insert into finding (rule, records, says, at) values ($1, $2, $3, $4)`, x.Rule, x.Records, x.Says, x.At); err != nil { + return err + } + } + return tx.Commit(ctx) +} + +func (s *PgStore) Findings(ctx context.Context) ([]Finding, error) { + rows, err := s.pool.Query(ctx, `select rule, records, says, at from finding order by rule, says`) + if err != nil { + return nil, err + } + defer rows.Close() + var out []Finding + for rows.Next() { + var f Finding + if err := rows.Scan(&f.Rule, &f.Records, &f.Says, &f.At); err != nil { + return nil, err + } + out = append(out, f) + } + return out, rows.Err() +} + +func (s *PgStore) Told(ctx context.Context, topic string) (bool, error) { + tag, err := s.pool.Exec(ctx, `insert into told (topic) values ($1) on conflict do nothing`, topic) + if err != nil { + return false, err + } + return tag.RowsAffected() == 1, nil +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/pgstore_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/pgstore_test.go new file mode 100644 index 00000000..6817d243 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/pgstore_test.go @@ -0,0 +1,133 @@ +package main + +import ( + "context" + "os" + "path/filepath" + "reflect" + "strings" + "testing" +) + +// The schema is numbered migrations and a consolidated schema for a fresh database (the mesh's rule: both). A +// database given the consolidated schema and one given every migration in order hold the same tables, columns, +// constraints and indexes. +func TestTheConsolidatedSchemaIsTheMigrationsApplied(t *testing.T) { + ctx := context.Background() + fresh := pgStore(t) // Prepare on an empty database: the consolidated schema + stepped, err := OpenPgStore(ctx, freshDatabase(t)) + if err != nil { + t.Fatal(err) + } + defer stepped.Close() + migrations, err := Migrations() + if err != nil { + t.Fatal(err) + } + for _, m := range migrations { + if _, err := stepped.pool.Exec(ctx, m.SQL); err != nil { + t.Fatalf("migration %04d: %v", m.Number, err) + } + } + a, b := shape(t, fresh), shape(t, stepped) + if !reflect.DeepEqual(a, b) { + t.Fatalf("the consolidated schema and the migrations differ:\nconsolidated %v\nmigrations %v", a, b) + } + if len(a) < 20 { + t.Fatalf("the schema read is too small to compare: %v", a) + } + // The consolidated schema says how far it is consolidated. + if !strings.Contains(consolidated, "through migration "+itoa4(len(migrations))) { + t.Fatalf("schema.sql does not say it is consolidated through migration %04d", len(migrations)) + } +} + +func shape(t *testing.T, s *PgStore) []string { + t.Helper() + var out []string + for _, q := range []string{ + `select table_name || '.' || column_name || ' ' || data_type || ' ' || is_nullable || ' ' || coalesce(column_default, '') + from information_schema.columns where table_schema = 'public' and table_name <> 'migration' order by 1`, + `select conrelid::regclass::text || ' ' || pg_get_constraintdef(oid) from pg_constraint + where connamespace = 'public'::regnamespace and conrelid::regclass::text <> 'migration' order by 1`, + `select indexdef from pg_indexes where schemaname = 'public' and tablename <> 'migration' order by 1`, + } { + rows, err := s.pool.Query(context.Background(), q) + if err != nil { + t.Fatal(err) + } + for rows.Next() { + var line string + if err := rows.Scan(&line); err != nil { + t.Fatal(err) + } + out = append(out, line) + } + rows.Close() + } + return out +} + +func TestPreparingTwiceChangesNothingAndAChangedMigrationIsRefused(t *testing.T) { + ctx := context.Background() + s := pgStore(t) + said, err := s.Prepare(ctx) + if err != nil || len(said) != 1 || !strings.Contains(said[0], "as this version needs") { + t.Fatalf("a second preparation: %v %v", said, err) + } + if err := s.Ready(ctx); err != nil { + t.Fatal(err) + } + if _, err := s.pool.Exec(ctx, `update migration set checksum = 'other' where number = 1`); err != nil { + t.Fatal(err) + } + if _, err := s.Prepare(ctx); err == nil || !strings.Contains(err.Error(), "has changed since") { + t.Fatalf("a changed migration: %v", err) + } +} + +func TestAStoreBehindItsMigrationsRefusesToServe(t *testing.T) { + ctx := context.Background() + s, err := OpenPgStore(ctx, freshDatabase(t)) + if err != nil { + t.Fatal(err) + } + defer s.Close() + if err := s.Ready(ctx); err == nil || !strings.Contains(err.Error(), "preparation step") { + t.Fatalf("an unprepared database: %v", err) + } + l := &lazyStore{open: func(context.Context) (*PgStore, error) { return s, nil }} + k := &KB{Store: l} + if _, err := k.Get(GetAsk{Number: 276}); err == nil || !strings.Contains(err.Error(), "preparation step") { + t.Fatalf("a verb over an unprepared database: %v", err) + } + if h := k.Health(l); h.Healthy || !strings.Contains(h.Why, "preparation step") { + t.Fatalf("health over an unprepared database: %+v", h) + } +} + +// The migrations carried are numbered from 0001 without a gap, and every file in migrations/ is one. +func TestTheMigrationsAreNumberedWithoutAGap(t *testing.T) { + ms, err := Migrations() + if err != nil { + t.Fatal(err) + } + files, _ := os.ReadDir("migrations") + if len(ms) == 0 || len(ms) != len(files) { + t.Fatalf("%d migrations, %d files", len(ms), len(files)) + } + for _, f := range files { + if filepath.Ext(f.Name()) != ".sql" { + t.Fatalf("%s is not a migration", f.Name()) + } + } +} + +// The daemons' lines the rules refuse are the catalogue's own copy. +func TestTheDaemonLinesAreTheCataloguesCopy(t *testing.T) { + theirs := DaemonLines(readFile(t, filepath.Join("..", "..", "..", "..", "retired-lines"))) + ours := DaemonLines(daemonLinesFile) + if len(ours) < 50 || !reflect.DeepEqual(theirs, ours) { + t.Fatalf("daemon-lines differs from the catalogue's retired-lines (%d against %d)", len(ours), len(theirs)) + } +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/record.go b/modules/mesh-knowledge/cmd/mesh-knowledge/record.go new file mode 100644 index 00000000..b47de3cc --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/record.go @@ -0,0 +1,442 @@ +package main + +// What one record holds (novox/hq ADR 0290 rules 2 and 3, to-be 55 §2 and §3): a decision record or a research +// effort, whole — its fields, its clauses each with a status and a source, its typed links, its reasoning in +// sections — and every version of it. + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "regexp" + "sort" + "strconv" + "strings" + "time" +) + +// The kinds this slice holds. +const ( + KindDecision = "decision" + KindResearch = "research" +) + +// Kinds are the kinds a record may be. +var Kinds = []string{KindDecision, KindResearch} + +// A record's status. A decision is proposed, accepted, then perhaps superseded; a research effort is proposed, +// then active, graduated or abandoned. A number reserved and never proposed is reserved, and withdrawn once its +// time has passed: a number is spent whether or not its record is accepted (rule 5). +const ( + StatusReserved = "reserved" + StatusProposed = "proposed" + StatusAccepted = "accepted" + StatusSuperseded = "superseded" + StatusWithdrawn = "withdrawn" + StatusActive = "active" + StatusGraduated = "graduated" + StatusAbandoned = "abandoned" +) + +// ResearchStatuses are the statuses an accepted research effort may have. +var ResearchStatuses = []string{StatusActive, StatusGraduated, StatusAbandoned} + +// A clause's status (to-be 55 §3). +const ( + ClauseProposed = "proposed" + ClauseInForce = "in force" + ClauseChanged = "changed" + ClauseSuperseded = "superseded" +) + +// A clause's source (to-be 55 §3). +const ( + SourceWritten = "written" + SourceDrafted = "drafted" + SourceConfirmed = "confirmed" +) + +// The kinds of a link (to-be 55 §2). +const ( + LinkSupersedes = "supersedes" + LinkChanges = "changes" + LinkExtends = "extends" + LinkBecame = "became" + LinkCites = "cites" +) + +// LinkKinds are the kinds a link may be. +var LinkKinds = []string{LinkSupersedes, LinkChanges, LinkExtends, LinkBecame, LinkCites} + +// What a link may point at besides a record of this knowledge base: an issue in the tracker, a design in hq. +const ( + TargetIssue = "issue" + TargetDesign = "design" +) + +// Key is a record's key: its kind and number together. +type Key struct { + Kind string `json:"kind"` + Number int `json:"number"` +} + +func (k Key) String() string { + if k.Kind == KindResearch { + return fmt.Sprintf("research %03d", k.Number) + } + return fmt.Sprintf("ADR %04d", k.Number) +} + +// Clause is one numbered statement of what a decision decided, with its own status and source. +type Clause struct { + N int `json:"n"` + // Text is the clause as written: its bold lead, then the rest. + Text string `json:"text"` + Status string `json:"status"` + Source string `json:"source"` + // ChangedBy names the clauses or records of later records that changed or superseded it: "ADR 0282 §2". + ChangedBy []string `json:"changed-by,omitempty"` + // Unconfirmed is why the second judgement did not confirm a drafted clause. + Unconfirmed string `json:"unconfirmed,omitempty"` +} + +// Lead is the clause's bold lead, or "" when it has none. +func (c Clause) Lead() string { return boldLead(c.Text) } + +var leadPattern = regexp.MustCompile(`^\*\*([^*\n]+?)\*\*`) + +func boldLead(text string) string { + m := leadPattern.FindStringSubmatch(strings.TrimSpace(text)) + if m == nil { + return "" + } + return strings.TrimSpace(m[1]) +} + +// Ref is what a link points at: a record (and a clause of it, when Clause is set), an issue, or a design. +type Ref struct { + Kind string `json:"kind"` + Number int `json:"number,omitempty"` + Clause int `json:"clause,omitempty"` + // Path is a design's path in hq, for a link to a design. + Path string `json:"path,omitempty"` +} + +// Record is the record this ref names, when it names one. +func (r Ref) Record() (Key, bool) { + if r.Kind == KindDecision || r.Kind == KindResearch { + return Key{r.Kind, r.Number}, true + } + return Key{}, false +} + +func (r Ref) String() string { + switch r.Kind { + case KindDecision, KindResearch: + s := Key{r.Kind, r.Number}.String() + if r.Clause > 0 { + s += " §" + strconv.Itoa(r.Clause) + } + return s + case TargetIssue: + return fmt.Sprintf("issue %d", r.Number) + case TargetDesign: + return "design " + r.Path + } + return r.Kind +} + +var ( + refRecord = regexp.MustCompile(`^(?i)(?:(adr|decision|research)\s*)?(\d{1,4})(?:\s*§\s*(\d{1,3}))?$`) + refIssue = regexp.MustCompile(`^(?i)issue\s*(\d{1,5})$`) + refDesign = regexp.MustCompile(`^(?i)(?:design\s+)?(03-DESIGN/[0-9a-z/-]+\.md)$`) +) + +// ParseRef reads a link's target as an agent writes it: "0276", "ADR 0276 §4", "research 045", "issue 365", +// "03-DESIGN/01-to-be/55-the-knowledge-base.md". A bare number is a decision. +func ParseRef(s string) (Ref, error) { + s = strings.TrimSpace(s) + if m := refIssue.FindStringSubmatch(s); m != nil { + n, _ := strconv.Atoi(m[1]) + return Ref{Kind: TargetIssue, Number: n}, nil + } + if m := refDesign.FindStringSubmatch(s); m != nil { + return Ref{Kind: TargetDesign, Path: m[1]}, nil + } + if m := refRecord.FindStringSubmatch(s); m != nil { + kind := KindDecision + if strings.EqualFold(m[1], "research") { + kind = KindResearch + } + n, _ := strconv.Atoi(m[2]) + c := 0 + if m[3] != "" { + c, _ = strconv.Atoi(m[3]) + } + if n < 1 { + return Ref{}, fmt.Errorf("%q names no number from 1", s) + } + return Ref{Kind: kind, Number: n, Clause: c}, nil + } + return Ref{}, fmt.Errorf("%q is not a record (0276, ADR 0276 §4, research 045), an issue (issue 365) or a design "+ + "(03-DESIGN/01-to-be/55-the-knowledge-base.md)", s) +} + +// Link is one typed link, held on the record it goes out from and read from both ends. From is the clause it +// goes out from, 0 for the record as a whole. +type Link struct { + Kind string `json:"kind"` + From int `json:"from,omitempty"` + To Ref `json:"to"` + // Source says how the link's clause was found: written by the author, or drafted and confirmed by the + // judgement at the import (to-be 55 §7) for a change whose clause hq never named. + Source string `json:"source,omitempty"` + // Unresolved says the import found a target this knowledge base does not hold. + Unresolved bool `json:"unresolved,omitempty"` +} + +func (l Link) String() string { + from := "" + if l.From > 0 { + from = fmt.Sprintf("§%d ", l.From) + } + return from + l.Kind + " " + l.To.String() +} + +// Section is one part of a record's reasoning, markdown as written: for a decision, context, the options weighed, +// the decision as written, consequences, how it is checked, references; for a research effort, its documents by +// name. +type Section struct { + Name string `json:"name"` + Text string `json:"text"` +} + +// Review is one review of one version. +type Review struct { + By string `json:"by"` + At time.Time `json:"at"` + Verdict string `json:"verdict"` + Findings string `json:"findings,omitempty"` + Version int `json:"version"` +} + +// The verdicts of a review. +const ( + VerdictApprove = "approve" + VerdictChanges = "changes" +) + +// OperatorAsk is the ask a record that needs the operator waits on, and its answer once proven. +type OperatorAsk struct { + ID string `json:"id"` + At time.Time `json:"at"` + Version int `json:"version"` + // Said is what came of it: waiting, approved, declined, expired, refused (and why). + Said string `json:"said"` + Warrant string `json:"warrant,omitempty"` +} + +// Drafting is where a prose record stands in the drafting and confirming of its clauses (to-be 55 §7). +type Drafting struct { + // State is waiting (to be drafted), drafted (waiting for the second judgement), done, or failed. + State string `json:"state"` + Reason string `json:"reason,omitempty"` + Tries int `json:"tries,omitempty"` + Drafter string `json:"drafter,omitempty"` + Checker string `json:"checker,omitempty"` + Returned string `json:"returned,omitempty"` + At time.Time `json:"at,omitempty"` +} + +// The states of Drafting. +const ( + DraftWaiting = "waiting" + DraftDrafted = "drafted" + DraftDone = "done" + DraftFailed = "failed" +) + +// Record is one record, whole, as one version holds it. +type Record struct { + Kind string `json:"kind"` + Number int `json:"number"` + Title string `json:"title"` + Topic string `json:"topic,omitempty"` + Status string `json:"status"` + Date string `json:"date,omitempty"` + Deciders []string `json:"deciders,omitempty"` + // Effort is the status a proposed research effort takes when it is accepted. + Effort string `json:"effort,omitempty"` + NeedsOperator bool `json:"needs-operator,omitempty"` + Clauses []Clause `json:"clauses,omitempty"` + Links []Link `json:"links,omitempty"` + Sections []Section `json:"sections,omitempty"` + // Homes are the documents of hq that cite the record (a design, a playbook), while those live in hq. + Homes []string `json:"homes,omitempty"` + // Extra holds the fields of an imported record this slice has no field of its own for, as written. + Extra map[string]string `json:"extra,omitempty"` + // Author is who proposed it, as the runtime proves the caller; Source names the commit and path of hq an + // imported record was read from. + Author string `json:"author,omitempty"` + Source string `json:"source,omitempty"` + // Reserved is who reserved the number, when, and for what title. + ReservedBy string `json:"reserved-by,omitempty"` + ReservedAt time.Time `json:"reserved-at,omitempty"` + ReservedFor string `json:"reserved-for,omitempty"` + // AcceptedAt is when it was accepted here; zero for one imported accepted. + AcceptedAt time.Time `json:"accepted-at,omitempty"` + Reviews []Review `json:"reviews,omitempty"` + Ask *OperatorAsk `json:"ask,omitempty"` + Drafting *Drafting `json:"drafting,omitempty"` + Insights []Insight `json:"insights,omitempty"` + Pending *PendingState `json:"pending,omitempty"` +} + +// Insight is a progressive insight: a correction of fact, dated, saying what stood before. +type Insight struct { + Date string `json:"date"` + Before string `json:"before"` + By string `json:"by,omitempty"` +} + +// PendingState marks a version that is a proposal over an accepted record: a progressive insight waiting for +// its review. The accepted version stays the one served until it is accepted. +type PendingState struct { + Insight Insight `json:"insight"` +} + +// Key is the record's key. +func (r *Record) Key() Key { return Key{r.Kind, r.Number} } + +// Clause is the clause numbered n, or nil. +func (r *Record) Clause(n int) *Clause { + for i := range r.Clauses { + if r.Clauses[i].N == n { + return &r.Clauses[i] + } + } + return nil +} + +// Section is the section of this name, or "". +func (r *Record) Section(name string) string { + for _, s := range r.Sections { + if strings.EqualFold(s.Name, name) { + return s.Text + } + } + return "" +} + +// Accepted says the record holds: an accepted decision, or a research effort accepted at any of its statuses. +func (r *Record) Accepted() bool { + switch r.Status { + case StatusAccepted, StatusActive, StatusGraduated, StatusAbandoned: + return true + } + return false +} + +// Clone is a deep copy, so a change to the copy never reaches the version it came from. +func (r *Record) Clone() *Record { + raw, _ := json.Marshal(r) + var c Record + _ = json.Unmarshal(raw, &c) + return &c +} + +// Digest is the SHA-256 of what the record says — every field but its reviews and its ask — which an operator's +// approval binds: an approval authorises this version and nothing written after it. +func (r *Record) Digest() string { + c := r.Clone() + c.Reviews, c.Ask, c.Drafting = nil, nil, nil + raw, _ := json.Marshal(c) + sum := sha256.Sum256(raw) + return "sha256:" + hex.EncodeToString(sum[:]) +} + +// Version is one version of a record: who made it, when, why in one line, and the record whole as it stood. +type Version struct { + N int `json:"n"` + By string `json:"by"` + At time.Time `json:"at"` + Why string `json:"why"` + Record *Record `json:"record"` + // Insight marks a version that is a progressive insight. + Insight bool `json:"insight,omitempty"` +} + +// Entry is a record as the store keeps it: the version served and, while one waits for its review, the version +// proposed over it. +type Entry struct { + Current *Record + // CurrentVersion is the number of the version served, PendingVersion of the version proposed over it (0 for + // none), and Versions how many there are. + CurrentVersion int + PendingVersion int + Pending *Record + Versions int + // Revision is the store's own count of writes to this entry: a write names the one it read. + Revision int64 +} + +// Working is the version a writer works on: the pending one when there is one, else the current one. +func (e *Entry) Working() *Record { + if e.Pending != nil { + return e.Pending + } + return e.Current +} + +// Render is the record as markdown, the way its history compares two versions line by line. +func Render(r *Record) string { + var b strings.Builder + fmt.Fprintf(&b, "# %s. %s\n\n", strings.TrimPrefix(strings.TrimPrefix(r.Key().String(), "ADR "), "research "), r.Title) + field := func(k, v string) { + if v != "" { + fmt.Fprintf(&b, "%s: %s\n", k, v) + } + } + field("kind", r.Kind) + field("status", r.Status) + field("topic", r.Topic) + field("date", r.Date) + field("deciders", strings.Join(r.Deciders, ", ")) + field("effort", r.Effort) + if r.NeedsOperator { + field("needs operator", "yes") + } + field("homes", strings.Join(r.Homes, ", ")) + keys := make([]string, 0, len(r.Extra)) + for k := range r.Extra { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + field(k, r.Extra[k]) + } + for _, in := range r.Insights { + fmt.Fprintf(&b, "insight %s: %s\n", in.Date, in.Before) + } + if len(r.Clauses) > 0 { + b.WriteString("\n## Clauses\n\n") + for _, c := range r.Clauses { + fmt.Fprintf(&b, "%d. %s\n [%s, %s", c.N, c.Text, c.Status, c.Source) + if len(c.ChangedBy) > 0 { + b.WriteString("; by " + strings.Join(c.ChangedBy, ", ")) + } + b.WriteString("]\n") + } + } + if len(r.Links) > 0 { + b.WriteString("\n## Links\n\n") + for _, l := range r.Links { + fmt.Fprintf(&b, "- %s\n", l) + } + } + for _, s := range r.Sections { + fmt.Fprintf(&b, "\n## %s\n\n%s\n", s.Name, strings.TrimRight(s.Text, "\n")) + } + return b.String() +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/reference.go b/modules/mesh-knowledge/cmd/mesh-knowledge/reference.go new file mode 100644 index 00000000..47dc473b --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/reference.go @@ -0,0 +1,222 @@ +package main + +// What the rules judge a record against and this module does not hold: the reading order's topics +// (02-DECISIONS/README.md) and the glossary's retired words (00-META/glossary.md), read from hq through the +// records module, and the daemons' lines, a copy kept beside this code (daemon-lines, compared with the +// catalogue's own copy by a test). + +import ( + _ "embed" + "fmt" + "regexp" + "strings" + "unicode" +) + +//go:embed daemon-lines +var daemonLinesFile string + +// Reference is what the rules read besides the records. +type Reference struct { + Commit string + // Topics are the reading order's topics. + Topics []string + // Retired are the glossary's words retired in hq's prose (no scope, or hq). + Retired []string + // Lines are the daemons' lines: a daemon and a command, and whether it is a line only with an argument. + Lines []DaemonLine +} + +// DaemonLine is one daemon's command a person never types. +type DaemonLine struct { + Daemon, Command string + WithArgument bool +} + +var ( + topicLine = regexp.MustCompile(`(?m)^\d+\.\s+\*\*([^*]+)\*\*\s+—\s+` + "`" + `topic:\s*([^` + "`" + `]+)` + "`") + notLine = regexp.MustCompile(`(?m)^\s*(?:[-*]\s+)?\*Not:\*(.*)$`) + struck = regexp.MustCompile(`~~([^~]+)~~(?:\s*\((hq|tools)\))?`) +) + +// ReadingOrder is the topics the reading order writes, in order. +func ReadingOrder(readme string) []string { + var out []string + for _, m := range topicLine.FindAllStringSubmatch(readme, -1) { + out = append(out, strings.TrimSpace(m[2])) + } + return out +} + +// RetiredWords are the glossary's words retired in hq's prose: a struck word on a *Not:* line with no scope or +// the scope hq; "a / b" is two words. +func RetiredWords(glossary string) []string { + var out []string + for _, line := range notLine.FindAllStringSubmatch(glossary, -1) { + for _, m := range struck.FindAllStringSubmatch(line[1], -1) { + if m[2] == "tools" { + continue + } + for _, w := range strings.Split(m[1], " / ") { + if w = strings.TrimSpace(w); w != "" { + out = append(out, w) + } + } + } + } + return out +} + +// DaemonLines reads the daemons' lines in the catalogue's format: ` `, ` …` after a command +// that is a line only with an argument after it. +func DaemonLines(file string) []DaemonLine { + var out []DaemonLine + for _, line := range strings.Split(file, "\n") { + line = strings.TrimSpace(line) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + with := strings.HasSuffix(line, " …") + line = strings.TrimSuffix(line, " …") + d, c, ok := strings.Cut(line, " ") + if ok { + out = append(out, DaemonLine{Daemon: d, Command: c, WithArgument: with}) + } + } + return out +} + +// LoadReference reads the reading order and the glossary from hq through the records module. +func LoadReference(records Records) (*Reference, error) { + commit, err := records.Standing() + if err != nil { + return nil, fmt.Errorf("hq cannot be read through the records module (%v)", err) + } + readme, _, err := records.Read("02-DECISIONS/README.md") + if err != nil { + return nil, fmt.Errorf("the reading order cannot be read (%v)", err) + } + glossary, _, err := records.Read("00-META/glossary.md") + if err != nil { + return nil, fmt.Errorf("the glossary cannot be read (%v)", err) + } + ref := &Reference{Commit: commit, Topics: ReadingOrder(readme), Retired: RetiredWords(glossary), Lines: DaemonLines(daemonLinesFile)} + if len(ref.Topics) == 0 { + return nil, fmt.Errorf("hq's 02-DECISIONS/README.md at %s writes no reading order", short(commit)) + } + if len(ref.Retired) == 0 { + return nil, fmt.Errorf("hq's glossary at %s names no retired word: the words rule would pass on anything", short(commit)) + } + return ref, nil +} + +func short(commit string) string { + if len(commit) > 12 { + return commit[:12] + } + return commit +} + +// ---- running prose --------------------------------------------------------------------------------------- + +var ( + codeBlock = regexp.MustCompile("(?ms)^\\s*```.*?^\\s*```") + comment = regexp.MustCompile(`(?s)`) + blockQuote = regexp.MustCompile(`(?m)^\s*>.*$`) + codeSpan = regexp.MustCompile("`[^`\n]+`") + linkTarget = regexp.MustCompile(`\]\([^)\s]*\)`) + strike = regexp.MustCompile(`~~[^~\n]+~~`) + quoted = regexp.MustCompile(`"[^"\n]*"`) + curly = regexp.MustCompile(`“[^”]*”`) + single = regexp.MustCompile(`‘[^’\n]*’`) +) + +func blankOut(text string, res ...*regexp.Regexp) string { + for _, re := range res { + text = re.ReplaceAllStringFunc(text, func(m string) string { + return strings.Map(func(r rune) rune { + if r == '\n' { + return r + } + return ' ' + }, m) + }) + } + return text +} + +// Prose is the running prose of a text, as hq's words check reads it: code, comments, block quotes, quotations, +// struck-through words and link targets blanked. +func Prose(text string) string { + return blankOut(text, codeBlock, comment, blockQuote, codeSpan, linkTarget, strike, quoted, curly, single) +} + +// OwnWords is a text with what is not its own words blanked; code is kept, since a line to type is written there. +func OwnWords(text string) string { + return blankOut(text, comment, blockQuote, linkTarget, strike, quoted, curly, single) +} + +// wordPattern is a retired word matched whole and in any case, a space matching any run of space or hyphen, its +// plural matched as the word. +func wordPattern(word string) *regexp.Regexp { + parts := strings.Fields(word) + for i, p := range parts { + parts[i] = regexp.QuoteMeta(p) + } + return regexp.MustCompile(`(?i)` + strings.Join(parts, `[\s-]+`) + `(?:e?s)?`) +} + +func isWordRune(r rune) bool { + return r == '-' || r == '_' || unicode.IsLetter(r) || unicode.IsDigit(r) +} + +// wholeMatches are the matches of re in text that stand alone: no letter, digit, - or _ on either side. +func wholeMatches(re *regexp.Regexp, text string) []string { + var out []string + for _, loc := range re.FindAllStringIndex(text, -1) { + before, after := rune(' '), rune(' ') + if loc[0] > 0 { + before = []rune(text[:loc[0]])[len([]rune(text[:loc[0]]))-1] + } + if loc[1] < len(text) { + after = []rune(text[loc[1]:])[0] + } + if !isWordRune(before) && !isWordRune(after) { + out = append(out, text[loc[0]:loc[1]]) + } + } + return out +} + +// RetiredIn are the retired words a text uses in its running prose. +func (ref *Reference) RetiredIn(text string) []string { + prose := Prose(text) + var out []string + for _, w := range ref.Retired { + for _, m := range wholeMatches(wordPattern(w), prose) { + out = append(out, strings.Join(strings.Fields(m), " ")) + } + } + return out +} + +// LinesIn are the daemons' lines a text writes. +func (ref *Reference) LinesIn(text string) []string { + own := OwnWords(text) + var out []string + for _, l := range ref.Lines { + d, c := regexp.QuoteMeta(l.Daemon), regexp.QuoteMeta(l.Command) + var re *regexp.Regexp + if l.WithArgument { + re = regexp.MustCompile(`(?m)(?:^|` + "`" + `)[ \t]*(?:\$[ \t]*)?` + d + `\s+` + c + `\s+[^\s` + "`" + `]`) + if re.MatchString(own) { + out = append(out, l.Daemon+" "+l.Command) + } + continue + } + if len(wholeMatches(regexp.MustCompile(d+`\s+`+c), own)) > 0 { + out = append(out, l.Daemon+" "+l.Command) + } + } + return out +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/review_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/review_test.go new file mode 100644 index 00000000..cc8c40e2 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/review_test.go @@ -0,0 +1,276 @@ +package main + +import ( + "context" + "strings" + "testing" + "time" + + "git.novox.be/novox/mesh-sdk/go/asks" +) + +// to-be 55 §10: "A record is accepted only after a review by someone else, and, when it needs the operator, only +// on the warrant — the module's tests: a review by the author refused; a needs operator record unaccepted without +// the warrant, accepted with it." + +func proposed(t *testing.T, w *world, author string, needsOperator bool) int { + t.Helper() + n := w.reserved(t, author) + p := valid(n) + p.NeedsOperator = needsOperator + if _, err := w.k.Propose(author, p); err != nil { + t.Fatal(err) + } + return n +} + +func TestAReviewByTheAuthorIsRefused(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := imported(t, s) + n := proposed(t, w, "author@g14", false) + _, err := w.k.Review("author@g14", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}) + if err == nil || !strings.Contains(err.Error(), "someone who did not write it") { + t.Fatalf("a review by the author: %v", err) + } + if e := mustGet(t, s, Key{KindDecision, n}); e.Current.Status != StatusProposed || len(e.Current.Reviews) != 0 { + t.Fatalf("the author's review changed the record: %+v", e.Current) + } + }) +} + +// While the runtime proves no caller, a review cannot be told from one by the author, and none is taken: the +// caller is never read from the arguments. +func TestAReviewByAnUnprovenCallerIsRefused(t *testing.T) { + w := imported(t, newMemStore()) + n := proposed(t, w, Unproven, false) + _, err := w.k.Review(Unproven, ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}) + if err == nil || !strings.Contains(err.Error(), "issue 365") { + t.Fatalf("an unproven review: %v", err) + } + if mustGet(t, w.k.Store, Key{KindDecision, n}).Current.Status != StatusProposed { + t.Fatal("accepted on an unproven review") + } +} + +func TestAReviewBySomeoneElseAcceptsTheRecordAndMovesWhatItChanges(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := imported(t, s) + n := proposed(t, w, "author@g14", false) + // Changes asked first: it stays proposed, the findings kept. + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictChanges}); err == nil { + t.Fatal("changes without findings taken") + } + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictChanges, Findings: "§2: name the bound"}); err != nil { + t.Fatal(err) + } + e := mustGet(t, s, Key{KindDecision, n}) + if e.Current.Status != StatusProposed || len(e.Current.Reviews) != 1 || e.Current.Reviews[0].Findings != "§2: name the bound" { + t.Fatalf("after changes: %+v", e.Current) + } + got, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}) + if err != nil { + t.Fatal(err) + } + e = mustGet(t, s, Key{KindDecision, n}) + if got.Status != StatusAccepted || e.Current.Status != StatusAccepted || e.Current.Clauses[0].Status != ClauseInForce || + e.Current.AcceptedAt.IsZero() { + t.Fatalf("not accepted: %+v", e.Current) + } + // 0276 §1 is changed by the new record's clause 1, as its changes link says. + old := mustGet(t, s, Key{KindDecision, 276}) + c := old.Current.Clause(1) + if c.Status != ClauseChanged || len(c.ChangedBy) != 1 || c.ChangedBy[0] != itoaKey(n)+" §1" { + t.Fatalf("0276 §1: %+v", c) + } + if len(w.said.of(EventAccepted)) != 1 || len(w.said.of(EventChanged)) != 1 { + t.Fatalf("events: %v", w.said.events) + } + // holds of 0276 says what changed §1. + h, err := w.k.Holds("", &Key{KindDecision, 276}, 0) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(h.Clauses[0].Holds, "changed by "+itoaKey(n)) { + t.Fatalf("holds: %+v", h.Clauses[0]) + } + }) +} + +func itoaKey(n int) string { return Key{KindDecision, n}.String() } + +// A record that supersedes another moves it and every clause of it to superseded. +func TestASupersedingRecordSupersedesTheOlderOnAcceptance(t *testing.T) { + w := imported(t, newMemStore()) + n := w.reserved(t, "author@g14") + p := valid(n) + p.Links = []LinkAsk{{Kind: LinkSupersedes, To: "0276"}} + p.Sections[0].Text = "The merge window is replaced." + if _, err := w.k.Propose("author@g14", p); err != nil { + t.Fatal(err) + } + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err != nil { + t.Fatal(err) + } + old := mustGet(t, w.k.Store, Key{KindDecision, 276}).Current + if old.Status != StatusSuperseded || old.Clause(4).Status != ClauseSuperseded || old.Extra["superseded-by"] != itoaKey(n) { + t.Fatalf("0276: %s, §4 %+v", old.Status, old.Clause(4)) + } + h, _ := w.k.Holds("", &Key{KindDecision, 276}, 0) + if len(h.Clauses) != 0 { + t.Fatalf("a superseded record holds %v", h.Clauses) + } +} + +func TestARecordThatNeedsTheOperatorIsAcceptedOnlyOnTheWarrant(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := imported(t, s) + n := proposed(t, w, "author@g14", true) + got, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}) + if err != nil { + t.Fatal(err) + } + if got.Status != StatusProposed || len(w.router.asked) != 1 { + t.Fatalf("after the review: %+v, asks %d", got, len(w.router.asked)) + } + ask := w.router.asked[0] + if err := ask.Check(w.clock); err != nil || ask.Options[0].Level != asks.Approve || ask.Options[1].Level != asks.Approve { + t.Fatalf("the ask: %v %+v", err, ask) + } + // Without the warrant: nothing is accepted, however often the router's record is read. + for i := 0; i < 2; i++ { + if _, err := w.k.Reconcile(); err != nil { + t.Fatal(err) + } + } + if e := mustGet(t, s, Key{KindDecision, n}); e.Current.Status != StatusProposed { + t.Fatalf("accepted with no warrant: %s", e.Current.Status) + } + h, _ := w.k.Holds("", &Key{KindDecision, n}, 0) + if len(h.Clauses) != 0 { + t.Fatalf("a record waiting for the operator holds %v", h.Clauses) + } + // The operator's Approve, on a channel that proves who answered: accepted, the warrant kept. + w.clock = w.clock.Add(10 * time.Minute) + warrant := w.router.answer(ask.ID, OptionApprove, w.clock) + said, err := w.k.Reconcile() + if err != nil { + t.Fatal(err) + } + e := mustGet(t, s, Key{KindDecision, n}) + if e.Current.Status != StatusAccepted || e.Current.Ask == nil || e.Current.Ask.Warrant != warrant.Says() || + e.Current.Ask.Said != AskApproved || len(said) != 1 { + t.Fatalf("on the warrant: %+v, ask %+v, said %v", e.Current.Status, e.Current.Ask, said) + } + vs, _ := s.Versions(context.Background(), Key{KindDecision, n}) + if last := vs[len(vs)-1]; !strings.Contains(last.Why, "warrant") || last.By != "the operator" { + t.Fatalf("the accepting version: %+v", last) + } + // Read again: decided once. + if said, _ := w.k.Reconcile(); len(said) != 0 { + t.Fatalf("decided twice: %v", said) + } + }) +} + +// A warrant for an ask whose record changed after it was asked does not hold: the act it bound is another version. +func TestAWarrantForAnotherVersionDoesNotAccept(t *testing.T) { + w := imported(t, newMemStore()) + n := proposed(t, w, "author@g14", true) + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err != nil { + t.Fatal(err) + } + // The record is changed behind the ask, keeping the ask: what the operator was shown is not what is held. + ctx := context.Background() + e := mustGet(t, w.k.Store, Key{KindDecision, n}) + r := e.Current.Clone() + r.Clauses[1].Text = "**A batch is delivered by many walks.** One commit per repository." + if err := w.k.Store.Save(ctx, Version{By: "someone", Why: "changed behind the ask", Record: r}, true, false, e.Revision); err != nil { + t.Fatal(err) + } + w.router.answer(w.router.asked[0].ID, OptionApprove, w.clock.Add(time.Minute)) + if _, err := w.k.Reconcile(); err != nil { + t.Fatal(err) + } + e = mustGet(t, w.k.Store, Key{KindDecision, n}) + if e.Current.Status != StatusProposed || !strings.Contains(e.Current.Ask.Said, "does not hold") { + t.Fatalf("accepted on a warrant for another version: %s, %+v", e.Current.Status, e.Current.Ask) + } +} + +func TestTheOperatorsDeclineLeavesTheRecordProposed(t *testing.T) { + w := imported(t, newMemStore()) + n := proposed(t, w, "author@g14", true) + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err != nil { + t.Fatal(err) + } + w.router.answer(w.router.asked[0].ID, OptionDecline, w.clock.Add(time.Minute)) + if _, err := w.k.Reconcile(); err != nil { + t.Fatal(err) + } + e := mustGet(t, w.k.Store, Key{KindDecision, n}) + if e.Current.Status != StatusProposed || e.Current.Ask.Said != "declined by the operator" { + t.Fatalf("%s %+v", e.Current.Status, e.Current.Ask) + } +} + +// An accepted record changes only by a progressive insight, which waits for its review while the accepted version +// is served. +func TestAnAcceptedRecordChangesOnlyByAnInsightReviewedLikeAProposal(t *testing.T) { + w := imported(t, newMemStore()) + n := proposed(t, w, "author@g14", false) + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err != nil { + t.Fatal(err) + } + p := valid(n) + p.Sections[2].Text = "Merges land sooner, by about a minute." + if _, err := w.k.Propose("author@g14", p); err == nil || !strings.Contains(err.Error(), "progressive insight") { + t.Fatalf("an accepted record rewritten: %v", err) + } + p.Insight = "it said only that merges land sooner" + if _, err := w.k.Propose("author@g14", p); err != nil { + t.Fatal(err) + } + e := mustGet(t, w.k.Store, Key{KindDecision, n}) + if e.Pending == nil || e.Current.Section("Consequences") != "Merges land sooner." { + t.Fatalf("the insight was served before its review: %+v", e.Current.Sections) + } + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err != nil { + t.Fatal(err) + } + e = mustGet(t, w.k.Store, Key{KindDecision, n}) + if e.Pending != nil || e.Current.Status != StatusAccepted || len(e.Current.Insights) != 1 || + e.Current.Section("Consequences") != "Merges land sooner, by about a minute." { + t.Fatalf("after the insight's review: %+v", e.Current) + } + // 0276 §1 was changed once, by the acceptance; the insight keeps the link and changes it no further. + if c := mustGet(t, w.k.Store, Key{KindDecision, 276}).Current.Clause(1); len(c.ChangedBy) != 1 { + t.Fatalf("0276 §1 changed again by an insight: %v", c.ChangedBy) + } +} + +func TestReserveAsksTheTrackerAndANumberNeverProposedIsWithdrawn(t *testing.T) { + w := newWorld(t, newMemStore(), fixture()) + r, err := w.k.ReserveNumber("author@g14", KindResearch, "how a knowledge base is asked") + if err != nil { + t.Fatal(err) + } + if r.Number != 50 || len(w.tracker.asked) != 1 || w.tracker.asked[0]["kind"] != KindResearch || + w.tracker.asked[0]["for"] != "how a knowledge base is asked" { + t.Fatalf("%+v %v", r, w.tracker.asked) + } + if _, err := w.k.ReserveNumber("author@g14", "design", "x"); err == nil { + t.Fatal("a design number reserved") + } + w.clock = w.clock.Add(DefaultReservedFor + time.Hour) + if n, err := w.k.Withdraw(); err != nil || n != 1 { + t.Fatalf("withdrew %d (%v)", n, err) + } + e := mustGet(t, w.k.Store, Key{KindResearch, 50}) + if e.Current.Status != StatusWithdrawn || e.Current.ReservedBy != "author@g14" { + t.Fatalf("%+v", e.Current) + } + if _, err := w.k.Propose("author@g14", ProposeAsk{Kind: KindResearch, Number: 50, Title: "late", Status: StatusActive, + Sections: []Section{{Name: "00-overview.md", Text: "x"}}}); err == nil { + t.Fatal("a withdrawn number took a proposal") + } +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/rules.go b/modules/mesh-knowledge/cmd/mesh-knowledge/rules.go new file mode 100644 index 00000000..b7b0a36a --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/rules.go @@ -0,0 +1,533 @@ +package main + +// The rules a record is held to (novox/hq ADR 0290 rule 4, to-be 55 §4 and §5). +// +// **29 rules judge one record or its prose**, and `propose` refuses a record that breaks any of them, naming every +// one it breaks at once. They are hq's checks (00-META/checks/records.py, cycle.py, index.py, words.py) as they +// judge one record, moved to the write: 25 on its structure, 4 on its prose. Each has an id, said in the refusal, +// and one case in the table test (TestEveryPerRecordRuleRefusesAProposal). +// +// **4 rules judge the whole record set** (wholeSetRules) and run after every acceptance, and in the check +// process every few minutes: a failure is kept as a finding, which the module's health answers, so the mesh +// raises a condition naming the rule and the records. It does not undo the acceptance. + +import ( + "fmt" + "regexp" + "strings" +) + +// Rule is one rule that judges one record: its id and what it holds. +type Rule struct { + ID string + Holds string + // From is the hq check it comes from. + From string +} + +// PerRecordRules are the 29, in the order they are judged. +var PerRecordRules = []Rule{ + {"kind", "a record is a decision or a research effort", "cycle.py"}, + {"reserved", "its number was reserved for its kind and holds no other record", "cycle.py (duplicate numbers)"}, + {"title", "it has a title, one line of at most 200 characters", "records.py numbering"}, + {"topic", "a decision's topic is one of the reading order's", "records.py topics, index.py"}, + {"date", "its date is a day, YYYY-MM-DD", "records.py insights, cycle.py deferrals"}, + {"deciders", "a decision names who decided it", "records.py (deciders on every record)"}, + {"research-status", "a research effort is active, graduated or abandoned", "cycle.py research"}, + {"has-clause", "a decision has at least one clause", "records.py clauses"}, + {"clause-numbering", "its clauses are numbered from 1, in order, each once", "records.py clauses"}, + {"clause-lead", "every clause opens with a bold lead", "records.py clauses"}, + {"clause-size", "every clause says something, in at most 2000 bytes", "records.py clauses"}, + {"context", "a decision has a Context section", "the decision record's form"}, + {"consequences", "a decision has a Consequences section", "the decision record's form"}, + {"checked", "a decision says how it is checked", "AGENTS.md: a rule states how it is checked"}, + {"overview", "a research effort has its overview", "cycle.py research"}, + {"link-kind", "every link is of a known kind and goes out from the record or one of its clauses", "records.py links"}, + {"link-target", "every link names a record, and a clause, that exist", "records.py links, rests-on"}, + {"link-fits", "a link's kind fits its ends", "cycle.py research became, records.py supersession"}, + {"self-link", "no link points at the record itself", "records.py supersession"}, + {"rests-on", "a record it extends is accepted or proposed, never superseded or withdrawn", "records.py rests-on"}, + {"supersedes-accepted", "a record it supersedes or changes is accepted", "records.py supersession, partial-supersession"}, + {"changes-in-force", "a clause it changes is in force or changed, never superseded, proposed or drafted", "records.py partial-supersession"}, + {"live-citation", "a superseded record it cites is cited beside the record that replaced it", "records.py live-citation"}, + {"became", "a graduated research effort names what it became", "cycle.py research"}, + {"text-links", "every link its text writes to a decision record or research effort names one the knowledge base holds", "records.py links"}, + {"retired-word", "its prose uses no word the glossary retired", "words.py retired"}, + {"daemon-line", "it writes no daemon's line", "words.py lines"}, + {"deferral", "a paragraph that puts work off names the issue that tracks it", "cycle.py deferrals"}, + {"insight-form", "a progressive insight its text mentions is in the dated, marked form", "records.py insights"}, +} + +// Refusal is one rule a record breaks, and how. +type Refusal struct { + Rule string `json:"rule"` + Says string `json:"says"` +} + +func (r Refusal) String() string { return r.Rule + ": " + r.Says } + +// Lookup is the served version of a record the knowledge base holds, or nil. +type Lookup func(Key) *Record + +// MostClauseBytes is the most one clause may hold. +const MostClauseBytes = 2000 + +var ( + isDay = regexp.MustCompile(`^\d{4}-\d{2}-\d{2}$`) + deferral = regexp.MustCompile(`(?i)until (?:it is |they are |the code (?:is )?)?renamed|until the code rename|` + + `\ba later rename|not renamed here|identifier to rename|left (?:for|to) (?:a )?later|not decided here|` + + `\bpostponed\b|future work|\bdeferred\b|later work|not built here|\ba later change`) + issueRef = regexp.MustCompile(`(?i)tracked (?:by|in|as)\s+\[?issue (\d{3,5})|\[?issue (\d{3,5})\]?(?:\([^)]*\))?\s+tracks\b`) + insightPhrase = regexp.MustCompile(`(?i)progressive insights?`) + insightMarker = regexp.MustCompile(`\*\*Progressive insights?[ \t]*[—–-][ \t]*(\d{4}-\d{2}-\d{2})[^*\n]*\*\*`) +) + +// decisionSection is the text of a record's Decision section. +func decisionSection(r *Record) (string, bool) { + for _, s := range r.Sections { + if s.Name == "Decision" || strings.HasPrefix(s.Name, "Decision ") || strings.HasPrefix(s.Name, "Decision:") { + return s.Text, true + } + } + return "", false +} + +func hasSection(r *Record, names ...string) bool { + for _, s := range r.Sections { + for _, n := range names { + if strings.EqualFold(strings.TrimSpace(s.Name), n) && strings.TrimSpace(s.Text) != "" { + return true + } + } + } + return false +} + +// allText is every word of a record an agent reads: its title, clauses and sections. +func allText(r *Record) string { + var b strings.Builder + b.WriteString(r.Title + "\n\n") + for _, c := range r.Clauses { + b.WriteString(c.Text + "\n\n") + } + for _, s := range r.Sections { + b.WriteString(s.Text + "\n\n") + } + return b.String() +} + +// JudgeRecord holds a proposed record to the 29 rules. held is the entry its number holds (a reservation, the +// proposal being revised, or the accepted record an insight corrects); lookup reads every other record. +func JudgeRecord(r *Record, held *Entry, lookup Lookup, ref *Reference) []Refusal { + var out []Refusal + refuse := func(rule, format string, a ...any) { + out = append(out, Refusal{Rule: rule, Says: fmt.Sprintf(format, a...)}) + } + decision := r.Kind == KindDecision + if r.Kind != KindDecision && r.Kind != KindResearch { + refuse("kind", "%q is neither decision nor research", r.Kind) + } + switch { + case held == nil: + refuse("reserved", "%s was never reserved: reserve gives the number", r.Key()) + case held.Current.Status == StatusWithdrawn: + refuse("reserved", "%s was reserved and withdrawn: reserve a new number", r.Key()) + } + title := strings.TrimSpace(r.Title) + if title == "" || strings.Contains(title, "\n") || len([]rune(title)) > 200 { + refuse("title", "the title is empty, more than one line, or longer than 200 characters") + } + if decision && !contains(ref.Topics, r.Topic) { + refuse("topic", "%q is not a topic of the reading order: %s", r.Topic, strings.Join(ref.Topics, ", ")) + } + if !isDay.MatchString(r.Date) { + refuse("date", "%q is not a day written YYYY-MM-DD", r.Date) + } + if decision && len(r.Deciders) == 0 { + refuse("deciders", "a decision names who decided it") + } + if !decision && !contains(ResearchStatuses, r.Effort) { + refuse("research-status", "%q is not active, graduated or abandoned", r.Effort) + } + if decision && len(r.Clauses) == 0 { + refuse("has-clause", "a decision is made of clauses, and this one has none") + } + for i, c := range r.Clauses { + if c.N != i+1 { + refuse("clause-numbering", "clause %d stands %d. in order: clauses are numbered 1, 2, 3 … each once", c.N, i+1) + } + if c.Lead() == "" { + refuse("clause-lead", "clause %d does not open with a bold lead (**What is decided.** …)", c.N) + } + if strings.TrimSpace(c.Text) == "" || len(c.Text) > MostClauseBytes { + refuse("clause-size", "clause %d is empty or longer than %d bytes", c.N, MostClauseBytes) + } + } + if decision && !hasSection(r, "Context") { + refuse("context", "a decision has a Context section: why it was decided") + } + if decision && !hasSection(r, "Consequences") { + refuse("consequences", "a decision has a Consequences section: what follows from it, and what got harder") + } + if decision && !hasSection(r, "How it is checked") { + refuse("checked", "a decision has a section \"How it is checked\": a rule says how it is verified") + } + if !decision && !hasSection(r, "00-overview.md", "overview") { + refuse("overview", "a research effort has its overview, a section named 00-overview.md") + } + self := r.Key() + superseders := map[Key]bool{} + for _, l := range r.Links { + if to, ok := l.To.Record(); ok && l.Kind == LinkSupersedes { + superseders[to] = true + } + } + cited := map[Key]bool{} + for _, l := range r.Links { + if to, ok := l.To.Record(); ok { + cited[to] = true + } + } + for _, l := range r.Links { + if !contains(LinkKinds, l.Kind) { + refuse("link-kind", "%q is not a kind of link: %s", l.Kind, strings.Join(LinkKinds, ", ")) + continue + } + if l.From > 0 && r.Clause(l.From) == nil { + refuse("link-kind", "the link %s goes out from clause %d, which the record does not have", l, l.From) + } + to, isRecord := l.To.Record() + if isRecord && to == self { + refuse("self-link", "the link %s points at the record itself", l) + continue + } + var target *Record + if isRecord { + target = lookup(to) + if target == nil || target.Status == StatusReserved || target.Status == StatusWithdrawn { + refuse("link-target", "the link %s names %s, which the knowledge base does not hold", l, to) + continue + } + if l.To.Clause > 0 && target.Clause(l.To.Clause) == nil { + refuse("link-target", "the link %s names clause %d, which %s does not have", l, l.To.Clause, to) + continue + } + } + switch l.Kind { + case LinkBecame: + if r.Kind != KindResearch || !(l.To.Kind == KindDecision || l.To.Kind == TargetDesign) || l.To.Clause > 0 { + refuse("link-fits", "became goes from a research effort to a decision record or a design: not %s", l) + } + case LinkChanges: + if !decision || l.To.Kind != KindDecision || l.To.Clause == 0 { + refuse("link-fits", "changes goes from a decision (or a clause of it) to a clause of another decision, named as 0276 §4: not %s", l) + } + case LinkSupersedes, LinkExtends: + if r.Kind != l.To.Kind || !isRecord || l.To.Clause > 0 { + refuse("link-fits", "%s goes from a record to a record of its kind: not %s", l.Kind, l) + } + } + if target == nil { + continue + } + if held != nil && held.Current.Accepted() && hasLink(held.Current, l) { + // An insight keeps what the accepted record linked: judged when it was accepted. + continue + } + switch l.Kind { + case LinkExtends: + if target.Status == StatusSuperseded && !superseders[to] { + refuse("rests-on", "%s extends %s, which is superseded", self, to) + } + case LinkSupersedes: + if !target.Accepted() || target.Status == StatusSuperseded { + refuse("supersedes-accepted", "%s supersedes %s, which is %s, not accepted", self, to, target.Status) + } + case LinkChanges: + if !target.Accepted() || target.Status == StatusSuperseded { + refuse("supersedes-accepted", "%s changes %s, which is %s, not accepted", self, to, target.Status) + } else if c := target.Clause(l.To.Clause); c != nil { + if (c.Status != ClauseInForce && c.Status != ClauseChanged) || c.Source == SourceDrafted { + refuse("changes-in-force", "%s changes %s §%d, which is %s (%s)", self, to, l.To.Clause, c.Status, c.Source) + } + } + case LinkCites: + if target.Status == StatusSuperseded { + named := false + for _, by := range supersedersOf(target) { + named = named || cited[by] + } + if !named { + refuse("live-citation", "%s cites %s, which is superseded, and not the record that replaced it", self, to) + } + } + } + } + if r.Kind == KindResearch && r.Effort == StatusGraduated { + became := false + for _, l := range r.Links { + became = became || l.Kind == LinkBecame + } + if !became { + refuse("became", "a graduated research effort names what it became, as a became link") + } + } + for _, s := range r.Sections { + for _, m := range mdLink.FindAllStringSubmatch(s.Text, -1) { + target := m[1] + var k Key + switch { + case researchFolder.MatchString(target): + n := atoi(researchFolder.FindStringSubmatch(target)[1]) + k = Key{KindResearch, n} + case adrFile.MatchString(target) && !strings.Contains(target, "04-ISSUES") && !strings.Contains(target, "03-DESIGN"): + k = Key{KindDecision, atoi(adrFile.FindStringSubmatch(target)[1])} + default: + continue + } + if k == self { + continue + } + if t := lookup(k); t == nil || t.Status == StatusReserved || t.Status == StatusWithdrawn { + refuse("text-links", "the section %s links %s, which the knowledge base does not hold", s.Name, k) + } + } + } + text := allText(r) + if words := ref.RetiredIn(text); len(words) > 0 { + refuse("retired-word", "it uses %s, retired by the glossary", quoteAll(unique(words))) + } + if lines := ref.LinesIn(text); len(lines) > 0 { + refuse("daemon-line", "it writes %s, a daemon's line: the operator types nox", quoteAll(unique(lines))) + } + for _, s := range r.Sections { + if strings.Contains(strings.ToLower(s.Name), "option") || strings.Contains(strings.ToLower(s.Name), "rejected") { + continue + } + for _, p := range paragraphsOf(s.Text) { + if m := deferral.FindString(p); m != "" && !issueRef.MatchString(p) { + refuse("deferral", "the section %s puts work off (%q) and names no issue that tracks it (\"tracked by issue N\")", s.Name, m) + } + } + } + for _, c := range r.Clauses { + if m := deferral.FindString(c.Text); m != "" && !issueRef.MatchString(c.Text) { + refuse("deferral", "clause %d puts work off (%q) and names no issue that tracks it (\"tracked by issue N\")", c.N, m) + } + } + marked := insightMarker.FindAllStringSubmatchIndex(text, -1) + for _, loc := range insightPhrase.FindAllStringIndex(text, -1) { + inside := false + for _, mk := range marked { + inside = inside || (mk[0] <= loc[0] && loc[1] <= mk[1]) + } + line := lineAround(text, loc[0]) + if inside || strings.Contains(line, "](") || strings.HasPrefix(strings.TrimSpace(line), "#") { + continue + } + refuse("insight-form", "it mentions a progressive insight outside the dated marked form **Progressive insight — YYYY-MM-DD.**") + break + } + for _, mk := range insightMarker.FindAllStringSubmatch(text, -1) { + if isDay.MatchString(r.Date) && mk[1] < r.Date { + refuse("insight-form", "a progressive insight dated %s predates the record (%s)", mk[1], r.Date) + } + } + return out +} + +func hasLink(r *Record, l Link) bool { + for _, x := range r.Links { + if x.Kind == l.Kind && x.From == l.From && x.To == l.To { + return true + } + } + return false +} + +func lineAround(text string, at int) string { + start := strings.LastIndex(text[:at], "\n") + 1 + end := strings.Index(text[at:], "\n") + if end < 0 { + return text[start:] + } + return text[start : at+end] +} + +// paragraphsOf cuts a text at blank lines and a list's items. +func paragraphsOf(text string) []string { + var out []string + for _, chunk := range strings.Split(text, "\n\n") { + for _, item := range regexp.MustCompile(`\n(?:[-*] |\d+\. )`).Split(chunk, -1) { + if strings.TrimSpace(item) != "" { + out = append(out, item) + } + } + } + return out +} + +// supersedersOf are the records a record says superseded it: its superseded-by, a file name as hq wrote it or +// "ADR NNNN" as an acceptance here writes it. +func supersedersOf(r *Record) []Key { + var out []Key + for _, by := range strings.Split(r.Extra["superseded-by"], ",") { + by = strings.TrimSpace(by) + if m := adrFile.FindStringSubmatch(by); m != nil { + out = append(out, Key{KindDecision, atoi(m[1])}) + } else if ref, err := ParseRef(by); err == nil { + if k, ok := ref.Record(); ok { + out = append(out, k) + } + } + } + return out +} + +func atoi(s string) int { + n := 0 + for _, c := range s { + n = n*10 + int(c-'0') + } + return n +} + +func contains(list []string, s string) bool { + for _, x := range list { + if x == s { + return true + } + } + return false +} + +func unique(list []string) []string { + seen := map[string]bool{} + var out []string + for _, s := range list { + if !seen[strings.ToLower(s)] { + seen[strings.ToLower(s)] = true + out = append(out, s) + } + } + return out +} + +func quoteAll(list []string) string { + q := make([]string, len(list)) + for i, s := range list { + q[i] = fmt.Sprintf("%q", s) + } + return strings.Join(q, ", ") +} + +// ---- the whole record set ---------------------------------------------------------------------------------- + +// WholeSetRules are the 4 rules that judge the whole record set. +var WholeSetRules = []Rule{ + {"cited", "a decision accepted here is cited by another record or names a home in hq", "cycle.py decisions"}, + {"supersession", "a superseded record is named by the record that superseded it, and every record an accepted record supersedes is superseded", "records.py supersession"}, + {"partial", "a changed clause is changed by an accepted record's changes link, and every clause an accepted record changes is changed or superseded", "records.py partial-supersession"}, + {"rests-on-live", "no accepted record extends a superseded one, but the record that superseded it", "records.py rests-on"}, +} + +// JudgeSet holds the served versions of every record to the 4 whole-set rules. An imported record was held to +// hq's own checks at the commit it was read at, so the first rule judges only a record accepted here. +func JudgeSet(records []*Record) []Finding { + byKey := map[Key]*Record{} + for _, r := range records { + byKey[r.Key()] = r + } + inbound := map[Key][]struct { + from *Record + l Link + }{} + for _, r := range records { + if !r.Accepted() && r.Status != StatusSuperseded { + continue + } + for _, l := range r.Links { + if to, ok := l.To.Record(); ok { + inbound[to] = append(inbound[to], struct { + from *Record + l Link + }{r, l}) + } + } + } + var out []Finding + add := func(rule, says string, keys ...Key) { + names := make([]string, len(keys)) + for i, k := range keys { + names[i] = k.String() + } + out = append(out, Finding{Rule: rule, Records: names, Says: says}) + } + for _, r := range records { + k := r.Key() + if r.Kind == KindDecision && r.Status == StatusAccepted && !r.AcceptedAt.IsZero() && len(r.Homes) == 0 { + cited := false + for _, in := range inbound[k] { + cited = cited || in.from.Key() != k + } + if !cited { + add("cited", fmt.Sprintf("%s is accepted and nothing cites it: no record links it and it names no home", k), k) + } + } + if r.Status == StatusSuperseded { + by := false + for _, in := range inbound[k] { + // The record that superseded it may since have been superseded itself, as hq's 0125 by 0127 by 0131. + by = by || in.l.Kind == LinkSupersedes + } + if !by { + add("supersession", fmt.Sprintf("%s is superseded and no record says it supersedes it", k), k) + } + } + if r.Accepted() { + for _, l := range r.Links { + to, ok := l.To.Record() + target := byKey[to] + if !ok || target == nil { + continue + } + switch l.Kind { + case LinkSupersedes: + if target.Status != StatusSuperseded { + add("supersession", fmt.Sprintf("%s supersedes %s, which is %s", k, to, target.Status), k, to) + } + case LinkChanges: + if l.To.Clause == 0 { + continue + } + if c := target.Clause(l.To.Clause); c != nil && c.Status != ClauseChanged && c.Status != ClauseSuperseded { + add("partial", fmt.Sprintf("%s changes %s §%d, which is %s", k, to, l.To.Clause, c.Status), k, to) + } + case LinkExtends: + if target.Status == StatusSuperseded { + superseder := false + for _, in := range inbound[to] { + superseder = superseder || (in.l.Kind == LinkSupersedes && in.from.Key() == k) + } + if !superseder { + add("rests-on-live", fmt.Sprintf("%s extends %s, which is superseded", k, to), k, to) + } + } + } + } + } + for _, c := range r.Clauses { + if c.Status != ClauseChanged { + continue + } + by := false + for _, in := range inbound[k] { + by = by || (in.l.Kind == LinkChanges && in.l.To.Clause == c.N && in.from.Accepted()) + } + if !by { + add("partial", fmt.Sprintf("%s §%d is changed and no accepted record changes it", k, c.N), k) + } + } + } + return out +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/rules_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/rules_test.go new file mode 100644 index 00000000..6bdbb564 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/rules_test.go @@ -0,0 +1,221 @@ +package main + +import ( + "context" + "fmt" + "strings" + "testing" +) + +// to-be 55 §10: "A proposal that breaks a per-record rule is refused, naming every reason — the module's table +// test, one case per rule of §4." Each case takes a proposal every rule takes and breaks one rule; the proposal is +// refused, the refusal names that rule, and nothing is written. A rule with no case fails the test. +func TestEveryPerRecordRuleRefusesAProposal(t *testing.T) { + cases := []struct { + rule string + break_ func(p *ProposeAsk, w *world, t *testing.T) + }{ + {"kind", func(p *ProposeAsk, w *world, t *testing.T) { + // A kind the verb refuses before the rules: judged by the rules when a record of another kind is held. + p.Kind = "design" + }}, + {"reserved", func(p *ProposeAsk, w *world, t *testing.T) { p.Number = 9999 }}, + {"title", func(p *ProposeAsk, w *world, t *testing.T) { p.Title = "two\nlines" }}, + {"topic", func(p *ProposeAsk, w *world, t *testing.T) { p.Topic = "gardening" }}, + {"date", func(p *ProposeAsk, w *world, t *testing.T) { p.Date = "11 October" }}, + {"deciders", func(p *ProposeAsk, w *world, t *testing.T) { p.Deciders = nil }}, + {"research-status", func(p *ProposeAsk, w *world, t *testing.T) { + p.Kind, p.Number = KindResearch, w.reservedResearch(t) + p.Status, p.Links = "wondering", nil + p.Sections = []Section{{Name: "00-overview.md", Text: "An effort."}} + p.Clauses = nil + }}, + {"has-clause", func(p *ProposeAsk, w *world, t *testing.T) { p.Clauses = nil; p.Links = p.Links[:1] }}, + {"clause-numbering", func(p *ProposeAsk, w *world, t *testing.T) { + p.Clauses = []string{"1. **One.** A.", "3. **Three.** C."} + }}, + {"clause-lead", func(p *ProposeAsk, w *world, t *testing.T) { p.Clauses[1] = "A batch is delivered by one walk." }}, + {"clause-size", func(p *ProposeAsk, w *world, t *testing.T) { + p.Clauses[1] = "**Long.** " + strings.Repeat("word ", 500) + }}, + {"context", func(p *ProposeAsk, w *world, t *testing.T) { p.Sections = p.Sections[1:] }}, + {"consequences", func(p *ProposeAsk, w *world, t *testing.T) { p.Sections = append(p.Sections[:2], p.Sections[3]) }}, + {"checked", func(p *ProposeAsk, w *world, t *testing.T) { p.Sections = p.Sections[:3] }}, + {"overview", func(p *ProposeAsk, w *world, t *testing.T) { + p.Kind, p.Number, p.Status, p.Clauses, p.Links = KindResearch, w.reservedResearch(t), StatusActive, nil, nil + p.Sections = []Section{{Name: "01-findings.md", Text: "Found."}} + }}, + {"link-kind", func(p *ProposeAsk, w *world, t *testing.T) { + p.Links = append(p.Links, LinkAsk{Kind: "admires", To: "0276"}) + }}, + {"link-target", func(p *ProposeAsk, w *world, t *testing.T) { + p.Links = append(p.Links, LinkAsk{Kind: LinkCites, To: "0007"}) + }}, + {"link-fits", func(p *ProposeAsk, w *world, t *testing.T) { + p.Links = append(p.Links, LinkAsk{Kind: LinkBecame, To: "0276"}) + }}, + {"self-link", func(p *ProposeAsk, w *world, t *testing.T) { + p.Links = append(p.Links, LinkAsk{Kind: LinkCites, To: itoa4(p.Number)}) + }}, + {"rests-on", func(p *ProposeAsk, w *world, t *testing.T) { + p.Links = append(p.Links, LinkAsk{Kind: LinkExtends, To: "0127"}) + }}, + {"supersedes-accepted", func(p *ProposeAsk, w *world, t *testing.T) { + p.Links = append(p.Links, LinkAsk{Kind: LinkSupersedes, To: "0127"}) + }}, + {"changes-in-force", func(p *ProposeAsk, w *world, t *testing.T) { + // 0131 superseded 0127, so 0127's clauses are superseded; a changes link to one names a clause no longer in force. + w.supersededClause(t) + p.Links = append(p.Links, LinkAsk{Kind: LinkChanges, To: "0011 §1", From: 2}) + }}, + {"live-citation", func(p *ProposeAsk, w *world, t *testing.T) { + p.Links = append(p.Links, LinkAsk{Kind: LinkCites, To: "0127"}) + }}, + {"became", func(p *ProposeAsk, w *world, t *testing.T) { + p.Kind, p.Number, p.Status, p.Clauses, p.Links = KindResearch, w.reservedResearch(t), StatusGraduated, nil, nil + p.Sections = []Section{{Name: "00-overview.md", Text: "An effort that graduated."}} + }}, + {"text-links", func(p *ProposeAsk, w *world, t *testing.T) { + p.Sections[0].Text += " See [ADR 0007](0007-a-record-nobody-holds.md)." + }}, + {"retired-word", func(p *ProposeAsk, w *world, t *testing.T) { + p.Sections[2].Text = "The control plane is quicker." + }}, + {"daemon-line", func(p *ProposeAsk, w *world, t *testing.T) { + p.Sections[3].Text = "Run `mesh-controller doctor` after the merge." + }}, + {"deferral", func(p *ProposeAsk, w *world, t *testing.T) { + p.Sections[2].Text = "The bound itself is left for later." + }}, + {"insight-form", func(p *ProposeAsk, w *world, t *testing.T) { + p.Sections[2].Text = "A progressive insight corrected the count." + }}, + } + covered := map[string]bool{} + for _, c := range cases { + covered[c.rule] = true + } + for _, r := range PerRecordRules { + if !covered[r.ID] { + t.Errorf("the rule %s has no case", r.ID) + } + } + if len(PerRecordRules) != 29 { + t.Errorf("%d per-record rules; ADR 0290 counts 29", len(PerRecordRules)) + } + for _, c := range cases { + t.Run(c.rule, func(t *testing.T) { + w := imported(t, newMemStore()) + n := w.reserved(t, "author@test") + p := valid(n) + c.break_(&p, w, t) + if c.rule == "kind" { + // The verb refuses a kind it does not hold before the rules; the rule itself is held by JudgeRecord. + ref, _ := w.k.reference() + r := &Record{Kind: "design", Number: n, Title: "x", Date: "2026-10-11"} + if !names(JudgeRecord(r, mustGet(t, w.k.Store, Key{KindDecision, n}), w.k.lookup(context.Background()), ref), "kind") { + t.Fatal("a record of an unknown kind was not refused by the kind rule") + } + if _, err := w.k.Propose("author@test", p); err == nil { + t.Fatal("propose took a record of an unknown kind") + } + return + } + before := versionsOf(t, w, Key{p.Kind, p.Number}) + _, err := w.k.Propose("author@test", p) + if err == nil { + t.Fatalf("a proposal breaking %s was taken", c.rule) + } + if !strings.Contains(err.Error(), "- "+c.rule+":") { + t.Fatalf("the refusal does not name %s: %v", c.rule, err) + } + if after := versionsOf(t, w, Key{p.Kind, p.Number}); after != before { + t.Fatalf("a refused proposal wrote a version (%d, was %d)", after, before) + } + }) + } +} + +// One proposal breaking three rules is refused naming all three, at once. +func TestARefusalNamesEveryReasonAtOnce(t *testing.T) { + w := imported(t, newMemStore()) + p := valid(w.reserved(t, "author@test")) + p.Topic = "gardening" + p.Clauses[1] = "no lead here." + p.Sections[2].Text = "The control plane is quicker." + _, err := w.k.Propose("author@test", p) + if err == nil { + t.Fatal("taken") + } + for _, rule := range []string{"topic", "clause-lead", "retired-word"} { + if !strings.Contains(err.Error(), "- "+rule+":") { + t.Errorf("the refusal does not name %s: %v", rule, err) + } + } +} + +// The proposal every case breaks is taken as it is: each case fails for its own rule, not for the base's. +func TestTheValidProposalIsTaken(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := imported(t, s) + n := w.reserved(t, "author@test") + got, err := w.k.Propose("author@test", valid(n)) + if err != nil { + t.Fatal(err) + } + e := mustGet(t, s, Key{KindDecision, n}) + if got.Status != StatusProposed || e.Current.Status != StatusProposed || len(e.Current.Clauses) != 2 || + e.Current.Clauses[0].Status != ClauseProposed || e.Current.Author != "author@test" { + t.Fatalf("%+v / %+v", got, e.Current) + } + if len(w.said.of(EventProposed)) != 1 || len(w.tracker.asked) != 1 || w.tracker.asked[0]["kind"] != KindDecision { + t.Fatalf("events %v, tracker %v", w.said.events, w.tracker.asked) + } + }) +} + +func names(refusals []Refusal, rule string) bool { + for _, r := range refusals { + if r.Rule == rule { + return true + } + } + return false +} + +func versionsOf(t *testing.T, w *world, k Key) int { + t.Helper() + e, err := w.k.Store.Get(context.Background(), k) + if err != nil { + t.Fatal(err) + } + if e == nil { + return 0 + } + return e.Versions +} + +func itoa4(n int) string { return fmt.Sprintf("%04d", n) } + +func (w *world) reservedResearch(t *testing.T) int { + t.Helper() + r, err := w.k.ReserveNumber("author@test", KindResearch, "a test effort") + if err != nil { + t.Fatal(err) + } + return r.Number +} + +// supersededClause gives 0011, accepted, one clause a later record superseded, so a change to that clause names +// one no longer in force. +func (w *world) supersededClause(t *testing.T) { + t.Helper() + ctx := context.Background() + e := mustGet(t, w.k.Store, Key{KindDecision, 11}) + r := e.Current.Clone() + r.Clauses = []Clause{{N: 1, Text: "**Generated.** Managed files are generated.", Status: ClauseSuperseded, Source: SourceWritten, + ChangedBy: []string{"ADR 0012"}}} + if err := w.k.Store.Save(ctx, Version{By: "test", Why: "superseded for the test", Record: r}, true, false, e.Revision); err != nil { + t.Fatal(err) + } +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/schema.sql b/modules/mesh-knowledge/cmd/mesh-knowledge/schema.sql new file mode 100644 index 00000000..3a2f6366 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/schema.sql @@ -0,0 +1,73 @@ +-- The consolidated schema of the knowledge base: what a fresh database is given at once, and what every +-- migration in migrations/ applied in order comes to (the test TestTheConsolidatedSchemaIsTheMigrationsApplied +-- holds the two equal). Consolidated through migration 0001. + +create table record ( + kind text not null check (kind in ('decision', 'research')), + number integer not null check (number > 0), + status text not null, + topic text not null default '', + current_version integer not null, + pending_version integer, + revision bigint not null default 1, + search tsvector not null default ''::tsvector, + primary key (kind, number) +); + +create index record_search on record using gin (search); +create index record_topic on record (topic); + +create table version ( + kind text not null, + number integer not null, + n integer not null check (n > 0), + by text not null, + at timestamptz not null, + why text not null, + insight boolean not null default false, + body jsonb not null, + primary key (kind, number, n), + foreign key (kind, number) references record (kind, number) +); + +create table clause ( + kind text not null, + number integer not null, + n integer not null check (n > 0), + text text not null, + status text not null, + source text not null, + search tsvector not null, + primary key (kind, number, n), + foreign key (kind, number) references record (kind, number) +); + +create index clause_search on clause using gin (search); + +create table link ( + from_kind text not null, + from_number integer not null, + from_clause integer not null default 0, + kind text not null, + to_kind text not null, + to_number integer not null default 0, + to_clause integer not null default 0, + to_path text not null default '', + body jsonb not null, + foreign key (from_kind, from_number) references record (kind, number) +); + +create index link_from on link (from_kind, from_number); +create index link_to on link (to_kind, to_number); + +create table finding ( + rule text not null, + records text[] not null, + says text not null, + at timestamptz not null +); + +create table told ( + topic text primary key, + at timestamptz not null default now() +); diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/store.go b/modules/mesh-knowledge/cmd/mesh-knowledge/store.go new file mode 100644 index 00000000..bbba2dbe --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/store.go @@ -0,0 +1,319 @@ +package main + +// Where the records are kept (novox/hq ADR 0290 rule 7): a database in the store, provided to the module +// (pgstore.go). The rules of the knowledge base are written once, against this interface; memStore is the same +// interface in memory, for the tests of those rules and for the terminal's dry run. + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + "sync" + "time" + "unicode" +) + +// ErrExists is a create refused because the record is already held. +var ErrExists = errors.New("the record is already held") + +// ErrChanged is a write refused because the entry changed since it was read. +var ErrChanged = errors.New("the record was changed by another write since it was read") + +// Hit is one place a question matched: a clause of a record (Clause > 0) or a record as a whole. +type Hit struct { + Key Key + Clause int + Rank float64 +} + +// Inbound is a link held on another record that points at this one. +type Inbound struct { + From Key + Link Link +} + +// Finding is one failure of a rule that judges the whole record set. +type Finding struct { + Rule string `json:"rule"` + Records []string `json:"records"` + Says string `json:"says"` + At time.Time `json:"at"` +} + +// Store keeps the records, every version of each, and the findings of the whole-set rules. +type Store interface { + // Get is one record's entry, or nil. + Get(ctx context.Context, k Key) (*Entry, error) + // All is every record's entry, in kind then number order. + All(ctx context.Context) ([]*Entry, error) + // Create writes a record that is not held, with its first version; ErrExists when it is. + Create(ctx context.Context, v Version) error + // Save writes a new version of a held record. current says whether it becomes the version served (else it + // is the one pending over it); clearPending drops the pending one. revision is the entry's revision as read: + // ErrChanged when it moved. + Save(ctx context.Context, v Version, current, clearPending bool, revision int64) error + // Versions is every version of a record, oldest first. + Versions(ctx context.Context, k Key) ([]Version, error) + // Search ranks the clauses and records of the served versions against a question. + Search(ctx context.Context, question string, limit int) ([]Hit, error) + // Inbound is every link of another served record that points at this one. + Inbound(ctx context.Context, k Key) ([]Inbound, error) + // SetFindings replaces the whole-set findings; Findings reads them. + SetFindings(ctx context.Context, f []Finding) error + Findings(ctx context.Context) ([]Finding, error) + // Told records that the operator was told about a topic's clauses, once; false when it was already. + Told(ctx context.Context, topic string) (bool, error) +} + +// memStore is the Store in memory. +type memStore struct { + mu sync.Mutex + entries map[Key]*memEntry + findings []Finding + told map[string]bool +} + +type memEntry struct { + versions []Version + current int + pending int + revision int64 +} + +func newMemStore() *memStore { + return &memStore{entries: map[Key]*memEntry{}, told: map[string]bool{}} +} + +func (e *memEntry) entry() *Entry { + out := &Entry{CurrentVersion: e.current, PendingVersion: e.pending, Versions: len(e.versions), Revision: e.revision} + out.Current = e.versions[e.current-1].Record.Clone() + if e.pending > 0 { + out.Pending = e.versions[e.pending-1].Record.Clone() + } + return out +} + +func (s *memStore) Get(_ context.Context, k Key) (*Entry, error) { + s.mu.Lock() + defer s.mu.Unlock() + e := s.entries[k] + if e == nil { + return nil, nil + } + return e.entry(), nil +} + +func (s *memStore) All(context.Context) ([]*Entry, error) { + s.mu.Lock() + defer s.mu.Unlock() + keys := make([]Key, 0, len(s.entries)) + for k := range s.entries { + keys = append(keys, k) + } + sortKeys(keys) + out := make([]*Entry, 0, len(keys)) + for _, k := range keys { + out = append(out, s.entries[k].entry()) + } + return out, nil +} + +func sortKeys(keys []Key) { + sort.Slice(keys, func(i, j int) bool { + if keys[i].Kind != keys[j].Kind { + return keys[i].Kind < keys[j].Kind + } + return keys[i].Number < keys[j].Number + }) +} + +func (s *memStore) Create(_ context.Context, v Version) error { + s.mu.Lock() + defer s.mu.Unlock() + k := v.Record.Key() + if s.entries[k] != nil { + return ErrExists + } + v.N = 1 + v.Record = v.Record.Clone() + s.entries[k] = &memEntry{versions: []Version{v}, current: 1, revision: 1} + return nil +} + +func (s *memStore) Save(_ context.Context, v Version, current, clearPending bool, revision int64) error { + s.mu.Lock() + defer s.mu.Unlock() + e := s.entries[v.Record.Key()] + if e == nil { + return fmt.Errorf("%s is not held", v.Record.Key()) + } + if e.revision != revision { + return ErrChanged + } + v.N = len(e.versions) + 1 + v.Record = v.Record.Clone() + e.versions = append(e.versions, v) + if current { + e.current = v.N + } else { + e.pending = v.N + } + if clearPending { + e.pending = 0 + } + e.revision++ + return nil +} + +func (s *memStore) Versions(_ context.Context, k Key) ([]Version, error) { + s.mu.Lock() + defer s.mu.Unlock() + e := s.entries[k] + if e == nil { + return nil, nil + } + out := make([]Version, len(e.versions)) + for i, v := range e.versions { + v.Record = v.Record.Clone() + out[i] = v + } + return out, nil +} + +// Search in memory: the question's words, stemmed crudely, counted in each clause and each record's title, topic +// and sections; the title and a clause weigh more. Enough to test the answers' shape; the store's ranking is the +// database's full-text search. +func (s *memStore) Search(_ context.Context, question string, limit int) ([]Hit, error) { + words := questionWords(question) + if len(words) == 0 { + return nil, nil + } + s.mu.Lock() + defer s.mu.Unlock() + var hits []Hit + score := func(text string) float64 { + n := 0.0 + for _, w := range wordsOf(text) { + for _, q := range words { + if stem(w) == q { + n++ + } + } + } + return n + } + for k, e := range s.entries { + r := e.versions[e.current-1].Record + if r.Status == StatusReserved || r.Status == StatusWithdrawn { + continue + } + for _, c := range r.Clauses { + if n := score(c.Text); n > 0 { + hits = append(hits, Hit{Key: k, Clause: c.N, Rank: n}) + } + } + body := "" + for _, sec := range r.Sections { + body += " " + sec.Text + } + if n := 2*score(r.Title) + score(r.Topic) + score(body)/20; n > 0 { + hits = append(hits, Hit{Key: k, Rank: n}) + } + } + sort.Slice(hits, func(i, j int) bool { + if hits[i].Rank != hits[j].Rank { + return hits[i].Rank > hits[j].Rank + } + if hits[i].Key != hits[j].Key { + return hits[i].Key.Number > hits[j].Key.Number + } + return hits[i].Clause < hits[j].Clause + }) + if limit > 0 && len(hits) > limit { + hits = hits[:limit] + } + return hits, nil +} + +func (s *memStore) Inbound(_ context.Context, k Key) ([]Inbound, error) { + s.mu.Lock() + defer s.mu.Unlock() + var out []Inbound + for from, e := range s.entries { + r := e.versions[e.current-1].Record + for _, l := range r.Links { + if to, ok := l.To.Record(); ok && to == k { + out = append(out, Inbound{From: from, Link: l}) + } + } + } + sort.Slice(out, func(i, j int) bool { + if out[i].From != out[j].From { + return out[i].From.Number < out[j].From.Number + } + return out[i].Link.String() < out[j].Link.String() + }) + return out, nil +} + +func (s *memStore) SetFindings(_ context.Context, f []Finding) error { + s.mu.Lock() + defer s.mu.Unlock() + s.findings = append([]Finding(nil), f...) + return nil +} + +func (s *memStore) Findings(context.Context) ([]Finding, error) { + s.mu.Lock() + defer s.mu.Unlock() + return append([]Finding(nil), s.findings...), nil +} + +func (s *memStore) Told(_ context.Context, topic string) (bool, error) { + s.mu.Lock() + defer s.mu.Unlock() + if s.told[topic] { + return false, nil + } + s.told[topic] = true + return true, nil +} + +// questionWords are the words of a question that say what it is about: the words of asking itself ("what +// holds about … and why") are left out, and each is stemmed. +func questionWords(q string) []string { + var out []string + seen := map[string]bool{} + for _, w := range wordsOf(q) { + if askingWords[w] || len(w) < 3 { + continue + } + st := stem(w) + if !seen[st] { + seen[st] = true + out = append(out, st) + } + } + return out +} + +// askingWords say that something is asked, not what about. +var askingWords = map[string]bool{"what": true, "holds": true, "hold": true, "about": true, "and": true, "why": true, + "how": true, "does": true, "the": true, "decided": true, "decide": true, "say": true, "says": true, "which": true, + "when": true, "who": true, "for": true, "with": true, "this": true, "that": true, "are": true, "was": true} + +func wordsOf(s string) []string { + return strings.FieldsFunc(strings.ToLower(s), func(r rune) bool { return !unicode.IsLetter(r) && !unicode.IsDigit(r) }) +} + +// stem is a crude stem: a plural's s and a few endings off. +func stem(w string) string { + for _, suf := range []string{"ing", "es", "ed", "s"} { + if len(w) > len(suf)+3 && strings.HasSuffix(w, suf) { + return strings.TrimSuffix(w, suf) + } + } + return w +} diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq-main.commit b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq-main.commit new file mode 100644 index 00000000..2c279512 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq-main.commit @@ -0,0 +1 @@ +331e8d0bbef401cee83c28aef27db9e823a901c7 diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq-main.tar.gz b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq-main.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..2be1a134357b4109a7539782d5c45b291f40745a GIT binary patch literal 1207833 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 z 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%0DZwa$yRsehdY$QT&#f0BQgR<0Wl>AnzCA@7>Ic;% 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%0D-or1-wdT0$!C=$5oG_Ly;JI~~ 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%0D4Ba z)=2tWFwG<0(R(XKI*`%4)j|YS7zIkausIql7Bh{tluho|!#z``8q$v{M0|Je( z&^4-vZNKIdBO^hPDQhW0OV1)M2IT#MxIx&dau=L))3dJcWJI0N)`?AB=+8f^<3QNO|2{;vE=Jh||% z&xPrAM?#QUjh6^>7ASNM?wX(Q&Yq9ec;PdJ2W^d(LP z3V8S@@VFBiB1IMhT!_zVZ9IGgs}ajQLM5>aQC|ZUC%!IUo$~Tie%soArTNcNqppIP zH6SJVlJa;$as(UA5teLJ*5jo`3+0`6R&tjN<0yAaXNE7F*`vup_pWvJtGKIM;KUV> zT4%7Z@5DPIX?PbltS&{m0xpHFK2n6^BSW>FLJ%%xe`DfIp$^4$ID?IQCm||YSvvVa z)rtLfcxHs4as6{c2udKV)y4b@WrCR$ZFK1rEyM^1kk+82%McGfK>2iFNBnSyP#ptp z*2pwL1nrDVvHrga7R~}TttXCEF-pTa4G+~RdS8~qh#nYUw1%K%u!HjKS!7hFjfUu6 zLg*q{YBn!VB5Q*yQYnQiV1jFDz}H-X7}uCg+9);s&QO)jk+W*^F;5lmO=z=6h^@$# z?SGT@W20TD8Jf(oR05MtqI|PFQN0p5dI*ah=N1LyjFrx%>9iW12v81_h>b*=IE+~g zfWM;ibDY4ns)c8)bOKV+VUxAQ1pAZc8f9twy|@nsLl#2zT~x-N*^t+XY$9+r_hy{`7Ev>2dspY0z%EP_PtKsPVbRXf9HKS;D-^F$hTx|Cv z1TREUXBqC&LCA{myyH(lR)9Cd-X4@MmytKB${r?VTPoW$LE21D*TmU!A~{aPL#O01 z!hIZWBH6AKx5cX6>_Aug=eidUbnTC`&ZGIqD#q@#xx$&TORy~5DEtRFzG}B_nm(^B zp^j1+R?eV;xf)2KuvIIT8^nU~okSs(>UZ+uHT7C@CG* zTX}SlTIlq!l?mG$r!fJC6MVneutInIz4N=0Yhzg6mcQ`ylxL?@duy05EwSyTG@V^3 zeOvr5cXE2RJViA$lBLyh32K1dmk>G3-MOiuo)Xw5JMvQAYqC2dMamzl>MUads;8n& z%tH-h9!lq*ES+D&p5nH?22@KF4&i$|gKIu$P;LS>J)a|E;3`X0f^|OZ$ zdt2&z`xSVz2)H$XZLp{BgVqZ4M@D4m#r-P`Utr^H8)sXoElvTpsb-cVV&zT=ELJhx zhK}6_gMFok7Nlg_bg?b+UQF4EO__kHm;lL;SwnSHiJ*+E23CcAFE|c!iWWCB99%-m z`8`YlY85^AJ%Cmj8Ft-!5v{hL32T+`;^Tm=c2?N=F=@j&*@SyH-)NfMHUN)=gBB6_ z2Qg~$h9#JZ7*WCVMWE=^p2jlDRgN8#bAZIy%Mkf&0nD;+3WbYiwFlxRPP0(Vu53Mr zopjLg#WBkYQyrT4YzFk)fn=MMm9V*z!&}!1sB!J^17R^3z_9dA<;2Qy0Q02W-zn{? z&+}1LZ&cEPcV^qjYTu1;{QsGC@VpAHj~0qxCTpfT-d<2hi@hs=Eidvb@_wd8vd3NX7!x-G<5kE+dF|0H@ zTyw6?_Hm?M$S`vas6w-4!^%Rjve)5UUk_z2oF+gnCO7gc(gnu6f=lZX28a=BJkhv8 z^O%-Li021<4X9sEfCb!xi9b^sleIjyWHOzP;{mdwm-STzt`CjYTx%`{Y ze9z2#=Zehus6QmiaWRFbkCbJyJ?~&U!E$v&aVm0xe(A%C85fhg;F+A0UkrCvWrlk= zF%sZeYz7Q>>2lYKUYuqFcU~*!Q7aQABnopgm~t0BMr)t8mH4iZYi#xM)%|1t5Ez%ze}y4kJr) zG?Lr^t&~qA&G4@NFW2R>h$4|@`P;uOe`{eQ^PY3fRMs=?evO;v7UXE?ySq{D=!! z4lP5`@sI&LV9#kM(p%fjXmvdjt;74uxbAT-Av_n=Bx)sf%dPs6;9&ZB)H**gwBxef z=qT*wjJnva!pm$@(s-cYHL|)ytt28M_XbVNH126ch)JTRc=e1*dp0)(N;}e@#x5G^ zNzu4j!WM~u@I)u&w;CET1Q=$7=qcn7%UaST(Z`g4Km!2R3leMtgKs#NOm434d`;rh z6VK+_MZ~#Jj7!%`w^&n$M^Fz4esEKMWkc3)lFZMv_e1h+{-rQ0uwi{$*|MN1E8#eO z0YEu#_+2&2$-~)_nYHFPgf)gVZKiEZ^=bLq!N09wz6wnTfXtBl1xLB_wNi7 zn+QDgW<@p&-0~b{qQozD#$;z}4QA^pDa9fbV3&*O65@$dC*TuJ9Ow$!IDa+br;f;M zFC!aZS|jB{k&q_kLJ{#`SIJFn3~VpLhj*) zlxm4t!VAeAJsQA7;jp^n$tkVPmWpXn`H z+ZtcUCcG*o|NG8pi_2ULT?vOsG$ffww5K6Lldc8}(lnVc^sZ%CQPB(&_8MahR*74l zuSxyPntR+12swn6_@rc$GP|zvIB)9&>XwiK3Nz%%(N0#yq_S`1mx|k;d=OSmM0h?{G z8M-mzt{J5$CE<7bDVLI`-Up`DY(m6vMgRsr&IK&F{fQv%aWU`ESKUuoWUTCk3IPif zQB~jZC=5eu7+$L<-XH2sTAiU;YiP>yDtt~$QP)I~Rp|`B$`-vB5jyn)F8-P2O!%04 z+8IUOCU!JpROHxBJCw3d3n@3xO%UFdsnsP{ii25GzVW~?N zDZ;~4^zH@OfkgBUdKj%>AQju24QVuV%?sRUc< zGf%B{S{WIOpP2&moRv>YiCWHDlG2`61&&pu4W&8GC1ugosNyBH6T(Wx!aqazVS9BY ztvPeq2TAprugePDNizp3JcXu_eYFHqEhEHbGcifUNHqliO$eFI4C}nJQzjuR!(l9qJjF-gKaWRESe%>DY}t&k zzed&Q?fr5jl0BdNyD)~pL!O_X?!kY`zgzgv!_)Jlzd8K{|M{24|GxkI=j5M1-hW^{@1_6e@3HGAy}3RLu1ynf+h+7x`>)o=LO0ucQyFuM`cSY_vAd$ zRO>985gV+V5vx`Z9h$A~f}=fBGZj8-4j%G;(9uCr@NOn|Iu3Vw{qoCKSg5p+pPU{h zi*&Vo->q>KcBY_JamT=qjzur5Zf-}nRWm|BW`k*{)f+DkUsd`9Mx-3K0cKYmkCUl@ z7!4H70iUl%Ak%rzQyo4VDST-DHu#P9NykUZrG%2l;>TO+IyLzR6Q$5_!K=BTgr(2H zN%Adyv92H1^YC&Ctb_t^aKVGW#spJjK;!R!_~w-gw?!`kRiEWsPzB#`-4wsgNVW{C z1URKmYLn56qezG2$(SqbKvg_tZ#p<&4PaR<(BTJ&^*RLHLUOZ#zrd%2hdT2^FCD7V z*laHs^DCs$8uKs2$&DW@brzt0YjYIiDy|53FL=BV09dvhT+rCT;rEP`Yi7PaRN z89ei)r&CEOI0bVn&6@5ZiDn8$5(qsltpNu)<^vdvx>s&%mAH`LJZe%DFKXi0VU^f+ zT!7?`bUgZ1QI0(*Uum3gyH^N1H=f`yrhGO88;N&wp((H5YNB7i)SpDJ@`Rom;r7@Lf;Pw!m>}v4_*fJBE8y4^ z{EK;nhR!4NXGW>uKXFKhcwXDpNuwjj(zis`V_gW!mb~=TGR5<(qCXh7w~?#_lN@ zv5%%GNoLpY6=x)4Eu+j5QF5|lu1L9kE$9qCm3kCGZYZ&gJnZ&f$}W8(WRkD6ceJeN zp=N3oLghRj*qg<}dX?-P2C@Wc$F3b2gH{=%9Tx7H5DPoqIxz{*0;M1~r+%f482YQ+ zl0%q9i2&c2eoiHKRzl&Wvd5A^qEfB|BnV!FyIm5J=*X3O>*J{yI19c4Gkbl_ile;k zlX2OzQ%k2u>qq^ea@4`DrIvYCZvd8--LI5;&P7ebvyP;r$r-4`ca7Dso$kg5Rj_cQ z?LfkSCJ-_s$#t$Bbq>RW>zaMqBoh^V86Mc>%9+nPd&pd}b^V9>$~wT2+`5u3U2M)^ z{0ci5h zw9hhSog6@Rw;6PoO<3o1mEu!xuXMMf2RrWvN9tIZ{p=6@h!UVfFqKJ)DK7S?JwX#}k1QJ$@US>;rD$!J;E;FQ)&IIjZR8?XR};vxRc!OP zBW}#6SZBI91zOl1b=A0`peM3!?LvZs=Woe!YfKgtlq6_szR_2oy9xM!9sLQv(ax|( z8NYNn@w`kZiX3wd@w6B5ILO*M#Y?~4gVAF0{!7a*B-=gsR3XA!l^R=}?1?%4J0%$U z1!n07$-AB&`n~_$ltW*sm}*SiytxC`eA7|3dD>ib*Mcux_xtQ6(tQ<>A;cmvZi zhukoAyM!~){9i{;Af+~4>KHE~)g>Jq# z2nAtTAzq=OS!NxaK$QI#A}>7)=LD|MAYLkr0eT1Za9ffbQqkgHHAAy2Q)!l*z-T$h>&7** zgP*bv<`B9e)C7%~DjAZnI{lu876t0uQ5;GG&}9~$O!KH=>S_&Qoj0`z(3I1#+y67* z{sx!OdamHy#Pf)cL3?`*sBv$K8y!yj!AFpL%v$FR{l)fxyDMd(<>9 zJoS?1j&ZS`O>=Qn*5Nr0Rb8lkvcl6ymLEG5>;%)#3Oip|zyOFw znNx)(XlAjxa}gWLifLEVRJti|K<0uUi`z0m%sbZ>ly-C|7FU9jXTEA ze8WR-_RJg=f5R3;HXbZ_QJy->652wVFH1>d1G3mm$sYbF9r4=xeF8il?kpak@I9`w z`!^IC_MM#%%LHzSR1mg=>aLDC{#K8tc=-`VEluQ8eVfULvzG z52tZotY+;0a54lohj1|$F0{n01jVt1sFG|-4O?pgvul@ixbD=r86wuk;?~L&@-911 zS9EnVRHPH47rflX!Yr#tq2hFfC0uXZ}W{tJYi8^1mmhaoLJ(9@C>tUo}4y< zT$G1X>0gvTG?MYO`{hl&MCeyDS$|2EC3`PZ>yKYB zMN~ann7LZdgK4d39x&r*_sD88v!o9(ckvoUOG>p^rVYk>Jbtc4l?;od3lYm=JU*mg zoPKOb04S2HV9xmL^H&sqP#4Lo56k2Pz&u|qwqEdf2$3ga+3EQ3fdB84XKGZ&=SK(Q zGyZCPG_}~AtI!t4Cr2kB{8dn%Sf<+|tb$Du+EJWzH zRd7E@thI{u3VPwnsUJ>xy~#a{ayZ9mzJvXJ@@hr5ME@)m+zM5o?K1d+uiwn?51w>R z6Jicmos?#nl$YklKWc5WlOXBMukF0UF<6q{P13zZwC6mb>^o}h75@|2w>EEwl z2V}#y45{I8gK-Mym1IQ=UC6e!r^~zWzTn!`+6KRr1p8AKS6jA2*3)c_WOxhnE>7Qa zvnujYz?bLRfUXU?3a$GV&n0u;q=#1Kt_8dETTRz*&}(2|ad9PIvJOXuPrfv(OY2*( zTJR0o96FiHm~mA-Txfr33QHar^hSlI=GB7l2U(Qg2voyJz^a?zs$Ix&*iDt$Dxe`2 z|0)3#u+8T(eC>|oa})vMxo`_{6U;^P!mSh`Q;$=V(@ok5cs;iY5f=NC-Nh5nzN&e@djipw-;^kt8UROrVcxiT;8u03;&LPwi~G*@-8@8?@92} zO1vw-tnS;)-`+y|t~?rF935VS<5T`QzBtA|$H@PeN5%jRCg<_^;xzpASpRu)ae@yX z^Mm74{UHB(baDDz{yK)zUHHkbI3DWB0!BfH|M{Pj58`b__M z67C*v{Y*coe?19zf2RM`56Z1i&-8=mGO*L*i=!j`=gGw(zJ79|AK?YUx1U`c^V6qz zjN{XIExYM+`RmEq#rQb>Q*O#0DnvrB6gZXDae`rtm7KhGBjg5#)JRZ10#DEm#=KSo zAy^9h8Kq!+XjPpK_9`r{b#&o_-JhxPvjHd>K7uQ2!Vn(F$_X$NSI_7*?Sj|~7Wy-< zV>p-%vc=mqi5u8oPsn@;@6iZAFI7fCoqPQv$fsJMn=%If!vxk~{;*YS#Zd{a&Wa_D zJY-YXJ{(!WTP7!3vm-LWVS6Yu^4cEpXIeF6*;4y?4j zhSzvYe~qper${=_-?E*;p4yxM5q4#jO<7H7Nq7zc*rEPPY$URzgCZ$nPGM*HF0$RV zOY}Ikzg{wZvz!}?LaQ9$2{Y9;$g>HOitr>*q&CxRkmvxiEcLYMyPk(FI#}TC{UoCL z^bg@aGLulz3>*A7IVYlHl$3I9D#MWDAUML57-z@PKyMqTD-u@vUI@)sQa;XLxT9Lx zK{b%1i6E-r429Pe23@V^3NNspZ>L3nxf3j=m?JCaa{(pi&uuk}h=sT_G&s7*k~i_K zs8X;XW1eQP7-}&jh)PALNw=aOf1Nv-j=V#Ar-W+zo7C0BkA*5uZ4UfI*AZj)Z^uC9XP z-)fzy^BSp8i5A7HRR(QDZBB1nEw64@+NgcIx~mgsNtFWM&?~VrT{rV7JSEFjApwSZ z0lT74f4h>30?e+yo$KP2>^=4tO&|#t845Sap9?jJvUFAv01IDrWMfUM=;-{st5pB!)Wqp;zjW3*jk z@r=-=v>7c|m#f+1=n9-JBSZwbViA*>SQILEBjBDHnF(%#A5Q%}*R@T7yQV;DhedM> zoRVgrn`kvtHs|I|ljl-pDia(Tn}TUdm`I3yKPSWT^CR*a*d}HJA~sKwukz%uvd|KS zJqK{BmKWx>>?Zhg5uatH`@WKNCYV6Wi{YdVw*7zj!ssvc-<|c}6pHgV|1tI7v$NA~ z|Igv^`7ia~zfAo%LtB|{$MVq(A59~o|Adq41DXH^rBrdSZ^wf{bTmBe(vFsuvsBoU zVkdqVj69L6LceG?(%Ej1rXF)})I)|C)(ako3udl>UT4T#qi7<8koxhH@NsA|3*8Db zKd2N*rb*N(hs@kaI&hw|P<6VsR8wY1fTmX*K>q%HwgU zx#0F6<@@2upM;^(XTm+7ARl;*oG(H_JBQDXcAUd!N7M{l+ym?6??n$+m~eh`gH57px&;;$79tz=3MSziHOxuS?Acco)KlXo8}Xj`B_?JHM!y9i`%))iO- z6l5nNQFnC>IwleC?m}5VlrMwB&r%y@A@(K6fL-t#a(yT$T3KbK`&&D_B^NANDRKG6 z2i?>glWCs%LyD8-f-LbDY)Lwjc2!tBT}zYmIybeF+U)RuV-6gQSK}c0A6fIjZKROZt&K67oGruaZ=O zdhU&O{H&FGyz>MHW=8+*pZ?po#~^aRdxvbRjwWSgy?nF|G2x9;D-IYjwxc+#pGEts ztA8!1&6p5p?i6*5@zFWUDW}KNHoyOS%Jbo}Km-ePA?yw*wcFiv8;fqkuJV1Df4-im z-RA1g5ihj5CvC5f8o1tSsgxqP?e%soWCo74>7l^6t}izd@li!F-X%ZH}Wy7Jb)mFo8AZ5YN2! zyc7KiVlABA2Y1&(ewt}Xq1t8&>z}GCmI-eGPn|D4zwN2c%Bu6L>oO+55K*zlK{kd| z*AwOi(($~8C-^mq+JUuVfjQ^|-yzD%E6!SQlzI=X8mgD#2!I@kJ#y`LBE^0kOL#hf zi1b3~FKIfoh#R}|I{5sgm$nev8=d8LJLC73FVnHyP<7A^+VyJ9Eog}2w!Vo1N0=FS zZ|bm03!ikcED_coe^1mJt&gSd=tohMPOC8%NK2Qmvdi`(PS4m^Hd66^;|Ao$lWL!> z8dhQ}-&}AFI6Iy_8+*tU*SUIcFT*67GVGI(Sx^WsCzQfJ@Bo!?aDgo#Tne{v?SX^E_#fIh$ONY^I z*sQk(ocs1n%%^ey0TgvbC7#Wy)ub3TixSK^ogx*dYUjC`Qu>&dO~hIG_JiM5t(#%e zqP?R(IdAnIgc%;}_F){+TG&w1612G#C#s!IcS4-h?UhOSeAjsnbtYP|1X8uhdz&QV zO>+H>E%U4wJcS-=>?IchTa} zrkueF^(l00es4$#LOrq3fd387+;SMzW{k){xF4Mt2#1xVNu$58uJ4?>{NAeFmeyMl z5BaSc0HU5m8=Zg`DTDh-x{0mJczx2dZ$cR%DE6JC!AToB?6FuW5H| zy(1nk%>F;--ehMV5Y|aQ_(N%FKGm#Dfad@u^HT@qZ_-ZZ7~yMwq0oAh1bJ7ZrdBJ= z?D?G?oi`%Xj2EdE!K~a14PX*N63iuSOUWIYTjdDOP68M1ih5cW|D-RPFXSY+N#qE_ z;do))u{PDjjG(~vrkJzC|9r#K?Bx^2!y< z&Kl{&S&K@BP-em z0X?&SeW;c>Y!r|gDW-}iMJ%Tn1!dMGFPKvv6=>JJtT!8rsO1c~xy6CBS~n^yr?EG} zvEMiK^>$&32Y~BhgMlsLI@;Yd<0ugnBn=S5T;~&TzsBCtVX2}_vOpWL6{n=WZh4Qn zYsI$a5K7!t%|G^Sv0*EEKgo-DE+kDnP7#}!O{XFVtBwFG+{;3R3j{nc@c;RfU$qa6 zPe1v$fBNTX!9d7YNY>XlOxYF5l%9Ba?e-6e?Uim}htEj^@D-A3rKC$v!dKqZ{+QA4 zZ&Has{VTRwWnvf@MxvcE+l|#@f3ZYk{7g|seM44CSFFJsHMN>D+VZ4pTo$E=UgC}< z$T|hPlXk?~K(!Qu?Ufk1kI+F> z-Y>SnYz|En%@-!pnVSxvK2iU``vzgC;Do%jWg=E_g$afJ?rUgRKF<{kKPnulo+(gZk#--zRAzHT--g@DDV`3wsFI z>R*LJv6Vj9furnTDkI;I6Fs~uAIbl|^S^msXt??=`F53Nw*-X=TH!(ZzEf0_FKF8-6E_{~Sw`uUO7KB|_%Kx%L?J)t%d zrJ-)cv`gK{M&zBuB*A6yoXRcRTNH^}wV+e(S$_mm%LjQ{@|f3o>5GnIx|g~oO^=De zPs8>dl~47WjS*1ik=|z0Ef!8bO!gA_xs&99#QpmC<`F3;<33iIRi~7(n^e(Hd;x;e zES9X7x?-O`x`r9d7PB}Se5q==Ne~n~PMV7yCmRyA5L)+D&*4vY=cL}BHuLWvhwtZ9eOKF!Fw1BX zA)~7kjPYu%8IOcAFJAHlRGs=yxKPFi=e0T8OH^hZkWGJ}>gUaeLRg`L-)N>mUc0n} zhAg}(I% zsp~$>_*A5JB+I%PNRtC>6WdXI2)p)D^NXq^&b`MNFJfH`E?rbe`3s%RAo6YbrfsAL zFmFp&Ls9ANMAG^?a<|z&vs_0(AM&Xwx%DL9qe_3yN*_C_#pP6nQe;rHtLmGbG*LzI zEn`o1uL>X3JP9Kp(sYR)wL>kisQfsh)&?<$B+l`IKNW5HBt*>Yx+TUXgW~7UFs&{p z?}!tpYFHS_W-y3Cl^8g&4|d*2`1T*c)EjQ`UasEu!PK*`s4v2{J2-Xov?9syq*MLV zlm)L%vzwZ3J0MucNMJE-re&5KHDjM~@qU^Hui7xM$!PP8XE$a+Chu>fkHmUHll z$loksV&EutC8bcLZq{}`;T^>)r5&r?mbIt7YT_oC?#}+Mq;|>_50&;u5&U-F?T9iR z3lkE~64+rU9;l34RvHjUN!Zn!Ti$2WBzVP(v<}vS777|i(1jnu6|xYURK>8oDbLG1 z0CnbijyCL@7VPI{wsq5u53;@O_I9H-z2hq~mSP%M+p?4pr~}_n9TgYIHX1Pl4G5sG z*=6*#3IerP5)gmwJt*;WAL&Q}a?qipfL)F{M=a`dh|;pUy_77<$NQO)Z^1v2lD|U0t0a-7f05Ygi#WX(bz&s%gKcu-KX+aYz65Pyg*$BubNmL%HoN zDngz;#67Dm;3Ck-?x$oY*&cQ9J#8& zKq@yf(@Hu5Po~)?`<}9Hzn3`MUSS7E!2rq-Z16mHW7syzSiJ)zC&G=2(-1sc(kY6k z%WgOcH+e6(cPAF^J@B`*+wXl3p>+FLKyLD=;uc(W1b<8AKAI@4M7B}+UYnJj_fF1} zw;iw}5_uG>Y+R%r@}m8On_p;&#--CFYD_g=R7l!OhR>$V(5 z+@bo8E(P3HgQj*{BZ7XwmR;;9ahkL{FUZd)py$dOzbA%|$c}PfG%;bRTiwb+82V9C zHQK#chqAxj80YO2@=*DcsO0BOG8#2EVKGY8It@xMGGMdFPfZgrNW8riQd=z^=;s(l zf|q>{(S;~^RNi<4aP${-dXCHQm_uoKCwOXz(9YKL#o{8>C}z&0vy*yGRwk54sf3MC zeGN0uO1&xtjB96daw_iVUr8PFUFlhW{>1ZAhA(@%)3TWeAkkhPubiL=Y*Lbrk*LgV zlM!M7_J`%IA>Q=ikg6*2qUrCVv-p*bGA2`zpYPTQDfb_cOsuQnMQlop`%c7qcE_wV%9+vu68-C z?>)bX*iArp>{^LB{w2l85L;v>| z{KsFH{%fwIdN}&(i|<~1a0xXR^9?e~Hh{A7nhYFG?hW6kywJ@K2G(wO*-I%}ig zQ7`M=@~Vf2&qftLSpT$vic3Sf0eXDz(^fr8ZxFn}R9$seH&^Sq^2(dqdqP7-us-!B z`3ESYgkOh$Up9uqcg*yAMRL=<)r{n}m-Q^!Xq*b*3WB#YQ#l*_$O!X2&v){C*S5tM zT-No(Wgh4*g@JpU{$4rP@3Pu_BGOe3p1dS7LsCSuFf$9l54Ir6`-$VQw104t-`2~6 z@~gUH-NKR3K=Bvqr(DAyL_-Zxi3!Bz0euL>5(A-+I6y1CKr00g10=DF8d1h&)zrQk zKlwwozELkL45|RV=KM+-w!WA0)QG7?arO)n{gU{SH^cI=-bkkvLX`01YFi3{e*#6p zJJN*IPg3eF^s$+d`c7$N!-%L1v|^5yxXFpQo)mE;S6u%TcE)_k zMC4ViDiJTr!9XspY}XRTZSdB%#IBbEMhViKgncvU(_7=+D+fogNM)X)RQX+NaaJI~ zWO)eY$K-XI046?--Dp7dP{bXtDo%yc8V0$_L$L&1W6x2GGH{0r_rbI)bAqj!j zoZ-qAgeyYQ69sm84x!B@LSOB-;vRB1CB6#z*DHbwoEmUi7sMUan3dXyUhzmjU%mU(BjrV6@7HNJjbW%WM9rEjZ6uKj3Ao(SJH@d#8*SnM;U>=#)^nO%Kv zSBt8-#T>&Lp$dTnYqVUerOz&)K7-~l#G8+IgFa<2Y=&hKKTzP;-vvH?ySlTFv!G1l z?Co8Wf^`s=whrKeDvZl4Y?CcpfzoMG7UTY5`r^wkUVZmE-JkxOzSb*L+*Ausx0c+M zSH?>XWMw>Y+NFC2(P2nWk}NR0^)#PL+?w*+W1xCeWrMv0d;SeH-sHQohB55V?R00t zdy;?6WDhlCjO30;54hoXXH57NHSe29<^DQBPKG1pny0t0RiZ9o`#^PwGwX+wY>ryT zz=#Oxa8ccuXZ+#w(fDj4g_44LOB&c8Jug>R!cBTb##}WMlANm- z3m&T=YgCNk3hPy2LdE&9CE>!!w8?}AWYC1QO67nJCjKZS*k+4mc+&&PLpPg&B#cFp zJ^bvvq6HxMo)H_wXNP}tI@#$L0)(SRuWbz_0c**puqK0pWMe2En2?g1^OHeLOxyd= zUcE5%wE*KNh#@zU<^81Ml}0?8y}!(^-)!#@nuWvh$)NS7XZ1BZ@8oH77GygbG;6GH zPQ3x4Di5z7lU)qdwhe+20B#fT1~R82Z^zY&nI)_|7!MJe&YkQ+R!Nf&51 z`ofY+SpaDHl%`1Ko4->xxs!dnqh|*3pi3@=*&dbQ?Cns)(+g36-cAgbd_{eWGP)@m zPjy@r{e9nrX}}JxZl1r)qz1)pC}Nu-4%;oZ`SAf-zkn%~^sim?*}jXuH*o8hHw5|% zDoNIkrtyVwsnV|9WnBqT)@=%{bO)Xw*p)dNlY|m1-^(nfcwmQ+P6E2ZiwJhIwP}9vww7XFXSy(Bs#Vq}dV6HoMAZRbebSDWG>nCxQxW9o0MXrJD~7%h{vJVJ_&q05 zGUo{7mhe$8#Lj{x8&foNK0D~x0b&7H!r|V&HU&K30`IKjqXjV56gzHV^ao}5M?QRg z9qbRmuw#5`!;MY?m1Klmq4pRRy_yDjN}O*9$t8}5`;0a%L$eLkvJrn!eX3;lisvU@ zl@9$l&OH35x}hL2XIy@^p+AI4ezXt0-~Dk%O8itQrhxb!3*$;UzXV(EMO^?jRsX5C0NwK4wEWGTfX0nfpVBhr?b-Zmgg;_W(_MI?ZBum=L>#J z#MCyAV80;G8Nn*oQez>{cuBegHm^&o;neRv9hOtOfFd)di*R7WTbm9e8;meQd3}=) z+266X3qfjf+HTgg$&{h!i8^q62o%ZZ%6QVe8A`Z=UD5O%<(4_hcpRgJ@9cfpj-9qb zkR;qS>ClHNF@`YAkRLM!INNn3C+qBZS9H?0%V2b>D?;9WqjwHBFrst ztipa>tA=5XRk^MQ5kPJvo4vR=p=b#tu$-ie5FUj8fks#}Peo4$a@Y-AsnJNs@4_3q z#pvV`fWSqq;_d3Hy4)`KC!Ux?n?kUf%&#^sXF-Qnl&84NkB{ky&zYv$h!kpg{*y!9 z6-?HF!qeF!cucj@EOIEp8rsx`pu{E<|CVl+JBBM*H|Agubq$1~7!{VN*6(A7>7puhqvZvKW7s$LyaEIv`I$`FF2P_r86LqL!xHAZbVtz;M3h^}fbE9FKTuMbw`0ZVylDdbPUs1!YlojuPwS;A> zze`TzudGu_B3xDUvW4R%_RFFn{3qh1EPygVQ?R3JtAH7NU5%IBWKqc|ya&Az} zei})GmU`G;L+Pkj31`j2th`*ueos)89BC1yx(jN=|guM?nVAyRM{Zgi+j z>C)zhNx!TkM^~E3;)k&Peu3-!g8zy5kA3NeKOg^bbcDaP^*>IJPJY3E{AKt*_GX#1 zi9XL9i5E;!yANfLhPzTnVi045xv!>pkS31a7ZXO*s^nni%VM9afJk(-it+tTq6NN91H$%*OL7Xr?mNWUb$Ap491c>?{P|kn zkx&|?wVg25E&zoiK6##;kgXvn36ma2nPx}Aubyc*dUA^KoIKkwq7Xi#N0xq0aIq>6e%2QK*E*JvGoi=I80>tI5|U4?e!-fTQNT^*#f$2 zRxGWSk47n0NMW{Xl2oW7#75zyYU(9gRU~I0Mn!CuNN}(SEWNXvNH%dpfR1{g^1C9; z)PR-Afgz_|cRXB8(i5QjjMdR$xm_;UT_R;^RxatXGi&lNZ=|c0QK|OY26wYiw6ttv zq*`iiz=GFSWdaPZrYlD=99dLClHt7pLSENz(9YD<~IH zj6FNV8(CLZ8{=Qs=v4$OFb~qyUQoi5!VGK*OdZ*|W?^lQZ3NPkNiF7Q3My#x_2zLT ziBYw%Oe#pKw$ZM>B$;H0kO8V)W$nT#CvY4Ej=v-bbX}ZpH8Y{Li*+sh%`;5~QyGX_x*%(R;~TFx{nMYW7uDO< z`cHqF25UNaqWqXm*e5>?23C3=JONYWPft{kcSZScrFYHbEtrQO&ucm!o*S%+F6PxG z6(Wg~2se4T*_C0-vNUM3^YoprHVbiW^6VX^S*tW>C8c%ETlFMMq<;>UnCp*pBQb&P z_R-1F0WP~;8QFW?whf3wew^;OsZ{ovaIsj7$Ah&wmEoWHu(;pTtyWdiaDAW zVoB0L^5Fjdz`@x{%nhEn?D)?rI1fAzVdFO2MJIO(NYI*nm&ef$r-2+sm zH(}3ek6_pc^X1(?PJPSrI_17^^H<#TQ!0hd^6aCWfhl++8R6wNoC=-=1?Tr%k4q)- z>0ZjV3lWV~f;8Yxvkj5F;$#lrj|M4IG{~?JS{|Waj#!$s8BDJ1I2uRJ>@&mk*%E#lqf9I9 ze{kVW)awo>`n&S{jP=oleDNG#WCaNgf2ZmYTP*>?B;yUA;RM5IH-ZNz z`JB#i;`xW)ow!enrc!#+oUEVtSBwgt%P^T_d3MY0VzEWxSl?y={AV1@=-s3->^=DNB~ zG>=iKK=-23ENR(;Oi@jEL(9$LaS)<{L98fC45Z-Q3Xi1^ zLU0EWcp%;y0Q-&jWLJzkXkvl|#Tw0$`9&`l0bF~5vlQ;TVNzWQAns^YmF6xiz^@6g zHe#nROouSN3qe)JoFfRo;QsyHj(mut5=fRjgO{#n@h~x2;RnE<8L=qiv6zzU`3)_Z zQMrjt(=1XjhV!@Hdb+}l@fN(5T_H6xYC)7NXe(}9{Znun*dq~+pAE5r!}6+Lqa<`y zZPLr7g?Tlb%n(U2AJy##(6gDd;omce1PQnK4Je}E4oYglGoByETQan{`dDP+%$x|j zp7}Kj$j~J(Mkzy-xX~I0U-O3C4(Qv(JhC_+hw9LUcPdpf42CcqYK<@z%o)>G+f6W9 z^Tv)od0~V#%F4J+xc;$c(Uuc)Rz?>CXLOigQ;gT}*>V3M*+DJPU(o{n6H{J-iZrBH}r8cr4s8r_SQS+Rn=#foe-=3`w7?R-pUu+xB z?%MPO#N-vhvH zR-}vG^djOjz#hd+gjeR<%Rc8E zp}S3Yg1(T;0Hzu@D6IzgyKoUT$@DC7fupf)vG6PPkZ2)0l9+PwNz!j5%K+}>(4#{k zYmuL^fa;B&KMDeYd`4N%P{Gx_0nS+=tje(TdgQ6|%;@hE{tsDE&Pew2&h3*Bvv@vW z%FZVfEZwZ`rWOEH^vg zGj#GBI?!r>s6(VeKs9HcAz zfJ^&A6GuwdE_sxg>ll=2kB*fsk<_t&vVV2yyIHy^w!~*muo)f5Dp$2+bSVNy2W^lHYtXXqkZ6AqH$4 zz9w4;a!uxgwp_pY@_w5P&K~tZv4R}OicoR$>NS^GCN8I5GV)tNDl6)BBrC6mJ9EEa7iMh z>%l;a$wmRM0Ty+9{CT5KY#oA1oGfVwb|83diTC9&xw=O5R;FIk#9_cy&&S7G$AEE`GPWJ(tPX{$~O#3|rio6T`XiRfMUWMPnG`FrZfst?c% zViTq5$>Oqihz_AnS~jbR^LB~?&7!(NQaM4I77uI0p&yH=lni(ii<&vnGA1E*#ETkH zc!<@qe?Sk!@#YrHC$;v=+8hbF7&?j7Q5XG=Saz0*zWCBZqtdp|1>dpo+-|2)8#|tU z+-)`ckHuwvEdH;JyZVpge>yojJUnjW|BlATzvzGch46o!HqD}V(eBC0S&I{#V48l@ z4oa19Y@75J(FS~q^pknY95=M|b5e**;o)+YSPM0oD$v}Aq+gMf;&i!gc*Js}4+hBB zL6E^XXYAoFB6?iX9p-o3lH9*81o)FDUldO6`bpJBQx7-~56TzItYZo}o$UA&f2Z0w z8bAbC!E$c;;%?i8sbs^8uv0`5W3)KpyB?79!~0%6NuA}1;8I)&Bx8HuY{Denm7fsU zAV1&?(x!wL7?yvEt&qPKV$xr$sybb!7wHP&vF%)%45&@kRtYWNf)<(pdYZ<|?ug z8G%+Q6ik5wx{a*hg7bqekNOZU%AmkeR&(t6ypQBra8WB|d|@6~KcL{!fhrJL8e`t< zBHYFGah`ivF>l(H3{ayU>9aIl#v+B+Bu{65ke!0tNkACUc(y51;Hprom(g2Gv)-cY zF4!Oe;5nlXnXP2O=`7O~=VB!MLCKsjy21C=BE)F&M`SrFEf4}SH?Sx6E-j<`k>0I| zmsj-y{>4~=6&LJsJG-fg(C~&K>uyYys-$!m8-y4^tkvJ)4dZ7=+^{$;lkuZu< zG~QD)Ou1x}s3yyA?`i6RsbUN5AM5o>x?Z_5na?hga;YWrtwI}pW6`HW7t%#);w=z1 zBfqb2XjphjRllXZ)FZ8-;>z6~?}JFYyAq&AY?6{jKeo+)=L#Nl5$BxJ?QpCilLw>W zMUj>QS}+rb!AxX4n|+2FgKrxxxId{Fb_)d}*UlRaEb~PEN z*fK_%rgx*?mOmxk&V~Nr;PGw|+Zlmru;O#LiA{t-j}qMo3+NeHp(FT0amGXXI?R}c ze->UE7{;tN0T+5HeH7*(yyltQQqU9lhQ^HH8=qj1R20Y8LtL2POX6223IMZnKg`cJ zNtyjAFDmdqq=)TmJXa+D71ku}iA41MNik5o0KcGpoV#X6d4Xa|o@FiEj|OI4-{3t= zU}~4Mh4s%e(^}}SCh~Lg60{&sxUlqF3@~f)6Fh^JwjcMJFW;_$e}_vMpy__Km|r~( ziry5K2l+#*bmHG)lc)Vj*~+m>niBO39jes)<=y2|{CW7$Q}Mrlt8D6hF6VE3%bDm; zw*Qr{qx@pe22pUcOts5IQcx}ykgISX3adA_i7#v5meg!t&wrAVEc$YT`&DUqSE_0# zyRFtRO4{D;-lw(?6qm|3|5-5ZPw9NRvJA5UeB>8<0}#x?tCbbK6uXd69F{4^LR6ZF zYzdm?DN=t(ZCP-3Fe=Y(CTR%Ww9uz-8!@V%wC}8ChhdaGNWcNHc%V>EEAn#r-vrll zHY~_5TJ5xZ2z1DSs&sfNaFpA=IGVx4e;Sb!Y*J<%Yx<+qrPQi0lVTX@cDfb&IYNW+ zeQjp%xz#p+iIiRX69MDme+agfOkns?VU6Ld&{MGDX1sVo?nSWmZ$#=1mlDjH>?eb* zsb10Ziv%N~B{QkeFBA8ZC#pcrnN}_!qoAlX?b)vOcpSRgAC`@IC_6Uk?`>~7X|cXJ zEPgpIckWj@B6NhXiP*A?*E`>6&Z=;tRg|le*=CFaHey@^_Izu8M>yW~;dBx;sxIvmsxu>>VO# zc?qFX(4!XDGv)|&Iv!h|g3%N7kP_uCkuHo{8yL$m)`!>5wVaJ5oG^y)G?dfkp5j-* zuKJz1q4}#K;735<6o5!igF-V`642 z-&$#`yi&hq<&jOpsCU`j1Ld#G$DrQcs@ft zKjubP#lxeu{Xcgv96RVM=W*fba*$bvZ!+?!&oW}F&yAW^+<{@C%yx@~AmX6BwM3hp zZyBa24$9ZJbf%)uMekn6(c9&B2@yll_PZEKa~CuTlG)`qxqelS^w@qQ^07&TfSt=0>9Nu*yxb ze|<1XIG1EU^BU@Bq~$jYYJB73{I*iMYTB=^3%eRVX1xcrjh@-#4ZJOoadYw=uwj*v zGt7LY2VnXIz>oZM{D5{?`_JBa*OV`{peMnU)RSb`R^S6ZCiV&^qw`+KaJ;Kg~G9LI!@Jz=z9 z@s%^#6(`L}+Aw9->@hdNP$YvQEt~uE%p!-oRzoJ5gR3AJ>Yr(_GA=lD6HBIiw$J34 zC${wt^GO+`|yV_gXt$t6# z7OU{$7oqKeTQ=F?;AW>sFF6henHI9n8|0B^_&R^f2nY}1sfeV~Pgz_5W@O2wSq(!nkcU4wP4L8w?!Ql#F9(m+yDNx+ z2<}jJ=1MPZ_0A7kLdGdQjjEpd{OV!dwuN&;j9N)3H+n_x(S7X;PU--OA_g5osj($` z29LN6Dj-D6sCkgPxyo#zh&ygYDiVY>^>e*0o6CfILOXdnzEu23k#vTnEYMna(|S~r znNj3DNnAhLJX$pn-)!zGNLgn4Q`*4JpY0IQ(Ct)&zn`5B<1U4!=9xMl06!_wG|PN8 zY^4^6%RKV9M(Wl$0W^ihd}G<8vxA+lQxa&P!kaT9q~)(3J#DY1s%sCSH?J}f{I2%* zBa=@^tY=ztoEV31DudglbF85$V#{QQ2#u<4B^vsgmIIbtU$`!De-_8W1>Z289?8oR zCrI?F#0N~rsM~)i{QmM?R@NfVX~Lpsy^HF}JQK4QHUmvr#F6<=glG<04dC-7s`DC? zoQw0u6uO#C{b_`Za@f3&jO4Zb%i=}r29xX-JW%V@NCRrRVv0-5HL8ZFL7D%HIh6E$ zEH>t?McHoz+1kVV*2m;;3XQ=4*^=Mjnh&UMPONyT)f3RG7@TlZ-^;)7Nt+eUtTc&u z`oqdRQu(w`p3z4Qkw2CWZzMgzlFX==)q1{??oVj$4nEHH9MbR(HM*5m#C~DPT1%o_ zY%n9?m|M|krkJmlUV(z&?8BNj-ZrFitt;sP07hO{)LF|-jTU|`(zm*2Ialzki*^cd zB`GIs-wfAykDb>AprXKYW9&&f3V8@ixbictc(Ry~2|zh@_JO{{gio;upNv+!o9Z-V z<@5eWMbmrad5j=vF!7*SDF+7fmw^Z(g!@=XjbpMAkRG5G#Y_epxsjgTat(@xu3bjO;;PQS8|$Z1*JajqLsq7t-B58u z)TWVNg_+wf0cwB-*szen5%}SZBQqQTm*7WV&T=d5g`_INsmV^t{;j+F@I^L4MUJEJ zf-h?_IMt|&tJdzJRtPWYHNw@v5z8s|=J83^R&G{dY>nK8f#@-3d>_^;&89>Nu~4D2 zEIM()A=VHQ z8z?6UZOQIFAl+;EESg6cNw%AyJbSUSC3}8r_&5W$rp+ zVgvfEO3)S==!Yt3kg-J2X@IYEv6oHVx7kTw?bx#eISJi##jXTImon!!wHq*;);sEz zI4Q(UnL}6*YKzP?r^jm}q>>;GnnMYYI3#x@S@N6<*BLNE;rPvslNP)a8uKL8?7Q>0 z#UCLZ;Mu7zUIkAU`LPI2SlDwcC6bwAFln<+#9xFtR5oOZ7vGAPU`>Ej)}U7wgTH}n zvFjXtbZV}JC1@w+jD}bp z9}QQN@U!UYi+yjlt^X0`Ylo+$>sgorJo;UMIWJw0iT_fA=rcAXF&YrS94rC_&_HKJI=c&X6s z?b1J6v_BK>-Oku&bVAW`of;|%Oh$sH2}^?!1X>_50{r`rD?uTUTFBxvfKjdr`$*P~ z9dB?ZXq^z3G7S*S6>3QdAhTMEIj9H{z|3A(>%7z@lxo65v~IVTAKdmIpLMrfs-y+?=budRI(hLa z?M}x>`gji{C45QK<&piyp?(Tliu@IY5J;f4sY9oZruKOw%09M4n~W7gE-bpZO-fek zEEONMlatrFdlQcj5B3LuUVYGGAZfW>OVOsgix>5#%aZA7(D3|kE-2Zk3?!0eRVw|f zjXg7yv66tDlfbFKK56aUs8!NS28jjMqT$pXC#e*EN)qM5MMEm3v~7eAP8baP20X~o zfPuV;=?x`zG46(1R%HYw4fXD{C)&EFI~>|TZ|XszWm@Jbwj0H8OB~$oHO#t6#YBa8 zNz06?&yl6E@vCAWlQ~FnAnKLtV79bG8{*?aAStGYT?bbRvr+~lS}3A5W_9ysv%3F~ zZLl30J!}mPYy>FV?L4|$?Zd@GML<1WfUMiNZDg3&H$~s1k6Au2r^LpKo$3CHB%{kB zDmI#MIM`^02_tc}aTo<*b|^$mI=!Azz&c!jY4zB0VuhTKaUxn0V$9n0Sr)B zOEsBJO;BEVPqmq|*sR#^DwQDrXsS=)$&|@H8i$nq$N3CO(Wd_>W3*45I7$;IVTcCX z^cZG;2rCn(%SDKU(CeLAU5`Ni-#qE_0Zuszy1^1K{S=xj`YZKbrnq-9S zB$b|2xoFSXPT!Nj`vm*wd*Gw0)jq@BfG zvKByJ>~~QBE9Z?AX&W1`ex6giyAP)Fsbv0=s=gWJ&DxVfNV|nsh$115V_(bqwwN&cFOp*Sy^=ea( zHOe>nIf?HJkxnq9vl%A$qI6kL|Ci!_-hIS}@YFx=TK{RZ_doCX)963>1>U{q zE*~6$&vBVu{nPNL7@~dX5q96^llZ6q?cZ~OPtrgAZ|}dr+Z}&>oB!$Uo(p6#{|!n1$4_eKD?dl;QjY}@8V77=56Nzz89&Qjg2pzHupwCCDE2d%Bk;Y;qjh45tCKa<=ql^9HVI_^}Zd(M5%f6VfABi}^h(OngsNmlO<7 zV%MJ<`O9Md2G67oI$qA2r+h$6$7Y;8&?J$}Y79Uh$-42oP(+7+KS)roLxUC(0K z=ogv4U-bVzg8!#YU-2Kv|8stFcG~6tIXU`;|K~5m|8pGm|K#-+#dir-7Is<^=Ct76IrX(mlW~fre zhY-v{nfgMQl&&}RGAb%Y8WXMpz-%s8GiJ^Dc#vBxPe7VxH9w%4XI4qliZKw zO*jM>k4i$a(duGF4^Ps(r4}>@?GYAu6=|Ylay<`Y1{?@1wGVh4JKKsE?NpprSEC%p zTo6#kP{0>TJmmcDZo4r8akwvil{riGu++H^Jfe)^kvd~y4oqiUG{Vf_mTJhLU)qt zcYT)v=S-$+AlDpZ47cXX!E_jpV=7Q05=u5Scw#S?#%?edSqO3YM5si)UKc1~QliOp zEQh6Oi-?jW@)`cZiRCQ~1J+@_hDRIaR}$LOk0eo5<@fldHj^;}5U7FHGYmqm$?{#*lEicxRsnAO z+duvD^q{>VwEeCLwnX~-gfVGlYFigAq6G4)d3i|ck?eB8#PhbK!;LXaE&S7<6JX1X zX{!yMxXm$6{SqDBWLI-}I~Iad{+)}`Ueu3a`g$Iv^sPg}Gl>=-4Sngxrl)27P$$Ba z8hsWGR9Cc`Eujat{!hWTmt`ZiGI52Cmh^Mut4`A7( zx&#!;RD}|y&;@+SvVtn9pwVOyjId?7f~8S)Ja4HCY;Pyi#bxT89_UsCA>eYQWbgjjit=`w?y1z;8&d+7(!lv zG70TG;gZF|Qx4^#zDcv~?gE*#jYejl)XWsFoGNn&*HH|oO(swADw!W0y{LD~R4HE` zA*Hm_A4hC0dc7D&RQ0&OU00+De9zd8*&;c`QoFX=Zn(p6#+1!{wRA!fAaFH&56;20 z!L@|jP6$jhhhCcTV)BxvQd0K};KLah{LY1(`0m7&W`>pjP-!JSDX+1(SWZQu6BQQe zepIso>zobf#>T4Ig}ylfl2w)uleSK z|36M!qlMJorK>?zjf1dxUc~8q+T?m1Ln2ti@h^wY9tDncV0%S4WN5WzsVQ*Sn3~(! zQU5|!m{p`h!BOEa%Ha>Ewc=lEZ9SZ*<<`8m9{}`8R4s9kzbCvFV6pswFu->BUesAg zzv8l0j;^g5=_p0_%#%TXw`4`8CZhB6F@hq|zEFNcJ5CL8B@YDyn=MB!ej|{cd$6y@ z+xuS7J?Qe!DclJcG2NSVEruI$m<$yj;zfj3Bt=-U57+vFl{F%X)pku$I5Ezji;d_jp`b_=J9o{_hT5C(7&Q=eHfAJi)+sII z7Qkl(YXIuctHpL^#~*zn=Nu2Orh9@kJTtmAD5yx1r+H)fwZ7?T^4EzPG0k*WCvz8N zRDSJw+=W;kuk&VI$ zI+)Zt4)D8l2@l%_)gUohgpbE$C&zWthyJv2YJz;>@xJUt=IyfU4|hI|HYR(A3|%w1 zPQEBf;@iyc!0tBSuT09SD1MD&Pp>XyV@uIH0yU@&iMGL#vhU*(hY|seKS5i5)zt5>FWVPuwuEMSfV@` z`yv{)jR(g#uz#IE-6;Xj~*HTX79jLDhRe(5}yWOpO{^g0bY({6}DlNgDB zOQG5m4r;Dsc>r6?=|k9y*0=;8Y4Di@q(2aPBH5Iq>*@*%&IOc=5cgLSBYcVsUAV|7 zTw~g0Tz%TuvN3Nwq4FoFqh4%E;nY2F2Lm%r7dH-17J|(@?K!4r@U3lF3yu$WzTPr8 zD(Sn`y&X4TM~_Pn%bzL9^>K1sdhH#GToa!`PnP6{T05VP`|=!Om<$UMotd22fA9p( z`BV8YVGaV;4g2m!HKY4a^tHDgYun^iPCL|4*4|1R60#<&9uc4vFj+1SG-8AX>}h;yr!`~A+>t49ZKSX}nSv6W^3TNM5G z+_chT>1L&aC$KFI9foRehvE}B-ZpVldfGvPwj!EB`<=XIQ9^);S|}M-MkdW<%+j5^ z_m5UxoP~C0cP&V%@6@~w6WNnPrqLPNe~ax>dy^w$msF6XLm8KrkKh?4v#DLt!tP~{ z;OJK(%fm)W_$Bu5pm%YD8ddthwSnQL#WUE+K6Y!VCP+d_Xm@HHOg9YKUqR}9wItjO zlOnos?qj68PUr#8&!u`Oes{1un~>a%Y&4;aM}Q;j9;JB5N=5B9$WRVxKeqJf&qPufP*8YhJGBVQV}Y22;mhUao^#dIHz( zN&YmNrp|}c1>?nmB?rBJZQ%J9@7&%|c6K+abPKh0*Clv~)a~TJ`QuCmkp76c&t~VQ=T_&9(}U zSFi7ar;HZX@}a(r57*y)oN66NM{Q|hUmZqOA7`z}sJJYZowWKRAsC)dxGz(U=!sCU z^D)AW_M*Du-F-<$LvQV@;+3mOD6l@fAKQ}of(^mw4%+X_a3p&Tf|8xVCOaHuQ^aPg zNwl&Rnx0e;D(o_VbIprck~LD{DmxAsC%98uuqbHU&fXS)EqB!6+W1z||k^ zsgSJ1E^}eiB;)zaE}szDQB_mu@Ai=2sa5`jUmD>{Q^A;LLKL0I&K+AVBWVb^5uEnM z!%IdE(R)?_by@P^tHmH#_@$tgH)5(0Joz@`2IIWA7bkBTD?Emd!!l#<^N@}YE+`0l z{ZAV|eh2byHJf8_4POqV{pR5tCPcD1_Eg@Qnv}55542@-$1!UfPD6vW7#Cn$&^cYO z?JTg#Knn@nhZLQM=IN5&W=2%UlR+X%dr<6Aqy8A-=?ivju;m#U(gm6{8Li0ftdL?T zT+|v@{5-r-6PVTfiV7jE7Vag)eif5xw=IkeC7bH0~Op0b}-j+o-Kd&E42h2Ai` zq|TU%{u%z#Ga~fv2512Y58GLMe5KHt6`s*#n%`r9C+~g7s-_{oGCs>JSzMS^=qJ*2 zv;aI6o_4XP%_?#+Dc$1xj3L(6bc0;LMU+IJVzQ3UcCeSSC{3Wk!QBiU&x7w!0X*a@ zKOUIjSyYdZ{T-z3#zilwqYe`Vm0_k!V+Th+DfkGf6SHOKb_-h6NEs;xPWEfzIUa3P z5$-P|e*nMJ;E5Eeoxzrk|Jo`8zD-t@Fd597&EaRl8fwZ;YE$7kYmoSH6hbnvd6b7H zQT`j;rxF;Iz%*@!k^V!y z2%ktaL}3Ue@F_I%m#-28rk6}c>iTi}iowAX+pd=uY3;A|7HQ%)0w5Bok!1tp=^QSq zOb~gB2WLK$oS&!fS-k!6;aSl&AafN?6@R;JWRr!F&1+A>^ohRIEnP$$!iCG`^*^+R zvQ(9l?WBm8z11;sf_OMMU=c$|3OSyuh`Hn84l$C%SI`#6L>16@dJJ926qG@(6Rj){ z(T9Qn4}0QU&BSVo-&d<4(GH)F#=$p!ZCI+Xf{&h;3Cf@E>!=0V>P-(%!6$uq&i{S} zzWwnt{CoTy|9y1E|K@Lw_?zQH{`V38`cTZdGZeK8u$cpMFI=Gs%YPOVPFU+g=HKlJR z(zOgz;JxPsz?h;0U4p^86@;fK#ugky$IHlGbOahHLT1v@rq!InD!j-mPU0q!237N3 z(9Zy`*$Au_lC%I&E?n!|FJ659)fd`j3FvJ&reafoK9a?OLYEOaNSqa8FIGnNv|D5! z%wc9+C8&W7;vI9(!EK%;Q_kH*B*-|LGI694RB% zli0YV-(85>P(z3867C-QPCz9~Uv#-EyU0Y|g=;U0ls6_#9E|7=4h??;SOxApD0&GM z^kDFHoVp8BgA|>uwynEO+CI=8?YeWvd@kkZ)2r=rFgnC6)#3p@FS=eu7XkWy|EK^r z`;d7B+U5oLeAr+&z<)6#C7-4ljN~-d2t2<|X5RuaG$B9Gk}G6ED|eDHRWNKJ zR2c*FH;nurSUR2#10=Qw`ZmN2=Un(OxXA=8>T8IC#W>-M*d>7;6lsF$GML(>WzZAq)t>ix{p-J+^q+Kt{ftb!^Vo7zaS4s>c^bbm zrBxHX@g|Pek01BX?yCEH#mcCPt<|PQnL23|F=KObkkc_M6|=BqT`uZ7{4@A@{3iZ= z?b134{&Z)n6w%?z-N)?9_xlOtaZp{D^6R~D*~wQKS=j7ig%v3Q`}vV|$tA~aMvWcW z{vVe6slSnt5=!fV=7NfF#+|f4LPjb~H$j<&HHVu}BWo7M=5NqGQq|p5tV_`a?Td+; z%d377u zl1Z{~6Tt-lY$-BK;1Qy`YKtVJ%tzUaULzGcg_#_wGk>FwRB3rB(k_Err`08=dB^#u zi;PZoip|TYhIDJ9B--el)dgt`@^g9fp>_O1ChMG}}yP5AS#1ZvF zIQu#;jm~!tMDhMk=^d2IjpTCEq|;xlEF-NcLKIvsySEgdLzEG_8N!;?q);%ql7vJ8 z;(7xD(3 zv!boC?A^Ifz_$6+F8j3XRd<*3n=KRyL{=oxLU~x)_r(Rl>B7Ny1}%RdL+6Lm-XCI& zyw3_N%5F@5@X5es-eU_GxwNDb1|NBsi~O}SF6%gsPIvFtO^Qo6I!@ZlZ7y+(aS_is zA2<0|cTqBz9ZF`&qGupS?t^Uk6$wvt4#?O=7474bbMDcGBe%|3OF+4>n9=A;(5vsr z4wZzZKwm1$Oq15j5icWCNA%=*KRtgUuwj53?KphGI!19PX?A^IbtmSo->&Af#=qx$ z@JaeSfi{IX*M2q$l*yfWP15>sD>9;m|ZYu3od{$E#RukO@Ya zA%e)_6qGyVU=ND80`BU&)%ww(HOT15C7VH#A?em9<+T!oXZjh*U3+=ak|D}!nJjZ` z5f>U^K~kYx5~?RtsNzSOfJ%WWntR}9(RZKq8}Xf+jiVOnT0E`h@iED2MPVT~G8PehInmiz-;NhuRH4+%4vQj7h`whPNZ zsQYF($f6fT0;EO<^&-|jF4wC!sD4Yj(ga5-0^m(SiX)(BLsDk->gBsrJBauxwiYWR zvmo{p*kg2~+%t77zjyw&-*|YsPI;j)Hw=$!!WE)+u290d)g#^e;qWv}@ad?ES*goM zrMn{Al|j5D38gB~;>@MqU4X`<6mI~1;Es9!%uzN0~l_^qPeqywj zK?v9+jJJxlt^OqWp7kiIuo%0fV}7S` zP^^5OlGgIiAJwfAIF<_hqGL6F+p>UMU($>aH(_|@W_#IeP_tmWv1E>ecbV7Uglb{n zpBx?nEA2%j~~iI|NHqLj}A}IkK6o@r{k03U-%#YGW?GxbR&MNz@|uI z)mRasD1Ml}`0|Ta-@OK0?7#F54n7J0-+#lr)=L(KwA`Y2AWQB=r$^B4b8X5JwF@dx z(MK&zw4J5c?NZYwGy8jqEG6kdw(~}$qv#b?n%jo>%9Ff9%|-&NBDHZkgy`~Pg8tqj zAw&8g0;nG(d#~wJYIKWy9&99?0i1H>jiBph}Vpmeyg14+oV=$5_Gh!ouCNH2BEu`@6>XZp%lXUD4#V!k#2e`+w8#y&-V~)KweY0*l zROH;ywUyla)FSXOEAggYpK~k_`8p?+MhKoFa{7C*Th@6PipXX3S*!hSIUD zXp^BZd{>3_1POLR-zHaGw80(>R@)d)} zGFM_muPn`@w?+741f2^=G$~3DqW@ua8DoZw;;ew*h_EvuVUxxC4c^DtLnJ)$Pzn+{ zR3~;TzOxzWEMWnR3&>Ru1a2}KgRYa~o1@u!A$ zMmZ?KfqLH`6Q{N^f4VcFHeDgG4Pd7Fzt`KLc+pr$|lX&8RxF5sX3R1~SbsTWP% zo&+{Yqfh9K$!4KG09uV!trKE$`5Z~w3V~nI%P)ag`djPG`bprj$gGBc2A?rn8&bFv zwxocFJ9(X?u3Li6=?fv3;l;UE!M2Z#WZqPhZzew`s$xIXk1WDFYnjT}H$K2q-R*SVonA$7+8u~U%h(O=MyHZS#w3(G4a4?u!^i%AsU=!H=QbuQUPMz zi4)19#fMWN(`HzR-9nShN_lFVl^o`5;=_Fb>Q3z45udA#N8&0uxPJtsK?LoxB`%tP z6)A2uts05gmxXJ@Cey3GMvCEeI7;l>agWH+R3m0n*61Q(i?$a)x2dT&jtj&cE}(EHS=kxYXl_4yaCUw-)tkq$%4PY{921VhQ6F|_-| zw#mMGI3n^D-xawhp)hxP6ruNg%6`CQq7-^fnL=#Q#~Oe^eu&M7zp3WzF=XyFBbDxf zuauj9aQlw~Bzc!?v4?D_%6@U9(nkvW>Snnj#G2+TlD296Ec|%6ScQe)nJMh6Bx?cN z!%s*BTgyT?Rl^POE49)v{&o$1GSY#!yQGZqdq@BR^2o07;r=hJhg^p?|GEn2+x2!K z#t=x?GQ?&O8nK%iQ+mqd8h@4&i?DVtYTs6mDyq^-a6IK>PY;j68~*I&>z7}@dL334 z<|H^nN+&T*V`E(>AryZ3`t|R>z^4tPsfY-t@MFIQ_TwxZzv00}nnlto?d-`gPqav@ zI2c3}Q6p@Izgew!ekLOaH^`pe*g!D!CQW+9w;Wta23jc`yTI$v=Kj@<08nV@BWt>^ zhl!^&r6Y?SsJ00n6k-5NBf7pq9}6AY6x!_6wB;^pTGMZ=sA#)V)~?!+;HKu1z{yRJ zw^(515Wh*bes#qlLN9(7(~-U7GdrIh$Zn(|9SFZ<*5tUcJd<=03wQ-pYMoZ<0;O3j z)gV=(bPa)8F4$AzSnm`>c8N{n9P@g_Tt0$ko~-L`^UG1E}|?FZpXYKh^79ICJ3D0`N4~;E+Lac@UOl5Lp^@eSx{7Q?z)oEUxGco zvCPhnCp0FF3t9XI07P4DE-gCTOS&WMbbPk&RjXBQ1fUzm4{+r{((xojp-oh!NTS)M zR$5`Uy@y){n_T?Rb_(KoXBnM+ALu(EO%|1oDZ59()YpGHt^JVt}7v<^ksrQ#;H1!&CU6)6PQo1gbm;IH7$5hc>%TamP#rqDe zoVE5~m8V6lxyd%x*+)Sh#_45CRz43gvE14q^!FqEtt-gz9m1(AU<_H6v!vVbMdx?B zrrleF6p=;gh5Q5ST5?*JrBlq0I^XhcqVuZUAL_qi7>YEd5ow|+1NOB@cn4>~be6t% zpPsoed^}VVlZ$KXa?!rtc-Y}KTk!~Bcz&R-P#ir!cAMwkT=?av8tGL>t7Z5B*(#VX znf(#(6n>HdNw^s-ruZEq!9$shc!dR7LF&Sof8K_{RL0~#&zOv7{bbd|1RcS(ND&$H zT3kMw8O3YwNJdwd=_OYQR`81Pd^pbwX=M#Y6(<_dKqfi@YZ*;Qu-<458@wQvU}z_O zcO2pvRt`Ccxi)&s9(tS@`F)}&W;2E^=w`x2rqN9GmdnV)OLIEL%li`KCms za8cb9J1qdt4CzB~u(0?42&7Yw>n;(%RH(DW8~0-zXG0+y8ew-eZ|bytApvKUny{B- zYQ`%nWzDV?kIEjh$qFPg*Gl&$UXfH=t$ag5S6r%YD+!#^KByMJnlm#fWLAhO zTZJfT>kF^n^Ngjs6Afu+b>w*ctaDA2KSF9=bgCO)bgsGJ6^3vwqSpPr3h5@(t?6UE zv?ka^nPAxn*0)#*xp-4+g*4`6KlSy58t|e%s9C0vx6I{2IaJHKt(9HkH ze^0L-uR@5<1a#O97}-<^syGb?%`G*wUSOCb9xB=juk=)$>>WiIKe7?EDw}&tC}tb4sK3BAPST&nya{f@0>#o$nnNp(@cop%*w;h;fRtT7c6*w$j(n){9?=c*XdB8_WtC};pP9(#J`h>}6!EHr~;~T2IPdEmp<-z4aJMsJe)C&K& zuQUujKDPWbL|r0W8;R!NAfF!U@IHiFXVC)m^z)_>vc64hDtLA}bdH|ug{o`fw0m}H zuq5nk0a-_Km?&$EwOkZmFQvpr-vu*IT*D@E=2=C>xzZe)Byzp7$m%!+2W4khzz6aD zX5fT1`%tdSeO95zoZt4o*@QdYsn!amjIQdL@+Lj3pjWZp`0Wl{{+0m8Rgy5l*os0i zZpvLU*YV&wDz4c~jEvvP1yaTlljg(M3-F_CdY^Cfi!378aMVaPI4AWqRm7T)s-R!dvD4v`UeE9f_+6IJLu7KuzZ6-Uol&x=SUef6EP}yz&^c8WC-W_-4Dt&K*Rh zOk1);iDdR{Br#K8>q{HtGwHA<)!qKi&F1vBn^$?48qwYBcSHg)m6|!Yq z(&Qyu1uwx>5FI|Rfbza&Y>gYyeHH^-Q`Z-r~6xe%W&HKcx8E7z#R0K1qCC@+osT}l} zeCo$}a=COv>+)LfgIficWP~54ku*}kDFk^LWAO)pUS+9JFNu)lb)wUfb>7sr(WE-s znG96&Pw6Q#M&n8TT5St55j7WXQK4EN{2oceLU$z)Df!!1#VWf1GhLYahg)=AzFl2a zm)iyWRLjBVFECgRDLCEFop<;ICzT|JwWua}%!3lSD`b#JPkl#Pc@#P>G-JoS1K9HNtj=)X!5NVVgiOPY@+lW6 z0ul|f<%}?n&L#3Bh3YU1BB3#_g^{`n$FdVh2KX__sZOpYsy9g2ggO(ZIsu9#+2Z={ zpb@vxG<)=b_jeNP^d~S4KI#^y>XGK`4;lxW%3}Ecdb^Yo+IMs}irBc2Q`ptV9@)G$IwERxcFo z7h(~i(GD~1aA#E5*5+YP=}^iiTr|C^adPoKuJJaEZFlgQ>aDzMUBZ%&R0FcVZ~(aJ zEyVT~VOYU4tKKlgc$2)jFsTi;(I-ZE9vrNCEe?%oYrNY}4pQ3E(2zBm*C^JQlj99@ z=^%Zt@zd1B-2V#x^ryRu9FU)s&7yj%xcl4fW%$K?jbju)3kW0}sqb<)Z5VMz6iWZT z5#b&vB^EEd<=)gg7>8h|-ra8=4Q_<~6w9}S$Zer~#2NFVd{dzU(Y2Yc3lY9R+}h=U zCY@hc5cmVIL}4Joqzucq)pim7C&bE-@lNn5LnB2XmRj0i!U74$B;@R0eEw}y9*$3r zhe$!-zmJYiheBTuF^mp_74L5;fuYoa!YJl96!dri4q>)J@37Z|z%c=c*|3G8dxJirhXlVN<7?kb3xEsQvQwWQWD#b{`PG)nAM;ISJ<7~>Dp7oQY zl~7bWe}IGz-=%JEcv1CFR?Bm`eWjD1s*i6GnzPH}hX-liBWpmoHhy)fZDnX|-njQ5 z5F#P~k;|dy@@CN2_T4&5zzJfFoIR!RO-Z@)?f}OJAy1W4+Af+EbQ@XEjI}AP2jQR% zkG0#wr8HiN%aJmWms6a=56Zg2N-tZ# z6dV^^*@ob%GAz7B^>_)~*5N5zvFtLQSmnjz=(N_#GVC9Oqu7g~57nc1#a8(hnN6td zS*GhjRDw21Y4sj74|URjpVd*}C+Li{K}w>veN`ufvkyzd)JFLL0~a_r!t$1M^Gry{ z(lk^(Qt|cjW0^N4RU6xtBChkcLLFWV863v=caVhtRri0N@{#9v;Z-&xtg4aZ!M!Z> z$LKUnr+ex@^6ystXMB8e{x_$;)PMdO-+zwL|MTmAMwe5;-%$_vHifrqkXJ0vydYd1nv93HM21%GP8noSE5T-cnS@0;`U*4^jH&6$?L zW6jn}VM4Si0hP4S`Ys{` z6|8g-hd7(hl>XsOtsj255p1aPFrwm)l4>DIbJuee*n@S>)z{Z3)B!Y4d2&H%N1lfV z3y7AAn|ErbhK=v&vvQEHk%yrBHg-EaF!2*swdpbG)$$wMa; zc!+WpsCFeg^CHHZW{l`JKwR6*)Q|kjkDlylw9&Hj_lWVHLb=Oz?Y(10ddIo;5sh%hFna;u}hrAe2_B(6i41fyN4Y@m+_rU#i)tFv73luk&+Bnd}`BDcb zOc2BPZLM+vDU$$mr43rasYyx*+f|?>#Se-$ktH2WpW{#bH+^Sg;PnpB$<%D`?m)CD zyZbnQH|#EVAE(L|yW}kKcC3p{6*;7~5Y~YmMY<%RCc0W*5aq+H^!$oF1osd&dGXCl zAu)ZZFD27sSQNOl^DDuIFCX#uFg(8Pq$NV~1ov~J&bfRHw~;kIj9SaWkIFV!gSGm( zs8EBn^#(Rx69ee35p^FJA}wW_&4i7X1$)$5+G~z!nLsAmV^&`>Sg}M3t!j|vkrth= z^;f_ORX5ciDV-fA0BsB$kvIgjJJRDSN)__Q``cAGBt(&AXk$@y4ZI0Gs`xS7L22VpR7Ha8XISU57wNc8sRxgCh-s(3s@-h@n11f6g~p=e(Esb);kkXKV% zE_NvFxqH?9zB`}`Pk-nE+pF2)$qY+WW%5)iGU>ubT-)h-pvQvieV6)G)n!6u{;`H~6%9G99ZHr3|F;FxV;d3zb%EvfX|e0#xw*+`II!68Ku7#FQ{} zXUkv}?I#WiyzF2JHxG5aEKd)f^PA@fr}VgW$t4s*>`ahFgrz|e#_lF` z>0O%JbIX}=Nw;t=yfsyIi38Yo5_<)cs;w#S+M$_8I84{iuOG8&rL?W6RjI(o?E!`| zt4kJB8!rT%rPOconzJpd@0W}O#z2rac4B=MTx{>NAz1_1Ua!&DbFCCf%OpN>*+j9b ziei*6%n2n~&zm=(dfSlfR79*j?;rMfaQo7DODE}Oh4qj2?m~ z4zXV_Ot;5g$Gc*$;}EQ9j987L!5Coi08~J$ztSjoj*`JZ0cI#>*|X{x z+0-5L*0|{JYCvyoh%JlG<$M$kIk|1FGVT>8e(cVnE`Od`Z))qDPzm`+)LkMr3;XkO zKFgvr24>c+Zabn{#@4*~QZN`I08}Ogu%<QU5m# zmtn6=)(fD^2}X{|iN+5WdO;jN-5w&Ck~f`v&_pqoZvWVI^IE8f_RgftW1K_hw&;NN zT-t%>o}BN_*P}Cv^1dZAU^to>v|2STO}q5fzm+>C6(1wVkdq-Z;C~k%NBWoN#C&&PyUA(WB-V-=h5w#`$@SKY?r>BKmZTU$Lk;C6Fm*m3@1jfO2r7fw?fSoPtKCsJSZoeX#xTC` z%40Fv@0^l8teoS~;kbO4MD!B3aESM&70qJD~?{9+uoUoH>3Rorf9ePk7KIN?H4k947{{ zfbwaQ*$6j3I}D-NS3h%#ae-utf5x=J`+Gop{Kq~v*T1uPxW;8c7Yvu32@nZ$hP+K;o067Rwm#cFyo5c?Yqz zG@Vgt)M8yj7pA1Obbs?YlH!8#8q2ee^T#~-d5`Ir+m$FY-*f1RI+%gvY2WE^{aO7B z49_qNY#gD`-QTwgvpkvj$+wR& z)%CL$WFf0!Jz6Nqesi_1?um*%IymNu(hEn+F$^ge<2ySx>5m*9snN*v_|$-tRY)=4!^xE>YTtpo7IqlY8iu!_}sz+y?o zYu0nVN#oo8j(t~G>jhecKI$1x$Is;%PV5=nHL}sCJF7is>3#Lx3xCla@Qkuocii>l zTSK?O|+2J8bb1c zj~>OLp4LZuM-di_pUVxEJ%O1H?m0U)Yy>@R6^Y4_sAU#ylr5HZ1_~BQDI~vHDLPLPB$+{J^qCq1J7i zCGt#MeNufRbu@q8WtnK0dWSTG{rwi|nPd|)YxNPkEh)0#W~a%z@%5|D=3Z-?Tm!ZP z?&cP46@Net0+e3;atL_bD5nNUGCI-I|zhQjrYcLqD!-^juepqQ|K_lfi5Vd5e$r9A zhn?ejEKOYPRi1qJX+%_Hd0|~*YB=|g`s|3KK0Wmbeeb9l-)5sBwLmKclz7(4L88f- zB!UaO?VPthJBTwD*3iigYpo?7t4(QDalZNRNY){kBU8ptkI|RNM)CaMxentn9md&? zVX%`<={chUrgz_^qXE^m=CZX+0|&opm%h7oThwd!)^5YYSUvSlYq*4sZtvlDi*2T^<;pG1si+-oQ+Srb$QY+2|OzR*Hr zsXU2I0`j6pYKVyZiVh>Zcs3NWfc%oZ<8Ro%6~2D(f8Nr^FaOz9|2Z2)8fNx+jF#1= z`Q*>J$ItKo8K0kyPk!nD`73(=KfCGYGKK@2|H1M_kWlUkA<6 zsrDx{=t#i&c~85|@sZ&0tC5_)BL`pa|IW!NyCztb4qp|z*AcitN6maeJ>U0z`^*^D zoI7BIO24$GD9mHW_e}w6eBy&`Midy`)7W%4j!z{W2j~?MQHzay6ZCFx>c`RBYO%$P zQMwLI95xH==3v)%jaCoBDWqpXidShT(k@I#{9~sjDQ0)~wnClQOzCwSZhq1rj~WN@)GE0*NL6HY+pwF zk6fteBhizq7Ul0>mPvjq?vdbvQT<@>54d=y+QRV6o32&tM+DlGtlil$n%Y>Q&`f?c zzh4MSI%~EN&VG<9t?ur&pzKwiA&CuaeuN9gUPMOI4%iioT$aL;1zx@oW+*(4e$qPG zDRMSvr2?vL3K!zlfBW5c-^e62kWK(+Lh#=SAYHz-FBvdyI>TpxZm+Mv9cJ9So?~RG zVcRgX)!fRPxT)^ZaLhL#dic-3K)^DEA$X$Q$77U2PD#Fq)u4j)nTY*bN_ z$T+YX2^z0swGl7F-Y2N5^1al!LnPDNP;#cI*nHoevAfD$0g!32F)~NzO_OSi%BfM zuP18bhA?$%zE&ZX@>O2<3 z51$J!!qKTCQ$O-3>xUOIcBmdpYESHmh*GK3X3bkjQ7xM%Noeb&CX#nip|_bni!!l7 z%XF(!rq?=m<0N z)K0TioGD~Lm^;Z{W_nU+yPDujud8)zahxX#BGG!PV6OtWN#5@JTb0$=>*Kp_XA6yR zsgO)k0Es{38@0W0`=%cmOqaIkgzx?9znm(Po{ERM66QveJlcYerIO1fKlS+~75oyS z`+JzwYN>=}n2NitR6*ErNLqI}4ID3uHo=&~h!bQ7O4>4-y&V~)vhCZBLn8UhqrNm` z1i#{&MMWY;@7<8LzD7v1O8vJK8OZAnLLagqg@3W6G~d*aN&vMFezjd!zIWJMV5~!; z*X*qB=}2)Mb^{;Cpx6uOWvMFdwUHxCRop0YBu0s% za|Q~Oo5$U&ZbGnZF%lUSvX;?E^^^dAdtZ*@d;ZR(ua~RDo>Sm)sVVUA7Z`T8>a8zQ z&rRvu!g7O-99<$Ry9`;Kqt_&Y=2m{A;(&0iELN3v?+8hh-r&_rxT+{}4VvSb+Cw4p z<7a-a${jE#+Fln%%L&$Hvf~7mL-xC9`h^XW`C+HbHPwMc-m3TI@$PxM3U7H6Co4EA z*UEN>-)Oc}=uWwlxi*MnQpiWx36(z43%+aBhfFpEDeVA>%e$NLPOMu>yhgp{GRw&O z#TV6mxJ2F*-B~`$|IKxSjBdCC<#EjfnUiTfWW|Zt8*x)*;U(_7!O6K?XRFmZcu8NL z#;Nq4VQmmm1sGOBGWXIm`@(hbm^RtQRjI^Z+_dPN+1}kZf+eKql3mfh6@fd_2)WtS z+6&Xk?V;bo@ikXSf+!#BRwWsjDzT}@UP1cur~LaYP>iZscqO%JQ8cnkmUo zy1sTR();ox+X1b*6Epr!tfsu0VtN3T)wh=uU8oI!Ew|Vsd6kRm64ya9aMJAjw6Q^| zI4WEf)6`Y#trz*;90gl5YRg^W2B+XQoIO9G zKY_AJWr^6B1KJ5~_dO`iQtRWiw>*Tgv+BilnCJ7pHp{t@X&!@(xpPaawq_P)4(t|K zL1JQt61(DP3wv&6-ZIwH-MkTock@5^f|uL7OF%)`o*Dcpaue4xQ&f;nwu)axIpRX* z>8NaQ)`9kHdq*{D{`#amd-kmSU+T?kv3IEE*6Z~u`M}BHIli_ue#EdWj-Q9uvc+j( z@`U3va%=0Cq#AQ_Xq&`Uo_L}-yQ3P`@Zz37e}=FKzGk?i{76rJJ zBF*^X564GmyBgrmMj7SgNQT8`IQxy%dq%4@m`LDPYt)sux)F#aL1y+0PaA#I{!qtp zzH1!klJ-qfJtNqh5oyWk^9M7{Fepy=s99Nh$bQ2WHM#|b1@#m4Pou?Zb)SzHgXyVp zv=j;<24vYJ7hZH{t`N^(q6b=Kw@9P}K{TLQ| zS3Kfs@;-sfBq6H_voFtw?xfO)X^J~I zQGoQL^#hr!(eoPI(J z2g))Vvc$mlDbjmo%<1rS`=(n#hp7yH5g~%dhqCy-JR0svJ|*vDAM@9dGJhqmjqW4* zHCE6TyZ3L|XF1WjGl>7bU2*ld4qaXV07bQ791ophi2Y1RExmfmb0ptvc~_C+#$v zUj8yH^*2pI3t$bU9M{pI>WgSe#_6?Sg39P-j0IbNQGR(O$SFcRgEf22Y9oCTn7{CW zaoM}CSNBpRySg>h7)1aw-=#6^X?U4m9?M>V<&k5k_2J^AA64w(qofFTuM;BWa!-vj z(Q^3mBwYG5{NI`U_zXKMxCZuRhJI=#$@Emc3D5mlZ)ELy0n2UeOkNMotk4wr_XQsd zn{{uhb0UP(;Vzx{dLLZH+BuY@ zeTRcV;@&J)H!So*?>S8SMLNeFoo~hfx&%a60N#;s?w_G5cc>{uLrF%jj7!NnE8tUJ zGtp`(SM!4{t+@s}9bZ{;3ElDk1LFVk8rFX#{_AXfd~)2ue;uBj{(}Gd3-Lb~P)ArrM42m?fvtW9IaBn<5>j0JP z{F|@&Efq4C6n6U6Bl(Le(Ah!3^ClJQVGxYs2QVmFcERsnfByGF0;io3iDL9rpPBz26xsSBv!C^i;_NOLid>_#|;JB&`+juX=YIG5iKd4kWq zDKs~cV4jFynVTBqTSemQYk!fE1~S63^v2T+CDmjYsiK3C60SExNf{B*a8D^KgGmWW zs-0vZn!ot70aFn}Gd^(eo~4!|GDCqGuGg#I4a;T0jc3ZkcL}mU9GN{?Dm1FAAeLv{ zb5StO+(-uxeJ69GRi~~zIv9_KHpsLXIzf>jEhK2AhvXn(bcS@}ZDdoT$!UC1e)jdN z@4o%|cV&;&&am#cut~4J4&f7*?u*w5qrUp$RTxf>NkW9bVN*gxC4BOWe~>?&!&G@tn+2Sbmx@i474u<*E5{kIR3HlR<2nxp1LcibwBAklw4HNWtp-HX z%lVO@5EC3lm0VX9u6R!}nO5O(s_+>|a7``tWKR{lz4!_-kD4 zZQWqg`YvqlDOaffPG3u~yzD%*>OI~^oxtRjwS1|!CZ0v;%4^Hweu6w@2#9ID55m_D zekI@i^Z;Kz_!a*9)5O9b;8F*_!hhRGaNSR*!&v{csKYnm94CKp*Eg%HFrc0=`8_}H zd*h_lV%_*^uiW%zzNxFJlZC8R3rfClP=1poq?J-pr?)pny80lj-f&*vo$|-+{fu1B z_A_~@XLyCuqRAFv0mNHrV56t>L2Cu3SVqa7D|v>U_K2WViY`1S6XDV|zb{GtUGATR zP^|&vNs5$fgoXlqQGISp1>nozR`?0Qq4xSWb}Zm}Pn!(aK{E!@$`&g4o#>`ZF$nsG z0!ZM*Bzwj_&ZoVv)=izK%frm$>Z32Gq`r9%q|dFrzyl(#PvBXY{WmJvG;Jv^{+O7N zqWA3Zh(+3d;)?A0tQ(oK_xzA1S6@7jNYmkNlBHZVMPj2^yq@KDOFfb)j@|Uv!ES}k zJ=GF@gk?!O^zNQqFZE9q{#97p^A2R!U~o|?-qKKkOV6B{qD`#JkiDsTWUigiTsA~5AG5j+oeK@;dHf^F zV76>ksBRcYnZ!BKh=D~Sxq)z>#+y>GP%8W$J2ZXJxHg*`xKx^u!0p#SchkH8R{9w1 zK=lTW&Sp~$NkKYaY=`CY8I;L_GZg;56(Ga*uDYA2)YAVv=bveQR_NoxIO~NfE^76{{q6th|G|#gi(mOoKE0?m|5Xk01vdON z@!{F0OvohUEa}F-;B*`xM*iA0%@sHzl&8)hLMd)W2xOZ#$c4lWFBEq32J&(0UPUNV zxY=*!*PGO$h|s-@@d{2xSKOR!Cz*D^SB&Gxcx!zEP+h)US8H;{zk*Tp9*^6~qf~rN zKj$c?x$&!ik+`y0A!4_c<2?$tAWBC24_b6D?CmIcEg}F9`-l@#}MO^ED7k1Cgg$TSVHszZ+-fFgec1 zZkQaVW><9K*w9^IIm^BZX1&oIDFW6RMT9OXV>tCPvcw}=>g%GZ;#zJ8%Gl@}r@TSv zgJ@p$0H@DXLZo!;<-h&YKO-qHl?l2=JkMrlvetJ#`EXNjrjp{67r7)jE382ts}8S{ z@_^x<0N9*g_3cfFx`)kx`-@Wm5vO!k!h?zW z_Pv_8p%|XoC5>3q{Nn-@Hcgx~+k2Ycp>-kf0@6s+e(RR(?kqPeY4N*g6W3V#VJSUc z$@@y2j-kvI>GyG5lXgGhD0Nhk4&-dD}i0Ajh)&`MITttlZgscqDx<*RgeZ6 zs+}UOBuS;Y`pHa+@UO|*ePNw6ri`t!9BL*3^+uL~z>UXppUG8$f&_?bx+6kQ;Yiz# zkDb}!1oj)|BphNI4hU8RJu{-F9Y??zPVWd)$^$71Bcj3jouv+Tt`J1P~4Yx*+1ab@<5_W(UdKpW!hbC-ohAqx#3((j# z(m7#R_}|4G|0`$mYW1eMtryo}sDfaY$`RZv_nhi=2hhCy3KXlhn-G=Gr7P_2axPbX z&3Lp7P6d^xopU7Ou~AW5*LFitH-|6F)Kq`urP-ke{2kB*4Lj#J2VDCY&C|xlqmM6x zda8}6>ekkR8Q0Z}NF)T&qJpFPxj0O`W}e7naAdY3mAD=!siL~W)F2Ad6l_?>6gS^! zc|h?3ja2cO#2`YQi%^0$0{#vJGt_~G$8J;up6>u)0V8!!qyTRF^=B_rkH^>KM)ZA# zLQ@=`puRU{ctms#^iB?WA%O~)r@mg}{4y{Z>)`*swS1l-LALkW&rT;3%xaE|R(wn3YQqLQHd zo+7B7!6@Wx;ZhDe;}6>zUzFfy3=R-`5yG5qfzyfH(^xf0heDiMGkaN+Lb!!2N>io} zuK)AC-DfxA$)hRnv+dY*slr4!VAs!<$wG=E48GmU!WjB(IEq*5BVkk8`gctlx)zcq z(RxTyAJ7-XtXLXvX|F|R6Y3U`R zUYn}OY0B{9dqEUuRrW#@uK&K^2mkA|U#9C5N3EYSAK^Z3n>1@^-d1K|gf~sB;rgZu zu9$k!8*Tjxx7;?Vv#K*lxxTA6)lGckabwv1miKplm<)9qgeXo@+TjI$i8p$wQuFKD z_8=8uqKUKFBr6(cXo!x}nq?PZ)VC?M^^cy^F#chYllmt~6oS_!P$U}Fm(x{^8zXxq zc#;sEZIYzLYpWqkGJ~t(su~eiGSw;=fJUP$_|h*v`|69tPoq-iDwwC_Ceq|(DHzDd zAdN7puEHsLRb7Oj@xKNyofpyx_8fQ2smO_<;ZKNWEKsKB{;&UXbTGE<&Q8f0A!J@3 z6L#0|03`-zeL}QbJl!;o!)bb1$FyaEb&puertYiHzVSCMGlq@~M#Ieaz;8-Yyy|8U zxO2lC@TOfWr}}|hq98(_Q!k&^QxrG#x0A>cCIxpZ46f%h=FcPRhR>LOrf|e!xC02< zYfskP@=lVD>RZLwBJD5%zfYj?&2}9oPV8p8Mn$}QNAXjmPw8WoB-q0$P9FhTJd|Dp zYgFCOr~H*Qd1IZ5Cu)UI^sR0$tw4NDV_<@u^qUSy2R9|BrCbapa?_=}zem@EnEgjb zt~Z`_vjOiG$*KMQgBZmt`N;07)`t2NKim& z-!*kcJmU^88x7;7CJ@b+%KN9(kO&!slnUsosA}({^6bP$7pIk=oS!rsCQTL$4}1Um zFULq^cJUpOqmsU34bbJT^oR^|oTdC@;zF{0VQpTAh-WQ$*1`=LTGuz$gJSj(EX@(n z5u)Xr3z&?`y;$2$sdq=y& zrSeW%K|>(rEHYX%3xE0`N+5g&pfz0H(E|C^2Ln_y!|r~U0t%Av#qw)n?5!6fzZNCj zFe-u=z<>*s1~wP)6jDe`uFU!XAt$UY-ml1o%O-d_C9yKezfF@n2-+dJRzx{ilquC` z!8@eG>}BO?jAx32vf;!zL;}~|4V_4C>JgHo%7MMwtQNEO4W&@Ro5^7|;|(&*MRH+7 zQ5bfjeAfn6BwQUsjfeR*Dro6pk?3uPCFtJhancOSsTXeTu#Dukg8}Mc%H0hhqbv&r z2K|UXhPQfhdPZIjJ`H|1qC(uXwU~G*JX~zi#U-cO$tU+q`Ze5Lmap?KQ$T*k&jI_F zU;Kzu4;OXS^DC^7E9y>%^>#cy>f5)GF-^{K!CI?2_UBPDZlP#CJvn_% z-7DkrdeeF=j@kynCC6l0{%Bc8jq9pl()6Xo4`8-WPWp1jhtGwd$H#n6`1n-+_eV`1 z6GsvT^<#1Y{K}%4AMfYf2f8S2r%&j_vsoTT(mk_ab^%W@=;v(QA=tD6(7p(MHV4F7Q#RAzMu8&Cv+yu zo{LwI-?s*A97H-e{Sjk3DbL2|y9Q!k$u49ruv)R9^lb5}`wioTyUuuR>V<|yjITz> zT=>W8`WlDXG_{|*%_a?cW;>&I?)S*nMs%;0(*kWIZsP=-3^R8oD+LuKPS0`NTR+BM zAC2+rdKnBD_P~#u)f+iMq(5dVO9!7GY19J5O@2DFpKD4hxKV2=m&wMx@wQ*MfQfaZ zb847|R{58(QIGlB?{+`1Tk%hXxmr!cslD`oT_z5a`?B`urDKF#^VGmY3e;k{RNdAT zNh{uPLoPIepDooQRb|Cn!-pR_VOqj~0gG|7+9Zv+OkN1Y9SXOS^p`s}wUH!gO7SDv zv=Ezy-#@jcJ3^EZ_c7%X;VJR8k+shF0-&(g@RaiPuuHSfEt?Xx<=n(UJlVVIDQXs2d>OC}&$9(0!Cm$m^v##|l zEsWcZ4^M#RPE93zFOe$jX+tcW82&Uf+~`;f#g7`_jUi7jmrS9&o;$S$-)R9%t~&7m;M=u>)j!^^l@Ki=~+y*0cj ziVG;BNxX?s7-!~BU;qeL)Rm+Nj7w=|)$$9S97bc|AZzZ!>;l!xHc;6SL+!x}8y9Bbrg3>(@~D z(K%piv#{z|!}8Lg2ZGTL4$E(U|BY-c4}Vks0!?oithAoRwA`#VXJ#p@JpAi_`To0v zpaGh)7Pjmmoy&V2*YzLhXmg0TmVmgB{MxSZew8f_7)RLQdRZBR!_lFHb+&lf-n3AD z0^wW|lp2W@vHsNV_ULUL{7QcYetPOZ9Ps4{DoYU@$sbebgh9_cQS7YKloW5n}4r!^ts7KN&N+V(c61$ukra|wkJ-XKTr0B zj6{1&WZ$ip84hV?>69y4*NSr9-eaR>C`!yE8o;f@^U%|0vLt0DzVYVV7qKrldB4gG zXpXriUwgA;HJ$fkqT78J$YFdG7TcLt^sM^}Im!baktVv4@7;J0HDD@C1PkTP2-`3{XcVF&OpvpB z%|CM`X}Y7@=#>cS1i)2&EH*OS)v#0Z=FSGW^MB)bHGY`!i0HY&`P>4*v~1+Ox&VE zzA2v&f61DM$n(=|`Do6#=@od%G|K6OL|?OUP`sl8;To$k3RgFB;sf(0j>@l{VRPv0 znzB$|Ieq3ZL!3cTGw54Kz>MJg5cW326!~t5ZbshkfsYNJ{mtu)ZOdh@~TnKtd zko2>coOzm0K`s)>f*PIfhtn?Yv9NQ_lS^sQ?wXO?R?ypeTeR!ZTrC#u7PhPPsxgZ5 zHY?{wX^#_oK17L6n|s&ud(QsxF+TbHq`XV$lhvVA)vDyo7D7=w)0KLZ)BVMJNJcHu zl#q?`LI?4T4iE6J|1utH2WircALjcB;+0ES(Hh;DTh3DxCclQ3=|=d4;%-C%e1&cD zL|4p0(d4J!ivBK^(a?_G*}QoZ*NYGpXs50<{cxi$cxqnO;SFIg|HC)0RPGd~D&0S+ zr@W83RrH_s(YMk9#IkJR*co zqa9z;`C&2z^l&a(tad|Kc%E=!jBn?wMWtbP*8Pb*`@Bhh)u!>0frOh#$5(iDarsoU zxATVW2jPhO?CV#rfB)4N-yVGR;{W>N=U@EppACt4S)IKyDvVU+ICtc zaNSlW!se)rPwzcDIy&m-k?W3DSNign$T*1H)4S6bJPqb7W)mXv2FIAuMsK#LVHryg zYfsXtAQ6{Ghp&_s)R!7pzqmPxES(n2!gz!tRDoV?c2I!y<}Uaxww0zPJntBl7!+hk z0cv8yGO7FNL{R`1!*OH8iv?B(m$rSk#WV^?%~Cu3_A-thv|Z@tX|~K5D;$yM z>bXaFlqQ$y7BKuk1=$7)k~H_uxiw*`H^?p+W<;C8jc*I-64KRI*cDPJ%y!WB9`J1C zPLeB#wS25qxe(%a)yxI+G7!ig!n32fMqG`!ZIsNmG2uPfB1T{IK)6#+56*qItv?w! zXh}iE^_y}SV7jLN)8GHYL00VgF&4BAK1KHeV~+IgB*186fHmq@6ZzP|`I^jryZ2LK zYS@{jWqguS-D;^PG<-Ss-QBD12@VW4QIqaZo8`2B z2sTO3z_H8M!qTX*#XJtudT~(zZ+X34^9aAzTvY9Ak#pIp->y)qn@-bh?XInS|EF@`H_C2kewtU8?izBky+QUCVsrH9ubgCEnrf!J*!FcIux8R=OB+7 z>21%|X1pX@+wu5BN#u`XaH+J8 z&Ow-GaPej8Iyo_LjCpi8vOWyNGrmyby9aD`nLHhEEJKLvLJ!mXSUXh1ypbg9p%d%U!bcuj)Osed}KV*_|rbx77T$qbnZmut~Q z6cr@uE9olkDSIp?Kin?rv_M2ti@e!^X^7Q}#?;=3caByw=*! zQb=tXsM83j6PltTVLZHAEw*=x*fiCNKh_sGO9W9}WqinNV}Do;(Z+0l*TkT);K*jU z4lA!kq%5&|DhMD8VKDezyp&Qb$}|uE|LpzSb|lx8C5YCueT9w4QG)=EI|6q^04cG8 zHzixVB_ouoYK2n3#2p z`Y_gQku1XJ;|Y9MhV%N(VYoUhKK)9WR2JUqHc>NPiAYW4QP1s()NS#^%gx#d578>x z)Y#a!wxYT0rvxthoo6iK)@?v@nF6{B;_Cj|w|T$7ykE?v*?|&OtZC}R`rwAu-WE(! z%#zjN%Pn1W%&U+1@=I@)=I>HkD=~&F7(31xsj}2f24UQwS+rO%xp=$bRI*B%#=<)d zt(-^EzQ^(lX4!vp6#n@GU89<;TLn$9$IUA<=y1n!3i~6We;;9(Uii^}qRrI%J4|i% zmKvmwa z!cHj@mFJ?vKe9ntGELT8On`^cFlrc%+o0p>bYZHAgf}A+PV6GHYDylqj9O%nVS1M} zYEa!x+(K-A+2MZawW-36u>pR;SqUcdM7!xYeD`&q8FzbUr7bdKTNp$~_o;AkByT^| zttm4Hz0fTeIP0*KC&%*UN{G?st1Q{|=XFowGvi2eFNI+;@rih4p7XjpN5Oje&b`9B z_0?s`Mhu85AUUa7@%B?Z;5G{kq8jPh4WSG$EwHDp>DvV7Jf8d$tm9K{fYiS)YXkK7 zBT#{t8N*Umptb6k9$juDso=qUWTDN`MJF_Cka92Bi-jteiM-vT(zCiWKfDw z0|*85?%H4g4PRJU-k?WG&}AXWMaXtigF)WIEBmxlNS`PmUv%4USvxJ$&bD27*gcm{ z(Lc-b+!+Il@d3<@l_5f(q?2>2Bzb|ZgJQ|pr84WOw0d)r)rc+U`RFh_U$0UrH|Y5~ z{4avLbhgaEvnTUq-Mb$d4Z?~I-qQyy)`{^h!Hbw7#!yDmG6e{pG33y+iS64PR}f|U z@N8Eb+~&|4jEaKZy5=(Q8K*mDeWQW;$N3d?7kBCzcB&Dv8F9i4uEH%8Z`O=Wn4L!>ng_)>@p0Pv74iZHu+A z&9#Ub9hnW?q}Ap2=4qE3ea!~e(kx{j22b}e8{`etE*0`iY@Bw&Ee|t~uslc%!}mfQ zT;HviJgu@pI04OdJ>h&`35q0xsOoj-QEZ6mlN-0nR~ep1d`CMe`7r3aLNR_5yR4Wj zSb8*Tkj|khywlOQxqBJ@8H276j0vDi!`H&VJruP?czaRcM+JN@5iKR=a)4x-U!r{a+(CZj=#9V%k;LKb)8%HV<_AdY(8 zFge$;p3#77dMSjy&i2cHFx#=)sR`}li(;dFeb&2v<2M(1aK{5x1M6@m2hxh_QUGpH z!0=iIH-*aF3BUv}*WHn8{+tM^V2UFWk@a~vD|fIj6y8JI2mNh3M%(~xy<3Qv!;%~) zqGaYDr!V$9T|eTM8L!Rj@yb)cNZQ;cKp!rTC>L8=W;4M#6S6-HiY8UA!VI$EL;xK& z&tQ=xH5-0Rx6alunNUR;R=ioICMq4gtLFtHvUWdaYMj+j^?6zM9clIYnpnAge}xFj zk0F4JVnK{84g+nBYb%Yu)8mP8c>5xcy~iRq+-t{|=7McG8dTR~AGB^JVebchWtOYs zHwETk!;)PGxFzv1@z{ShM|i97B9ffHIsBlt?d!p;ta4mw;|xTI`x&E1mU&#&lSx0S z1_^63XobCbwKWGP*C~4q#ih^p%ar=?4ce$48DcEu+1@-X>etMTd!#MPU7xAUU@m44dawXB0quZ;q@w?q>eljC?Ei8!T(5#- zSpDSgFF(}((zy44pzy8Z8w`cu%662#gNq& zz2v%$g8q4@`}eNUtdY{8Tr}6@e?a=AW`~Y>@K8||WN4~^k-5nJu&T2lyQFIC8AFsU^-Hh%N-u5E{zSa2^ad8Ko z2$&4;NJ_l{0l_sbl5}@-)&KR$Yt0hq?9f;1|rW-|hUlzF#U#caH z*@c9CEq4&`1aFoVIy3AP~O*90(e;`lv#X$Xfz?rO46zC9t#VS{J*396M&o9$FsLD0j%^M7{eUC8bGeHjkI zP47~#qQ>5FkOOC@gKlk;6WF_AHhe4Nu(7*te2kI0WOeQ_=q>y_?rmCgX54s!m52S1 zT2p)NhOUywNRE1nmA3;?8oL~)>%C2TdHM*R^hS(kz@Uk(tQ%y04s9A6F;T9(;$;Tr zlnhz|=>2wZiMh!xXcEZ8!$O6+e8!&PPxbeF8hC<@LB>lSVf^cZHr1F}IbRXCKlXjM z?ahS|75IKIqP&59>S#iOWM%i*9{bBA+m9CI5>;Dl;c_2;c7QMX12uo*lX`IuHSMR3~hp zhwRJ>2pYR$&_@((Df_WvbsGl_4MmGB4PAiD)7nkK)@pcWwyO)Gaz(sx zGPp<@vh$nsT?f;~j9xhU*K4+3Qf49ty~|T*aBU~~;sroizQZXJ7&4BiW=NHnwmovb zh5H~)>v42GIZQL@QrD)a#;IQ!!(BKLfQfa5xh-@GjMjMB+^pKvcinc!Dt1PvE-@D& zy!~RSXtR$bQX|hdSX+b6_O2^omm}m!8rN80s04}UF7BFo35N6sGpS=CN;pVX( zCI0ufyZ#3Uj1IFH;|D^*?~nf;oF1HS^#49RIy(L({`)ih-*7lAR4sG?(KBAdehN-= z(9QVQMb_23Sk2e4ATEN;88VU_KVuxr}zf#v^)&1@JX z?a(XSh5#gBn|ZdZ9R?w+-m?59`%q5DdeCur5GW3@QJDgMesmu0Eo)?m96AhT-j7%) zi&(aPgH_&EoYZdJp5pPMUK{akmqNuNc=xl-0M@5Kkp4Ud>GJ`m!&zpBv!mE^JWNsi zK{?j5qkrDn-+vzd-_P+Dy9KkbRVr~r&jETU=}~B5lS%^fjvQzj1RdW6-j~s;w-^k> z(GuiE0E3k?I!YLcr+*c|wl4!lK_N`%jgBa>68gn)fY82zIFf@_i8b-f^bbazX(E8AignCcY zm0Noca`{CG2%Mm(eTj=j;{&;`bA&ycf2lK*jdl(DUEEcZ8#-=4q~|`{qC(5I`Awl3 z>!Xu{@{?e+Rmxo;g=76BNnOC`wVHJv@OWs?-w)9xP9RNhb>fh!_1u&6x|bL+*_rVTE@uM!<&kfEmTMyS?&e z!bn!62WJd+z8rgFMqSKRmQ!Ip!pwUvVqeY~*&4BEv7FG>KDX4dZ7GJ0S<*!l>3X{R z%Y#IUp83Jw0$S>Fvih2H7uys^cv#wUi3p-;Bk7@dz7(kDoV2m)fkW5Sn9ch^PAj$< zD0kz#(v+8-;I+Dj4J1aLzplpuA#6IY*mvlx^?0w8$(@~=y9_$+x5yu|S zp}CmIa}3P$`0GgRyfyNVSj_jWWq8jl@sidLz*d8T7+aP-#)Kow?55QcvGKhfw0N8B z?h*Xt56WD@n?^y{tbT(%T5u{Ee;o1#rRw-m7iDlIK@U$34=$s=uu96fE7Wb4aaA^g z0Rk`=lja*T!aENRklH!tN6zps}Gi!vHlv%DI|9wIjr;p{8}S%pr75>x#t<<5+j+(y0yd z@VagzuA#6JBV=o=fHVr`#8nKzj{2e6b8^Zd8B(&B0kcA**nm1UDHpCX8Y|GUF+;9q zJafyCnyDU%wsQkJBNJf|^snSdT@+^e+Pn%*Y4$BavTIZu# zfPD|cmIdk`w1xR3ZM0~Fv55ISl^D9S9HQ%yfAFw0R{sY(p<7S!tWuwkMQH!_q zw;rqy1TqhX<62O)+5Bogekd^0t+O)4IVC`(VzH}l5bruYWZIC)Q6pt#9zAZmmM9$} zZ48N(O}=9wl#Rfa-LQ)2>+1~pQWfbCwY^h>ANjti)6Me36z^Ge&Y0iGj#v?oSoAPp zh_zeIFoV){kE}SNnOL@peX*Uhb~Q8E3Tq*rUYX{hn>HOh_MC&r<;rS~SUUp)qB0j8 zhW2`AN(;=wbP+~6&Ss!f#b+jz5xRT7asM=L!KMRYeVddOhE0`HbJ0cZc_v`(_|l5m z3~BXfO>rN~-_{TOG;{a;P&TXgbYl8`zVs6L|4w9|#I7P#?R)!YmM6A$9(}l({MSo zH{TxC{SekYL<0U`b>%g77%cMP1V6x)ZyZar0_F$55NbV$ka`yT-U#&WSSm`xs$Hp6 zu>r$@Axbm;D;osn{dRuw#PGxX_J)fgH7hce`*>6;Zk`v%MQ{X~Lp}V!2n^W^-{OGX zqVPAWn(c4XBHvvx=20%1@53HBRP8k$jh35WAzFOT9v!&RFx-RfNpKhcL%&C)PhEuc z^C5oDH{xU|AjVs!ak|M5eN!0jEW45yEYbu-iPe)`It-9VXSM(CGUoOe&mCq z9~$<;=2p;X5G+>nZr=-%6k7*D07kg+qY*TfEAFT3HA%cq4CfN8~h?&6YloST+x;5IiihMgnSw|hsKV$Y?Nrr z`AuU74KO8dOI^5~R}vGhS4vDa2l>e;OwYR%h_`{OY$bPJRF-&0sMSKYj}x`BT2vk{%SRS>CH zer5)Q)E{FDakq01^M`icB}es}%`d`_?L%94b)O8!*tvPAYh={8*>YWPc`Z!V{Ssv| zOJ9m0mnT6VoCYmOr<1$leE(qJLBi4BT~{a70W>JWb$S>(h4K*cg>Va=MwDX3{nFJ% zTMjR7<9~veXFh*Bh`OFYWuW==B8zZ3rcbPQgb2?U)ir*5u>bNjs!81FVE_CScKRhz zfvaZ0OD==8Gd8_{uzzq0skLNivKlvQbX>pRzA8sl9=Buy2{B--V=tZ4BpYebkqMhMv-Y)RP;o&7} z7TTc2D06}s-JwhfHc4(M<7wR|?S?ZpUta|!uCm(`Fh+)P9hb6qC7m~ftsWNt%x}?A zFS8P!WWpjNhPAI=&2Lpmgo(!pBe7KYw^rPP9rz~A z*pnVX3%XGb6G4b&bA$NNynM}nvVEf6Vu;t^JBDARKX9G?O2(pR(%em=Zx`#=S~&?$ z3LD$VQWjaJpQW?TaH2fmq8j)1wAYeFNd$p0sqNc?{lg%XRzX;a5EF$Yt2M(9TqL8( z#0j}Jyk0n z8682v5HJs2abJeJ{nyM0493EL9f*u*Ri4|wNhZ8*aej5Ed7mJ^@9BBipV2zZKGTnf zlC0eidqyOQ7nqj!VcxS_!H;;=v|McHyM&oOL%N+Z^b|Z7L$g3!6~a_KJmoRv8^zy5 zfv9x8`pyq6&5a>{R+}euQ{UM%--iRWs1{_|oK7oE(r|cnJ46tL9#FglxEt>3&l&`f zTB;Io&7eV8-8BOLrM%AWy_>N9*v@sCmMd)l8!ts^_BVvsom47 zm}hXZ@*twW6gBv>Nnw6OPbX(Id4aFc_BQ->h~Ex*H|-hye9I@X6*0{a-f7so+_o4v z#+kXe7C9#i9vX%wsI$Vh9-0|U1;tX1)@V;}!+nFcU7#9>j_rIh)Ti!F>95F^r^*1D z~HvP}=VjqPO%9&H2HNGO1X%MYPSMjy}82+R#$MI)Z8hNzG z-o%T6LVj~;mJz&Jb}DFtp8#3W+Ha0<>5+Xz-6efa7pOtv(EdRCjb$CjuGj;}qsHtIA`BBjjH}yfK9ZfaTfg>2a{P|Fo{xb$NPpa`fWGfYO*IY>Hx@4%_&96WMq3@KCQu>o2IY_{(vog5s`$bjXKpn?_%t zYlV)75ykRJ0J=%7kx$X)Y|@0+K%{5xF{?q0I~yxOGnJ3+V%vW*GWu&vuKV?Jem%sO z@?&B;2=8O`*`2|Kp{-}4n*0FU0`GokOMYg7G{3^MTecAX1$9H5kk9O6Uk3_#dTypU z;O|CrDf*>{N1TLXJ#{B|OK*1}VqrWm%F^DgSCG)u$AhrzmT2D-T%sd#JyMxV+=bcnf-?g2-8iRaY)w$11T=$j4-LicP(( zVf+}O2k9EkQ>A)~8doo24mV*5=q23-&$Hrx_|)LZ-Gs|9EXbuHuqy~v14Ay& z12B2`_4ng&^&gvMHOR(~y3#7XhNRrUDkWIvyBs9GKRg3$6ydk)v3M+&sGOA>)%G~5 z5$~#&--DY3k%ZxOHHZ=faOAKcmx<0kOc+UX?C6Eb`IoS#;BU|0B6fKb#*PT;3fzXE zyQom^JLWaBf4RB^y~BKZ)eQ1Ohoi1bf-n#N^_pxuC;Mf8SrXTKgbg%CB5hH>OMz1k z&rZ6e0L~W!Xn(^}AohLZmfhUSMNz%0?!sWN!m3We@PdB?V+Ff0qYnpT!*GR^Aa+T! zV3KAB<2f8!L8@C0Vk)YFpns6tv^yxS*PtpNliV5+?nP7I))Qs;hR{3wXG{Z!zwm&t zr)Jnm;RTkYmOv;Xjox8kHdphzCMos7}|5jgTg;CgAg1M z%jPyb99(GOX6tFNu!2~@+G00GU-*MoaeBE%B2JCKF`J|!E1^hr0-lsN9vdsq7gF4C zZp6=IRUynmMB>F9dydB@{DK`;%jCytR0;MroPuOx%ux9anC(&+Qg-|nAUvLYc-Va; z2_e!$@yJ0J7ZKARZ+^?f$Yz2>4dWaeZTxvJiE%@ z=%PqW6u}%mzd2(EZAuYCOk=)*koj1?eoHi32Q=ENBCwX8u@hxRmaDB%W=bGg_*AVh=h5Z`~;HOeSYr>VF5gws2$Ckgc3&ByP&qXVWv$qf-uRf6{8r?Vael8)v-j#( zet7ob&#uPU!2iD(vOc9HBza04ZYr(S%>AU||39<-|M1}am-_#|M*YW+TK}I={QtxJ zuZPEnr~UOmISrrvQvdO{T>pPE{QULn-+lV}`Qh11l;bOC@4E-p4Ri@(X@eRl&ubJj ztcK_-jco+t%HShy6#4A;Tz2vz(G;L=cz8Fz4-)%`FDP`z1Tjgyefj7`*cWFK_Km)^ii- zBpOt(^x2dxdq%Tz8;Ri@#+;qgDw4rDC4aAdSp7Xc5*B%OzTmxy@bNO;NMLIbZ8&_4 zeTDsys8XGO;VxsUMJ&TZQ}$vO0bIg~WV(p-j$eKD8lKZEHno6v)5a`2wo5j#Qzt|X z)*tiFFo~S@DN$7$jg=QOA@rwunOjA~{l~Ky500(&G+6PW-Y9p=alS@iG*(xMpFlZD zZ{A(9^rigW>yMN!ZZb~-_MXwG8lit&bb2M^|6)+I0wWbE@+w;p42#iS@K2-$6;3L^ zPg`Fh(&~ys>VeF98QsIzdCgw86@sd-ku$LvrA@ib5Qh-$bPlu87 zxIH4P55nEHXmDK`8x4{x=oGyAiAMt5y1j`9ccy04h6s+n)_Gn@+{$?(ucwZ-OWxm?1RlF`)`DB3Xu& zt}L!6+?|w09k!QgUA4^Ub~-+3F0C%mi5<+(ZG1+I^*7um3k3mS#Dl58{kUEsLE8K% zdi`*oW};1XIZZ@+X9FqEM4U$Eux8s76Oq4qIbMQ^7$V!mysm@D(U$Y>>UxYL5P6CX zFa%1{*oWp$mBLH{U!&n;?5{(5M5|p4cejjkJ1SiQ%_1kheWmq1c{wN#4-cW;PEM?? zcYGO)BlZU&bn9R0<-Gj-`PUMfEbsNs>Q~_$gwMWLV=wE&&Mm=)u}u4d*_dDsYuhAp z2;B&7x@oI7TZE35;D+#keEPc@3izR$8*3D#_B%ll*>fVdjV>jfCqfwBC;`V#d3H!a zDt6~$9?j->^vI{OTCe6D5nqr|F}}a022$<{*}Hu_L)!`PC(T5k&RO%hm6KWPQA8&vMyZ3o7h=k@CPx$V7?F_Ll%S@~ca2WyYWq$c_4!!uS7 z9vAxG!v=wfYwO57#fEaJWdalB;e|R6-XD*$If)_>>?iw37%)NO~m;q^v%sN)0491 z#<52h*|52{y?WFh6AN7KjVjmX(kN3>TZDZ|0b=_{ZGHW#Fhiq~DH=yOs&Olx(||j_ z6z6w$r9`1hm95=*>m8Ll8awMXmC=Q2On5*xtm1S(@AM%dr)v73=GecR`{sI1Bnw$` zZxl5QYnD2MV5kyCDH-RonGs$$?Ys-sK7UNpnH{4<1e0nSC_Dy6??ZmyS)=yj1d)87 ztIDVg^>QkGo_2WKv#N7eTZ0{!2X>@!MRsAlb*44vPQvX9(i#HX&f#JGA^3iV4wE*_ z|J*I_QSj*9zx1)yTt`J5c^rXGEgntwC-lz6nlH-@G43}35=h|zA!zD6K&0KT4k+k zTUBnrnp{SGsydqusx*rWB7%U=;w?7cC607EdG0Rco@Fx$A3?be~JJ8 zT>ZZk(fZUDv?#umL(^mXaXrn#D{F>goIp60xv)1ApK|-6R0~2gB4Q)!VrL}VlDI!c zpz*IihP%(I$!K?Aze79D+1q{mPdoAt<(>@XL+mf%q>cu~C;}w*@vrYPOGxEuK+Esz zKi|Q97+I#9_skgL_UrHK>-DN0#YCp;uGzdu%5vx5{`DMnE?Pc~y z`cNV?{hjwi*xQpvJ(No9+AkXsp`zHjiu<;NTLMN-f|~ARZL?`d48&Dw5PhS9Dr8;L z@)&Vynx$}qGQXXNee^tdlg|yL@jSx(eKoQBzH`FL5q@?PoRxa_0>D7t&VZ1~J=%#* ziyG*T0Ytp_h@I_8aeww;gI?TahVx@N`ul8setq%x_RX)$zxQV7cfT%YHwl_F_%3XQ z;LMc=rN}0}#EcVo)Jz2v+;@r*e7rwG4S|EhuN1afdDCinuW&@;$@SV9c(?7EZAWg_ z6OS^YV$JMR{1(OCjF!9@9v#QpwXSy>#`ygC-|LTGKc}@){ylHU=6=5}ubUe&=L3HC zD@K-lf`9ct|Ih#5pqYa|BKStXTCZ+i3}BDXR+DMlF5)C;bZnEpb9i{XdtuDH#uCY% z;KAkbQH*+1@K_XInLQl+-{|~?Gd=p=QbObX=mUqtM&h#wMYq_h_3`sl>P%Jp#R!`P zwbt#v8YhkvrBN00)*!08{A$pwQkH2wy@GA8W1>@ev`>s`zO`c520_<;tbI!uX3&Yl z;NP#S=~eXRT7+cw!=&7_h8?wnymopuLRW(&+YXYa83@T4{CAIP@mVSA!rJDOQ?Yb0 zEMsM)){)OA%)8clJaS8riQzT#MqQ0Ca7a7xiN)N4Tj1REZu8Ejg^rgHs$Gds|w`73-$* zX5+q{0Nl>#IckochY5eaT!jDLwBymPbn2*?O9G^zoTO4_h@99w)DYicitfnSlfM|> zKr>=JMdV|Hw(SREca;KwVF#urr{Zr?F!>M7<?UNO85cWcWFZa}tb-$%C4^uTn9M zXPwqlh?V=)jjOd2S$cEn9e4r%jrxXl=gA{LcMTt(n6$yi=lSk;q_ zSv3CWz<0}LjP8F&dN7Yjc`%JLO`&99dCzxr<-d&xu?r)+xltNDx(I>h%Zpw|oF zJ^z;=yyJ^mEH$#>S-dPP$7)Z*36|rmMu5qNOxYBk5H|I@YWX~j7W+9oBUmuIaiYQ- zqCD-QE1vBLMzOS1+rrWEet@#O0rci~%FhtOJ^wC<3jZMJOh8J*hwb`mwXEy!NGv$; z*p^SNWPZ2W<*sTI5%ItZ2u1@Jv2lQ-ch#gBTML|Dm3CPe$|#7`Yc*j@pL2%Uk~PYC z2Fe;U0<*BBH<7omseR?m6Ij^EL_Hl?Ez0;y*@fuu_)5vcpAcYuD!QuJt8dNs##zJi z^MYwGB6crh8LavbSk9oWmD;SQi`7HQ^|LRNH`DZYjVV)|*b_Uk6Lx*GRZ=)vL6bR_ zq9ttjP49KJ1#h6n{h19QJSe1#c!Njl(fJq~05?Bm=@%w@WUjq0uQEEtn&0p9sw-_~#>;uc6 z`Oy3>wgelo?Voag&bwIcGJJ1#uj~l~=a}3K1~uL&k~H?Kc4L3AiJ87x2P`<_LO5r8 zH*D=sNkxi*5CLz2mgeiftolw0WXjI_Tte&$3L)LHc=e{;h)@29bwCy5}>y zg(b&YYmt&#h{kI!yFaBCl*1?z4Z+Me9#CDis$TSeglqHY&yV><@n+kB*dnsR3HFA( zPfB~(Zo>V99XndAn=x&*Vzju$KfTT)?3&+qa&&`yQm*Q-$KF}Kxf$ombp|4UQD!oY z;wj>$#y9)r>$$Z-eH9aao4Gp6RGLNI^<-2<*}bxR@^mbNTFIU?}L~+rWRc(l>NHG-ONewAuE*IlPIFLY{hs_m>W>-;euKcumP!R&0A(0$2RDzz> zb$GYhIxxTL;q0P;+rjARz>|bIi18^in@y)UCd^YSht7@dxle7+XIBJTc2pkQ*|7gU`Ra8Emr=+B+=@Sgo0ag0H#g;YjT%7r)YWQ5WhDxsS(oXmTu}B8`!Qho zS%~8egI_mc{G7Fq=3&j+b~qi++EI!!jZkmfUW^oQGi{E1`Un@Ee1`(SX*C%+_G4T0 zrbFYcP(R}EFPT7|+^=Rp?0jJ)HO42~gVN(A2V;usg|_B<^eT@I~Y#%RLn$(Crs zp9O&5^|jnYEEjxWWT_ZK_Qf(r?V;KEGZ zw7DFy$*cv^5>~-%IfplR$G8f`qP)xD;dyE~ePfvN<+kS?9-+nZ&9>%#Zr4Ub2WQv< zq?V7)a1TUH&$5hxr11L^PGR`UfOz!v3;@-%F04PAx4gLtXe{ z|466_3okt^Z@`m$Uc_TLa4?F^aCj;}avs}ZkRhQo6D&m_peJ*FejKccy4OmI7q7A! z&<(30S6n=#mH6k>1D;*0SxW90u=gNfYz7Il#(^3570Ov!l1ra>=xRU}Femaf)`zC^ zKophm@^MC>I8c^ZkI{1>3JStZ4Gg_V{TT%RunHh@xk>fvO6Gm+#qQSRcc8(hT?>wb z$`0>Ju3r!pFZRoCmJN1HxR1m^L<*ygGhSxUcWi|WswOE<1yt|u1!s%(I0H**NV$4O z!~RC_Do0(CEoeDk&95Pt6bi1`?yq=YX29}Fv^j#-2L+I!G_CudtESZDMon?y3;iDu@u{%})sq^D;y!n>Pa!?-lj3cAm{nPK z6|z8yv#V>5!|NecuLnYBGO^qe{{?mRpC12}<1GKnUx@!YJv!d#|8{bGa`p@U>u1G( zeXRv83N}THjtbkA#E!-hNGoiu@xb%*SxvtS$-i+uHow(BsJuCwh%>C*v-~T8Z)Je| z;~|`txht_$K!tFm>Agpa_D7L&x2r8lkyrcWZ^1w7bp$avIf`Wl@{!pqw(7Btq%5l3 zpT}6A1QLw-%ou3%>Mmu0SX|*r(e$9JI%=NGYQlAw>Dl*QkQXUa^!rBHC5CvT?uv0^ zHfxgxJU!gK>}&?T37BcE-2q@UbHu);(v1wsIUC_eWN^}07)0&mmxZ!_8y?^ zsz}7#^sI)xxu&8@`F~Z$iaJv3J7@ZU0k3_H1Pq@>Mu<|m`=UoP4OR#9nxDair zw3Z?9X>)7I8<2cmc>6L9o3(sb&iX9#Vg@i!3>@B(BOFcazD-B|qWm}_ceJ=lK3b>` z)_KP`r(wb7bG;D2%zomrrGm$PT*oeJk^vn4ZnVzd!xQ|s{;DuGew?CY!+5f51x|bmr;37{P zJb}!}5uqu*uHKC(y2c7!>Jl@pMT)+ISc$KkPc>7H;f}YBAI;4a00Q6YWd2mD;*uVJ zx^R2k-RH0$Yj;_^bwYf72MKdB8g#}J1n*)|kA1Rwc?A1(TcqA3yNB6YpE}*Vlh^2_ zFE*Ydd1x8!%^4(OIMyC+AE-FS<%C|VLHlF(J>9n#XeR&RO4Ud#twd`CD_mRvtlQ>{ zR(w}<$ytcG)|1edPa;cvr-F7_M>q{$yfdDtw7%|C?-&l~Vxtr{$3LK(7|c5?akjEQ zeGxBzAaCWE2;!$qz(obOb){x=t6b+xi=_V2lG}I90++DKMK1`69X6LHlz6Rjhx=4Uk~;Q%0&8!1Rfp3d*Zfy+msh93D|eAL zwazMF6b235@0vdQ$WtUa6l6j^ zLIQc4n{@J+5U3D$hSDbRIjFW`l4j(IJ-wA!*-n8L8zF;iGP5dg7V zVcV6hDNi^s_Jr|!ir6}7<^mwm>0;7IMCJ1rt^|-zO#FcBseYx4*i!(^7S8&DD*2QZ z+VejObQ?Qhd6M3QyFX!f8xI77u{q4?1r3+cWrS+W1`P+tk=z)8_zlL^nV5PGa1Xcs z8ToYzK4ENnz#HbMpF&l2?2nV(L7|QnbYI#J?35e8Yg}g?v9gqmSx(3M72amYqMf2iEBViXT8>fJ2#BGVWL+!9bNXz| zRa*epV}xA(%t`9Tv>D(HW_VUYp)VGWs~+SCg=FdvvIwkf6L|_gPePuJG7o=5-BIcG zJgoTFg%f74YNd~2ehPnxW9yQ>OAJFxnxw}8?Y-S!f;~H%cUJe&a#3{US7;}#Y`)tj zb$eYcyk^SepWZLIeO%PFLF%6JpE^?t7eUn*UjMXFcVc$Xe) zA06Youxtmv5m0h>JN3q-=_*TKJ2N0hM3cL%w_VXqf{in1+?Wn>j!BR@fE zPNiwv9#1E{0OsrhH^6g)E&xJ1h|OP}>>mx#RBXVP`_oX^Z|ciSjP=2!V46E}$Xa&o`Co3^@0 zibx4W9&B-U*_pku+?8?=h4rfGq}*hKTQP^xG`HEE!`N>LP@JinjCh%3Q@FV2@dY%y zNU&(0wpkEGccywyx&`dF^(rZzj=SEjZ_&v;Hu+`Vqx`)>rWZd|OMM#e;b&HN)k?C# zQ>uc8T$)yI9pTpj{dtiH{ECOn*mhV`k5!l%a3|j304>ePA3?mOxl34O6bHkUyv!hJ z2u$8Jq*K10FN4v6-ThDBd{sInx59F;xg-7AU9D9Tv9Mbb!wv~%;{$k8t#(PWdvjSkc?a>&j-i56LFAf(0q*Mu(SyQkS*gR zp+Ct^5A>ZvwyOQf*yPX~7Bl^Tg5Z*S3mr$Gg;N;qS=x!uXd))p=81cmQxPQ}>yU|VX?ILW^pkO@X|FM(qn>80n|NikbSje<}AZV`D z`Q=8igOV`dakH|%RXt(T*K(OiUrymr7_LL`L0FhZWJ)PC^Ad>eO=3`w-U$OTCU=a) zt`Q3nWyh&&ZKXo8`zx_B%zlsHqBn#Wk6$0It9c%oa2jof8E&>zOIk7D;meDo!~JJ_ zTi+?^7b|YpQ868phjpsh>Y@Kai6zokB%#0TK78~nH!p;J8YH;(-k$ymghb`Gur@|o z^RzZwZ-)MGxZ9NzIc6kfKVlhTWs2tgA`cf!SD*=}@!hj3KVt3xmCP%U>2luBw$4>d zn*?*InL*j;`_7K09_}HkSd=(c00m735dhPxd(G?I*J)|-7W@X z8*Ft29?N#Bc9lKaTCvdKNhw+o(XNW;8W2vt8+GtU`-19Qj}B)~HS>Q{4U?i+r3n`i zDK;q8R>)*Q2Lh*~6z(}n=PXMP3NU}uK@Y{SD20I>=&G@%4#YcEZBGDQcHb6cSY-z` z^cYpM=VEOQBbA}y&@MWzDFRY$8mQ`FIdvZk3>_00wv8N99l5F^UoDaYY=7+5j^WX& z*#pDq?OU(h+Xe*ZO)Y+LVBpT+mlQI15;mUn?jl94K*WA^!~F7CoKwXy-WSV()% zk{vOMwFl_kXeZlcx+$|47Y9er_MRjv2IF%gd>$0sHE}Pmft<|M@8&LXrT1p6ku4bGS?~zsHu(CFgV6N>bVSqkKy;2{czLut zutuI@%#8sko;b>le(WyzL_svSev21pyIM)iMj={;hKc4;daL$Ve=o3hxZ$rysYzNR z*F0uH=F2`d-y&5Gum8vM@Gx~yi{WV|8yU2TV$~!*?QuplH#;_I(AkTbf!~er#nCv~ zj{ZCH0AYch(b9XWbw=Z`619&o=r91<}4xaZa%$fproa`g? z&-VK#-gZtOP3_J<;R~Z`98?vH$|}h+1tp^Z7i+G`!73BRnUplpC3YlKyNSeV)l~%A zRyTqR+~7!Ff)&=;5lUyJ&Qbg3Z!sjibkt<_7I<5;SlbF(;Ve7zA8BVUmktn}r}- z0$!I}ffc$VyRjzZZPUh+Z%5=sFoAp%Uaf&=qvKnDuX?~REvx&wgT!H(n2K*-y?I^k zEF;F?afc-%KuhWzBjrBhbJLVVs|KDi;uksK7-0j!Y z1?|5$^DPt{wXjF7hQc_Yu{-F{9I`WnaVexeT8igQsp38Z9UeDgP{YG(Q02i!=52_L z9#+fSwFv*;(}zp#x~#P(6_ak0KeN;0=_M;7UdiVO>Jx8~0ii$)MqDU}n&{LkGg(rTAHk+#F zEnGK9R^kmxf@Ec%zGP=yy0bfXe<~MivMR|PI66GkOFz^rwd_WR8bAeZ1t2DD`jVWT z9()dmn)S*x8!K~?hV)~@l1vxIkfB!DB&qXqUSOKDS>(+*Fa8ByhI~hg@W@LzJU`t{ zD;5UhlgDmcI-uIPW1=4J?;gC>5(nziCo!=hu*nd9UK|si{fc`^K76pPtQGDl+e&?=5#%Iwjb<%}v9g9f3?c zZ|X^n#=^T^19M?hQFMBW1hM&+$HJK<@)m-r74+AOAQRk)cpDu(71;+LY&O52)Z<%l zu2`*G>4dFEr!Sr;K|4hgN8AtX!>`}M5(*PHHN{oUhS`lVwL_Jl4fS-DtwDJqyA=M1 zIUKOL;tZRAsL^82$3vinjZNGT%ih}1LDgd__f}Y=^3z419+mx*<}EYzvue@a%~xGQ zj6@b(u{ zg6V8`#hq;ES9aq@1%o%z#t@NVU)I*UjxAbLB*l;f^Yj-*oQ3&p69#i_^>3&%AXO%itbHDtVkLmh*D)?$m>Mj0Uf>*<>kC}8tlu@Qci6B{ z#@V3UkgZ3jTV(6kgofNQ)`LO#iz%F;hIFQNb@&UHq;3Y7R*d5t&q?5lwY#g9)1Cq3 zxE^r>VBuoOMS3~`y}C0va=MKka>_e<%zJy?PJVWijx`i-7YTd$biK;F5LHjq>OEee z$fZl8#2JG<`pNnwTS-Ygk^EOFUGPC$^hZ->0!nkV< z8M0sgj$##yl?_m8h%Zm+OxpTw+uf`++&{Ap#^sKzmg9qioR2T>?r?3qG@Z5By)bhJ zHKGj|^TRnv+y_c#hZnmH25cLJ4NWH=TgL1LAdJ4#ZdXTn(k!xQghT-<`wM<5NDmDWd z2<;Km4}QE0n?(=LO_`OUnD!@xO~*X2kv-y&ejFPg)0*xsGqU<`a`X6+dMKXzEVb{< zu-ngf_@SNY3$Yhn&5bHmsnPrLUvApu?2N)+-?^$9DUba=#T64|t>}_2jeGQZ$tGuB zA>ARstX3b@%1h zOV&Q@8$#UcDQ*D;Cb@Tgqr!`o(UIh7ra=dp9w7?3-@>-E_Q(zUa1@R*68*Px<+;R{ zX_Gw%dULXB^Chh;r;Oh&=MXO#Fsmow|K8kq>5!*qg{(EoF?RUT`k91FO88r`BAjc)er-ta5)m5{wzCG zka5rC*y0$|hhRzNJM3R%*8Sc=mIJ?`)61X%&#wm)S}M{++;x1s?d4wpmqMMO83yJ(MwEe$~9pv>%Wt8C&>BLFCd5k6GT5=V)_ z9CKTl9yMN*XuY6^Ri`rE28Me18T~96KN78Y+=ohJehX7fb;XKK>|65H=6DdT=Zlgw z1a0|DeA&Ga%`=^-h!nS8}T3=RY-p=Ra57kWdm4!nyW>DXG7}-B) z2#xv+%r5fHH*k3)2D3r*b`5)@kimy)3HqiJCrq8^@nDi0elpLaf2tp}0E|UsxR61S zt(UVP0AOMceB96Q+6FgKTlUPWmkKAe^26fH2V<164&zI~9FO*x<75#{1~rqUlO{nPuiuD&k1Z;DU%mr~2qtEY%#(z=HWJqN9S< zI^!`9Bm59gc~#yERgxJ2bQfpyrma&GghV#$rdPs>z2Ht=hi%6m(%F8-dNC>*1zzmD z>5L^~MJLA?CXZY_j_ghlb01Qwaib%0BE%N$G9)l!^S~C3--4Eo3`boDftzd~cfi1C zfJsKMXE>&}6_!`Wdg@_Z84Ykr+ATzv*YKSSS}c$ zW1&w+sBw!ZXx^@t;Z*!D)M~V!|2;WiR!r8)5YR1ePGwlB*vBX(>z46z?9-s*p8uu! z|Ko$hjaetg!?;$s&L$<}8f ziT7pc4;0iucw*aau)h%E2;L18L~KF2dB=lc)rMXB{O~mG<^InTUZ5LXIXuhvf2Yq4 z4#Kj&Md3iuZ$rxt2-3i_F|1bjw62Hkbr`*l1YPhkMuaTTVzLfOaQm|lUmOja83IgU zzIgH??vc+}}j zCg0k(%Djau+i+JO{M8x{dl;I@YDqfsN5(P0uZLaKYU8>q=Z}j7{l{U$;!zy)b@&(J zOe;?0{4KC9bY<*&GyQxVc!3UY|NHPX=f^)?Bx{wb$);=`qIz%ZHh$09{E;Wy@iQj} z#Lv8Ok0O{(1c5taqXm06L)@^j2*}14Hei}(X}~cnhi+#Ul0t@K$#xD5ttmet4?}nk z8w5=DUU`2WZR8ktM*pAZ``43dJ+4P2a>&p*PG8#L5Kj(n)mRF1>SSSgNd4u7x&H8$ zBcENjlU7z`j?B3a6-K;8g%6*K3jbV!YZpEWYqFEW=;a9p^~XK*2G97O9d<5NPdqca zw+v$t$a*GhjcX~yw+RrL1F3IP%rVXPg;i&9D4GrW zk=TB5b0K<#2Pslugsk9(K_?w#h}b8P-d;6Z2R9I1DBJAX@aU^%9GoR!q&y5`ds2sJ zV;|utxqr@JzV=(9Jjf|E6dm+5aTsYlCnS;~xm~1=*ne`uFd5(aaHbF1BApT8(+^x= z5hahyKd@Yuy)Y?7>M$GYg&kar9>f+PoYmpA_!VNg3|q$W%z8Vh6{kI}gFoPQ-pTiG z-Y&e<^m-v56jRRV6q%?TYhd{~hRH~DVN>8!{?zpN*)%Z7b)zT&+)qS@Fj?OAgK{Mxs8AT?)se1-@dV<-mF6f(hS+?v+LH=h;QtGLr;u9Q$V zxm;gI^&sw!lH&TZuRKxl*C~=VZAu~(qduICi&?4wP(ZK0Ka5};3CBUKwQ+^krg(_u z{bvvAT&^>pws|*y1h_*Xq(o8_Y!2DXI*UcRvS5W8d5j`WsU)%^W(MWSDN(kqaF`Gf z6%Ss!DqgB*c{UHSZ^zN!QzD@R)SSO``pG5r? zo-RLs!Z-+DbZpn5)%rRl+-@mAxH9*X2CJmSV}&durTV8?-kpT)kipaNy)89y?Uj0e zXYlgf-9i8>Pc2ybrG1-Fh%cW)A^yj?HGm?LFbc*Qdcqh&Ta{r?Zaz5CC}z%w@lOmw*u;M#)%Jy#RYDAD*+vXaA0(g9ket)hL1^fEn{`Jr(x{-RM zHlNVx*sC~C_oPPJCVKQ%bUD+zP&7SP<(5I9^yZm^|}?`&#Xs0>@mWm zjHS&uCekC6;yykmL3=~mtG&ICbLrlp9FCEVAZZQB667cn*HSBQDf)zyy!-z{<|y`T0xE;rZ!l7y!s(8di;D8Rz3DM5I%i2j;1^=a`u!*AJt`lVK_K(jW_#eaS;fgcRu^HP^wTjJgL|{lt@$fcvJq8dq*n`!Lse+K9fL5F}D?_~Q zbe29ZE(NA`HvgWEmi013fI}D@dsb>GeGN}-W4Ihx@Y6>hfAQ*fpL`m0(`dlIC0n1{ zUvR?HxHrNm_f@BAA_}YXP8cwn`fk$-IA_QyvhKXC7m@t$9LP zI%+Nrrv}FJ(TU48GomsYDUE!mONMwqD;TAWt*Qp4Sbi_5q2(LG^0rR49eYL*jzql3nFG|W``g>JRf`z%VUtp?ReXB!djs>ai zL8Lvuemf{8^IHRhBl9h3Z9mpco3Z};$N80p@6v;Rh|on}Ko+8#1OJkLe^cKZhf^CV z&XlblZ=|0{uQftN$<>3knFTUXdd@4`V&9?2dxPJayvufWp|Y7(_B@v}-A`GaZ(OeW zO+2LO949zyIj5c?8-s2Wbk7#V&8yWZOuv(hSB}rYZMHU+Rb=b`xLZ~VjAwsEC8uTi2u*li;-?Z&e!#o;u1Sm+8}`5fTXzhjEsxx zM?a%~k4`P+PrpewR~w9lprEo!evg*xS1~+J5k$*~*%XhhBT~ZZk6eTwrFy~MDAfL$ z`}LW{e=bRmz%C9F%0b#9?LgH@ie1B9h-8vxiGy%<3)E;EI}8RDGVYmpYFY?)=263?Qyj>tWh9hP#z*l6&YR&$0Rhlh=MT0 z?t8XnZz&7&Ows&`JbylqoCy@hG&k9p&{HgRK6Rx=+ECPOA{HJSNz7SaSlQ#62+3lo zLlqa6AELODtkA+vSQR1XG7H9c98P5Y#}H zhNGCf`q;CVn`z2Z%8HE70!KnvY(=Oa=%NF zzDDLA2=tdF379d^#Xs!ClV=Kn(Yx7S_`n&Qy z$i{B|(vXm^tP-%3C*uvenaDxnkZ7!fb1KnPelrF=j&}FUZ|gtuRD`X~y0Ry*S22F~ zZ~uA(k-4<)KyG@+32;!zfVsZhKT)3nGG)>J>k7wc<8rRNzRH5Oj@RfP_BP=$td)?h z0-oWWn!=!i(a>d?_NV6Eu@ac|xemnlI5I{hrH1GN`?;7G{%+RxJBb>l9A98*EZDPE zW(!+K)o2~X7-?(t+@tqZNr0o$;%z%m_0N;cUtQg zzV`Qd7|xGfv_L&-Bb(VwKPLXi9V=99MPV$hplTKK3O8I8+OWpF+kdr47SPK;dpcwQ zYU;^)T=&M+8@6998sS-tu=j3^gD*UxK52cA7$0<*KoZ@`Xw2=$Fu@eu;bHEeN!jHr z)-Gf3Y{3$Qd&X0lSRF3%&dL3hQD)#}N0()}ZSrt<`vv*-hRmAY-o#f_lLYm%c`qeW&+fKcvIo8rRL{CbdnN zqMetS2PU4cMj^hNPFAoICrin`g_XtRI*!+Pz9HfNp%+OM{;1OorHA_SeFrdJPO@r{ zzn*%I+aOc=TO}DqJbwMUx(RR0jG9-_+(ZOZMwi05>?SoUH2);Y{+1qp8E^e&phVdpBhZc*E{U`ofHQ#@=YWA}iyn@U*Ln3C-_kiR?xH0Aj)v{Y>pXwcT`RJOk zBD3RD-8`P)BRDx3dhJ)IN+JCBLATAn{`V*#?^oEL48a{W8{Srn76nzAXmWbIp|}4U z2EQ)6`F*#po_GAq8=QE3K3ZSID)+;UDt9+V89{S-ImlZdiu94zm?2bwd{yj0bud{~ zyElW_Qp%p?ygZO+Ei3o-jGJ30Em*3lHgs>#2jzV_3&p(=;vgG&wTh0NC8)-8Sc2Ba zAZ81~ftdk0nY~)SQzE;c87?PrATOsRvqAtf^8H!>5lBd73fN_kj(YHk(L~asVoa+e zrM^(G-t!touNMV|lVq0{-hVY`i~wne@Q~X&a+O6NVm8jp(i_hTL@Mp<)rDmIF5K`t z+^`)H9Ln$6MZrU+3?`M+4fde|QzEn0WFADoR9R0Jm}A; zvv-Ss``2UQcFMzpl7z*bCIU7&l!n%MF(!F8go1U}j(PfU2-`3LM2Qp|hmLIOE>(|bvQt;*4ZioODZe2@GTv?7K*Ib;|nRhq+?N7Qv-@F8!tqnvqBCPWf%!NwQLp( zCaEJkV3tY_dtzskwK)!GWbJv7Zp9YW-@6xETRZ4PP>nuw{H8&3Faymjtn>7seKy## z|F$kDf=}zERYzN@#0u&cVHS2qR`NRsTRF$bfzN#KyZhxA&Frl=a?SMA;*P|nMxGfS zP6|(HSU?10<@w3B%JaY2GTJS}Ps^73xRAK1k87r!360%e=?*U3e&qri+{Ad(cf(eATvIplee-dFZh|BZzjNSwG#| zso-6y8X-*(Bb!_>sH!tlJZqfDBeGI{WTtALLhXuZ21Bc&Lwo<^MT8$5j!f4#aiE_+<;IW=L zNF>fZhAe$gpmb?;7fNzO3T=D&NPf;mj)I|E8y&Vjgjic14$9*}dBT@_sV%;@mvwO_ zGkxCJ=E*L8zKLY*Wo8EqM|K#mvQ82LYm3bK>DuZHCNt>TnA+7H8nlclob}fBL+XEg zJ&a#d<^Of!e?Ks+pBDc+J~=!+?Z^Ml&(4p2iU0i!|JRLU{5jhcopjb{ad=Vwt@#`S z=tum|nJLTj%fGsX9!Bu*#}xvdc3J$P`H!^}FU^@e%pUL;M+!w9@&{K;Pu%$Qs5cM6 zd$<85sTN1 zAR;i5-GdsyWbmLH8*rk2XY&c(OU4v~93yG>JGEG-V?T9_Nj&LA*BlFv{%ZbJeg932 zXyKzTz~>)a305kuuYxsxzpNHEl5a#K@|s$01ic5?K$xElp;tr@v5bj$@C5==K+x#x zJp$J(Bc#~Mi$L5TW^j+@;1#@!Y3BTS!@Rw{B21YT6EKbv%(G_7ngn(YF85HutzYhC zXho-riH4TSrW$LyahO4&J0X&k?2eXj)*PxRIwrQoDr$75nRV^!tB2UTEZc6tD9}P4 zY(9CANb4r-6o8J4Ev&gP^xGw2Y93=0gZ->~>#w&sycs)B*U!Z!Iy@aJrlBr>Nk$aesQ^XWJ0%IqaEGW#~>R@;K>cOjFh0{6+U3BG{SE^9Y~F?asbuSC;OUHi%Kqcs{M11hC= zQdzxvGAGnD9(Fz`Us&@SwQj`0L+KZeBYQOBecl9z6IKSRgX0a1@WMJsDQ4b(B%X12 za8Yi=Arec3UMTDKnaddT}n1lf_dZQD@2H@w0(ZY*&6O-lTZ8x7VHL zlI9P`}`lme*4vGy11cD|4}m=e^agQ+F$7sCTQPG7yR>0Jq9F(W~hsW&7Td@ZubL}(a3dY^gWmuPRJ(dXq(xYf&` z%=VA)Kj-)#*s#rm8e)7%xNFLKw|12zLC$=mdPR86qrLfAse{^9#hQO>pRHe$KdLY1&|l4 zJ7N+{v5{BjQYRCMa%)vNY1CL634GgOd~oLrC5d1Yt1}s87LUVaUY~bI3Vkn_Ood5K zDx-GA{sgLilEYOrt92?cO!f+1={{FY?8ADI6RWE2AK?9RZnS%<&0G!r6l4yx7}n_; z1qZ>nfa?(Jd3y?WgQ8SFQ}5Xi%Ik27xJ5_L@#*uwUo_)iKX=9*RZ1oC2dS4FvnVyj z^J&F+3bQwj=rOz)ow+}b&Y>F67T|-k)7|zDD9&X5%)~_0l{gR*8n%T=ILlmddp`Qs z!GKR(B*ffnN`)W6jK4xB0n~nB>x{mwC3#=}?(fgqTbVFtD3gMm_wMK_|Z)3b-j z)F%yjk8}UASdKpyr4s9m!W3T3zsJ}M9fWD}L>*^z`a%WRORoxQ zAmyJKd9z}bSbk+&ty#*FS|Z3TL{Fv|&7l{gO(tgqeVElNAUfgxfB%r85sZ3;*HH_| z?tzs3&rsTqI=!PDQ#F6}uA6U(0np18ajV&&n9ch)Oldo#ok_2&z8Nbkn!#>k_eZBo zunJ?=`}(|OAgj8tg^Bf#UZchhstzRkrTh{zgFKU}InIjC9u{?*m}NSgG<4GouVhUi z!)^*Rmd9BXqJj##S%WwLjt4s@Uz*GBkBNE27^4aUFDzJShn z2Q=8C>G~kOEeXQINSq9fKLe>`TJJIn&H__5tClciZq`elU_04hhv^=QZ2xg}>_U?F z7%K-yRjG=yr;Cf7tbrGG7m@blEqb3&`-hU8L&eL z$S%0o3T3YUYP1`>MLs`W_l*sS=5P6yq8OpAN1mI08r|#4oKz%C2#z0gZPiT7LM<%0 zu04`<9_JYB+zk4q^Id+0e2AVeM{5zt3C|j^H_*li;k43Ww{EJs)+G?La@^6+zRG}? z&x~^b037Q&jI-ewQj&}HAe;z4KZMQHT!$ab-ZCafLd8MuKC#K_Rn^v!oMApmbb=f_ zjFp?_8c35Dcw^$xOv(5+?S>>_$>x9A$&HVFTh$G19d0Q8wKL(>DOp;;e3_LrFrlfs6 zNT|AD_}vN;#P3m#jE1yxk8Wm-Gx{9AY)AVA0oK4t*tKjee$}klxm?>qG4%zhd zu7eA{vlmb0ynnV54sm)_ zjJRf;x3q|?Y#@G!laPfSqm zm;a=$)Jggn{oIAmxVtDtIu6;VIefkM1B?a21iHvGOmt1cl7GEXA@3xFnLH#Zng?2P zGMu`7OP)u>??hUjlK)aw9E2i9$YYGm#jbsv?bttN&J4`ji6fHg!}H9Zvv1r) zt~AJuL7+H3IT651V8;_Fka5!nqv64n3=@RG4V|ra)th}Y+DcN3cW|*S0#I)Bv?=VS zh9uoD$tgec?5@ork)ce95UEEz*rw!2`AF>D3oE5@2cn4K|M)u#T0<~#Z5hx(0EuS2 z!q52C?$(Bxn94kYY_Z}Zw(Z)8{W_uJ?_(?+^$!`$5{Et}fgw|RDApb#JQ$=NsL!h& z;(RFFA*+cP$OO7%zp`LAB%{1MHAYst2Z{i_5Lj$TGA;ngztrRJkfj-!!w7ky`Wbi6QbxlG znzA`zJq&nD5pY*48%raGCHdq0%Gd=5N>62R`FPK;TlR|+-XsX0uo~&484>AjNzc>xPAoi{tR!W4u;J4ogOFoeG)1LC^Lp&CRcAIE@cR%K#1>#)ym_KUOqeu&jlD?Qht0|!sR^lmL$hNru|hy7jowuXl~$0IxtZw47e#$}dzO}W9oE zL{@5pI^k)0Rrbpa$`l4M8!-G}!5jlV2=<8Ww%zP{QttfY(XJ7ce{1A_w2Jd{23vqO z&mmUoJZXNDL#`^foF^>#x;1v}-x~D|4C0xB-sAAm9qMyaaSc{tJ+mbnB!iHJ5TqQ` zv%EPgeA~S2;NQ0@gG2^%__)DLjgF zJ-p4d%@l9puIaOy(%ZAMNwYE0#{bCrg(yfmRS_5EcEo7eL5!+}na5o&J7p9<%6r=F z6a>Y()=0KQg{r`Ct$SH9e7k(w1MA@_fF)52J5UfiFYO?)_+@1@ z5o0Wi{0Myv@cH3k#)?P$X!)&GUWA+e;ow+6>p!#ZemAlZA;hKH4TezLNTdI%7p}yS z?g@0OQtU|Y@m!cXIzNKzbt`D#j7l(L8pFHD;c}}A>A!vow7m;f*jufoaLSjt1%d$t zXVFNepN#mToW?RZJOB2tNBc(+p4>KLbOK)n$?EgsIdd*rN;qkmW7??;Boz<8g$=m@ z`-S3)mP**_GIwg7_L?y}*E2B|nGWD3_muxSOPd%4s_On?6+z^b{kl_Iupx}ClK=B< z^;%B^{Jo}4A{60f_v(7MVBJ&P*mJTR=Ji~gL<=1S@L|~XIDvI|y83!QK$*COkqQ%4 zI+*ElQh}wi!Dl(8!ZV7y9xC=()*uPc;V2S`k$5kJ*!#r)fL4T*1W0l7rP$h+5tgWn zHkFmc9^T6o&_J`=olat)ks6Ew(e#aR1t`3mH42qq(vRGKNYc6PD60+N*|rppNDa0* z8=ZC2wzm^+z`uc|f40aOf~6r~8sdz}N|1R9Po?@(o=9@qN^z=Ab}NIwo6NhTTJ`J^ z9=4f4a$!PRJwH$>ML6&bP`f2Rs9ez)nS~P)rBe`%dKq!_OuTVv>lv5P7eI67j|2W|QI9`_e@fX=Z4Z)W(MxX6 z7mcY2 zR#|fRbq032*p8{~H#k-4EdWwU9p7SZ=0PeB-vqqLDRhgFJw4IePC6qq-NNI zm|bon6Y(<-!rL_7Z_hLN5wKV<`<<6Q7c;iq8PS++dx*qVLFDi%TcMs!8zE_IUP0`7 z8-MO`2tI9F<*uIrFDa%sP2Gd(fR?xDLm57+7c!3NqirEn5G(MsO4$3lb#s18?1n`@ z(Dd`zv_=)s$gcjvBKe$M=^#{0YdiKYxSh<~Hn@NOxj3?8 z+?Aaa-Z4w-YV!3bzm4B8b_gre>HeOgGdw-!&^d;o$ZVERP&l5SrURv@s)3#GE1fRA z3Tm@sN%Qy1dzoWRz8As%jTd6AVonmxh#kj$wSin}c|8;qu^VKn0}P1Z}`0T`21 z%Rb6#c4>i45#I_%qTv8#F&Y#UZiLEWG_a=ihBeX7M!9I0C{ST0v57Z`(X;=CT!j2> zRBhe_f3vpML)Yu&QXK6FlUc@a;I%^-s45=5U)2%cEWU8qN{MKjrLoR}WD$e5`96h2 z*rDhTVJAB8O;}(ug=By4Uc_|h_Bm=N=ytx*SJs-o=N%v5HnX9De~e0K7CW#Zf-ui{ zB{iaO&2@vewN_mg+%yIrejlAzCATJYp~q`xE*YYWo#Rm9CjZ6vhI%!ou`)9n{QU4R zk*RyufNcxnfancbBfGH`64Db}UxiU-lFAtPfdRMzX7J!RN{G8Z(XS&ZA7c~Fn}2+I zZtLx%WM4%TUWBRGrK|1F=#Zi%2C_j$ z(Wad&i8ih=tBjMVl^P*-5|wa&`;`BpgwzEWPr}!(0a6!mM31ON;;PfkFWUZeiP0WAcq^ zolH~<4PS(xef8?i>vGy$FXtXIVzl&st5>gA!E>1oVze*wuwwRy>8;lK#FG zQ{g9aV27NyiuLK>TTqAz3yVq#jcY8FzTGxsbo@%%BV0TQJF4CSb4R11evO}4TJ8?p>J^aXn#@_>1;b+M!*6qmr)v%)9S`eHOw z>Oz2i7yvy!WP*n4if-=IF+pQ+6de86{U-EvMsi`6Lt$$_w&)_IasStc2Z|r|*3v=& z9!9Oot7Whf?(A4GtZ$&JmzFSD1u0(Rd(}!Y|8shff}^++Bq`WvtO>O_&=KCyw$x_m zq?5fSf6lCqPei|GkjbHFp!gXM2jjH>49F-j4PU91QV?ljK5n*%=QzYcd48NSnj#|G zIXW*#n6>cj$tfsYAgRIca#)VWO?5k)W1E4|@iWV`vZ3s>u4ZlI0=ZcRsW`1xt8~m1 z1#v~QUpPEF?DH9Vi{)LodNN<_@B-Ev0`N!`*!z*f&@b=QKA z_LLU~Pdw$vc^5_&#BVZ;!mi|gcuX`1{%~*{pY$GYL^OyazeHBU^C+11Q96o^< z4z^tM1Ck4F2Ii2S3VemP^~3O8HCcm{3Z^Pas2tu(p=-J2p{Z@ohdDzOyJglfKDh$! z3YGBzr9FUTGxmVpL0p5wm*-EgH@!R`Qcx@J3kdRhhGGxJZ*xv97kk8=k&!pLcbe+2+0Naq`3@gXd0`>`=Oj))H)$yJn$%VTLZGgeL-aJ%XB1 z!3H633wr$2f*xZ*gC#P_c)?fzGrz*S^0`AbiWH$9oV@%yYR#~^I3n7%#88aAb5K5t zzY4LL&r6p&hElzGzyg zG_y5vj^&f_?V%KJ8R)&YBX$f_P9r6t}=c`+8d)Tn-ol(J%s`G23xx* zHnSr3?g|gyLmtI0<@aQAgCdJGAU>%MLPlh;1Hwp>Kl4t&%aZ#$ch~(N@^0>+K5b zLCAgegRqV-RA;pr+bI9-U(54;faCAZd#s}*F3gz%!+X>Bm-|*MI|zYaGEsj){J*mh z{|@p0le3ez_OSdma_ilpXXG7u|_twoRNS#Fp#SA77AeQe2X9g`V5fv$1=`tm+9^E?T%{r zL2zRSWsH@t7m%{YXGfPF6DW^fC{}s&;-tJsh*bq^KoDrkj*njqg0p_8KTZz-_a`sM z=2Gn(pB*FSw=0?!bFe!OSQrwXII@agbCB=D_rV*b?_6fSbLLcc-Dp1Gv+TCUc{VaS zl7W85oA~{P+<4?-!L(eKqwvV^@zuj9{CyVwu4MR_r8WXy^%6sc8#gMCj^ZCfRFjO# zlM}rtaO;od;r`3=%jP5OEs&3n8Fb*|F2hoW!Ov`k%9H)G^0&=L1A&ynsW>{t-#I8l?$}X7%)A5u_a)7{sQhMBKPAVo;$RI)WSQchU}UJ66|R>%5X!% zpo0$X_3pU0*&G|-TevR@O;wzvW6lVxinf#&p10D zC$|^ui=6Yz@|2VjVB;B?lY3vGMb8M~g*)p$Up0WGFY1cLK+hDYo`<8~T>ID9X#C-` zT`g%hZnZ611wNTK_jB(Sp-;V5$Ktp|##`YS0BqMPe((rzPUKtVE9;zk4}~^K-FgY< ziqoBFq(rX3%x3M6APPScHBLcaYJOZM@`Qy(hHelv*6lh76Tx=DL$`ypAB5t-<0<j)2i*b{gYci zgWN{SO{r)|F~FLcK*~~#F7ezB{zbeCZz@Tx(&pRi3 zYNuzzFI@@aC3|MpAemU;Im|6A-ZcnHo=oP^#+DkFl?v)Bz>Mzi=0UuM>j+2AnoY!^ z(YOgW0g)6ag6BQ!W@nVr>lzVK($K01f{;MCm)eYhjWE-STFgCYXnSs6UpUAVk>p z-*m`9*hnI&-gE|=VLok8TJfM6fg#bRy>c0o)t+^w{lEaKgWl`uV)Y=?{kC4=QBkxF zj4xAmeOPjQd-Y%y-UD*AcVq@zEiUesaFMY){gFJVm!gqJJFxjZ>U-;ZScXOqibue% z!6Phm9G{~mu?*Zok^-^9#G3d3OrY}JFOvK-mpUKdWhN5+>nNEnc`}zS)$QvixP8s_@Q8IVkl~QHeIDh-aWIyHJs+MIJhauoc8zGdm6}!9H->h}yzDJ6 z9=!x#rJ`P0!&3C1O5kLHCW=f@DW?F2-17Cb#IviFjZ)Sr~sjQW<8m|7i7Me zRi3OM(H3iVaX|)#)KMc*eK564i8PAr8XBM<(u_>li%B1%>Vx&QS7lJp>68OIP1v@KPO>A zc;N~?5m`zXje1VK`|(ypw$JkXnEJZNz+|RFqWqUFS| z`jrt5qz}O0_ zNbHdqJuv+OLx+cT6JuBk#=c|8eY3J0DS<>&ttlM`HGtYLJu}~lv>7*$pAib|Pjh7O z%?hFh!+Cdj5spmEF)ChUHQ7nqagLA3fE8WXAZ&8H?tEDYuIml7vtLEmAfC&s`e8nk z%8pkaL+&hUvFUg^*8HpJ3>0?p2?kT%*H_kvT%VqXPjA+s>my4E0JhVxqk^LHCQyrI z13C#d6k)F`QK*P1Qwb12SXNsjk+Jp9Rxq{t4eV6A*c(%^10hKWj_rA%_T z!PRcgY$+Qje0;qt;#0ffv{^2})fMiuy?KBDtFVdf7x};L{zQGBh3UZ2lcgO7J)1RI zfCF2#r*53P^}y;c8f!}Ptt@KdI8*SQzmTVPV@@7CKrCK@dBo)PrHo{cy!mt8ha$Cb z8jh}gv^grj*$O+y_gIJvTqZySrD}V-UYjw-aT3}E0#XyLle;5 zOf(!fd%2X02QB@agVt`~IJ09F&HM|+*!wRoXt>#FK9Pw;=KZrt1DO=SeV*{g9M1cg z%1z9fm{P0GlDTg3S-#028e+NAkr$yLwp*jc^`m4}_Hg$>BNBPRCQhn)f!wPXwwpTb z0v|2m00GlGQ0zMNl8>S+sd4m~)?hsoR-?YcWmh?_s9JZKQKF^c$S zLqd1ERMliAe+d5Ye2SzAtfOEwfg?FMWFETDRRaKYWRzvhNoKub0UeVuNKTk%tn_h)Buf2~Q(+nx})mL8)+sXR&`6$_HamN-3 zEsy+R9yS%{jdkcE@fos_3RGQ`;jW`y4+4qisjaQgHO!X!UZ9^&D0tr!&#DkIs5_-Z zM*v#ScmVO2*p0r)!bCmmLWpJ7&Wdc{&l2RljhVAH^2j;5_yfZP`*HCYLbO-1eP6U| z&>7WZZUnxr+VXk+)V#tiAS&*~uc9l9bVW0RzIQ_U4Fl9U7U*6G32}RuGI&|4w36!r z;hj=hvG9v~(?ekFZ3Cb!;^4<;$FcpRfOCN9}2BuAD#!(aQNHTo96m6`pg?>wweSK_t{R zNn~gJeCmOmZXuaZRV;64+31W{ll#hJPZ^blMVa#Yu3od-9gAkS-%&RW%J?^KgKR|X zWWfr^ZVEvbGNv2FenQ)rh;g2wXirDBnH0`q+N|i5P9VKq6Y-X(Q^h!lU*3Pbt=7Yin$&O=f z1}c>aXK0tJ3zug3P6%E1YB)r%7W9bGgX|LPO_42nSXz~ua13ETfQ`Dg4s?cg4B~aX zzLw+1EYJp-AqnZ6gMTj8>*X|(TrUIXozashplVf3=E!*(MN*fkC(nv`Im!n@1?{H6 zdQUy$VyZ;qw5pAl>Nn)9#YN}GSy5LQ@YRENtlC+1QSJITw){Ogk)g7YENSOr3hPzP ziYYW~tLXxz4v{BEPLjld(9=p8`YUfQQ+Y*sYo4`(>I2x!z%!-ZG zz*g2yc#W)t#4!rThr5?$jx?`|=!$uSos8hd7zClGMBTVSh@4{M&Wc){Rnf-A-^E_K z+@Mzv1^$)CQ})Y`)~n9%*xt<>I#jA@gLZ&LuBwNdm`{Qgh0*koM#48_m?2sG+aN<> z-ZPuud{i;8D}oclI~Qr9q#^P_81FJd*@sK@?lWi6 zX~HichucX>7pZ$StTU?>gq5R=tZWN}^*j6vQT`)F=@#c|PQpu@J;@~rj6#JYa8zil zb1W7dH&8?rB;g)m2fM%b*9qM2%Kl6NXBNqKV_`gJk-i>?kp1$L&C+=@mpZEcf|@#o z=d{zh*aFjR-Dr)4jk1QBUd~x>=)c;6fS#60+0eK1`~5$1_G&z1IeS#br{K*<5L-^|M$#|8#F?{0myAH@Fi zU~q@G9yasmc<{(mQ^@4jS4EaUQ+oFw-n{uHrPVHe1YtyKq=&*P&g`O|FO0Uk3esuZ z%%7r@K%P==?x1{;aL*14XPWWg9LvuG?$M9&-fID0`0AC;vnb_&|2n z=4wJl2Q0zx?oVdFdXYonPPN-Y3biOm@(J*$4)E(LHHK`>mc39(xRIgkH_ zHAlyisWp6{NX@y@rxK@ zQ|};n>jvrSV_iC){e&KlsA2n9FAqr&O*Cqu6Jkt08K!$zZ0K*A*Yu#EC&Bwir}9+4T_Vj!SiJb#PtDXhT#_I zO#6AhaDZOBzT%(@ez70E*vDqw|NCbAYoOy1FR~ZoHjVFY3x$^e--H6vmSQoWQXV)S z6b!<*cR9xc$b4-82{tmRfS<ps#H<%HH-XTb zt{NBzuwCFdl#ce$Y}$S~I!0}px`#Lrn>(jkH2Zsi5*sKd$S6Z90Y6JoM=D!v27!gc zq0TpvOEUapJ&XS&pluMLZ3gPZ?V|uNq?51RAdv{`tVqGd1Du^-yGTcI_tGeBNCr^2 z?zFg7<#!NqTQ;2+%%&3s9A2N3VVyg|9$q3B%)Ug%3*-AB$C+*f37M5Gs! zrs!}tmKFNe(>w(!Q4NfRT%htiU4ytn?g@u2SXYr%MSW2v^;8Var8G6uQ5l1nX~`T8 zR5SW=g$WJ2-koHnC~SH=-E0`L+76B9(_dXD7t;;FA{9$Nc zzXHl>Tyw#1CiDBjhH%avlq6aKn7BV~XN06K#9`7-K%U>=q4@ z(;utEN9D?p{_|yapN_YDH=oXD4^smPc#wKm`0Q^xJb{DlM1kmo0nvx>kbztY5Cy+M zGb3)`ci}Ey;Op?;!~KH`GMpgH6mAgVXF1WoQsmgxP=;4%ogG~5fpO$dgDAYl%F)9` z8=vs+b!(BHpoLe<=4x$Kx|4^3l}16*T;HK)Iz~ZzH(RWiBzN&H?*=_5-G>?9_KN%E zx7PX2xciGZ3R{1FkIS&ZXXE+Ou8puE%S?dbDuQ;>XREpAb~K~(gxZ2sjt};^^|Tt^h33%E69pzPCc_c0Co0 z*ux~*v+maeX)I~{=H`!<=_ao{DH_<$HM%J2r=O>~AvE(fXFWk7Zd=DlA>Uc6E!flY@-a7EJ zL5Ac>ynaFq;?#R0k0!w&wbOYpH!x3=Shc;f!8Wb;b#GV2fbaJ0)qzO>o09eoF5C9n zo%_e!w(krTa(9HQRQ%Io2gSxE3LGUp5q~zrHY;0pw8Vx?fW4T-`UbY&J5~^Lx)HnN zw{m-j*p@JpcSIqAtW+uHEj!gLbsVwv>iv-LPTMEjE(F^f=9>*-Kk3n@mXSVHz9^CK zInB+%`DG4YSL7kJpfcwJoB-kODU1?pRqZ_tPh^*8{WO`di_EKna9IXBn+|e^F^OeH z#t-q9DeC1kUlzl9@=WcKYi7?y@;06~2%m(N;>QcV7Z!LY=F9ihQ7IdGFMXLZsLGe3 zYmWko{oH3vY*Iv0=)kAJ8_>7&oaF|dg_WrryTLNA$b<+dW@)ns64NN4zAjBD7#~h| zp#41a`_i$J)GzkS*IPNQ;Rx~@6p*?KLoF$0*vrMbNxDs!@UWCK(UUuZW)FbwRDfnc zAxKxDRyufKP@~Hq>%%;zLKLgC)E*X`tB-_@XP|?>;Ne#XU;+|m@&RaaA8{VuSM||< z#^nY*dxo|%eDq}pyC+QFcngN_k%3QZ;1z2=#O#4-t#o(MmR;hq>RbUUh=h{bA9X{B=2yXI#qb`)eX=nTONyF`2S8$L`|#S4a8a`nLdOx z_~{*>{+#|#rzdB>^nd!>T>qck0qO_(Kb@Z(9rf4$y%L8+psgkk@B4LpQluvvLY8;gWZree5aKw|qZ4vnl?{^gMMNfk76V#;z%njrf1kh#rp-zOSEu@SaIk8r~<4C?ws zyc)mFo`81WL)bAxp#m@&c3svdtNW;MnBzUegMiZrUL)ZNLqoqB;dqT&EAi2_{FA2s z-*8K-ZNoYn(wZ+Y);_%5hB5=EMr3H;6CLnxLw&fitcGeZ0qq;*w+7`^9>R=N0oQFfq0Zp zY~eO+vx(zq|E7uajh@a~7*p;sE``-1^%vnVquKv=l-j$yphHhkOQMD8R9PvLIrgmG zKp@E>i;2tSUVXA3Y)cU&i7z}nI2jzg4`H}(7oO-k zKgcc9FhWGAr8>YZ+o)uNfPHx)Y~pU#n(nOu9M2B^tBXGbb3QPVS#N4Ufx{SvJ%$dl zDs7aC0wxu#$za>_RM+#E1QIOEK5b?IuFi=%NuLIH@-3Lu7>|gb5>FGBR?w|%QT0gH zix7Qg%s5aINn8Sd-Eb?V9591OB(N;e6~e=F#*ITIEZ6KS%**;Lj0vhj$tz7jxhy|D0C8l+`> zj0sFqsMoS9;lp>*T<-RI^Em?0vOb$eh?N9owFT4ptchI!V>geUiBiBsVFDVAROQ|t zMT7km#gMv~Fesxu1eGg(aqrARk;zq+;wDff){#|_#wqR|7MPc|A%up5t=kM}(zj3Y ztd6p+e(7{ScEl3x8fJ$g)nHRsNWd79c0-!&~+J_o9Kn2;(YQ4>UTdbs%2H=mcah+AS(0gdMeo>VrSGOoSJJh!~<<{fJT zcl3e>piQYt=Yq?pW*k|StFc-hc6SKhBQgJ9STWncE7=B#0-BxWE0%28ZL)o8H5;u@ z3ob-)P#I)+%t!4hT4@~9drI%{C-*8myIRl2ux%hxeRBx}%VDVo4SlFgrk*^}dMtdA z%nY_}0=GqwgF#?o46D0`Xnka*ki$Q&$G5ecAR>l&v5RGaoNKLkvLhv_?Y>9b$?LZf z`xUN;qpkQ`n7#HH~Aq#2>ilob0jF^37^eN05V+gZn|QSzbQkP+8!72 z7LtRTtoLIkV0|Q6RixNzp--;aQK_DF-Xpps1se$LYzztW2_TKt?f@vAbK<$#=f%c} z6>ibg!k*^>F0<_PW|q!HL2A~gjILnJsC337JceTt^%ftrDLx+Ne^KnjI?>bJq%5Lj zH26WHrLwiUo!25DmFEa3Y^v2I8a+I4b*JXG{u*X_n)G#_bAE$NogcoFrw-p=9`itV zwQ}c6L)(2k2bcagU>}*1Ve=aR#~`XHwm)}8$b<+8 zn-Wuw>}@rB+gWWbKDq`VEtzcf>3Xti7L!IQ7jH6YR;x*E4}TEvjvLY!yy6D=qMIi+ ze(L}bGA^d8AxT9L%buws*=BFG0(h#L z_{mBcs7c7p%%?XAW;p4+$$oCH2Mu;^B8!AN|G89uoawVWcJ6Ag_r}UFNH8y3T$L&(Gt*M z{a9=3i*#U%B*o$+9%|)|JCokBB9UG&5$y8}#rZ*O%{wrpq51IoQ_j1gO7I*4N7Vl= zamx~MTiYKWnn_?xL8QcNSDmTH_wv5fm(gnsFasY7GXpUm<+T87(6veD-b|`n#9T0$ zxES@mbY80E#6knL_>wLhw~h7`DAyuW7B{Y;T<%O_(?Nnv!@-)8HzM&t6U+csGEuU` z9sgA1;N&dqQ``|-{C-EF)@-))2p_{_+TZ__x8<3CW=`^dZ{ZYYokxgx>@w z$R#yRmAkttf@U!4P7s`*ggxMz54CIl`5IDdC;Z!sqg(r%@Re*_uAMo z#N}pjW#&LX#*|oDB0;Qv0{>1#sf=(`9jOqm*w4>FP|BhcgqvJ?!l zk{%nx*^Yoao4u*ge?#?o%OLY^C`T}JA3oKslu>>Zb32snSuzpQf$JtGo>_Rn!o6#? z77e<5F%dO}nb}J;I;GYNCye|7uq_2?70N8*g=^~-S$!%FWxss(WnWW1i$v6R!y>z( zS9!$u!d))60rupB-)}@6IPH6T)aHA8g92}4I@dtYdwZ_W_x7IX=KZEGrj1`P#t4#_ z9;9TCGfmk~b768$Uf58iyoanu!i{f1ze7e3#8jd&TPYYy{s@_$PeE|bPsnryeCg0L9k82W zo*^dHu9j_m1QG3fWcwrzVKk?){P;{6=dtgS3|}Da2c6Syi45QI)G;r++|Cv zn6&f!`sD}1FF$?r>bb>Vo_9W!x8D6M7PDnIoi6XG6J0qXXWMMOJmAaN*04=SYT_Z8 zt-SwUPiju9F(=}BQn3a6_N924h2Xc`bNf7OnYPm{L%{VBUUW)$(W^3ELW4a8#U z65Gz8yj?eAn)EF0LhlBcgc$%S;T_bRPx-#RJ>DxAnGQ5c&)n(pCO`3%f!Udi`y@J` z-HatGuAkK|XO&xwhVAW{-@mt~u$7ZAduQKn_^w$MHhkL76Sjt-r#V}>?~nZ6MR?VE zrOX5C?}0)JZ+pF3FRS41FROdDB4w2)qGXG?iW7UORV#BHuo=><1Hm}F$RRM!pS!mw znUPJVcx+U{!0=2FV~y%?mVB&;aVP(GED%t5LZo0b%WiaQ-~`Eu-H^o*RX9Pu2;5Q* zhP@l-&X+RVMg^p*Lh$L&$ge}%LA#M+CdO^K;e6>FV4l3&d!j{Q-J7~n;t+R97AO_?jtDT{Y(wWW6NaV}LW-YA%@V51!k-cDy zSYe7N&<%(~v7>5z7vGlrbDf(Lax$RgMsAu3ktv}y47eIh%#l$5C2FQ9&~WAo1?sOs znV$4gB-}yCT=**XX^0XH2at8!-d2IVYv!xGe~n7cnY=9$In8B`Bg!7hX>fako!%yD zM4XyPNK<|gd*+w|M>ud^m~xe<#lB^#gOT)sV;9s9E!qt znU?y|hW~E)Z~uxyV@&c#v=vtKL?^-CS5YQ6t(7u@5{ev6qz0(J2mS=sP}OcZcCIQK z22vejlY)!ygFC!=SQyXQq`9f-y=DRbwGCTAbD-K+A&d39}(c#=|?~o-nI57;y#xjys~czKZ~Bu20Up8BPI2 ziRp)(kvY61KXsSyf^h3peS9(MtiKYoQva>B^3j`l)=YpVTCpE0GyH0SfJ7y-)}&v! z#kAogp#9F$X-?j=TnF>cxCOL}UHe%!(KA<>TV>&pE|s$ZW0_=Sk6NlP9uAUs-Wfev zjK#zPZIcb0c1&nA?w&#){nf)gySpDMU7iFGQ=8uV#`VKPatWn|j7uu0Ps>oNSDit0 zr7@!%!)kto^pA7Hk2_tglDwldGBZG1Z(rTBZRvW^2>RasG(RS$PfVK687Q#6u>?sf z{pGK9Rhz)~^WC(P7iPIxWHHP2%DYKVjcnwJTgD9+OZhMnpryz=^R9Nd_N+ z&489--~_u4XIoRC#^QRR4~uiWeQGrn#phk!Z-|9{I_D=@7phK#V~_}10R@}`r25iw zd|Bj2ixA16Q?DGMB#75gcL_~|b-N$fpKi_z-O*U1pNMI*woytk!`$0$Abi06(*%L` zB0^n238^mD+S8;TF4LZ_B_!!-rUY{o9v5=BraQC42;6ZP7Qachwtt=ElU{UbL{#y#^mh?I1j9VH<9G zy}5sxv-81JC}b4HpyS@&dVzFFUHaX&Ubt)`9Qb;ld%S)zZ# z1&TTO-5>TtopI=eiHM#7FMz){?#?XtLFtaiF1b@_iP#Zc5_%eK1pm#6JtC7jvtrcG zJQxjbYBjtqdX+iYo`>Mfe_|aWTeyyYI5=cr{xbpo+JD{&9+9E{*!t42eriB5NC=~j zJiSa*W_dqgVb2|Eb>j#^Ed}wfutv}cf?>P0`2Tx*;KoSq1keM?`lY)_QVw}|6!3m0 z>mib3IW|mD*h!a3xZu=f9J&AHm;d|El>hJS(7!bQe|mI!x+VXAbo5L9|7ZBWzbktJ zs3^YNDqnrIZuqUzwsxK^%_@1UeNr=8**alD0e6|Cc%1LHkMsMy= z-)s?-R#;p(T-Q5!$KST)5zN$=WgKx`ItGT#e7!)>N1OSiD1)=uWgH0xS!@VMtK0O8 z4!6omk441{Vl(SM@je+}F(r0ez4KmE{N1*cV+;gjJpBa4?+zqN3nJ# z^Dt#fNZLu++bec{R8D!2C6uGlH1jOyl!?tt6i&ppc2U2N&HkU?6r1ZDGc~eZ+slpQ zX!#S9qXMrs=#sXP6=f{OwqPP^Whg!Fv~4GAzx;jg#-o2;6b$}lAqX6)dHI*1>foq&mhwP_ zG9r?wOFEaR;dlS;K^_Uv0E03gcUS>=geT>1n~w%@D!9;LT;77)CxBu+<_oOe#Cz2n z)kB9Pb!)rc{XL4c19M(u^LPTu-Q)#<=4U8AdQ9XN8AE3H_FEfNiaI=&h(c_FPEJlX zwtcyCc=$3BO`M))aq+`53yoWBVo<(F4g#9|9y&#)Ct<_gPR{*q7v;;-!(6WAK7qLV zL3RCDp6$OZzx)VmkbzXhv$20(PJ@hUSR(V5Jc}#QN^)@tz>CxJw;%be935tF5gRS^oX5vByeRiZkzVNhJlro*k)Xa- zjtj+sp~HqQGeEu^8wQcVM420Tpd^qGeL$>ouyRSZxTkW#Ai2jk=8OU6M>cL=sZ{eC z#&=MaHM1^Zk`{MML`kQp{>2<)27OX3&O`@YlgkzaR^T^KO^f%}QP?lxQl$UvM=!%+dvTP+ zsR=ZZ*oV`3?jgS5YmQQC1c(SsBkyu}TJ9VjDyE0VXz4P3{UZNJRI1_Am+IrjwxJqJ zYN@8XmZ|f~#(N)~orbF|p%z~DW&Vhf<~zt z75&wG9At9bLmb_qfL}bzxUs1-W8%eYeUmcTp2x;!KYrPJG><+*Kzb?#vHqzX{$z3) zOz|m<8FjBHwROU~Ow}^PO0O9=cWdpjJbdvIgFZSxq>)lHy}uzVS?%b{mH3-YXQ`~k zdeA_(U6#iu){wgMOG-2&7hh_yoCMJ-ds9b7-gtz2!?-A4ocnaML>@>J(l3QKc(uM= zBdUCOc7SVMV=p4iJ)owuU#TH*Jpphf{_^YV)%?o(oqXk7&YthY6rF7%Vfb2t?5ys= zT@CgmL!Z$y&S{f(ydUKelxHcnn1RQfQ1Py!?JBY+s}dN~af$OB1NKpWBfD^0Em}KU z9Y|4v>7?r!@Iu-)gDZ7y%9sImk{@Zml$%6Iodyri`*GYFbU3PV7=|*<&!yrF#bm^lG@uX(3JGxG` z`pMwtw4t}?AXCb ze0G_-g#mb*qkoied|`%~oW5D-ZRWBJX0hPj2yo8MNl~Sv07|2JipvE6vWj*Z=889% zxr^%e;1BLbrY^TxQg9;(#ba%Vi!z)e+9?E*0w%cjuI(4*Rf$So-m$6q@$_v0sll5V8 ztO3XyDW*za7``gbSy;PjL8TwI2T=<2Fxy%X5MofwGH}1TaRfyJgXoOP>FijUIc1M6 z%^MY@DHrM81`-J@Gqczn&j03ZFM4)D>`P_MZrN}C))~{aABy^1fg1t zIF`gVtkteNMz{l*G74NPQZ|_&FnR7-#J1^$ai?)R(XAxKLp)b=>68osoJGRHH8oEt zEqG&!n_}q|@>xSvgoBAA*i@6E&HRrxZUtfwAT-Xl_$2t$P4p-&Ix-?`1_y3pZm4wc zT`ERZtAcTCfX`!f<{NOJfKP`16j3!$xJR=a}(j$zao_6Fj^F*cI6m=P`QMF!Ikv(T&{hlE9CbOT68 z?~TUv_j+OiM70aay6tpeH9iY?UXz$OSx?*!tVA%=xD1p4ytKFKCf-wzv$&e#pNLkD zBDHZgK1lE5`jCe-Z{Fe|c$+xPc-zcp@4-c5e`_I`^#4y%;Bry)Ti~V1>C1}$OCHF|UH5Xz=$zG2fboyKpR;-!Tc9?rNjRqbR=iM8?i-r<@=Ix@Rb) zyntY%l*Un#oo-5%OPpQ$BX;1;u~FkD(!sOyo;IMil3-QMs>pUFmQ5R7`XvUbQuff% zk*O6{bsgJXMxsMRatheAR{Fb0wn*xFky)pm^4161Wye}eh z|FQgvp6F(;uPpHBaQ^at{$KxhMD+8I6sWs&Jgk`?uJ&NV#fvhSFRoXpZLt}g1CPs+ z9Y!lInI%%(?7;A1H0IG7hj2WRLx66$!|}s4Cnqt{qL*WQzxQhT)cz3D9!I9X9S#rV zwngkAVejYC6|K?543w-1-fwx{Njg+!HL4d}>d}0l5KwF`_L$|m=)n>qv@83JcQ*2aS|5-sP;rRXnm*st@a@imN zN$2FV_W5wq{ZPGtorNqk|nWO@E@LGa!m5%EPE$JYPg%O$7Zpx*@G1t z)@G6vmJ!%qoz0@Sb*j9+de~@5sq!7`zxuX*DE{&iLWR|P^(I73G$M^Ribf7K z+mbd2YwO~J8K&j?DBP?yHKf!Mle;$o{d(l*Zh9ruKz$1~4`fmsTg(zw5k>@r%HQZ=lH%?(I% z=_ztf_RDYS7Sq~IZmbOXU z&vpl$_)p}o8o7DJs;e0F8M$H1biR(LCr;37HA~^|TN)3EzpTQ-AfR3iD7Wj!XZB3? zC=ZWVf0ox9NaQB_%BqrB-KsJ<-9Jm~7@LfjUT(1hEo^4+IOm0p?L68GxFTO55<#HH zl=gK{(~qTCOE#U6gsvzbeO2%y`{!d9fAPGJy#Q7s%L<|yd)(@vb%wqbHW6Mu!&mT@_K<;5b;HM zI5>ZCnuZnjMACI9XD>V7SexIX$b*-PYyJ0U=G|KZWbNUpw=MYZ)9^hE;fRXb?8*Fk&rtp!|AAL_XI{D|9CK?5hbqng;@z+8BLxma*VD0p6;uMi+*x(KI?{i2R7;5O`;i7EQfE#c5Fc6+a=*Wq+t@9 zc>WkTj~0ifXE-qZXc0@g48%@ZC3l+)Vj+6VgrTt%k$YSzC(d0}xm1ZOabld844 zWwN`sl*<=F2|h*M2BUeBE!Knl;U}xmhvUFb?ij zY$zYg!xMD1SAnitg7BiLv~htZbOR#KJ6L=}tA;T<@%mFv?Y|FM`Lp!g|(x7@^Y7P)?R2fRt9uJzsBR^#9`=mX6s-jF1`ADRw1|6dNF~m z_mf@!Hf%kiup(bTs+74F8gS1aU4U$y_WIss$9|5V>sE}Eqe~xR;4~}Tz*ciHXF{wJ zEr^#(qzP);g7X^ph6Xr!(AkKLPJZj8Y1vL7*47u`tZ9wZKdHv=ke6*!G%pqQF(!f?;Ht$#n^fsR{1nva zOj(FhH3lZVEnm0?pMnY(g9dz&@Gg#pI4irLmTd@@6|Z|AibdC)oQH*0v)Je@u7GS@ zrP7t7!&0qK9~@QF8$d-P&hXHirHgXs2Zl2UkLuEiwDT@|3AUC%6wPe0UZwb#Ar@{J za!6^REZNe5jBErRrk!2sYJ-Oz5uB{S;Q3Rg%K3}Uh^)B1TPHoL@9pcbf05Ql(~aw} z$zr0U8pcPayv&d>qoE1KAqz_tb}!8&^v+(?-Xp#hkyY3@$&~;AhzH|?*54ef6ZU3U zgw)nEOO!~<6J3Fti10i$F>Yan%n~&sh%=0&%wj|si2Xgt>@4$GTLX-DoHMo#p|X6j z-)jxu6Qz+^ftnlP9gF1*w(YRT@)a}kn{l2h$H8|26H$aH@buUb(2rZh;blY&XIK^w zWh=f%zQ?R)soWTYWAP(cmJPu-Q26f|fL|e-CNh_~ot6BBjb}%Y)Z8gra!^!wWJKaT zmg||jow`j=GLvm1!cJ0b=m#h9$=k)m_WQ=M+Ex#j?0&j2`3RCDuyNUzp=DQNkf}&m zEk6gWESSyNSC^LY+Lmf`a5DV-_3Ph#`uh1-Uwt)fC+pki0u0Am%GPG1*A_Z?83;Um zwrL_*!CgjDn@P(%t^PZK_q=nldE~+WU)L5*6se)N(T1;DL>B{{xDp=f16x-e)0g|@ z=NkP)fq`ws(KMraa9s}&b^*J8N%1ugeUTMkcUr&qp{jVlR9AGX`op4t&q13e zNb%8Sd3bQ{6*t))dKpaRw2#6_GmccDhs)QfHZBtZ5JC>k=8E({ZkL@LR6ZX?c<1A@ z6L*92-&(EsTzJ-IWfn-bT=9q^XXs@zOB&gpRq!w- z(a|?QI7L3$j#9U!CJDE+w6j&e9i1K+yn2i3!mBr;aH{a82ry*gWK^D?ovQY3U^XWM ze4g&=N}iG5L<@^t_fC|h4w|OZ3`&Ta)hbp&eRi;mAO&d*G^Ezt%c3-PuV>mwUp<4v z2^#9_I%|~PPet2_N+AeF5-_!Hv3ZqpW)9N)xUO><*SLtgH1hk|TX%70UAJf@@qM#a z_jMcC53e1~a zh`0QSV5uKn=ISjEKdU!W^jUH~yr_ukVmn(Uo}I;v)-O%JC#Ry43l@FL++WLTvbv{e z@C5vg93SOx=I&D?A>(ASY>G+b?>y(?KxA*AhUIy)QnIvW4MDoPcR%x_a_)>C)Hs!# zp|EwMFyK9A&++aByTLw|{{%MAN27&DdJmsQL!Ot6s`l+D7HFm&<>50V(8BZxZIi0^ zKp6l^Vz>SUijO{kkn(x&lvJW29s$`^Ugi|5-&duNE4a%eLpbJOd?TR4KaDUM$)?~( zw}XvakyYffOH2p428eL(722jMg7U|5T(r6A#nGE_hfZ*SO|}#9z9h|>*M`KBCoGyj zB!V&?x8SG3qcod8M6RB%_&}haINiW)&R6+JCWNK<2rNA~BAEn)`X=AsU^B@Wf3DrD z@%Jf}o*)j&B3Zd901KVvfpY-r6y`<^CG}mNSs93qF+(ZpoL=-YUr<5lx2r(Bwzu?# z_AFc81_?amHgI58!d7^dgs8==|0@kG0SfgAijd4gO(n7HGc4n&ZT_XUYQ@ifFhmKM z5}gUFVHrHFugjn|s)=<}{(K9=qU{o>xjfkt4Z=Z`JUTwnau~RwhQtQiWbcdO`4gwJ zNozok;mHPL5AneonC0Fh=PYU3>K9k5LQ>G+0Uo)e zS(`JDIpNe3h*%;x}>NR4iKvrrdLxFD^Ftd-A$%afhi;#7Ah|%KPr* zAkwIJ_@g@HQ9;Gyr5)H9qd8HyMz*|JovJlW%A3u1Xo0W9%oTy;#U}|>^E8_IqI^%e zSeF5H8}(@l|0hK5?q%7baFgy9|61;BZacmC*+mUpWcIr-qxO?5WY~dyxf6+Su0mKz z90!fsAp`fgqwk4+@YbupQ=rrJVGMd;-sgTnd(oL;0_Uv4AFiU{%&>zQz!$B2zniZN z&RXnw?RpvF+!8)DE;eCkCEmgX>L%$T$?k3x)h^31?WYwk364Z%J;GAF?e~UcF zJ^o)Ywfrbn-=Eh1`Dy;&gX5#);~xL-;mPsYFa3XiF8<%R{6+Ek>>Z4O+sc|;5!b06 z9;@=9#ve;jn$jY)N(V~9*RD#7;?pW+q+|Q75hDGu5at~UdZ+dCksV(k62jSqmt7gZ zZ`NaaG)U-0P`y*=;HLlM)t6s%5*XI%it5pH45Q`u3eb*5qlaobDe|_*R=xO`fh`_W zEk)i7`G17}8-Dra@RLtsFXZwM|6IoZ`#aY+!6a|daOtXjXoGa5GhD%v5R_0e1K%6C z2=6`HxmCDVL|M|6O;FkJn!&89CZuh4&_EpnvJP>0lrrvS5L=tx@w zzHsMYSRjgdhkfS0Mse@p;*YHfLZr+#w(8L!(f?qN=gD$IwFX!Jy18lm3NLaRX`bu4 zjE$S@!EvMF!NJvDEc!LS`=~I!vzCHEk<}57AhR~OynF~M#NzU* zPS3M{jr@z#s@O5jJ9sfXIw~AKdQtvy9<0O}+ag<36^8OnHECT3-neS8O%<&9MRnCof@NKk+jUGXPWCSli4^x3wdBVFVHL$cy!wJV>+tBr9CoWb zV$Q@}^NhQac1IJrj@pOmVl|(FGjhB(7E2ZQ&;o~&cD)QKE6GqDT% zKCxCCuynq^p+}bpVSL*F=P|`AJ8ZWIR@7vISQJ{BE$D>MCqd1$&9d1czL}gjI4ly# zv93}Gmjs~LRG7fJz*6t+;iZkx0i?B{3BVhXtnAUgc`P-Io_|4RS%P{JQjN0_?E3$= zmTnM?tmfunpdf1ff2cMz{cse_;^E)pN53BNXS|~LdL~NGCUu5;n^z(GciMrp;a0)& zW`4d=DF=Nn)QMetj|!YXiyk_b*{nNkNR`R~I#ex_6Bnezw7MuqJmULdu-{!zs`a@3 zE^J2}Tl)XSNXxgs@!e9n0oKsrmOz6ewb=S!ex%yGb79pM?oNt<{h1oQ`@7J$WmkbV z677K)1GPgzvec6a>i|fc3nUTu{3mw6{k)0`I~;5aX!A|k{?qp7h zpPT|9V$z5^($_pW?KWy;d2LR0XdEa >hf!7eHV){tD)om0qjae*@+TcP}z3krr+ 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 &6e2 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 XfwHa=VC;Q=3sx0I-OS_(#xvTw1IQ+-We=xW_w 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%0D(F_y0{LhMW!NjMV>_Plry~0h8e( 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 !h`*nL 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ːw6&sd6;@QnURVch=k&wsTtizz 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

;!-jnl#?=6cJ9{CPh7 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

IE*{8DEY|cWN1Z>9 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%0A9`;D#eTjNf>0QZBGUj$eCsfW+QDt*y8 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

?8x&BAj!!q2wj6W^h4} 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νRVs@FyS}L&1AsM{-N!uh^b}Uo=MEvxhZU6sZ{7C>JbA zFdwdZ6uE!IV6aYK{mHp`uad( z3Ssq#MX~VVa%pWVf<2*E97QfHV*-c`5Q;f_)C=@=WY``oqK&5S<NSfxTzi=XqDIusyr7&z}eP^5e8L^Z1y3e?|;y|=byU@a=rEjwVnRC*d<>%i!X&u6#15}REMQPbV z1HfCIR#s`@oB)ugA?j$mT1rZv5C?6u6zcz(7_WAArPtTI&t`tNXl^ZKzhxaJT=>md zq1^l{mh!C1msH;B71NK8fU*d7BH*sb2vfJOR!xiqmXZpOP{ zNhIl0uY4;elneY3cT`IwqA+z)WaO^Vj+$Rrn+Pz*%E2eOJFd4Io7uu87JXxsnyn|OHx-`NabX~>PAUCkdAIT+lF0ek2Qu{bHBL(8IujcF^|df zUQ4?tSxVH4MXBC_O_|#(5K-p+bBcvAh%`F<8}UfB?H3It`w#`xkw_?oL!*t22qLjw zqT7kia5&oAl86Qi=;|IEH3)sw=T^f#d&T0?SOE}rk(azl`;GHXt(8~>-4qMfGt(>Eej~} z_Mqfh<^-M^kystsczV*=-hJ+X!!JMkjjA9`*)b14`&(RdC{+9Jdm60mO~-qp&=h=| zy~n#J`KOS>g@2*@6V{(t!Frwi#J=@EwBh|Vn||DHpyx-Tz(s35P&@_PQ%K^*!kSw# zx$_ehDD^Tp>Wm037jSN;ZS|!>DuF2i9JHU&pRpd5sU?*D{t$V33 zg|#AH3cDO!J<`8d#8&A9)UHho=7nj`_=arG@T)7s0S)i*L;|pX99?A$Sr%kMzI^+j zLcveAW94yG+K*gHG^+*efY8zf2eA~yOBCb9uXLOz+S4=MH#hB|h(sl-h)BE#b~<8c zSOe|6V|$*SXI>cmE80kFI4W|~KBv~|58V?ZT_^heg2@ne6l zQX~;CEAFdgkCboN+wrUrC*u*euLUodEfdRfio;}EPQ#>aTJKyy)2QqYK@+V6P*$%> zbqTpox0drsuY%`_eU9LusbkmO&k`rG{nRA&!m%v3i{Wc>Oh~tBt9+j7?wPqvfX

  • `vkt+M6gN)ZxOFRJW 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

    rdy2l&&Dw;L~InHvY=8mFi}>x*M~ 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.`. A + seat's **verb** is the same thing carried by a seat rather than a module. +- **mesh-sdk** — the library a module's own code is written against, including the harness that serves a + tools bundle to the tool runner. The harness is part of it, not a library of its own. + *Not:* ~~tools-sdk~~ +- **invokes** — the manifest word for the tools a module calls, `.` each or `*` for every + one. A grant on the publish side and nothing else; a module that declares none calls nothing. +- **upgrade policy** — how a module's new builds reach its nodes: `roll` (one node first, judged, then + the rest), `together`, or `record` (register the build, send it nowhere) + ([ADR 0236](../02-DECISIONS/0236-a-build-is-judged-on-its-first-machine-and-put-back-by-something-other-than-itself-and-so-it-rolls-out-unattended.md)). + The controller's verb `upgrade` shows it. + +## Core — the mesh's own machinery + +**Purpose.** To keep the controller, the bus, the store and every node's engine running and agreed, so +every other domain has something to run on. **Recorded by** the controller and the store. +**Upstream of** every domain but Module; the others use the bus and the store as they are. +**Decided by** ADR 0005, 0006, 0067, 0106, 0141, 0175, 0227, 0229, 0289. +**Uses:** node, module, seat. + +- **controller** — the component that decides what each node should be, holds the mesh's records, and + tells nodes over the bus. The relationship is *controller and nodes*, and no node is subordinate: a + node applies its declaration on its own and survives the control-node dying. + *Not:* ~~control plane~~, ~~slave~~ (hq), ~~mesh-control~~ (hq) +- **mesh-controller** — the module that runs the controller. It claims the `mesh-controller` seat at + mesh scope, which is what makes it singular. +- **control-node** — the one node that also holds the `mesh-controller` seat. There is exactly one per + mesh. It is not a separate kind of node — it is a node that additionally runs the controller (and, + today, the foundation). Lose it and the other nodes keep running what they were last told; they simply + cannot be told anything new. +- **node-engine** — the program on every node that applies what the controller declares: it receives + the node's declaration, writes the files, runs the services and containers, and reports what it did. + It is the engine, not a module: it owns no file's content, and every file it writes belongs to the + module that declared it. *Agent* is avoided because that word means a coding agent here. A record + written before the rename keeps the old name. "The host" is retired in this repository's prose only: + in the tools' descriptions it is also an SSH server's or a container runtime's own word, so a + description that means the node-engine by it is found by review. + *Not:* ~~host agent~~, ~~the host~~ (hq), ~~node host~~ + *Identifier until renamed:* `mesh-host` — the repository, its binary and its service unit; the rename is + [issue 354](../04-ISSUES/354-a-decided-rename-was-never-scheduled-and-the-operator-believed-it-live/00-report.md) +- **tool runner** — the one program on each node that loads every assigned module's tools bundle and + serves every tool and every held seat's verb on the subjects the memberships issue; the node-engine + supervises it as a process beside the services it runs, never a container + ([ADR 0175](../02-DECISIONS/0175-one-tool-runtime-per-node-serves-every-modules-tools-on-the-host-side.md), + which called it "node tools"). Its mode on loopback is the mesh MCP server. + *Not:* ~~node tools~~, ~~tool runtime~~ (hq) + *Identifier until renamed:* `node-tools` — the module, its unit and its bus account; the rename is + [issue 354](../04-ISSUES/354-a-decided-rename-was-never-scheduled-and-the-operator-believed-it-live/00-report.md) +- **foundation** — the store and the bus, raised at genesis before any module system exists. The + foundation is not a third thing beside the store and the bus — it *is* those two, named together. + *Not:* ~~substrate~~ +- **genesis** — raising the foundation and the controller on an empty mesh, by the one installation + done by hand ([ADR 0067](../02-DECISIONS/0067-genesis-is-a-pivot.md)). +- **store** — the one postgres server. It holds the controller's own databases (`inventory`, + `identity`, `licences`, each owned by one domain, ADR 0008) and every module's own database. One server, + many databases — never one shared mesh database. Bare *store* means this and nothing else + (see [Homonyms](#homonyms)). +- **bus** — the mesh's own nervous system: NATS, one per mesh, carrying every link the mesh has — + control, declarations, builds, events, tool calls ([ADR 0106](../02-DECISIONS/0106-the-bus-is-nats.md)). + A module reaches it by requiring `mesh-bus` ([ADR 0128](../02-DECISIONS/0128-the-mesh-bus-is-required-not-ambient.md)); + one that does not require it has no account on it. Held by the `mesh-broker` seat, which is named + after the role rather than the server, so the server can change without the seat doing so. The `nats` + module holds it. +- **the deprecated broker** — the lavinmq module. It was the mesh's bus and is not any more. It keeps + running as an **ordinary provider** of the `amqp` provision, for modules that need a message broker + of their own the way something needs a database + ([ADR 0131](../02-DECISIONS/0131-everything-on-the-mesh-speaks-to-the-broker-seat.md)) — it claims no + seat, is not foundation, is never raised at genesis, and a mesh that never installs it is complete. + Say *the deprecated broker*, not *the compatibility broker* (it serves the mesh's own modules, not only + the predecessor's) and not *the AMQP broker* (naming it after a protocol invites describing the bus by + contrast with it, which is backwards). +- **layer** — one of the four levels the mesh is built in, from the bottom: the node-engine, the + foundation, the controller, the surfaces. The records' `topic: the tiers` and `repos.md` say *tier* for + this; new prose says layer (see [Homonyms](#homonyms)). +- **lease** and **epoch** — which controller may send (the lease, held in the bus and renewed), and the + order of what it sent (the epoch, which a node reads before it accepts a declaration) + ([ADR 0229](../02-DECISIONS/0229-the-cores-order-is-a-lease-the-store-remembers-and-an-epoch-a-machine-is-sent-once-it-reads-one.md)). + +- **record mirror** — a key-value bucket on the bus that the controller writes from one kind of its + records (nodes, assignments, walks, builds, settings), after each change commits in its store and only + when the value differs, with one event per write. The store stays the record; the self-check compares + the two and raises `mirror-drifted` on any difference + ([ADR 0289](../02-DECISIONS/0289-the-controller-mirrors-its-records-into-buckets-written-only-on-a-change-and-audited-against-its-store.md)). Shortened to *mirror* where the + text is about the controller's records; the builder's *mirrored* `upstream` image (Change and delivery) is + a different thing, a copy of an outside image in the artifact store. + +## Placement — what runs on which node + +**Purpose.** To decide, send and apply what each node runs, and to say why. +**Recorded by** the controller's `inventory` database. **Upstream of** Provisioning, Connectivity, Data +and Health and repair. **Decided by** ADR 0100, 0126, 0176, 0181, 0207, 0221, 0252, 0261. +**Uses:** node, machine, module, seat, setting (Module), manifest (Module). + +- **assignment** — a module put on a node, with the settings that node gives it. +- **pending assignment** — an assignment of a module whose build is still running, kept, and made by the + controller when that build registers the module, or ended with why when it does not + ([ADR 0261](../02-DECISIONS/0261-an-assignment-made-while-its-modules-build-runs-is-kept-pending-and-the-controller-makes-it.md)). +- **scope** — where a seat or a claim holds: `node`, `site` or `mesh`. `node` is also the scope's + value in a manifest. +- **capacity** — how many holders a seat takes. A capacity-1 seat is exclusive. A higher-capacity seat + is a **bench**: several holders coexist. A **replicated** bench has one holder per node, each on record + and each answering the same, like `mesh-dns-resolver` + ([ADR 0223](../02-DECISIONS/0223-the-mesh-has-two-resolvers-and-a-machine-lists-only-them.md)). A + **kinded** bench has holders that are different modules, each claiming one **kind**, and a verb's + subject carries the kind; `channel` and `intake` are the only ones (ADR 0234). +- **installed / holding** — a module may be assigned (its package installed, its files placed) without + holding the seat its family declares; *holding* is being the one — the login shell, the display session + — on that node ([ADR 0176](../02-DECISIONS/0176-the-login-shell-is-a-node-seat-and-execute-is-its-contract.md)). + The module that holds a seat is its **holder**. +- **depends on a seat** — a module needing a seat held on its node by some module, without holding it. + Derived from the resources it declares, never stated: a `service` depends on `node-service-manager`, a + `package` on `node-package-manager`, a `container` on `node-container-runtime` + ([ADR 0207](../02-DECISIONS/0207-a-module-depends-on-the-node-seats-that-apply-its-resources.md)). + Not a claim: a module claims a seat it holds and declares resources. +- **declaration** — what the controller sends one node: every resource of every module assigned there, + composed. The noun is this domain's; what a manifest says is that it *declares* (Module), and a manifest + is never called a declaration. The controller's verb `plan` previews a node's declaration. +- **send** — the controller giving a node its declaration. The controller's verb `push` asks for a + send (of one node, or of every node); prose says send. A git push and a phone's push notification are + other things (see [Homonyms](#homonyms)). +- **apply** — the node-engine making its node match its declaration; **reconcile** is doing so again + until nothing differs. +- **operator account** — the login name of the person who works on a node, stated on the node record; + empty for a node nobody logs into. Everything the mesh places under a person's home is resolved + against this account's home and owned by it + ([ADR 0181](../02-DECISIONS/0181-the-operator-account-is-a-node-fact-and-a-home-is-a-placement-root.md)). + Not a name a manifest carries. +- **agent account** — the login every coding agent on a node runs as, when the node names one of its own; + stated on the node record at the controller's terminal, never by a verb or a setting. Empty means agents + run as the operator account. It cannot become root without a person, and the node-engine judges that on + every look ([ADR 0266](../02-DECISIONS/0266-on-the-control-node-agents-run-under-an-account-of-their-own-that-cannot-become-root-without-a-person.md)). +- **account group** — a group of the machine's group database that a module puts an account in, by + declaring the account with that group and nothing else of it. Several modules may each add one to the + same account; the mesh takes back only an account group it added + ([ADR 0252](../02-DECISIONS/0252-a-module-puts-an-account-in-a-group-and-the-mesh-says-when-a-new-login-is-needed.md)). + Never *membership*, which is the bus's word. + +## Provisioning — one module serving another + +**Purpose.** To resolve which module serves a provision for which consumer, and to wire the two. +**Recorded by** the controller. **Upstream of** Data; downstream of Module, Placement and Identity. +**Decided by** ADR 0027, 0084, 0138, 0225, 0230, 0263. +**Uses:** module, seat, credential (Identity and access). + +- **provision** — a service one module `provides` and others `require`; the mesh resolves a provider + and wires the two with an endpoint and a credential. A provision is a service you offer, a seat is a + role you occupy, and the two meet where a seat delivers a provision: occupying the seat is what makes + a module *the* provider of it. +- **provider** and **consumer** — the module that provides a provision, and the module that requires + it. Which of several providers serves a consumer is resolved + ([ADR 0084](../02-DECISIONS/0084-which-provider-serves-a-consumer.md)). +- **pin** — a person's choice of provider for a consumer, which resolution then respects. +- **endpoint** — where a consumer reaches its provider; an assignment binds it and says how far it + reaches ([ADR 0138](../02-DECISIONS/0138-an-assignment-binds-an-endpoint-and-says-how-far-it-reaches.md)). +- **retire** — a provider stops serving a consumer the mesh no longer asks for; what it kept is deleted + only by a person ([ADR 0230](../02-DECISIONS/0230-a-consumer-the-mesh-stops-asking-for-is-retired-and-deleted-only-by-a-person.md)). +- **share** — a folder one node offers to the mesh's other nodes over the private network: the provision + `nfs-share`, provided by the holder of the node seat `node-nfs-server`, one share per folder + ([ADR 0263](../02-DECISIONS/0263-a-share-is-a-provision-a-node-mounts-it-on-demand-and-only-nodes-that-ask-get-it.md)). +- **mount** — a share, or an occasional source, made visible at a path on one node by the holder of the + node seat `node-mounts`, as a mount unit and an automount unit, mounted on access (ADR 0263). +- **occasional source** — a share on a device that is not a node and comes and goes, such as a USB disk; + its absence is a state, *not present*, never a fault (ADR 0263). + +## Identity and access — who may do what + +**Purpose.** To issue, hold, rotate and check the credentials and grants by which modules, nodes, agents +and the operator act. **Recorded by** the controller's `identity` and `licences` databases and the vault. +**Upstream of** Provisioning, Change and delivery, and Operator and conversation. +**Decided by** ADR 0085, 0113, 0183, 0225, 0234. +**Uses:** module, node, operator, consumer (Provisioning). + +- **credential** — anything that proves an identity: a password, a key, a token. A **pair credential** + is the two ends of one credential, the consumer's and the provider's. +- **secret** — a credential or other value the vault keeps sealed and the node-engine unseals into a + file at apply ([ADR 0085](../02-DECISIONS/0085-a-secret-is-a-provision.md)). +- **secret family** — a module's own secrets declared as one name ending in `-*`; each member is the prefix + and a name (`smb-password-`, one per source the module's settings name), given by its full name + and never made by the mesh + ([ADR 0283](../02-DECISIONS/0283-a-part-that-waits-for-the-operators-secret-or-setting-is-said-as-waiting-passes-the-first-node-gate-and-names-the-act.md)). +- **vault** — the module that owns every secret (`mesh-vault`, + [24 — The secrets vault](../03-DESIGN/01-to-be/24-the-secrets-vault.md)). +- **grant** — what an identity may call or reach, bounded by the provisions it requires + ([ADR 0225](../02-DECISIONS/0225-a-consumers-identity-is-bounded-by-the-provision-it-requires.md)). +- **bus account** and **membership** — a module's or a node's account on the bus, and the subjects it + is issued. The bus server calls its accounts *users*; the mesh says bus account. +- **rotate** — replacing a credential without a consumer holding one the provider does not know. +- **licence** — a model-access account the licence manager holds and **binds** to a consumer, the + coding agent on a node ([ADR 0183](../02-DECISIONS/0183-the-anthropic-licence-manager-is-a-module-and-hands-tokens-to-the-agent-over-the-bus.md)). + Taking a consumer off a licence is **unbinding** it; the licence manager's verb for it is still + `release`, an identifier to rename. +- **proof** — what an authorising answer carries: a verified sender, a one-time code, a security key's + touch (ADR 0234). How much proof a kind of ask needs is its **assurance level**. +- **controller's terminal** — a command line the controller runs as typed by its operator, not asked through a + verb, so a change that is the terminal's alone is taken (issue 339, issue 340) — or, since + [ADR 0277](../02-DECISIONS/0277-a-trusted-setting-is-proposed-through-a-verb-and-set-on-the-operators-warrant-and-a-modules-own-secret-is-asked-for-and-typed-at-the-desk.md), + proposed through a verb and set on the operator's warrant. In the controller's code it is a + line run without `MESH_VERB`. The operator reaches it with `mesh-cli` from their own account on a node where no + agent can run as that account: the control-node, and a node whose agents run under an account of their own + ([ADR 0272](../02-DECISIONS/0272-the-operator-reaches-the-controller-with-mesh-cli-on-every-node-and-a-node-is-the-terminal-only-where-no-agent-runs-as-its-operator.md)). + +## Change and delivery — a commit on its way to the nodes + +**Purpose.** To take one commit from its pull request to every node that should run it, and to put it +back when it fails. **Recorded by** the `mesh-delivery` module (deliveries) and the controller (the +planner, the walk). **Downstream of** Module, Core, Health and repair and Data. +**Decided by** ADR 0162, 0218, 0236, 0237, 0238, 0239, 0250, 0267, 0270, 0276. +**Uses:** module, node, declaration and send (Placement), health (Health and repair), person. + +- **merge check** — the two statuses a pull request carries before it may merge: the **merge gate** + (`mesh/merge-gate`, the build seat's composed check of the modules the change touches) and the + **repository check** (`mesh/repo-check`, the repository's own `merge-check.sh`) + ([ADR 0238](../02-DECISIONS/0238-a-commit-is-the-build-at-hand-one-commit-one-change-plan-checked-off-the-trunk-and-published-only-on-it.md)). +- **build seat** — the seat whose holder builds modules, `node-build-agent`; its holder on a node is the + **builder**. Any node may hold the seat, so there is no build node by nature + ([ADR 0237](../02-DECISIONS/0237-a-change-is-judged-against-the-mesh-that-runs-before-it-merges-on-the-build-seat.md)). + *Not:* ~~build machine~~ +- **build queue** — the controller's queue of builds to run; one entry in it is a **build request**. + The queue's verbs still say *ask* for an entry; the conversation's ask is another thing + (see [Homonyms](#homonyms)). +- **package** — what code resolves when it is **compiled**: an npm/cargo/pypi dependency, by **version**. + Served by the **package-registry** (gitea). Only a builder talks to it. +- **artifact** — anything a build produces and the mesh delivers to a node by **digest**: an `image`, a + mirrored `upstream` image, a `bundle` of the module's own code, an `archive`. Served by the + **artifact store**, an OCI registry that holds every kind as content-addressed blobs + ([ADR 0156](../02-DECISIONS/0156-an-artifact-is-what-a-build-produces-and-the-store-is-named-for-its-scope.md)). + An image is one kind of artifact, and a module is not an image. A package and an artifact are two + protocols, not one store being weak ([ADR 0075](../02-DECISIONS/0075-two-stores-and-which-provides-what.md)). +- **build source** — the files one artifact is built from, in one or more repositories: for a Go program + its import closure (the directories of its packages, its Go module files) and its recipe; for any other + artifact the paths its manifest names, by default its module's own directory. Each artifact of a build + has its own, and a change rebuilds the artifacts whose build source it touches + ([ADR 0267](../02-DECISIONS/0267-an-artifact-is-rebuilt-only-when-its-build-source-changes-and-a-module-moves-only-along-build-dependencies-on-artifacts.md)). + Older records (ADR 0015, ADR 0111) and designs say *build source* for the repository a module + is built from; this entry narrows it to the files within, and that use reads as *the repository holding + the build source*. Sharing a repository is not a dependency, and no build source is a whole repository + holding another module's files. +- **catalogue** — what the mesh holds of every module, at which commit; and the repository the + modules live in. `mesh-catalog` and `catalog_modules` are identifiers and keep their spelling. + *Not:* ~~catalog~~ (hq) +- **delivery** — one commit in one repository on its way to the nodes, from its pull request's head + being announced to one of its final states: one pull request, one status, one note + ([ADR 0239](../02-DECISIONS/0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md)). + From its merge on it is delivered by the walk of the batch that answers it, and ends with that walk + ([ADR 0276](../02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md)). + Its states are one table (`proposed`, `checked`, `ready` or `rejected`, `published`, `delivering`, + `held`, and the final six: `delivered`, `failed`, `superseded`, `stopped`, `retired` and `covered`; + [ADR 0250](../02-DECISIONS/0250-a-merge-heard-only-from-the-buss-history-is-retired-and-owed-work-the-forge-cannot-do-ends.md), + [ADR 0270](../02-DECISIONS/0270-a-held-delivery-that-moves-nothing-or-that-a-later-delivered-merge-contains-ends-by-itself-and-a-hold-whose-reason-is-gone-lifts.md)). Not *change* (a diff). *Pipeline* is the predecessor's build-and-deploy + mechanism, which the as-is designs describe; it is never a word for a delivery. + *Not:* ~~deployment~~ (hq) +- **covered** — the end of a delivery that a later merge containing it delivered: every module it moves was + sent to every machine running it by the walk of a later merge into the same trunk, delivered on its own + passing check, whose merge commit the forge says contains this one. Not *superseded*, which is a delivery + whose walk a newer delivery took over before it ended; nor *delivered*, which its own walk or an empty plan + ends in ([ADR 0270](../02-DECISIONS/0270-a-held-delivery-that-moves-nothing-or-that-a-later-delivered-merge-contains-ends-by-itself-and-a-hold-whose-reason-is-gone-lifts.md)). +- **delivery group** — two or more deliveries sharing a pull request head branch name across the mesh's + repositories, delivered as one unit in an order declared (`after:`) or inferred by the planner. One + level: a group holds deliveries, never groups. Its state is derived from its members, never set. +- **delivery plan** — what a delivery does to the mesh: its **build plan** (the modules it moves and + their dependents, in tiers), its **deploy plan** (per node, what it receives and what waits for a + person) and its verdict (the composed nodes, the replays). Computed by the controller's planner from a + diffset; the controller's verb `delivery-plan` shows it. *Deploy* is used in this one place. + *Not:* ~~change plan~~, ~~release plan~~ +- **merge window** — the rolling wait in which the controller collects merges before it plans them: each + merge restarts it, and it closes when none arrived for its length (90 seconds by default) or at the latest + 10 minutes after its first merge ([ADR 0276](../02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md)). +- **batch** — the merges one merge window collected, planned once as one walk. For a repository merged more + than once in it, the walk takes the latest commit, and the earlier merges are answered by it. Not *group*, + which is a delivery group. +- **mesh-delivery** — the module that owns deliveries and delivery groups, holding the mesh-scoped seat + of the same name. It records and decides; the controller sends, judges and rolls back when it is asked. +- **walk** — the controller's sending of one batch's builds across nodes, at most one trunk commit per + repository, tier by tier, one node first and judged at the first-node gate, then the rest (ADR 0236, + [ADR 0276](../02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md)). One walk is open at a time; it names every merge it answers. A primitive the delivering stage + asks for, not an object anyone manages. A **tier** is one step of a walk: a module, then the modules + built against it. The controller's verb `plans` lists the walks. Walking is not a noun of its own: + a module *rolls out* by its `roll` policy. + *Not:* ~~rollout~~ (hq) +- **first-node gate** — the judgement on a delivery's first node: healthy three times, no witness put it + back, no condition raised since the send (ADR 0236 §2). Not *the gate* bare (see [Homonyms](#homonyms)). +- **core module** and **leaf module** — a core module is one on the controller's own path (the controller, + the node-engine, the tool runner, the bus, mesh-delivery) or the mesh's resolver, whose judgement protects + the mesh's ability to reach a node at all; a leaf module is every other module. Decided by + [ADR 0282](../02-DECISIONS/0282-a-fix-to-a-leaf-module-runs-healthy-on-every-node-within-five-minutes-of-its-merge-and-a-core-module-within-ten.md). + Not a *core component* (ADR 0236's controller, node-engine, tool runner and bus, each with a health probe): + the core modules add mesh-delivery and the resolver. +- **delivery time** — from a delivery's merge to every node of its deploy plan that is heard from running its + modules' builds and reporting them healthy. Its **delivery budget** is what it is held to: five minutes for + a leaf module, ten for a core module (ADR 0282). Not the walk's time, which ends at the send. +- **release** — a person's word that a held delivery goes on; the verb `mesh-delivery.release`. Used in + this sense only. +- **rollback** — putting a node back on the build it ran before, by something other than the build being + judged (a witness, ADR 0236). +- **the lab**, **scenario**, **replay** — a real mesh raised to run a change against before it reaches + nodes; what a lab run declares; and a recorded failure run again to prove a fix (ADR 0016, ADR 0237). + +## Health and repair — what is wrong, and putting it right + +**Purpose.** To notice what is wrong with the mesh, say it once, repair what may be repaired unattended, +and record what was done by hand. **Recorded by** the controller's condition store. +**Upstream of** Change and delivery (the first-node gate) and Operator and conversation (a condition +becomes a message). **Decided by** ADR 0227, 0231, 0240, 0252, 0283. +**Uses:** node, module, node-engine (Core). + +- **health** — a module's or a core component's statement of how it is alive and ready, which the + node-engine judges ([ADR 0240](../02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md)). +- **relogin needed** — an account's health when the group database lists it in an account group and its + running session, started before, does not have that group yet. Said by the node-engine as the module's + resource of kind `account`; it clears at the first look after a new login (ADR 0252). +- **waiting** — a resource's health when its module's tool check says it waits for the operator: a named own + secret or setting of the module, not given yet, without which a part cannot work. Not a fault: the + controller checks it and says it as the condition `needs-operator`, naming the act, and the first-node gate + reads it as *waits for a person* + ([ADR 0283](../02-DECISIONS/0283-a-part-that-waits-for-the-operators-secret-or-setting-is-said-as-waiting-passes-the-first-node-gate-and-names-the-act.md)). +- **probe** — one look at one thing's health, run by whoever owns the verdict; what a probe returns is a + **finding**, before it becomes a condition. +- **signal** and **watchdog** — something that must keep happening (a heartbeat, a report after a send), + and the watcher that raises a condition when it stops (to-be 45 §3). +- **condition** — one open fact about something the mesh owns that is wrong, with a key and a severity; + raised and cleared only by observation + ([ADR 0231](../02-DECISIONS/0231-a-healer-acts-on-what-observation-raised-and-only-observation-says-it-worked.md)). + What a wrapped dashboard raises is its own; the mesh's notion is a condition. + *Not:* ~~alert~~ (hq) +- **self-check** — the controller's own examination of the mesh, run on demand and on a schedule + (to-be 45 §4). Its verb is `doctor`, an identifier; prose says self-check. + *Not:* ~~doctor~~ (hq) +- **healer** — a registered response to one condition kind: its **repair** (the ordinary path again), + its **budget**, its back-off and its brake. A healer may not withdraw, delete or recreate data. +- **drill** — something broken on purpose to see the mesh raise and clear its condition; a drill is + never counted as a repair. +- **rehearsal** — a question the operator starts at the controller's terminal (`rehearse`) and answers on a + channel, to see an answer travel the whole way: its approval performs nothing and is recorded as the + operator's decision ([ADR 0259](../02-DECISIONS/0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md)). + Not a drill: nothing is broken. +- **hand-act** — a repair a person made by hand, recorded so the mesh knows it happened. +- **witness** — what rolls a core component back when its new build does not become healthy: never the + component itself (to-be 45 §8). + +## Data — what the mesh keeps, and getting it back + +**Purpose.** To know every item of data a module holds, how precious it is, and to keep it recoverable. +**Recorded by** the manifests' `data` declarations and every node's `node-backup` seat. +**Upstream of** Change and delivery and Health and repair. **Decided by** ADR 0232, 0233, 0235. +**Uses:** module, node, provider and consumer (Provisioning), person. + +- **data class** — how precious an item of data is, ranked by the operator: `irreplaceable`, + `valuable`, `rebuildable`, `cache`; and `none` for a provision that keeps nothing of anybody's + ([ADR 0233](../02-DECISIONS/0233-a-module-declares-the-data-it-holds-and-the-mesh-protects-and-watches-it-from-that.md)). +- **backup** — a copy kept elsewhere by the node's `node-backup` holder; **restore point** — one backup + at one moment; **restore** — bringing it back beside the live data, never over it. +- **stream snapshot** — the bus's own backup of each stream, taken by the module holding `mesh-broker` + ([ADR 0235](../02-DECISIONS/0235-the-bus-is-backed-up-by-its-own-snapshot-of-each-stream.md)). +- **sticky binding** — a consumer's tie to the data a provider keeps for it, which moves only by a + person ([ADR 0232](../02-DECISIONS/0232-a-binding-to-a-consumers-data-moves-only-by-a-person.md)). + +## Connectivity — how nodes and modules reach one another + +**Purpose.** To make every node and module reachable by name where it should be, and unreachable where +it should not. **Recorded by** the controller. **Upstream of** Provisioning and Health and repair. +**Decided by** ADR 0007, 0117, 0138, 0223, 0226, 0247. +**Uses:** node, machine, assignment and endpoint. + +- **private network** — the mesh's own encrypted network between its nodes, on which every node has an + address and a mesh name ([ADR 0226](../02-DECISIONS/0226-the-private-network-is-assigned-by-its-own-name-and-the-proxy-names-its-public-issuer.md)). + The network the machine sits on without it is the **underlay**. + *Not:* ~~overlay~~ (hq) +- **anchor** and **hub** — the roles a node plays for the private network: the anchor is reachable from + outside and every node reaches it; a hub relays for nodes that cannot reach each other directly. +- **resolver** — a seat holder that answers the mesh's names; a node lists only the mesh's resolvers + (ADR 0223), or, where it holds one, its own resolver, which asks them. **uplink** — a node's + connection to the outside network, a seat ([ADR 0117](../02-DECISIONS/0117-a-machines-uplink-is-a-seat.md)). **hostname** — a node's own name, + a seat. +- **split DNS** — resolving names by domain on one machine: a VPN's domains through the VPN's servers + over its link, every other name through the mesh's resolvers. The provision `split-dns`, provided by + the holder of the node seat `node-resolver`, the machine's **own resolver**, which exists only where + something requires it ([ADR 0247](../02-DECISIONS/0247-a-machine-with-a-vpn-client-routes-names-by-domain-through-a-resolver-of-its-own.md)). +- **proxy** and **public name** — the module that answers a public name and forwards it to an + endpoint on the private network. +- **packet filter** — what the mesh enforces on a node about which packets pass, the + `node-packet-filter` seat and its verb `rules`. A **found firewall** is a program the mesh found on a + machine and keeps retired or in force; *firewall* says that, and a wrapped program's firewall is its own. +- **intrusion prevention** and **ban** — refusing a source that misbehaved, and the refusal itself. +- **reach** — how far an assignment's endpoint may be reached from: the node, the private network, or + the outside (ADR 0138). + +## Operator and conversation — the person the mesh works for + +**Purpose.** To let the mesh and its operator talk: tell, ask, answer, and act only on an answer it can +trust. **Recorded by** the router (asks, warrants and the operator's identities). +**Downstream of** Health and repair, Change and delivery, and Identity and access. An authorising +answer acts in whichever domain asked, through that domain's own verb; the conversation owns the +asking, never the act. **Decided by** ADR 0152, 0175, 0234, 0259, 0272. +**Uses:** operator, person, proof (Identity and access), release (Change and delivery). + +- **mesh MCP server** — the endpoint on a node's loopback through which every agent and person on that + node reaches the mesh: the MCP server named `mesh`, with its five tools `mesh_overview`, + `mesh_machine`, `mesh_search`, `mesh_describe` and `mesh_call`. It is the tool runner's loopback mode, + not a module of its own. "Console" suggested a terminal or a shell, and the module `mesh-console` it + once named no longer exists; "the tool bridge" and "the brain" named the predecessor's program. + *Not:* ~~console~~ (hq), ~~mesh-console~~, ~~tool bridge~~ +- **mesh-cli** — the module on every node that places the operator's command, and the command itself: + `/usr/local/bin/mesh-cli ` asks the controller to run one of its command lines. It asks the + node-engine on its own machine, which says to the controller which account is asking; the controller runs the + line as the **controller's terminal** or as an ordinary call + ([ADR 0272](../02-DECISIONS/0272-the-operator-reaches-the-controller-with-mesh-cli-on-every-node-and-a-node-is-the-terminal-only-where-no-agent-runs-as-its-operator.md)). +- **nox** — `mesh-cli`'s alias, in interactive zsh only. A script, `sudo` and a document meant to work everywhere + say `mesh-cli`. The operator also calls the mesh itself *nox mesh*; on this page and in the records *nox* is the + alias alone. It is the one command the operator types: every line the mesh addresses to the operator — a + condition's words, a verb's answer, a README, a design — names a `nox` line, never a daemon's (the controller's + or the node-engine's binary followed by a command), which `words.py` and the catalogue's check refuse + ([ADR 0272](../02-DECISIONS/0272-the-operator-reaches-the-controller-with-mesh-cli-on-every-node-and-a-node-is-the-terminal-only-where-no-agent-runs-as-its-operator.md), + its insight of 2026-10-09). +- **channel / intake** — the two kinded benches the mesh talks to its operator through: `channel` + sends, `intake` turns what arrives into one envelope. A holder of either declares **capabilities** from + the fixed vocabulary `channel-capabilities/1`. Not *notifier* (that is the desktop's node seat, one + holder of kind `desktop`) and not *bot* (that is one service's account). +- **router** — the module that holds the `operator-channel` seat, orders the channels and checks every + sender ([ADR 0234](../02-DECISIONS/0234-the-mesh-holds-a-conversation-with-its-operator.md)). +- **headline / verdict / explanation / resolved line** — what a condition says to the operator in plain + words: a few words naming the thing and what is wrong; "Nothing for you to do." or "Needs you:" and the + one thing the operator can do themselves (its **needs**); one or two sentences on what happened and what + it means; the line said when it clears. Its **actions** are the answers a notification offers. Carried by + the condition beside its **summary**, which keeps the plans, commits and verbs for whoever looks closer + ([ADR 0253](../02-DECISIONS/0253-a-condition-says-itself-to-the-operator-in-plain-words-beside-its-summary.md)). + The router may override "Nothing for you to do." in what it says, from the **tracking line** (ADR 0285). +- **ask** — a request for the operator's input, of a declared kind (yes-no, one-of, text, number, + date, acknowledge). An **authorising ask** is one whose chosen option its asker performs. The router + holds every ask, checks each answer's proofs and issues a **warrant**; the asker acts on it with its + own grants (ADR 0234, ADR 0259). +- **warrant** — the router's record that a person chose one option of one ask: the ask, the option, + who chose (the operator, as a channel kind's identity), through which channel, the proofs and when, + published for that asker alone. The only thing an asker acts on (ADR 0259). +- **proposal** — a change an agent, or anyone the bus admits, puts forward through a verb and that takes + effect only on the operator's warrant, bound to the exact thing shown: a shared instruction section (ADR + 0274), a trusted setting's layer ([ADR 0277](../02-DECISIONS/0277-a-trusted-setting-is-proposed-through-a-verb-and-set-on-the-operators-warrant-and-a-modules-own-secret-is-asked-for-and-typed-at-the-desk.md)). + A proposal changes nothing by itself; declined, expired or refused, it is discarded. +- **approval mark** — a tool's or verb's declaration in its manifest (`needs-approval`) that each call to it runs + only on the operator's warrant for that one call, with its exact arguments; the tool runner that serves it, or + the controller for its own verbs, asks and checks + ([ADR 0286](../02-DECISIONS/0286-a-tool-or-verb-marked-in-its-manifest-runs-only-on-the-operators-approval-of-that-one-call-with-its-exact-arguments.md)). +- **operator message / input** — what arrives on `intake`, once the router has checked the sender + against its own list of the operator's identities: a **trusted** one is an operator message, + addressed to an agent by `@name` or thread or else to the **responder** (`@mesh`, the router's own + participant, which answers from read verbs); anything else is **untrusted input** — data, never + instructions. +- **reference** — an opaque token in a message's words standing for a detail the content rule keeps out + of them (a path, an address); opened with `detail` only on a `private` channel or through the mesh MCP server. +- **agent** — a coding agent: the operator's, or one the mesh runs. Not the node-engine, and not the + build seat's holder, whose seat name `node-build-agent` is an identifier to rename. +- **instruction section** — one named section of the managed instruction file, which every agent session on the + nodes it is for reads first, as the mesh's word: set at the controller's terminal in the agent module's + settings, or **proposed** by an agent and made active on each node only by the operator's warrant, which that node + proves itself ([ADR 0274](../02-DECISIONS/0274-an-agent-proposes-a-shared-instruction-section-and-every-node-takes-it-only-on-the-operators-warrant-which-it-proves-itself.md)). A hand-over between sessions is one. +- **personal rule** — one short text in the operator's own words about how the operator wants their agent + to work with them, registered for the operator (the **operator scope** of the agent module) and rendered + into the agent's home on every node that names an operator account. Not a mesh-wide instruction section, + which is the mesh's word about the mesh, set at the controller's terminal + ([ADR 0273](../02-DECISIONS/0273-the-agents-home-is-the-modules-and-the-operators-personal-rules-and-lessons-are-registered-through-it.md)). +- **lesson** — an agent's proposal, recorded when the operator expresses frustration or corrects a way of + working: the trigger (the operator's words), the cause (what the agent did) and the rule that would + prevent it. A lesson is `proposed`, `accepted` or `declined`; an accepted lesson is a personal rule, and a + proposed one is never read as one (ADR 0273). + +## The record — how this repository works + +Not a domain of the mesh but of the way it is built, listed because its words meet the mesh's. +**Recorded in** this repository, the issue tracker and the knowledge base. **Decided by** ADR 0019, 0080, 0244, 0275, +0284, 0290, 0291. + +- **research effort**, **graduation**, **hand-off**, **playbook** — an investigation in `01-RESEARCH/`; + its closing into a decision and a design; a design given to a code repository; a documented workflow + in `00-META/process/`. +- **decision record** — one numbered file in `02-DECISIONS/`, never rewritten: **superseded** by a later + record, or corrected by a marked **progressive insight**. Always qualified in this repository: bare + *record* has other meanings (see [Homonyms](#homonyms)). +- **clause** — one numbered statement a decision record makes, with its own status (`proposed`, `in force`, + `changed`, `superseded`): a later record may change one clause and leave the rest + ([ADR 0290](../02-DECISIONS/0290-a-decision-record-lives-whole-in-the-knowledge-base-made-of-clauses.md)). Not a *rule*, which is a line of + `00-META/how-we-build.md`. +- **knowledge base** — the role that holds the decision records and research efforts whole (number, status, topic, + typed links, clauses and reasoning, with every version), takes them as proposals, has them reviewed and accepted, + and answers what holds: the seat `knowledge-base`, held by the module `mesh-knowledge` + ([55 — The knowledge base](../03-DESIGN/01-to-be/55-the-knowledge-base.md)). Not **the record**, the literal reader + of this repository. +- **design** — a document in `03-DESIGN/`: **as-is** (what runs) or **to-be** (what is being built). +- **issue** — a question about the mesh that someone must answer, numbered and tracked by the issue tracker, which + holds it whole: its report, diagnosis and resolution included ([ADR 0291](../02-DECISIONS/0291-an-issue-lives-whole-in-the-issue-tracker.md)); + the folders in `04-ISSUES/` are imported there and removed. + An **incident** is a past event that taught a rule. +- **issue tracker** — the role that holds the mesh's issues and hands out their numbers: the seat `issue-tracker`, + held by the module `mesh-issues` ([53 — The issue tracker](../03-DESIGN/01-to-be/53-the-issue-tracker.md)). + Not hits's *item*; bare *ticket* is a homonym (see [Homonyms](#homonyms)). + *Not:* ~~ticketing system~~ (hq), ~~ticket system~~ (hq) +- **duplicate check** — the issue tracker's judgement, when an issue is opened, of whether it asks a question an + older issue not resolved already asks; a certain duplicate is closed `wontfix` with its report kept on the older + issue ([ADR 0278](../02-DECISIONS/0278-the-issue-tracker-checks-every-new-issue-for-a-duplicate-through-a-judgement-the-agent-makes-without-tools.md)). + Its pass over the backlog is the verb `groom`. +- **triage** — the issue tracker's judgement of an opened issue, made by the agent with no tools: whether it is a + duplicate (the **duplicate check**), its **severity** and what it **needs**, a suggested owner, and the issues it + depends on or relates to; it fills only what nobody gave ([ADR 0279](../02-DECISIONS/0279-the-issue-tracker-triages-every-new-issue-and-an-issue-is-ready-when-what-it-depends-on-is-delivered.md)). +- **ready** — of an issue: every issue it depends on is wontfix, or resolved with its fix delivered. +- **worker** — of an issue: the agent or person, with its node (who@node), that moved it to `diagnosing` or `fixing` + and works on it; another is refused while the worker is current, unless it gives a reason to **take it over**. A + worker with nothing done on the issue for a day is **stale**. **Fixing** is the status an issue is at while its fix + is worked on; an issue is resolved only from it ([ADR 0284](../02-DECISIONS/0284-an-agent-moves-an-issue-to-fixing-under-its-own-name-and-an-issue-is-resolved-only-from-fixing.md)). + Not a *claim* or a *holder*, which are a module's on a seat. +- **tracks** — of an issue and a condition: the issue links the condition's key with a link of kind `condition`. The + **tracking line** is the line the router says in every message about a condition: the issues that track it and + where each stands, or that none does ([ADR 0285](../02-DECISIONS/0285-an-issue-tracks-a-condition-by-its-key-and-every-message-about-the-condition-says-the-issue-and-where-it-stands.md)). +- **hq check** — one of `00-META/checks/`, run by `merge-check.sh` as this repository's check. + +## Homonyms + +A word below means different things in different domains. In a governing document it is never bare; +it is always the qualified form. **Checked by review, not by `words.py`:** a word list cannot tell one +sense from another, so the reviewer looks for the bare word in the diff. Where a homonym is settled by +renaming one sense, the old sense moves to a *Not:* line and becomes mechanical. + +| Word | Sense | Say | Domain | +|---|---|---|---| +| plan | what the controller would send one node | that node's **declaration** (verb `plan`) | Placement | +| | what a delivery would do to the mesh | **delivery plan** | Change and delivery | +| | the sending of one batch of commits across nodes | **walk** (verb `plans`) | Change and delivery | +| | a step a person starts, like the bus's | **planned step** | Core | +| membership | the subjects a bus account is issued | **membership** | Provisioning | +| | an account in a group of the machine | **account group** | Placement | +| push | the controller giving nodes their declarations | **send** (verb `push`) | Placement | +| | a git push | **git push** | The record | +| | a phone notification | **push notification** | Operator and conversation | +| release | a person letting a held delivery go on | **release** | Change and delivery | +| | taking a consumer off a licence | **unbind** (verb `release`, to rename) | Identity and access | +| gate | the judgement on a delivery's first node | **first-node gate** | Change and delivery | +| | the pull request status | **merge gate** | Change and delivery | +| | a failed step stopping its module's later steps (ADR 0136) | *a failed step holds its module* | Placement | +| tier | a level of the mesh | **layer** | Core | +| | a step of a walk | **tier** | Change and delivery | +| | how much proof an ask needs | **assurance level** | Identity and access | +| ask | a request for the operator's input | **ask** | Operator and conversation | +| | an entry in the build queue | **build request** | Change and delivery | +| store | the one database server | **store** | Core | +| | the OCI registry | **artifact store** | Change and delivery | +| | a node's own copy of its last declaration | **last declaration** | Placement | +| record | a numbered decision | **decision record** | The record | +| | the literal reader of this repository, searched first for a symptom | **the record** (the `records` module) | Operator and conversation | +| | the upgrade policy that sends nowhere | `record` | Module | +| knowledge base | the module holding the decision records and research efforts whole | **knowledge base** | The record | +| | the predecessor's operational memory, in older playbooks (issue 430) | none: it no longer exists | — | +| check | a pull request's two statuses | **merge check**, **merge gate**, **repository check** | Change and delivery | +| | a delivery group's verdict | **composed check** | Change and delivery | +| | the controller's own examination | **self-check** | Health and repair | +| | a file in `00-META/checks/` | **hq check** | The record | +| agent | a coding agent | **agent** | Operator and conversation | +| | the build seat's holder | **builder** | Change and delivery | +| the user | an account of a wrapped program, or of the bus server | **its account**, **bus account** | Identity and access | +| | a human | **operator** or **person** | words every domain uses | +| firewall | what the mesh enforces | **packet filter** | Connectivity | +| | what was found on a machine | **found firewall** | Connectivity | +| ticket | an answer's one-time token (ADR 0258) | **answer ticket** | Operator and conversation | +| | a question someone must answer | **issue** | The record | +| deploy | the per-node part of a delivery plan | **deploy plan** | Change and delivery | +| | a wrapped program's own deploy | its own word | — | + +## How this page is kept + +A new word for an existing thing lands here first, in the domain that owns it, in the same change that +introduces it in code. A word moves to another domain only with a decision record. A retired word goes +on a *Not:* line and nowhere else on this page, and `words.py` then fails on it in running prose. A +record under `02-DECISIONS/` keeps whatever word it was written with — those are immutable — so a word +retired here may still appear there, and the *Not:* lines are how to read it. + +**How it is checked** ([ADR 0244](../02-DECISIONS/0244-the-mesh-is-described-in-domains-and-one-word-names-one-thing.md)): +`python3 00-META/checks/words.py`, run by `merge-check.sh` on every pull request, fails on a retired +word or a bare identifier in running prose in `00-META/`, `03-DESIGN/`, `AGENTS.md`, `README.md`, and +research and issues dated from 2026-10-07 — code spans, quotations and link targets excepted — and on a +head word that heads two entries or is also retired. The words retired with no scope or with *(tools)* +are copied into the catalogue as `retired-words`, whose own repository check holds the descriptions of +the mesh's tools to them; a change here that retires such a word changes that copy in the same delivery. +Homonyms are checked by review. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/042-the-mesh-keeps-its-own-issues/00-overview.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/042-the-mesh-keeps-its-own-issues/00-overview.md new file mode 100644 index 00000000..b4272350 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/042-the-mesh-keeps-its-own-issues/00-overview.md @@ -0,0 +1,86 @@ +--- +status: graduated +initiated: 2026-10-10 +touches: + - 02-DECISIONS/0019-how-this-repository-works.md + - 02-DECISIONS/0080-the-development-cycle-is-checked.md + - 00-META/process/03-issues.md + - 00-META/glossary.md + - the runtime's state verbs and the SDK's state interface +became: + - 03-DESIGN/01-to-be/53-the-issue-tracker.md + - 02-DECISIONS/0275-the-mesh-numbers-and-tracks-its-issues-in-a-module-of-its-own-and-hq-keeps-only-the-narrative-of-a-design-or-governance-issue.md +--- + +# 042 — The mesh keeps its own issues + +## What + +Whether the mesh should keep its issues in a module of its own, on the bus, instead of only as +numbered folders in this repository's `04-ISSUES/`, and what the smallest useful first version of +that module is. The operator's ask of 2026-10-10: work on a ticketing system on the bus, consolidate +every current issue into it, start small and extend the module along the way. + +The effort answers six questions, in [01-findings.md](01-findings.md): + +1. The smallest useful first slice: what the module holds, which tools it serves, which events it + emits, and what it explicitly leaves out. +2. Where the truth lives during and after the move: the folders here, the module, or a split + between them, and what each choice does to the public-repository rule, playbook 03 and the hq + checks. +3. How the 357 issue folders are imported and consolidated (duplicates, still-open ones, grouping). +4. How the controller's conditions, the router's asks and deliveries relate to issues. +5. How the operator sees issues: through the mesh's tools first, through a view onto the bus later. +6. The open questions for the operator, and the slices after the first. + +The operator also named an existing project as inspiration: *hits*, a headless issue tracker built +as NATS micro services on JetStream, with an MCP server for agents. Its model is studied in the +findings, along with whether to reuse its code or build on its model. + +## Why + +Numbers collide. Playbook 03 tells an author to take the next free number across `main` and every +open pull request, and [issue 155](../../04-ISSUES/155-two-records-may-share-a-number-and-nothing-says-so/00-report.md) +records the second collision reaching `main` with every check passing. `cycle.py` now refuses two +records sharing a number, which catches a collision after it happens and does not prevent one. On +`main` at the time of writing, 31 commits mention a renumbering. On 2026-10-07 three decision numbers +collided in one evening. On 2026-10-10 an open pull request still carries a branch named for issue +349 and a title naming issue 350, because 349 was taken on `main` first. The operator's answer on +2026-10-07 was that numbering belongs to the mesh's own issue tracker. + +Status is also hard to see. Of 357 issue folders on `main`, 73 are not closed (27 `open`, 45 +`located`, 1 `diagnosing`). Finding them means reading frontmatter across the repository. +Nothing connects a condition the controller raises to the issue that would fix it: on 2026-10-10 a +condition was silenced with the words "hq issue to follow", and nothing records whether one followed. + +## What it touches + +- [ADR 0019](../../02-DECISIONS/0019-how-this-repository-works.md) (statuses live in frontmatter) and + [ADR 0080](../../02-DECISIONS/0080-the-development-cycle-is-checked.md) (the cycle is checked), with + playbook [03](../../00-META/process/03-issues.md) and `00-META/checks/cycle.py`. +- [ADR 0201](../../02-DECISIONS/0201-a-module-keeps-its-current-state-in-key-value-buckets-it-declares-and-reaches-through-the-runtime.md) + (a module keeps its state in key-value buckets it declares), + [ADR 0197](../../02-DECISIONS/0197-every-tool-announces-itself-on-the-bus-in-the-nats-services-protocol.md) + (tools announce themselves on the bus) and + [ADR 0041](../../02-DECISIONS/0041-events-are-a-relationship.md) (events are declared). +- The conditions of [ADR 0231](../../02-DECISIONS/0231-a-healer-acts-on-what-observation-raised-and-only-observation-says-it-worked.md) + and the asks of [ADR 0259](../../02-DECISIONS/0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md). +- The records module, which indexes this repository for agents. + +**Graduated 2026-10-10** into [ADR 0275](../../02-DECISIONS/0275-the-mesh-numbers-and-tracks-its-issues-in-a-module-of-its-own-and-hq-keeps-only-the-narrative-of-a-design-or-governance-issue.md) +and [to-be 53](../../03-DESIGN/01-to-be/53-the-issue-tracker.md). The operator delegated the five open questions; each +was decided as recommended. `touches:` names what the decision changes. + +## Words + +The glossary's word for one of these is **issue** (*The record*: "a report in `04-ISSUES/`"). This +effort keeps that word for the thing the module holds, and proposes **issue tracker** for the module +that holds them, with the module named `issues`. It does not use *ticket*, the operator's word in +the ask, or *item*, the word hits uses. If the glossary entry is widened (an issue is then held by +the issue tracker, and its narrative may live in `04-ISSUES/`), *ticket* would go on its *Not:* line. +That change belongs to the decision this effort graduates into, not to the effort itself. + +## Open questions for the operator + +Listed in [01-findings.md § 7](01-findings.md#7-open-questions-for-the-operator), each with a +recommendation. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/042-the-mesh-keeps-its-own-issues/01-findings.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/042-the-mesh-keeps-its-own-issues/01-findings.md new file mode 100644 index 00000000..e14351a7 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/042-the-mesh-keeps-its-own-issues/01-findings.md @@ -0,0 +1,259 @@ +# 01 — Findings + +Measured on 2026-10-10 against `main` of this repository, the open pull requests on the forge, the +controller's open conditions, the module SDK's source, and a clone of the hits repository at its +release v0.7.0. Each section ends with what this effort recommends; section 7 lists what needs the +operator. + +## 0. What exists today, measured + +| Fact | Measured | +|---|---| +| Issue folders on `main` | 357, numbered up to 362; numbers 283 and 284 were never used, and 338, 341 and 350 sit on open pull requests (363 too) | +| Status in frontmatter | 283 `resolved`, 1 `wontfix`, 45 `located`, 27 `open`, 1 `diagnosing` | +| Frontmatter keys | `status`, `opened`, `located-in` on all 357; `fixed-by` 356; `amended-design` 344; `replay` 22; `replay-none` 44 | +| Size | 1.9 MiB of markdown in all; median folder 4.6 KiB, largest 25 KiB; 244 folders hold only a report, 111 also a diagnosis | +| Links between issues | 168 folders link another issue's folder (265 links); 193 name another issue in prose | +| `located-in` | free text: the controller is written `mesh-controller`, `cmd/mesh-controller`, `mesh-control` and as file paths; 17 issues name nothing | +| Renumberings | 31 commits on `main` mention one; one open pull request still carries the old number in its branch name | +| The forge's own issues | none in this repository or the controller's; [issue 178](../../04-ISSUES/178-a-routed-name-resolves-to-a-provider-merely-told-it/00-report.md) was filed there once and moved here, because "its numbers collide with hq's pull request numbers in conversation" | +| Conditions | 10 open; 5 of kind `healer-wanted` (a hand repair repeated, "an automatic repair is wanted"); one silenced with "hq issue to follow" | + +Two things follow. The collisions come from allocating a number by reading a repository that many +branches write at once; nothing short of one allocator removes them. And the frontmatter is a small, +regular data set (six keys, 1.9 MiB) that fits easily in the bus's key-value store under the limits +[ADR 0201](../../02-DECISIONS/0201-a-module-keeps-its-current-state-in-key-value-buckets-it-declares-and-reaches-through-the-runtime.md) +§6 sets (256 KiB a value, 64 MiB a bucket). + +## 1. The first slice + +**A Go module `issues`, one instance on the control-node, serving one seat held once for the mesh.** +Its state is in buckets it declares (ADR 0201), its tools announce themselves on the bus +([ADR 0197](../../02-DECISIONS/0197-every-tool-announces-itself-on-the-bus-in-the-nats-services-protocol.md)), +and every change is an event it declares under `emits` +([ADR 0041](../../02-DECISIONS/0041-events-are-a-relationship.md)). The module that delivers pull +requests already has this shape: Go, one mesh seat, two state buckets, declared events. + +**What one issue holds in v1**, the frontmatter of today plus what the folders carry in prose: + +- `number` (the key), `title`, `status` (`open`, `diagnosing`, `located`, `resolved`, `wontfix`), + `opened`, `closed`; +- `located-in`, from a registered list of repositories and modules rather than free text; +- `fixed-by` (pull requests or commits), `amended-design`, `replay` or `replay-none`; +- `notes`, appended and never edited: who wrote, when, and the text; +- `links`, typed: to another issue (`duplicates`, `relates-to`), to a pull request, a decision + record, a design, a condition key or a delivery; +- `record`: the path of the issue's folder in this repository, when it has one (section 2). + +**Storage.** One bucket `issues` with one key per issue, keeping a short history per key, and a +`counter` key for the next number. The events (`opened`, `changed`, `noted`, `linked`) carry what +changed and who changed it, so they are the audit trail, and a view can watch the bucket. Section 6 +compares this with a stream as the source of record. + +**Tools** (verbs of the seat, found with `mesh_search`): + +| Tool | Does | +|---|---| +| `open` | takes the next number atomically and writes the issue; refuses a title or report that is empty | +| `get` | one issue, whole | +| `list` | by status, by `located-in`, by a phrase in title or notes; compact rows, newest first | +| `move` | changes status, enforcing today's cycle rules at the write: `located` needs `located-in`; `resolved` needs `fixed-by`; a core issue needs `replay` or `replay-none`; `wontfix` needs a reason | +| `note` | appends to the trail | +| `link` / `unlink` | adds or removes a typed link | +| `import` | reads this repository's issue folders and writes them as issues with their own numbers (section 3); idempotent, reporting what it would change before it does | + +**The caller is the bus credential, not an argument.** The module records who acted from the +identity the runtime gives it with each call, so an agent cannot write as someone else. + +**Atomic numbering needs compare-and-set.** The SDK's state interface (v0.1.9) offers `get`, `put`, +`delete`, `keys` and `watch`, and no write that is refused when the key changed since it was read. +Whether the runtime's `mesh/state.put` takes an expected revision was not checked; the tool runner's +code was not read for this effort. Two ways out: add `create` and an `update` that takes the revision +read to the state interface (small, and every module with a counter gains it), or run exactly one +instance and number inside it. **Recommended: the first.** One instance is also right for v1, but the +counter should not depend on it. + +> **Correction — 2026-10-10.** The finding above is wrong about the SDK. Version v0.1.9, the one read, had no +> compare-and-set, but the SDK's Go state interface already had it from go/v0.1.10: `Create` (writes a key only if it +> does not exist) and `Update` (writes only at the revision the caller read), with the runtime's matching state +> verbs, both from [ADR 0259](../../02-DECISIONS/0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md). +> What the tracker's counter needed and slice 1 added is `Increment`, in go/v0.1.12, which reads a counter and writes +> the next number with `Create` or `Update` at the revision it read, retrying a bounded number of times. The +> recommendation stands; the work it named was smaller than stated. ADR 0275 carries the same correction. + +**Explicitly left out of v1:** decision and research numbers (slice 2), any change to playbook 03 or +the hq checks (slice 2), duplicate finding beyond links (slice 3), opening an issue from a condition +(slice 4), a web view (slice 5), full-text or semantic search, priorities, claims, notifications, and +the forge's own issues. + +## 2. Where the truth lives + +| | (a) Split: the tracker holds the issue, hq holds the narrative | (b) Everything moves | (c) The tracker mirrors hq | +|---|---|---|---| +| Number | tracker | tracker | hq, so collisions stay | +| Status, `located-in`, `fixed-by`, links | tracker | tracker | hq frontmatter, copied | +| Report and diagnosis | hq folder for a design or governance question; notes in the tracker for the rest | tracker notes | hq | +| Public-repository rule | holds: hq keeps only scrubbed narrative, the tracker is private and may name nodes | the public record of design questions is lost | holds | +| Playbook 03 | changes: open in the tracker first, write a folder only for a design or governance question | replaced | unchanged | +| `cycle.py` | its issue rules move into the tracker's `move`, refused at the write instead of at merge | same | unchanged, and a second copy to keep in step | +| Records module | still finds the narrative; the tracker's `list` and `get` serve status | finds no issues | unchanged | + +Option (c) keeps the collisions and adds a second copy that can drift, so it answers neither of the +operator's problems. Option (b) loses the public record that hq exists to be +([ADR 0019](../../02-DECISIONS/0019-how-this-repository-works.md)), and with it the +symptom-to-component memory that playbook 03 says is never deleted. + +**Recommended: (a).** Every issue gets a number from the tracker, including ones that never need a +document here (a node's quirk, an operational follow-up, which playbook 03's table already sends +elsewhere). A design or governance issue also gets a folder `04-ISSUES/NNN-slug/` with the tracker's +number, whose frontmatter shrinks to a pointer (`issue: NNN`) and whose prose stays reviewed in pull +requests. Status lives in one place, the tracker. This reverses ADR 0019's "statuses live only in +frontmatter" for issues and moves part of ADR 0080's check, so it needs a decision record that +supersedes those parts, written when this effort graduates. + +**Numbering continues.** The tracker's counter starts above the highest number on `main` and on open +branches at the moment of the switch (today 363, so the first new issue is 364). Numbers 283 and 284 +stay unused, and a number never moves again. + +**During the move**, hq frontmatter stays authoritative until the import has run and been checked +against it, and one pull request then removes the status keys from every report and changes playbook +03 and `cycle.py` together. There is no period in which both are written. + +## 3. Importing and consolidating the 357 issues + +**Import.** `import` reads the folders through the records module (`records_list`, `records_read`), +over the bus, rather than from a checkout. Each folder becomes an issue with its own number, its +frontmatter as fields, its title from the heading, the commit it was read at, and its path as +`record`. Folder-to-folder links (265) become `relates-to` links. The four open pull requests' +issues (338, 341, 350, 363) are reserved as numbers and imported when they merge. + +**Consolidating** means four concrete passes, each producing a list for the operator or an agent to +confirm, never applying itself: + +1. **Close what is fixed.** A `located` or `open` issue whose `located-in` repository has a merged + pull request naming its number is a candidate for `resolved`. hits's auditor (section 6) checks + exactly this against git and is the model. +2. **Merge duplicates.** Candidates are pairs that link each other and share a `located-in`, and + pairs whose titles share most words. A confirmed duplicate is closed `wontfix` with a + `duplicates` link and the reason, keeping its number and folder. +3. **Normalise `located-in`** onto the registered list (`mesh-controller`, `mesh-catalog`, the + node-engine's repository, a module's name), keeping the file paths as a note. +4. **Group the 73 not closed** by domain (the glossary's domains, ADR 0244) and by `located-in`, so + the operator sees, for example, how many open issues the delivery domain carries. + +## 4. Conditions, asks and deliveries + +A condition is one open fact, raised and cleared only by observation (ADR 0231); an issue is a +question someone must answer. They are different things, and a condition must not be closed by +closing an issue. But a condition can say that a fix is owed: five of today's ten are `healer-wanted`, +and one silence says "hq issue to follow". + +Recommended for a later slice (slice 4): an issue links a condition by its key; the controller shows +the link on the condition; and for `healer-wanted` the controller opens one issue per condition key +when it first raises it, linked both ways, instead of an agent remembering to. A silence whose reason +names an owed issue should carry its number. Asks +([ADR 0259](../../02-DECISIONS/0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md)) +stay with the router: the tracker asks nothing in v1. Deliveries relate through pull requests: when +the forge says a pull request merged, the tracker notes it on every issue the pull request names, and +offers `resolved` (slice 4). Nothing in v1 depends on these. + +## 5. How the operator sees issues + +First through the mesh's tools: `list` returns rows short enough to read in a chat, `get` one issue +whole, and every agent session reaches them through the mesh MCP server. The responder (`@mesh`, +ADR 0234) answers from read verbs, so "what is open in delivery" works on a channel once the seat +exists. Later a view onto the bus: the `issues` bucket watched over the bus (a browser reaches it through a WebSocket listener, which this effort did not check for), +read-only, which the operator named as a future direction for every module's state. Nothing in v1 +blocks it, because the state is already a bucket and every change an event. + +## 6. hits: what it is, and what to take from it + +**What it is.** A headless issue tracker in Go (module `github.com/impire-io/hits`), with no web +interface and no HTTP interface: NATS micro services on JetStream, a command line for people and a +stdio MCP server for agents. One author, 81 commits between 2026-09-02 and 2026-09-14, release +v0.7.0, about 9,700 lines of Go outside tests and 21 test files, tested against an embedded NATS +server. Its model descends from a method like this repository's: a sibling `hits-hq` with numbered +playbooks and decisions. + +**Data model.** An *item* has a type (`bug`, `task`, `improvement`), a status (`open`, `diagnosing`, +`located`, `blocked`, `resolved`, `wontfix`), a priority, `located-in` (from a registered list of +*projects*), `fixed-by` (pull request, commit or action), `amended-design`, append-only notes, typed +links (`duplicates`, `relates-to`), a claim, a block, and a tombstone for a filing mistake. Its +statuses and fields are this repository's frontmatter almost key for key. Projects, *initiatives* +(groups of projects that also scope the numbering) and *releases* are registered lists that are +never reused once retired. + +**How it stores.** The source of record is a stream `hits-ops` with subjects +`hits.ops.item.` (and `project`, `initiative`, `release`). Every write appends an operation, +published with the per-subject expected last sequence, so two writers to one item cannot both win. +A bucket `hits-state` holds the folded snapshot of each item, the registered lists and one counter +per initiative. The counter is advanced by compare-and-set and an item is numbered only after it is +validated, so a refused create spends no number. On start it rebuilds the bucket from the stream. + +**Services and subjects.** One micro service `hits` with 23 endpoints under `hits.api.*` (`create`, +`get`, `edit`, `transition`, `claim`, `release`, `block`, `unblock`, `link`, `unlink`, `note`, +`tombstone`, and register, list and retire for projects, initiatives and releases); three index +services, each a projection of the stream: full text (`hits.search.query`, a local index on disk), +a graph (`hits.graph.neighbors`, `hits.graph.walk`) and an optional semantic search that needs an +outside embedding provider. + +**MCP tools.** 27, one per endpoint: `create_item`, `get_item`, `edit_item`, `transition_item`, +`claim_item`, `release_item`, `block_item`, `unblock_item`, `link_items`, `unlink_items`, +`note_item`, `tombstone_item`, the project, initiative and release tools, and `search_items`, +`semantic_search`, `graph_neighbors`, `graph_walk`. One server serves one agent under one actor. +Its command line also has an auditor that checks every item's `fixed-by` against git and finds +merged pull requests whose items are still open. + +| | Adopt as it is | Adapt to the mesh | +|---|---|---| +| Statuses, fields, append-only notes, typed links, tombstone | yes: they are already ours | — | +| Stream of operations as the record, bucket as its projection | the pattern | the stream and bucket declared in the manifest and created by the controller (ADR 0201 §3), not created by the service on start | +| Expected-sequence writes; compare-and-set counter; number only after validation | yes | needs compare-and-set in the state interface (section 1) | +| The auditor | the idea, as a tool | reads the forge through the gitea module, not a local clone | +| Subjects `hits.api.*`, its own MCP server | no | the seat's verbs, served by the tool runner and found with `mesh_search` | +| Actor named by the caller | no | the caller is the bus credential the mesh issued | +| Contexts, OAuth device flow, semantic search | no | the mesh issues credentials; no outside provider | +| *item*, *project*, *initiative*, *release* | no | *issue*; a repository or module; no initiatives in v1; *release* is already a homonym here (glossary) | + +**Reuse its code, or build on its model?** Its licence is the Sustainable Use License 1.0: use and +modification are allowed for internal business, non-commercial or personal use, and distribution only +free of charge and for non-commercial purposes. It is not an open-source licence. Running it on a +personal mesh is allowed; vendoring it into the catalogue binds the catalogue to that licence for as +long as the code is there. Its services create their own stream and bucket on start, which ADR 0201 +§3 forbids a module to do; its subjects carry no prefix and assume one tracker per bus account; its +words clash with the glossary. Changing those means a fork of a two-week-old, single-author project. +v1 here is the item store without the indexes: roughly the size of the module that delivers pull +requests. + +**Recommended: build our own module on hits's model,** and say so in the module's README. Do not +depend on or vendor its code. Revisit only if its licence changes, or if its author agrees to a +licence for this use. + +## 7. Open questions for the operator + +1. **Should the tracker hold every issue's number and status, while hq keeps a folder only for design + and governance issues, pointing at the tracker by number (option (a) in section 2)?** + Recommended: yes. It ends the collisions, keeps the public record, and moves the cycle rules into + the write, where they refuse instead of report. +2. **Should we build our own `issues` module on hits's model rather than run or vendor hits?** + Recommended: build our own. hits's licence limits distribution, its services create their own bus + resources (against ADR 0201), and its words clash with ours. Its model, its compare-and-set + numbering and its auditor are worth copying. +3. **Should the tracker also hand out decision and research numbers?** Recommended: yes, in slice 2. + Decision numbers collided three times on 2026-10-07; the same counter mechanism serves any + sequence, and the tracker then reserves the number when a branch starts. +4. **Should the word stay *issue*, with the module named `issues` and *ticket* retired?** + Recommended: yes. *Issue* is the glossary's word for this, and one word per thing (ADR 0244). +5. **Should the controller open an issue by itself for a `healer-wanted` condition, or only link + one an agent or the operator opened?** Recommended: link only, until slice 4 has run for a week; + then open by itself for `healer-wanted`, one issue per condition key. + +## 8. Slices after the first + +| Slice | Delivers | Done when the operator sees | +|---|---|---| +| 1 | The `issues` module: open, get, list, move, note, link, import; compare-and-set in the state interface | the next issue number comes from the tracker and the 73 not closed are listed by one call | +| 2 | Decision and research numbers from the tracker; playbook 03 and `cycle.py` changed; status keys removed from every report | two agents opening at once get two numbers, and no hq pull request is renumbered | +| 3 | Consolidation: the four passes of section 3, and an audit tool for `fixed-by` against the forge | the not-closed list shrinks by what was already fixed or duplicated, each with its reason | +| 4 | Conditions and pull requests linked; `healer-wanted` opens an issue | a condition shows its issue, and a merge notes the issues it names | +| 5 | A read-only view onto the `issues` bucket | the operator reads issues in a browser without an agent | diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/045-a-knowledge-base-the-mesh-writes/00-overview.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/045-a-knowledge-base-the-mesh-writes/00-overview.md new file mode 100644 index 00000000..8025d394 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/045-a-knowledge-base-the-mesh-writes/00-overview.md @@ -0,0 +1,112 @@ +--- +status: graduated +initiated: 2026-10-10 +touches: + - 02-DECISIONS/0019-how-this-repository-works.md + - 02-DECISIONS/0080-the-development-cycle-is-checked.md + - 02-DECISIONS/0153-the-record-is-read-by-a-module-and-the-console-lists-it.md + - 02-DECISIONS/0248-the-decision-index-is-generated-when-it-is-read-and-never-stored.md + - 02-DECISIONS/0274-an-agent-proposes-a-shared-instruction-section-and-every-node-takes-it-only-on-the-operators-warrant-which-it-proves-itself.md + - 02-DECISIONS/0275-the-mesh-numbers-and-tracks-its-issues-in-a-module-of-its-own-and-hq-keeps-only-the-narrative-of-a-design-or-governance-issue.md + - 03-DESIGN/01-to-be/53-the-issue-tracker.md + - 00-META/process/ + - 00-META/checks/ + - 00-META/glossary.md + - the records module's tools +became: + - 02-DECISIONS/0290-a-decision-record-lives-whole-in-the-knowledge-base-made-of-clauses.md + - 02-DECISIONS/0291-an-issue-lives-whole-in-the-issue-tracker.md + - 03-DESIGN/01-to-be/55-the-knowledge-base.md +--- + +# 045 — A knowledge base the mesh writes: decisions, guidelines, policies + +## What + +Whether the mesh should **write** its own knowledge (decision records, guidelines, policies, designs and +playbooks) through a module's verbs, instead of only **reading** hand-written markdown, and whether it +should hold light content beside them: meeting notes, architectural drawings and blog posts. + +The operator's purpose, given on 2026-10-11: the record becomes **shared knowledge that agents reach +through tools**, so that an agent gets what was decided as an answer instead of reading markdown files, +and a session no longer has to start in this repository's folder to know it. A session still starts here +for other work, such as writing a record. The operator later put the light content last, and decided that +an issue's content belongs in the issue tracker rather than in this repository. + +Today the record is read-only. The `records` module reads this repository and serves it to sessions +([ADR 0153](../../02-DECISIONS/0153-the-record-is-read-by-a-module-and-the-console-lists-it.md)). +Everything in it is written by hand as markdown and reaches `main` through a pull request; the hq checks +in `00-META/checks/` judge it only after it is written. The issue tracker has already taken issues out +of this path: it numbers and tracks them in a module of its own, and hq keeps only the narrative +([ADR 0275](../../02-DECISIONS/0275-the-mesh-numbers-and-tracks-its-issues-in-a-module-of-its-own-and-hq-keeps-only-the-narrative-of-a-design-or-governance-issue.md)). + +## Why + +Numbers collide, and the checks find a collision only after it happens. On 2026-10-10, research number +043 was taken by one open pull request while a second session held an unpushed branch claiming the same +number for a different effort. On 2026-10-07 three decision numbers collided in one evening. A +record written by a verb could take its number from one counter, the way the issue tracker does. + +Reading is costly too. Answering one question about what holds today means reading several records +whole, and the generated decision index is larger than one tool answer may be. + +Some knowledge also has no home. This repository is public, so it may not name nodes or describe +operations; the mesh's knowledge about its own installation lives in agents' private notes, in no +shared and searchable place. + +## The two options to weigh + +- **A. Git stays the store.** The `records` module gains write verbs (propose, amend as a progressive + insight, supersede, retire), each of which makes a branch and a pull request through the forge. Numbers + come from the issue tracker's counters, as a further sequence beside `issue` + ([to-be 53](../../03-DESIGN/01-to-be/53-the-issue-tracker.md) §4). +- **B. A store is the truth, and hq is its rendered public export**, as the issue tracker already is for + issues (ADR 0275). + +## The questions + +1. **Types and lifecycles.** Which kinds of knowledge exist: decision, guideline, policy, design, + playbook, and any others? What lifecycle does each have (proposed, accepted, superseded, retired; + to-be and as-is for a design), and which transitions does each kind allow? +2. **Numbering from one counter.** One sequence per kind, or one for all? How is a number reserved for + a draft that is later abandoned, given that a number is never reused? How are today's collisions + (043 is the latest example) resolved on import? +3. **Typed links.** Which links between records are needed: supersedes, amends, implements, cites, + decided-by, and others? Which of them does frontmatter express today (`became:`, `decisions:`, + `fixed-by:`), and which exist only as prose links that no check reads? +4. **Approval.** A decision or a policy changes how the mesh is run. Should accepting one require the + operator's warrant on a channel that proves who answered, as a shared instruction section already + does ([ADR 0274](../../02-DECISIONS/0274-an-agent-proposes-a-shared-instruction-section-and-every-node-takes-it-only-on-the-operators-warrant-which-it-proves-itself.md))? + Which kinds need it, and which may an agent write on its own? +5. **Public and private knowledge.** Node names and operational knowledge have no home today. Does the + knowledge base hold private records beside public ones, with a rule for which may be exported? How is + a record checked so that nothing private reaches the public repository? +6. **Checks as refusals at write.** `records.py`, `cycle.py`, `words.py` and `index.py` judge a pull + request after it is written. Which of their rules can become refusals of the write verb itself, and + which only make sense across the whole record? +7. **Import.** How are the decision records (274 on `main` on 2026-10-11, numbered up to 0289), the designs and the playbooks imported without + losing their history, their numbers or their links? Is the import repeatable, as the issue tracker's + is? +8. **What git gives today.** Review on a pull request, line comments, a history of every change with + its author, a diff, a revert, and the forge's required checks. What of that would a store have to + rebuild under option B, and what would option A lose by making every write a pull request? + +## Words + +The glossary has words for **decision record**, **design**, **playbook** and **the record** (the +`records` module), but none for **guideline** or **policy** in this sense, and *policy* is already used +for a module's **upgrade policy**. This effort uses "guideline" and "policy" as plain descriptions, and +"knowledge base" for the whole, until a decision settles the words through the glossary's own rules. + +## What it touches + +How this repository works (ADR 0019) and how the development cycle is checked (ADR 0080), the +`records` module (ADR 0153) and the generated decision index (ADR 0248), the issue tracker and its +counters (ADR 0275, to-be 53), approval on a proving channel (ADR 0274), the playbooks in +`00-META/process/`, the hq checks in `00-META/checks/`, and the glossary. + +## Documents + +- [01 — Findings](01-findings.md): what exists, measured on 2026-10-11; where the truth lives (the store + for each record's structure and rules, this repository for its reasoning); issues whole in the issue + tracker; the order of work; and what is still open. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/045-a-knowledge-base-the-mesh-writes/01-findings.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/045-a-knowledge-base-the-mesh-writes/01-findings.md new file mode 100644 index 00000000..dacb0bfd --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/01-RESEARCH/045-a-knowledge-base-the-mesh-writes/01-findings.md @@ -0,0 +1,295 @@ +# 01 — Findings + +Measured on 2026-10-11 against `main` of this repository, the records module and the issue tracker as they +answer through the mesh MCP server, and the hq checks in `00-META/checks/`. Section 0 is what exists; section 1 is where the truth lives, which +decides the rest; sections 2 to 9 answer the overview's questions and the operator's additions; section 10 is +the order of work, and section 11 what is still open. + +## The purpose, in the operator's words + +The operator gave the purpose on 2026-10-11: the decisions and the rest of the record should become **shared +knowledge that agents reach through tools**, instead of reading markdown files, and a session should no longer +have to start in this repository's folder to know what was decided. A session still starts here for other work, +such as writing a record. Later that day the operator widened the scope to **light records** +(meeting notes, architectural drawings, blog posts) and then put them last; asked for a structured store of +the decisions and research efforts; and decided that an issue's content belongs in the issue tracker, not in +this repository. + +That purpose moves the weight of the overview's questions. Where the truth is stored (option A or B) matters +less than **what an answer looks like**: an agent needs the rule that holds now, with the records it rests on, +in one call and a few kilobytes. + +An acceptance sentence for the whole effort: *a session started in any folder on any node asks "what holds +about the merge window, and why" and gets, in one call of under 4 KiB, the rules in force, the records they +come from, what changed them since, and the commit it was read at.* + +## 0. What exists today, measured + +| Fact | Measured | +|---|---| +| Records on `main` | 274 decision records, 44 research efforts (119 files), 55 to-be and 16 as-is designs, 8 playbooks, 361 issue narratives (479 files): 951 files, and the glossary | +| Size | 6.9 MB of markdown, about 1.7 million tokens at four bytes a token; decision records alone 2.6 MB (about 650,000 tokens) | +| One question, today | "what holds about the merge window": `records_search` gives 26 places in 11 documents; reading the five records and the design they point to is 85 KB, about 21,000 tokens | +| The decision index | `records_decisions` answers 77 KB in one piece; the agent's tool-answer limit refused it inline, and it had to be read from a file in parts | +| What `records_search` does | a literal, case-insensitive phrase match giving document, line and heading; no ranking, no notion of which record is still in force | +| Frontmatter of a decision | `topic`, `status`, `date`, `deciders` on all 274; `extends` on 229 (182 with the folder prefix, 47 without); `supersedes-in-part` on 15 (21 links), `supersedes` on 8, `superseded-by` on 9, `rests-on` on 2, `amended` on 1 | +| Status of a decision | 265 `accepted`, 9 `superseded`; no record is marked as changed in part, though 21 links say so | +| Supersession said only in prose | 6 records say they supersede, amend or replace another and carry no field for it; 7 records carry a "superseded" marker in the body, of which only 1 has the field or the status | +| Progressive insights | 39 records carry the dated marker, 55 markers in all; 2 more use an older form | +| Change after writing | 189 of 271 traceable decision records were changed after the commit that created them; 34 paths were changed five times or more | +| Pace | commits touching decision records: 87 in the last ten days of August, 160 in September, 274 in the first eleven days of October | +| Number collisions | 16 decision numbers were taken twice by sessions working at once (2026-09-25 to 10-10), each repaired by a renumbering commit; 15 numbers on `main` are gaps; no research number collided on `main` (the 043 collision of the overview never reached it) | +| A decision's rules | 263 records have a `Decision` section; only 37 of them write it as numbered rules with a bold lead (198 rules in all); the rest write prose | +| Drawings | no file but markdown in the repository; no diagram source; 22 designs carry diagrams drawn in text characters | +| Knowledge with no home | the repository is public, and its README says what only makes sense to someone who knows this installation "is either a note in the wrong place or a disclosure"; one agent's private notes hold 89 files for one repository on one node, and issue 367 (a session's memory stays on the node where it was learned) is open | +| The hq checks | 33 rules: 25 judge one record, 4 the whole record, 4 the prose (section 7) | + +Three things follow. + +1. **The cost of an answer is the problem, not where the files are.** 85 KB for one question, and an index + too large for one tool answer, mean a session reads in parts or reads less than it should. Moving the + markdown into a store without changing the shape of the answer would keep that cost. +2. **The data that makes an answer cheap is missing or loose.** What a record decided is prose in 226 of 263 + records. Which records changed which is half in fields, half in prose: 6 records say it only in prose, and + 6 more carry a body marker that no field or status agrees with. + Status says `accepted` for records that 21 later links change in part. +3. **The records change after they are written, and that is reviewed.** 189 of 271 decision records were + edited after creation, every edit through a pull request with a human approval. Whatever is built must keep + that review for what governs the mesh. + +## 1. Where the truth lives: what a clean start would choose + +The operator asked on 2026-10-11 which option this effort would choose with no prior setup. The answer +decides the rest, so it comes first. + +**The unit the mesh reasons about is a rule, not a file.** A decision is a handful of rules. A later decision +changes one of them: ADR 0282 replaces one rule of ADR 0276 and leaves the others standing. Git and markdown +know files only, so that change can be written only as prose. The earlier record keeps `accepted`, and every +reader must read both records to learn what holds. Section 0's loose links all have this one cause: 21 partial +supersessions with no reverse, 6 said only in prose, 6 markers no field agrees with. + +**A store can hold what a repository cannot.** In a store, each rule is an entry with its own status and links +("in force", "changed by rule 2 of 0282"). A write that leaves the record inconsistent is refused when it is +made, not found by a check afterwards. Numbers come from one counter. "What holds now" is one query. + +**What git does best is review of prose.** The reasoning behind a decision (its context, the options weighed, +its consequences) is read and commented on by people. Agents rarely ask for it. They ask what holds. + +So a clean start divides **by layer, not by kind**: + +- **the store is the truth for the structure** of every governing record: its number, title, kind, topic, + status, its rules one by one, and its typed links, at the level of the rule where a link is about a rule; +- **this repository keeps the reasoning** as markdown under the store's number, reviewed in pull requests. + +That is the division the issue tracker already made for issues +([ADR 0275](../../02-DECISIONS/0275-the-mesh-numbers-and-tracks-its-issues-in-a-module-of-its-own-and-hq-keeps-only-the-narrative-of-a-design-or-governance-issue.md)): +the tracker holds number, status and links, and hq held the narrative. Section 9 takes issues one step further, +on the operator's word: their narrative leaves this repository too. + +Option A (git stays the truth, and a module's write verbs open pull requests, with numbers from a counter) was weighed and is not chosen. It keeps review, but it +keeps the rule-level links in prose and the refusals after the fact, which is the cause of section 0's mess. +Option B in full (the reasoning moves into the store too) is not chosen either: it would rebuild review, line +comments, history and diff for prose, which git already gives. + +## 2. Kinds and their lifecycles + +| Kind | Lifecycle | Notes | +|---|---|---| +| decision | proposed → accepted → superseded; a rule can be changed or superseded on its own; a dated progressive insight corrects a fact | 274 records | +| research | active → graduated or abandoned | 44 efforts | +| design | proposed → designed → in-progress → implemented, in one of two layers (to-be, as-is) | 71 documents; a later slice (section 10) | +| playbook | in force, or retired | 8, with no frontmatter today; a later slice | +| glossary entry | in force, or retired with its replacement | one file today; a later slice | + +The first slice holds decisions and research, the two the operator named. + +A **guideline** or a **policy**, which the overview named, has no record of its own today. What the operator +calls a policy is written as a decision; what an agent should do is a shared instruction section (ADR 0274) or +a personal rule ([ADR 0273](../../02-DECISIONS/0273-the-agents-home-is-the-modules-and-the-operators-personal-rules-and-lessons-are-registered-through-it.md)). +No new kind is proposed for either. + +**Light records** (meeting notes, drawings, blog posts) were added to the scope by the operator on 2026-10-11 +and put last by the operator the same day. They govern nothing, need no review to exist, and are private by +default; a drawing's file belongs in an object-store bucket +([ADR 0288](../../02-DECISIONS/0288-the-object-store-stays-on-the-maintained-fork-and-garage-is-chosen-only-after-the-consumers-s3-features-are-counted.md)) +with a text description an agent reads. They are a later slice (section 10) and shape nothing in the first. + +## 3. Numbering from one counter + +The 16 concurrent collisions all come from reading the next number off a repository that many branches write +at once. The issue tracker hands out numbers by compare-and-set on a counter key +([to-be 53](../../03-DESIGN/01-to-be/53-the-issue-tracker.md) §4); the knowledge base asks it for every number. + +- **One sequence per kind**: decision, research, and later design. Numbers keep their meaning in conversation + ("ADR 0276"). +- **A reserved number is spent.** A proposal that is abandoned keeps its number with status `withdrawn`, who + reserved it and when. Gaps already exist (15 on `main`) and harm nothing; a reused number would. +- **The counter starts above the highest number on `main` and on every open branch**, as the tracker's did. +- **The counters stay where ADR 0275 put them.** Its rule 8 decided that the issue tracker hands out decision + and research numbers too, in its second slice; to-be 53 §4 so far names only the issue counter. The knowledge + base's `reserve` asks the tracker for the number, so one counter holds every sequence and no accepted record + is superseded for it. + +## 4. Rules and typed links + +**A rule** is one short statement a decision makes, numbered within its record ("0276 rule 1"), with its own +status: `in force`, `changed by` a rule of a later record, or `superseded`. 37 of 263 decision sections already +write numbered rules with a bold lead (198 rules); the other 226 write prose, from which the import drafts the +rules (section 7). + +The links the first slice holds, each stored in both directions: + +| Link | From → to | Today | +|---|---|---| +| supersedes | record → record | `supersedes` / `superseded-by`, 9 of 9 mirrored | +| changes | rule or record → rule | `supersedes-in-part` on 15 records, one direction; 6 more only in prose | +| extends | record → record | `extends` on 229, two spellings | +| became | research → decision or design | `became` | +| decided by | design → decision | `decisions` | +| corrects | progressive insight → record | the dated marker, 55 in 39 records | +| cites | any → any | prose links: 1,785 decision to decision, 469 decision to issue | + +"What holds about X" is then: the rules matching X whose status is `in force`, each with its record and the +changes that brought it to its present wording. + +## 5. Approval + +A decision governs how the mesh is built and run, so it needs a human approval before it holds. + +- **Proposing** reserves a number and writes the structure with status `proposed`. Any agent may propose. +- **Accepting** happens when the pull request carrying the record's reasoning merges with its human approval + and both required checks. The knowledge base sees the merge on the bus and moves the record and its rules to + `accepted` and `in force`, and every rule it changes to `changed by`. The merge is the warrant; a second + approval beside it would split the evidence. +- **A progressive insight** is a correction of fact and goes the same way: a pull request on the reasoning, + and the structure recorded on merge. +- A **structural write without a pull request** (a link added, a rule's wording fixed) is refused for an + accepted record. Changing what an accepted record says is a new decision, as it is today. + +## 6. Public and private + +This repository is public and stays so. The reasoning of a decision or research effort stays here, public. +The structure in the store is derived from public records and may be exported here as generated pages, like +the decision index of [ADR 0248](../../02-DECISIONS/0248-the-decision-index-is-generated-when-it-is-read-and-never-stored.md), +generated when read and never stored. + +What changes is the issues' narrative (section 9): it moves into the tracker, which is the mesh's own and not +public. The public repository loses those narratives. ADR 0275 kept them public on purpose, citing *the mesh +remembers*; the tracker remembers them as well, but only for the mesh. Whether a resolved issue's narrative is +ever exported publicly is a question for the decision that supersedes that part of ADR 0275. + +Knowledge about this installation (one agent's 89 private notes, issue 367) stays out of scope. Agents' lessons +and rules belong to the agent module's register (ADR 0273). + +## 7. Checks as refusals at write, and the import + +Of the 33 rules the hq checks enforce, **25 judge one record** and become refusals of the knowledge base's +write verbs: a number taken twice, a supersession not mirrored, a cited record not accepted, a record without a +topic, a research effort graduated without `became`. Two need a look beyond the record: a write that +supersedes must check who cites what it supersedes. **4 judge the whole record** and **4 judge the prose**; +those stay checks on this repository, run on every pull request. As frontmatter leaves this repository +(section 8), the 25 leave `records.py` and `cycle.py` with it, and a check is added that a record's reasoning +names a number the knowledge base holds. + +**The import** reads this repository at a commit through the records module and writes each decision and +research effort at its own number: status, topic, date, deciders, links, and its rules. Like the tracker's, it +creates what is absent, never overwrites, never advances a counter, and a second run changes nothing and says +so. Two things a reading cannot recover alone: + +- **Loose links.** The 6 supersessions said only in prose, the 6 markers no field agrees with, the 47 bare + `extends` targets and the 21 one-way partial supersessions are repaired in this repository first, by one + pull request, so the import reads clean input. +- **The rules of 226 decisions written as prose.** The import drafts them through the agent's judgement + ([ADR 0278](../../02-DECISIONS/0278-the-issue-tracker-checks-every-new-issue-for-a-duplicate-through-a-judgement-the-agent-makes-without-tools.md)) + and stores them as `drafted`, not `in force`. A topic's drafts are confirmed by the operator or a reviewer in + one pass. An answer marks a drafted rule as drafted, and never presents it as the record's word. + +## 8. What leaves this repository, and what stays + +| | Today, in this repository | After | +|---|---|---| +| a decision's number, status, topic, links | frontmatter | the knowledge base; the file keeps the number in its name and heading | +| a decision's rules | prose in the `Decision` section | the knowledge base; the section stays as prose for the reasoning | +| a decision's context, options, consequences | markdown | unchanged | +| a research effort's status and `became` | frontmatter | the knowledge base | +| a research effort's documents | markdown | unchanged | +| the decision index | generated from frontmatter when read | generated from the knowledge base when read | +| an issue's report, diagnosis, resolution | `04-ISSUES/NNN-slug/` for 361 issues | the issue tracker (section 9) | + +Frontmatter leaves a file only after the import has proven it holds the same values, one kind at a time, as +ADR 0275 did for issues' status. + +## 9. Issues live in the issue tracker, whole + +The operator decided on 2026-10-11 that an issue's content belongs in the issue tracker, not in this +repository. Measured on `main`: 361 issue folders, 1.9 MB; a folder's median is 4.4 KB and the largest +25.9 KB, well under a tracker value's 256 KiB. Every folder has `00-report.md`; 107 have a diagnosis, 9 a +resolution, 1 a progress file. Since ADR 0275, new issues live in the tracker already; the highest issue folder +is 364. + +What the tracker needs to hold it: + +- **an issue's documents**: the report it already holds, plus a diagnosis and a resolution as named documents + of the issue, each with its author and date, revised in place with history (notes stay append-only); +- **an import** of the 361 folders, repeatable, keeping each issue's number and dates; +- **links** from records: 250 files in this repository mention a path into `04-ISSUES/` 765 times, counted + as every `04-ISSUES/NNN` path in the text (markdown links alone are fewer, about 660). Those mentions become + plain "issue N" references that the knowledge base and the tracker resolve, rewritten in one pull request + once the import is proven; the link check in `records.py` then refuses a new link into `04-ISSUES/`. + +This supersedes part of ADR 0275 (hq keeps the narrative of a design or governance issue), so it needs its own +decision record. + +## 10. Slices + +1. **Clean the input** (this repository, one pull request): repair the loose links of section 7, so the import + reads clean records. In review as hq pull request 305, which declares every partial supersession in both + records and adds the `partial-supersession` check. Beside it, a shared instruction section for every + session: take a decision or research number above every one on `main` and on open branches until the + counter exists, and name a partial supersession in a field, never only in prose. +2. **The knowledge base, decisions and research**: a Go module serving one seat held once for the mesh, on + the control-node beside the issue tracker. The import, the rules and links, and the answers; numbers come from the issue tracker (section 3): + + | Verb | Answers | + |---|---| + | `ask` | the records and rules that bear on a question, ranked: number, kind, status, title, and whether each rule still holds or what changed it | + | `get` | one record: its rules, its links both ways, what changed it since; its reasoning's text only when asked | + | `holds` | for a topic or a record, the rules in force now, each with the record it comes from | + | `reserve` | the next number of a kind, from the issue tracker's counter (section 3), spent whether or not the record lands | + | `propose` | a new record's structure, status `proposed` | + | `import` | this repository's decisions and research at a commit, repeatable | + + Storage is a database in the store, provided to the module: the structure is small, but `ask` needs ranked + full-text search, which the store's server does and a bucket does not. Every answer is bounded in size. +3. **Frontmatter leaves this repository**, kind by kind, once the import is proven equal. +4. **Issues whole in the tracker** (section 9): documents, import, links rewritten, folders removed. +5. **Designs, playbooks and glossary entries** into the knowledge base the same way. +6. **Light records**: notes, posts and drawings. + +How a session reaches it: the knowledge base's tools reach every session through the mesh MCP server, and one +shared instruction section, approved by ADR 0274's route, tells every session to ask the knowledge base what +holds before reading files. A session needs this repository's folder only to write a record's reasoning. + +Proved by the acceptance sentence at the top: the merge window question, asked from a session outside this +repository, answered in one call under 4 KiB, naming ADR 0276's rules in force and the one ADR 0282 changed. + +## 11. What needs the operator + +Decided by the operator on 2026-10-11: the store is the truth for structure and this repository for reasoning +(section 1); light records come last; issues live whole in the tracker (section 9). + +Still open: + +1. **Drafted rules (section 7)**: the 226 prose decisions get their rules drafted by the agent's judgement and + confirmed a topic at a time. Who confirms: the operator, or an independent reviewing agent with the operator + seeing a summary? +2. **Issues' public narrative (section 6)**: once issues leave this repository, is a resolved design or + governance issue ever exported here publicly, or does it stay the mesh's alone? + +## Words + +The glossary has **decision record**, **design**, **playbook** and **the record** (the records module). This +effort proposes, for a decision to settle through the glossary's own rules: **knowledge base** for the module +and its seat; **rule** for one statement a decision makes, with its own status; **governing record** for a kind +reviewed before it holds; and **note**, **post** and **drawing** for the light kinds. *Policy* stays the word +for a module's upgrade policy, and *guideline* is not proposed, since section 2 finds no record of that kind. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0011-managed-files-are-generated-never-edited.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0011-managed-files-are-generated-never-edited.md new file mode 100644 index 00000000..6bcb1cd6 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0011-managed-files-are-generated-never-edited.md @@ -0,0 +1,64 @@ +--- +topic: building it +status: accepted +date: 2026-04-03 +deciders: jochen +reconstructed: true +--- + +# 11. Managed files are generated onto nodes and never edited there + +> Reconstructed after the fact from the evidence cited below. + +## Context + +[ADR 0006](0006-the-substrate-and-the-control-plane.md) put every binding in the mesh +database. But the things that consume those bindings — environment files, service +definitions, daemon configuration, firewall rules — are files on a node's disk, because that +is what the software reading them requires. + +So the same value exists twice: authoritatively in the database, and materialised in a file. +Any edit to the file is a change to a copy. Before this decision, environment values could be +pushed from a node back into the database, which made the direction ambiguous in both +directions at once. + +## Considered options + +1. **Bidirectional sync** — a node's edits flow back to the database. Rejected, and removed. + Two writers and no arbiter: whichever synced last wins, and neither is authority. +2. **Files are authoritative; the database is a cache of them.** Rejected — it inverts + ADR 0013 and returns to state that cannot be reconciled across nodes. +3. **Strictly one-directional: the database is written, files are generated.** Chosen. + +## Decision + +Every managed file is **derived**. A synchroniser regenerates it from the mesh database +whenever the underlying values change. The write path is the mesh tool that owns the value; +the file is an output. + +This applies to generated environment files, service definitions, managed configuration, and +anything else a synchroniser lists as its own. + +An edit to a managed file survives until the next synchronisation and is then overwritten, +without a warning, taking whatever it was fixing with it. + +## Consequences + +- **A file edited on a node is a bug with a delay on it.** This is now one of the mesh's core + values, and it is a consequence of this decision rather than a stance taken independently. +- To change a value you must know which tool owns it. That is a real cost, paid every time, + and the reason the mesh provides a way to ask whether a given file is managed. +- Debugging by editing a file no longer works, and fails in the most confusing way available: + it works, and then stops working later for no locally visible reason. +- Recovery is cheap. A node's entire managed surface can be regenerated from the database. +- Values resolve by precedence — database override, then existing file value, then generated, + then manifest default — which means an unset override does not clobber a generated + password. The subtlety is real and has caused its own confusion. + +## References + +- `Extract hal/env-sync module, remove syncEnvToDb`, 2026-04-03 — the commit that removed the + node-to-database direction. +- Knowledge base: `conventions/no-direct-file-mutation`, `provisioning` (resolution priority). +- Regeneration gaps: `troubleshooting/changed-manifest-default-not-rerendered`, + `troubleshooting/config-removed-from-manifest-not-pruned`. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0127-amqp-is-a-provision-not-the-bus.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0127-amqp-is-a-provision-not-the-bus.md new file mode 100644 index 00000000..e417e6e5 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0127-amqp-is-a-provision-not-the-bus.md @@ -0,0 +1,104 @@ +--- +topic: the mesh +status: superseded +superseded-by: 0131-everything-on-the-mesh-speaks-to-the-broker-seat.md +date: 2026-09-26 +deciders: jochen +reconstructed: false +supersedes: 02-DECISIONS/0125-the-bus-is-the-only-broker.md +--- + +# 127. AMQP is a provision, not the bus + +## Context + +[ADR 0125](0125-the-bus-is-the-only-broker.md) decided that the bus is the only broker, and went +one step further than it had grounds for: it also decided that the `amqp` **interface** — a module +requiring a message broker of its own — "is not carried forward" and "retires with the +compatibility broker rather than gaining a successor", with the two modules declaring it converted +to the bus in step 4. + +The operator's correction: **AMQP is deprecated as the mesh's transport, not abolished as a +service.** The broker module keeps running and keeps answering `amqp` requirements. It is no +longer a core part of the mesh — *"it's just a module like mssql now."* + +**What 0117 conflated** is two different reasons a module might ask for a broker, which look +identical in a manifest: + +1. **To talk to other modules.** Wrong under one bus, and the thing 0117 was right to refuse: a + private broker used as inter-module transport is a second bus, with every guarantee crossing a + seam and no scoping the mesh can see. +2. **Because it genuinely needs an AMQP broker**, the way something needs a database — a queue for + its own internals, or interop with software that speaks AMQP and nothing else. That is a + backing service, and the mesh has a word for backing services already. + +0117 saw the first and legislated against both. The second is ordinary, and forbidding it would +make the mesh unable to run a large class of perfectly normal software while claiming that as +architecture. + +## Considered Options + +1. **Keep 0117 as written** — retire the interface, convert the two modules. Rejected by the + operator, and wrongly reasoned besides: it treats "needs an AMQP broker" as always a mistake. +2. **Keep the broker as the predecessor's compatibility module**, as ADR 0106 framed it, with a + retirement condition. Rejected: it is not single-purpose and its clients are not only the + predecessor's, so the retirement condition describes a day that will not come. +3. **The broker is an ordinary provider module of an ordinary provision.** Adopted. + +## Decision + +**The mesh's bus is NATS and only NATS.** Everything 0117 decided about *the bus* stands: one bus, +a module's messaging is subjects on it scoped by what it declares, no module is handed a bus of +its own, and the `mesh-broker` seat is the NATS server's. + +**`amqp` remains a provision a module may require**, answered by the broker module the way +`postgres-database` is answered by the store module or a database is answered by mssql. It is not +deprecated as an interface; the software behind it is simply no longer the mesh's nervous system. + +**The broker module stops being foundation.** It claims no seat — `mesh-broker` is the NATS +server's — it is not raised at genesis, nothing in the mesh requires it, and a mesh that never +installs it is a complete mesh. It is installed when something wants it, like any other provider. + +**The rule that survives, stated so it can be applied:** *inter-module communication goes over the +bus.* A module may hold a broker, a database or a cache as a backing service; it may not use one +as a channel to another module. The line is not which software is involved, it is whether a second +module is on the other end. + +**Neither `amqp-ping` nor `amqp-email-forwarder` needs converting.** 0117 put that work in step 4; +it is removed. They require a backing service and a provider answers. + +## Consequences + +- **The "compatibility broker" framing is wrong and goes.** There is no `lavinmq-compat`, no + single purpose and no retirement condition. Design 25 §5 is corrected. +- **[ADR 0106](0106-the-bus-is-nats.md)'s progressive insight was itself wrong** and is corrected + by a second one there. It said 0117 would make 0106's "one purpose — the predecessor's clients" + sentence true by moving the mesh's modules off. Nothing moves off; the sentence is simply not + what the broker is. +- **The seat change stands**, for a better reason than 0117 gave: not because a broker cannot be + provisioned, but because *this* broker is not the mesh's bus. The broker module drops its + `mesh-broker` claim and the `nats` module takes it. +- **Step 4 loses two conversions**; step 1 and the WBS are otherwise unaffected. +- **What got harder:** the rule is now a judgement rather than a prohibition. "Is this a backing + service or a channel to another module?" has to be asked in review, where 0117 could have + answered it with a parser. That is the honest cost of allowing the legitimate case. + +## How it is checked + +- **A module's own messaging needs no `requires`.** The check from 0117, unchanged: a module + declaring only `emits` and `consumes` reaches its subjects and is refused every other. +- **The broker holds no seat.** A manifest test: the broker module claims nothing, and a mesh + raised without it is complete — genesis names it nowhere. +- **`amqp` resolves like any provision.** A resolution test: a module requiring it is answered by + the provider, refused when none is assigned, and neither case touches the bus. +- **What cannot be checked mechanically**, and is said rather than implied: that a module holding + a broker is not using it to reach another module. Review, not a parser. + +## References + +- [ADR 0125](0125-the-bus-is-the-only-broker.md) — superseded; its ruling on the bus is kept + whole and only its ruling on the interface is reversed. +- [ADR 0106](0106-the-bus-is-nats.md) — the bus is NATS; its compatibility-broker framing is + corrected here. +- [ADR 0126](0126-a-module-declares-its-own-seats.md) — seats, including the one the NATS server + now holds alone. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0131-everything-on-the-mesh-speaks-to-the-broker-seat.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0131-everything-on-the-mesh-speaks-to-the-broker-seat.md new file mode 100644 index 00000000..5b1155b7 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0131-everything-on-the-mesh-speaks-to-the-broker-seat.md @@ -0,0 +1,94 @@ +--- +topic: the mesh +status: accepted +date: 2026-09-27 +deciders: jochen +reconstructed: false +supersedes: 0127-amqp-is-a-provision-not-the-bus.md +--- + +# 131. Everything on the mesh speaks to the broker seat, and AMQP is not a provision + +## Context + +[ADR 0127](0127-amqp-is-a-provision-not-the-bus.md) settled the old broker as an ordinary provider +of an ordinary provision, `amqp`, kept for whatever wanted a message broker of its own. The day the +bus moved was the day that framing was tested, and it failed in a way that took the control plane +down for an evening. + +Three things came out of the wreckage. **The protocol had leaked into the seat's contract**: for a +module to hold `mesh-broker`, it had to provide what the seat delivers, and what it delivered was +`amqp` — so the module that will carry the bus on NATS could not hold the seat that names the bus, +while the module the mesh was leaving could. **A consumer of `amqp` is not asking for AMQP.** The two +modules requiring it wanted the mesh's messaging — to emit an event, to hear a topic — and named the +wire protocol only because that was the word available. **And AMQP and NATS are not interchangeable +at the wire.** A provision named after a protocol can only ever be answered by that protocol, so once +the bus is NATS an `amqp` provision has one possible provider, and it is the thing being retired. + +The operator's position, stated during the outage: modules depend on the broker *seat*, not on a +protocol; AMQP is obsolete as anything the mesh's core knows about; a module that depends on `amqp` +is wrong; and everything should reach the mesh's bus and be able to emit events and consume topics +through it. + +## Decision + +**A module that needs messaging uses the mesh's bus, and the mesh's bus is whatever holds +`mesh-broker`.** Emitting an event and consuming a topic go through the sdk, which is handed the +bus by the mesh with the module's own credential. No manifest names a wire protocol to get it. + +**`amqp` is neither a provision nor a requirement.** Registration refuses a manifest that provides +it or requires it. The `mesh-broker` seat delivers `mesh-bus`, and its holder is the module that +provides `mesh-bus` — today the nats module, and only it. + +**The old broker's module and the two modules that required it leave the catalogue.** They are +removed, not converted: one was a proof that a grant worked end to end, the other forwards mail off a +queue, and both are re-done against the bus if wanted, as new modules under this record. + +**The controller's AMQP transport is deleted once every node reports on the new bus**, and the +switch that selects a transport goes with it — one bus, so nothing to select. + +The predecessor's own broker is outside the mesh and not this record's concern +([ADR 0130](0130-the-predecessor-is-ending-and-its-broker-goes-with-it.md)): what the predecessor's +tooling loses when it stops is accepted there. + +## Options considered + +1. **Keep 0127: AMQP stays an ordinary provision with the old broker as its provider.** Rejected. It + is what put the protocol into the seat's contract, it is why the seat could be left with no valid + holder mid-change, and it keeps two transports in the control plane indefinitely for the benefit of + two modules that did not want AMQP in the first place. +2. **Bridge it: the old broker's module also provides `mesh-bus`, so both can hold the seat during the + change.** Rejected. It makes the retiring broker a legitimate mesh bus for exactly as long as + nobody removes the line, which in practice is forever, and it leaves `amqp` as a thing the core + still knows the name of. +3. **The seat is the dependency; the protocol is nobody's business but the holder's.** Adopted. + +## Consequences + +- **The change of holder is a handover, and it needs a command.** Nothing today moves a seat from + one assignment to another as one act, and a seat the control plane dereferences cannot be empty + in between — that emptiness is the outage this record comes from. The command takes a seat and the + assignment taking it over. Designed and built before the cutover, under + [28 — Building the bus](../03-DESIGN/01-to-be/28-building-the-bus.md). +- **The seat's row moves to `mesh-bus` before the new holder registers, and that is safe.** The + control plane composes its own bus address through the seat *by name* + (`${seat:mesh-broker:…}`), and the overview derives holders by name; only registration and the + provision-to-seat resolution read what a seat delivers. So the row can change under the current + holder without unseating it, the new holder can then register its claim, and the handover happens + when both are running. Verified in the code during the outage, not assumed. +- **Registration gains two refusals**: a manifest providing `amqp`, and one requiring it. +- **The `rollout check` stops saying the old broker stays.** It said so under 0127; it now lists + unassigning it as the last step of the move. +- **What got harder**: a third party that genuinely wants an AMQP broker on a mesh node runs one as + any application module, with no provision and no seat, and nothing on the mesh routes to it. That + is the cost of the mesh not knowing the word. + +## How this is checked + +| Rule | Checked by | +|---|---| +| No manifest provides or requires `amqp` | a registration test refusing each, naming this record; and a whole-catalogue test asserting no registered manifest names it | +| `mesh-broker` delivers `mesh-bus`, and only a `mesh-bus` provider may hold it | the existing registration test for a delivering seat, with the row's value read from the store (mesh-controller#89) | +| The seat's row can change without unseating the holder | a test composing the control plane's own address and the overview under a row that the current holder does not satisfy | +| The rollout does not leave the old broker running | `rollout check` output, asserted in its test | +| The AMQP transport is gone | the package does not compile with it referenced; the switch variable is refused as unknown at start | diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0162-a-merge-produces-a-tiered-plan-the-mesh-keeps.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0162-a-merge-produces-a-tiered-plan-the-mesh-keeps.md new file mode 100644 index 00000000..4e8f6cfc --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0162-a-merge-produces-a-tiered-plan-the-mesh-keeps.md @@ -0,0 +1,142 @@ +--- +topic: the mesh +status: accepted +date: 2026-10-01 +deciders: jochen +reconstructed: false +extends: 02-DECISIONS/0157-a-build-says-what-it-does-on-the-bus-as-it-happens.md +--- + +# 162. A merge produces a tiered plan the mesh keeps, and a module's dependencies are one relation in the catalogue + +> **Superseded in part — 2026-10-10, by [ADR 0276](0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md).** +> "A merge produces a tiered plan" no longer holds: merges are collected in a rolling merge window, and each +> batch is planned once, as one walk with at most one commit per repository (issue 362). The plan the mesh +> keeps, its tiers and the one dependency relation stand as decided here. + +> **Progressive insight — 2026-10-02.** The context below says a dependent is *built by whichever build machine is running — the only one there could be*. That was a fact of the day, not of the decision: since [ADR 0190](0190-a-seats-work-is-shared-by-its-holders-and-building-is-the-first-such-role.md) a tier's asks are taken by every machine holding the build seat. The plan and its tiers are unchanged. + +> **Superseded in part — 2026-10-08, by [ADR 0267](0267-an-artifact-is-rebuilt-only-when-its-build-source-changes-and-a-module-moves-only-along-build-dependencies-on-artifacts.md).** +> In decision 1, the `packages` kind ("the module's build reads the other's repository") and the *code* +> dependency ("B packages A's source … rebuilt whenever A changes, in the same tier") no longer hold: a file +> two modules build from moves both through their build sources, and no edge is drawn for sharing a +> repository. `stands-on` and `declared` name an artifact at each end. The build and runtime dependencies, +> `built-by`, and decisions 2 to 4 stand as decided here. + +## Context + +A merge on the forge reaches the controller as an event, and the controller asks the build +machine for what that merge changed. Until today that meant the modules whose recorded source is +that repository; since this afternoon it also means everything standing on what moved +([issue 186](../04-ISSUES/186-a-release-across-repositories-is-an-order-in-a-persons-head/00-report.md)). +Both are done inside the handler that received the event: it asks one build, waits for it, asks the +next, and returns when the last is done. Three things followed from that shape on 2026-10-01: + +- The controller hears nothing else for the length of the work — twenty-five minutes for the runtime + image and its forty-three dependents ([issue 184](../04-ISSUES/184-a-merge-announcement-blocks-the-controllers-receive-loop/00-report.md)). +- A controller replaced mid-merge loses the rest of the merge: the redelivered announcement reads as + history, and the dependents are asked by hand. +- Nothing is deployed between builds. A merge that changes the build machine and something the build + machine builds asks for both in order, but the second is built by whichever build machine is running + — the old one, unless somebody pushed in between. The order the dependents are sorted in exists for + the artifacts; it says nothing about what must be *running*. + +And the knowledge the order is computed from is scattered: a manifest's `build.on`, the artifacts a +build was made against, the repositories a build read, and the fact that every source-built module is +built by the build machine, each read by a different function in the merge handler. + +## Decision + +**1. A module's dependencies are one relation in the catalogue.** `depends-on` edges, each with the +kind of dependency on it: `stands-on` (the module's artifact is built on the other's), `packages` (the +module's build reads the other's repository), `built-by` (the module is built by the holder of the +build-machine seat), and `declared` (a manifest's `build.on`). The relation is answered by one query +of the catalogue — the controller's inventory today, the catalogue seat's tool when something outside +the controller needs it — and nothing else computes an edge. The edges are derived from facts +recorded at two moments and written by nobody: registration records the manifest (`declared`, and +`built-by` for anything with a source), a build's take-in records what the image was built on and +which repositories it read (`stands-on`, `packages`). A module's first build places it by its +declared edges alone; from its second it is placed by what was true. + +**The kinds are three dependencies, not one.** A *code* dependency — B packages A's source — means +B is rebuilt whenever A changes, in the same tier: B's build needs nothing of A's first. A *build* +dependency — B stands on A's artifact, or declares it — means B is rebuilt after A is *built*, the +next tier, and nothing need be deployed in between. A *runtime* dependency — B is built by A — means +B is rebuilt only after A is built *and running*, the next tier with a gate on the machines' reports. +One cycle is real and resolved by the kinds themselves: the runtime image is built by the build +machine, and the build machine stands on the runtime image; the image comes first, built by the +build machine that is running, which is the only one there could be — a `built-by` edge never orders +a module after a build machine that stands on it. A provision is not a dependency of this relation: +a consumer binds to its provider through what the push renders, and a change to the provider's image +changes nothing in the consumer's; a consumer whose build does read a provider's source declares it. +"A was deployed, so restart B" is the push's domain — B is replaced when what it reads changed — and +not the plan's. + +**2. A merge produces a plan, and the plan is a record.** The controller takes the modules the merge +changed and everything reachable from them along `depends-on` edges, and sorts that set into tiers: +tier 0 depends on nothing else in the set, tier 1 only on tier 0, and so on. The plan — the merge it +answers, the tiers, and each module's state — is written to the store before any build is asked. The +handler asks tier 0 and returns. Every build's outcome, taken in by the same handler that takes every +outcome in, advances the plan it belongs to; a controller replaced mid-plan resumes it from the store. + +**3. A tier is done when it is built, and when what the next tier needs from it is running.** A +module whose roll-out policy says *roll out* is sent to its machines when it moves, as today. The next +tier is asked only once every module in this tier is built and every rolled-out module of this tier +that a later tier is `built-by` has been applied by the machines running it — the machines' reports +say so. A module whose policy says *record* is built and not waited for. So a merge +touching the build machine and the controller builds the build machine, waits until it is the build +machine that is running, and only then asks for the controller's build. + +**4. A plan is read where the mesh is read.** `status` lists every open plan: the merge, the tier it +is at of how many, what it is waiting for and since when; `builds` lists the asked beside the built. +A plan that has waited past a bound is named red there, which is the first fact of +[issue 187](../04-ISSUES/187-the-mesh-tells-nobody-when-it-stops-working/00-report.md)'s list. + +## Consequences + +- The merge handler returns in milliseconds; the receive loop is never held by a build again. Issue + 184's remaining cause — a handler that waits for its own work — is removed rather than worked + around; the bus's heartbeats stop being dropped under a merge. +- A controller roll in the middle of a plan costs nothing: the plan is in the store and the asks are + in the queue (mesh-controller 194). +- A release across repositories is a plan whose edges cross repositories; the order a person kept in + a work-order file is the order the tiers give. Issue 186's third fault is answered by the plan, + not by a separate release record. +- The explicit `build --on ` stays as the way to ask for the same plan by hand. +- A module's `build.on` remains the one place a manifest states a dependency the store cannot see. + +## How this is checked + +| Rule | Checked by | +|---|---| +| Dependencies are one relation, each edge with its kind | an inventory test over a fixture catalogue: a runtime image, a module on it, a module packaging the controller's source, and the build machine; the four kinds come back from one call | +| A merge's set is sorted into tiers along the three kinds: a code dependency in the same tier, a build dependency after its base is built, a runtime dependency after the build machine; the build machine's own base first | a unit test on the tiering over the mesh's real shape: the runtime image, the build machine on it, modules built by it, a plugin declared on one, the proxy packaging the controller, an unrelated module left out; a cycle is one last tier and said | +| Only a runtime dependency gates on deployment, and only for a module that rolls out | the same test's gate cases | +| The plan is written before any build is asked, and the handler returns | a controller test: a merge announcement produces a plan row with its tiers and one asked build per tier-0 module, and the handler is back before any outcome | +| An outcome advances its plan; a complete tier asks the next; a tier with a rolled-out base waits for the machines' reports | store-backed tests over a two-tier plan: the first outcome marks built; the tier's roll-out gate holds until the report; the next tier is asked after | +| A controller restarted mid-plan resumes it | a test that opens a plan, drops the handler, and advances from the store alone | +| `status` lists open plans and names one that waits past the bound | the status JSON test with a fixture plan | +| Live | a catalogue merge touching a base and a dependent: the plan's tiers in `status`, the base rolled before the dependent is asked | + +## Built and proven live, 2026-10-01 + +> **Progressive insight — 2026-10-01.** The decision stands; these are the facts of its building. + +Built in mesh-controller 197 (the relation, the plan record, the driver, `status`), 198 (`plans`), +199 (a `built-by` edge orders and gates but never widens — the first live plan had taken the whole +catalogue along for a controller change; `plans stop`), 200. The first merge handled by the finished +machinery, at 18:56Z, was a controller change and produced the plan this record describes: tier 0 +the build machine; tier 1 the controller and the proxy that packages its source. The handler +returned at once; the build machine was built, rolled, and the plan read *tier 0 built; waiting for +builder on novox to be applied* until the machine reported; then tier 1 was asked, both built, and +the plan read done — three minutes, read through the console with `plans`, the receive loop taking +reports throughout. What the day between decision and proof taught is in issues +[184](../04-ISSUES/184-a-merge-announcement-blocks-the-controllers-receive-loop/00-report.md), +[186](../04-ISSUES/186-a-release-across-repositories-is-an-order-in-a-persons-head/00-report.md) and +[188](../04-ISSUES/188-a-refusal-inside-on-the-network-drops-a-machine-silently/00-report.md). + +## References + +- [ADR 0157](0157-a-build-says-what-it-does-on-the-bus-as-it-happens.md), [ADR 0121](0121-a-system-seat-is-named-for-its-scope-and-modules-define-their-own.md) +- [Design 30 — The mesh updates itself on a push](../03-DESIGN/01-to-be/30-the-mesh-updates-itself-on-a-push.md) +- Issues [184](../04-ISSUES/184-a-merge-announcement-blocks-the-controllers-receive-loop/00-report.md), [186](../04-ISSUES/186-a-release-across-repositories-is-an-order-in-a-persons-head/00-report.md), [187](../04-ISSUES/187-the-mesh-tells-nobody-when-it-stops-working/00-report.md) diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md new file mode 100644 index 00000000..1eba9012 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md @@ -0,0 +1,275 @@ +--- +topic: what runs on it +status: accepted +date: 2026-10-07 +deciders: jochen +reconstructed: false +extends: 02-DECISIONS/0236-a-build-is-judged-on-its-first-machine-and-put-back-by-something-other-than-itself-and-so-it-rolls-out-unattended.md +--- + +# 240. A module says how it is healthy, and the node-engine judges it + +## Context + +The release gate ([ADR 0236](0236-a-build-is-judged-on-its-first-machine-and-put-back-by-something-other-than-itself-and-so-it-rolls-out-unattended.md) +§2) judges a catalogue module on its first machine by what the mesh sees from outside: the build reported +applied, no witness put it back, no condition raised since the send about the machine or the module there, +and its tools served. None of that looks at what the module *runs*. To-be 45 names the gap in its Phase 4: +*container state in the node-engine's report, without which a container that crash-loops after its compose +applied is seen only through what it breaks.* + +Measured on the live mesh for [research 032](../01-RESEARCH/032-a-module-says-how-it-is-healthy/00-overview.md) +([evidence](../01-RESEARCH/032-a-module-says-how-it-is-healthy/01-evidence.md)), 2026-10-07: + +- **125 catalogue modules; 68 run something long-lived** — 49 a container that stays up, 19 a service + unit stated `running` and no such container. 50 run only their bundle in the node tools, 7 only files, + directories and packages. +- **No manifest can declare a health check, and nothing reads one.** The node-engine's report carries no + container or unit state; no probe of the self-check reads one. +- **19 of 73 long-running catalogue containers have an image that ships a check** (7 of 45 container + modules). The mesh never reads it. **Two of those were wrong in the mesh's hands**: the studio and the + flow editor read *unhealthy* while working, because their checks ask an address the program does not + bind in the mesh's configuration. Read without proof, they would have rolled back two good builds. +- **Every restart count is 0**, because a recreate loses it; the runtime's event history on the home + server is about a minute long, pushed out by its own check executions. +- **Of seven recent incidents**, liveness alone would have caught the agent server's crash loop (about a + hundred restarts, found by a person reading its log for something else); an HTTP readiness check the + web application that accepted TCP and answered nothing for eleven hours + ([issue 145](../04-ISSUES/145-a-machine-reads-healthy-while-its-modules-cannot-reach-each-other/00-report.md)); + only the module's own check the identity provider's refused administrator + ([issue 179](../04-ISSUES/179-an-adopted-identity-providers-admin-never-took-the-minted-secret/00-report.md)). + A provisioner runtime that restarted until the overlay was up and then worked + ([issue 058](../04-ISSUES/058-a-provisioner-runtime-crash-loops-until-the-overlay-is-up/00-report.md)) + is the warning: a restart count without a start period reads churn that stops as a crash loop. +- **One sample is not a finding.** A single unanswered question raised an urgent alert nobody could read + ([issue 277](../04-ISSUES/277-one-unanswered-question-was-an-urgent-alert-nobody-could-read/00-report.md)); + the self-check now raises such a finding on the second look (to-be 45 §4). + +The mesh now rolls a module out on its own and puts the previous build back when the first machine is not +healthy. That promise is only as good as "healthy" is, and for a module it is judged today from the outside. + +**Checked against GENESIS.** *Failure must be loud* — a crash loop behind every passing check is work that +reported success and did nothing. *Anything requiring a human to notice it will be noticed late* — eleven +hours, and a hundred restarts, each found by a person. *Evidence over assertion* — "applied" is an +assertion about a declaration; "it answers" is a measurement. *The mesh notices when something is wrong +before you do* ([effect](../00-META/effect.md)). *Long-lived user services rather than an orchestrator* +([context](../00-META/context.md)) is why this record judges and reports, and restarts nothing on health: +an orchestrator's liveness restart is the part it does not take. *The mesh is a guest on a personal node* +bounds the cost: the checks' floors below. Nothing here conflicts with GENESIS. + +## Considered Options + +**Who runs the checks.** + +1. *The container runtime's own check, read by the node-engine.* Rejected as the whole answer: containers + only — nothing for the 19 service-only modules or anything only a module's tool knows; every look is an + execution inside the container, which on the home server already pushes every lifecycle event out of + the runtime's history; an image check the module never stated is a check nobody owns, and two of 19 were + wrong. Kept as one *kind*, adopted by name and proved. +2. *The module's own tool answers "healthy", and that is the judgement.* Rejected as the judge: a bundle is + hosted by the node tools, so a tool that answers proves the bundle up, not the server; and a component + that judges itself is what [ADR 0227](0227-the-core-holds-nine-rules-each-checked-and-is-built-to-them-in-six-phases.md) + rule 8 refuses for the core. Kept as one kind, for function no endpoint shows, and only beside a check + the module does not run itself. +3. *The node-engine runs everything itself, including commands, on its own schedule.* Rejected in part: a + command that only makes sense inside the container is better timed by the runtime's own retries and + start period than by an execution per look from outside. +4. **The node-engine owns every check and every verdict, and runs each kind where it is cheapest.** + Chosen: HTTP, TCP and unit checks it makes itself; a command it hands to the runtime as that + container's check and reads; a tool it asks through the node tools. One runner and one reader per + machine, for every hosting form, and it keeps what the runtime forgets. + +**Where the result goes.** + +1. *Only a field of the report.* Rejected alone: a report follows an apply, so a container that goes bad at + 03:00 waits for the next one. +2. *Only an event on each change.* Rejected alone: events are lost or replayed; an event is a sample, not + a state. +3. *A verb the controller calls per module when it judges.* Rejected: a pull per module per judging, and a + machine slow to answer reads as unhealthy. +4. **State in the report, its change on the bus, and a condition the controller raises on the second + look.** Chosen. It is how the core already says its own state; the gate, the self-check, the healers + ([ADR 0231](0231-a-healer-acts-on-what-observation-raised-and-only-observation-says-it-worked.md)) and + the operator's conversation ([ADR 0234](0234-the-mesh-holds-a-conversation-with-its-operator.md)) all + already act on conditions. + +**What is judged.** + +1. *Liveness only.* Rejected: no declarations needed, but it misses issue 145 (the port was open and the + program running) and issue 179. +2. *Readiness only, where declared.* Rejected: nothing is judged until every module has declared, and + liveness alone would have caught the worst incident of the window. +3. **Liveness for every long-running resource at once, readiness where declared, the declaration required + over a migration.** Chosen: the gate means something from the first build. + +**What is done with an unhealthy module.** + +1. *Restart it, as an orchestrator's liveness probe does.* Rejected for this record: the evidence holds no + case where a restart would have fixed anything — the crash loop was restarting already — and a restart + hides the failure the gate is meant to see. Whether a healer restarts what stays unhealthy is left to a + record of its own under ADR 0231. +2. **Nothing restarts on health; the condition reaches a person or a healer.** Chosen. + +**A provider down.** With 12 consumers of the database provision and 36 of a route: + +1. *Ignore it.* Rejected: twelve conditions for one fault, and twelve gates failed for something none of + them did. +2. *Judge providers first, consumers only once their providers are healthy.* Rejected: a consumer broken on + its own is not said while its provider is down, which is when it is most needed. +3. **A consumer's check names the provision it exercises; while that provision's provider is unhealthy on + the record, the consumer's finding is held under the provider's condition and its gate waits.** Chosen. + It is how [issue 281](../04-ISSUES/281-a-tier-sent-one-module-at-a-time-blamed-a-module-for-its-machine/00-report.md) + already treats a machine-level fault: what is the machine's is never pinned on a module. + +**Where the declaration sits.** + +1. *One per module.* Rejected: a module of eleven containers (the mail module) could not say which is wrong. +2. **On each long-running resource**, beside the resource's other fields. Chosen. + +**The migration.** + +1. *Required at once.* Rejected: 68 modules to change before the next merge, and nothing judged until all + are. +2. *Optional for ever.* Rejected: 38 of 45 container modules would stay at liveness, and a field that is + optional for ever is a field half the catalogue never gets. +3. **Liveness at once; the declaration required by a date, counted down.** Chosen. + +## Decision + +**1. Liveness is judged for every long-running resource, with no declaration.** A container that stays up, +a process that stays up and a service stated `running` are *alive* when running and not restarted more than +once within the settle window after their grace period. The node-engine observes this itself on each tick +and keeps the restarts it counted across recreates and across its own restarts; it never relies on the +runtime's restart count or event history. A resource held still by an open maintenance step +([ADR 0189](0189-the-store-keeps-what-the-records-name.md)) is neither alive nor dead: it is said as held, +and judged again when the step ends. + +**2. A module declares how each long-running resource is ready**, in a field named `health` on that +resource: one kind — the image's own check adopted by name, an HTTP request to a declared endpoint and the +status expected, a TCP connect to a declared endpoint, a command in the container, the unit's own +readiness, or one of the module's tools — with an interval (default 30 s, **not under 10 s**), a timeout +under the interval, a number of failing looks in a row before it is unhealthy (default 3, **not under 2**), +and a grace period after a start (default 60 s), in which failure does not count. The grace and the failing +looks together are at most five minutes, so a resource broken from its start is said within the gate's +bound. An endpoint is named by its `listens` name, never by a port or an address, so a check follows the +machine's ports as the endpoint does. A check of function that no endpoint shows is a module's own tool, and +only in addition to a check the module does not run itself. + +**3. The node-engine runs every check and owns every verdict.** HTTP, TCP and unit checks it makes itself; +a command in the container it hands to the runtime as that container's check and reads the state; an +adopted image check it reads the same way; a tool it asks through the node tools. Nothing else on the machine +judges a module, and nothing else sets a container's check. + +**4. The state goes in the report, its change on the bus, and a condition is the controller's.** Each +report carries, per module and long-running resource, a state — healthy, unhealthy, starting, held, +unknown — since when, the failing streak and the restarts counted; each change is emitted as an event, and a +state that is not healthy is said again while it lasts. The controller keeps the last state per machine, +raises `module...unhealthy` when two consecutive statements say so, and clears it on the +first that does not. **The gate needs no new rule:** ADR 0236 §2's *a module's own health holds* now reads +the module's stated health — a judging is healthy only when every long-running resource of the module on that +machine is healthy, so a resource still starting is not yet a pass — and its *no condition raised since the +send* holds the module on this condition. Every start begins in `starting`, so a condition from before the +send clears at the new build's start and anything after it is the new build's. At the gate's bound the +build is put back, as ADR 0236 §3 says. + +> **The mechanism changed — 2026-10-10, by [ADR 0283](0283-a-part-that-waits-for-the-operators-secret-or-setting-is-said-as-waiting-passes-the-first-node-gate-and-names-the-act.md).** The four states, the +> condition and the gate's reading stand. A fifth state, `waiting`, now sits beside them: a tool check +> (rule 2) may answer *waits* as well as healthy or not, naming an own secret or a setting the operator has +> yet to give, and one look that says so is enough, inside the grace too. The controller checks the wait, +> says it as `needs-operator` rather than `unhealthy`, and the gate reads it as ADR 0254's *waits for a +> person*: a pass. + +**5. A provider down is said once, at the provider.** A check names the provision it exercises. While +that provision's provider for this consumer is unhealthy on the record, the consumer's finding is held under +the provider's condition — listed there as waiting on it, raised as nothing of its own — and the consumer's +gate waits rather than fails. What a consumer finds while its provider is healthy is its own. + +> **The mechanism changed — 2026-10-11, by [ADR 0292](0292-a-consumer-of-the-part-a-provider-waits-on-is-held-under-the-wait-and-passes-its-gate-as-a-wait-for-a-person.md).** The hold under an unhealthy provider, and its consumer's gate +> waiting, stand. A provider that only waits for the operator (ADR 0283) now holds the consumers of a provision one +> of its waits covers, listed at its `needs-operator` condition, which stays a warning; their gate passes as a wait +> for a person, carrying the wait. A consumer no wait covers is said on its own. + +**6. Nothing is restarted for being unhealthy.** The runtime restarts what exits, as now. A condition +reaches a person through the operator's conversation, or a healer; a healer that restarts on health is its +own decision. + +**7. A declaration is proved before it is trusted.** `module check` refuses a `health` field that names an +endpoint the module does not declare, an interval, timeout or count outside its bounds, or a tool the module +does not serve. A bed from mesh-lab, run by the catalogue's check on the build seat, starts every resource +whose declaration or image changed and requires its check to say healthy within its grace; an image check +adopted by name is proved the same way, because two of nineteen were wrong. This proves the check's +wiring — that it can see the program working — not the change, which the live mesh and the first machine's +gate still judge ([ADR 0149](0149-the-live-mesh-is-the-test-bed.md) stands). + +**8. Every catalogue module that runs something long-lived declares one.** A catalogue-wide count of the +long-running resources without `health` may only go down. `module check` warns from this decision, and +refuses a long-running resource without `health` once the count reaches zero, or six weeks after liveness is +first judged live, whichever is first. A module running nothing long-lived — its bundle only, or files and +packages — declares none: the node tools serving its tools is its liveness, as the gate judges today. + +## Consequences + +- **Liveness alone, from the first build, would have caught the crash loop inside the gate's ten minutes.** + Readiness would have caught the silent web application in about a minute instead of eleven hours. The + identity provider's refused administrator needs the module's own tool, which it already has (ADR 0224 §5). +- **The node-engine grows a small scheduler, a field of its report and an event; the controller a condition + kind and its two-look rule; the gate a reading of state it already had a place for.** A machine of 45 + containers spends tens of milliseconds a look reading state, and about 3 s a minute on in-container + commands at the default interval. +- **A module whose first machine was unhealthy before the send no longer passes the gate for being + unchanged in its unhealthiness** — the start resets it to `starting`, and the new build is judged on its + own. +- **What a check names becomes load-bearing.** A check naming the wrong provision hides a consumer's own + fault under its provider; the bed and the first machine's gate are what catch that. +- **Harder:** a slow starter — a module that needs more than five minutes to be ready — cannot say so + within these bounds and fails its gate. That is accepted until one exists; it would be a change to the + bound, recorded. +- **A provider's health and its consumers' failures meet in two places**: this record's condition (the + provider's resource is unhealthy) and ADR 0224's standing (the provider keeps failing a consumer). They + are different facts, both kept; the hold of rule 5 reads only this record's. +- **Data is not health.** Whether a module's data is there, measured and backed up stays + [ADR 0233](0233-a-module-declares-the-data-it-holds-and-the-mesh-protects-and-watches-it-from-that.md)'s, + watched by the self-check's D13. + +## What this does not decide + +- Whether a healer restarts what stays unhealthy (rule 6 leaves it to its own record, under ADR 0231). +- Health for scheduled work — whether the last scheduled run succeeded belongs to the record of the + scheduled step. +- Health of what a module's events do ([issue 276](../04-ISSUES/276-a-handler-that-did-its-work-was-offered-it-five-times/00-report.md)) + — the event contract's, and the bus watchdog's. +- The core's own definitions (ADR 0236 §1, to-be 45 §8), which stand; a core component may later declare its + own through the same field. + +## How it is checked + +| Rule | Checked by | +|---|---| +| 1 Liveness without declaration | node-engine tests over a fake runtime and service manager: a container recreated keeps its counted restarts, and so does the engine restarted; a restart inside grace is not counted; two restarts within the settle window after grace make it unhealthy; a resource under a maintenance step is held. A mesh-lab replay of the crash loop (a container whose program exits at start) fails its gate within the bound | +| 2 The field and its bounds | `module check` refuses each out-of-range part and each endpoint named by port or address, a test per refusal; a catalogue-wide test parses every `health` field | +| 3 The engine owns the verdict | a node-engine test that a declared command becomes the container's check and nothing else sets one; a test that an HTTP check dials the endpoint's current port after a port change | +| 4 Report, event, condition, gate | controller tests: one unhealthy statement raises nothing and is listed unconfirmed; two raise; a healthy one clears; the gate fails a judging while a resource is starting or unhealthy and holds a module on this condition (the existing gate test, extended); a condition from before the send clears at the new build's start. A replay of issue 145 — a database made unreachable — raises the consumer's condition within two looks | +| 5 Said once at the provider | a controller test with one unhealthy database provider and three consumers failing: one condition, at the provider, the consumers listed as waiting; their gates wait, not fail; a consumer failing while its provider is healthy is raised on its own | +| 6 No restart on health | a node-engine test that an unhealthy container is not restarted, recreated or stopped | +| 7 Proved before trusted | the bed's run of every changed declaration in the catalogue's check; the replay of the studio's false *unhealthy* (a check that asks an address the program does not bind) fails the bed, not a machine | +| 8 Every long-running module declares | the catalogue-wide count of long-running resources without `health`, compared with the number kept in the catalogue: a merge may lower it and never raise it; after the date, `module check` refuses | +| live | every machine's report carries a state for every long-running resource; `conditions` raises `module...unhealthy` for a module stopped on purpose and clears it when it runs | + +## References + +- [Research 032](../01-RESEARCH/032-a-module-says-how-it-is-healthy/00-overview.md) — the evidence, the + options and the recommendation this record takes. +- [To-be 48](../03-DESIGN/01-to-be/48-a-module-says-how-it-is-healthy.md), the design. +- [ADR 0236](0236-a-build-is-judged-on-its-first-machine-and-put-back-by-something-other-than-itself-and-so-it-rolls-out-unattended.md) + §2, whose module health this gives a content; + [ADR 0227](0227-the-core-holds-nine-rules-each-checked-and-is-built-to-them-in-six-phases.md) rules 5, 6 + and 8 and [to-be 45](../03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md) §2, §4 and §8 — the + condition, the second look, the witness that is never the component; + [ADR 0224](0224-a-provider-that-keeps-failing-a-consumer-is-a-problem-the-controller-reports.md), + [ADR 0231](0231-a-healer-acts-on-what-observation-raised-and-only-observation-says-it-worked.md), + [ADR 0233](0233-a-module-declares-the-data-it-holds-and-the-mesh-protects-and-watches-it-from-that.md), + [ADR 0234](0234-the-mesh-holds-a-conversation-with-its-operator.md), + [ADR 0189](0189-the-store-keeps-what-the-records-name.md), + [ADR 0149](0149-the-live-mesh-is-the-test-bed.md), + [ADR 0237](0237-a-change-is-judged-against-the-mesh-that-runs-before-it-merges-on-the-build-seat.md). +- Issues 058, 145, 179, 181, 276, 277, 281. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0249-a-delivery-groups-order-rules-have-a-precedence-and-a-declared-order-outranks-them-all.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0249-a-delivery-groups-order-rules-have-a-precedence-and-a-declared-order-outranks-them-all.md new file mode 100644 index 00000000..acd7c2b9 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0249-a-delivery-groups-order-rules-have-a-precedence-and-a-declared-order-outranks-them-all.md @@ -0,0 +1,99 @@ +--- +topic: the mesh +status: accepted +date: 2026-10-08 +deciders: jochen +reconstructed: false +supersedes-in-part: + - 02-DECISIONS/0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md +extends: 02-DECISIONS/0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md +--- + +# 249. A delivery group's order rules have a precedence, and a declared order outranks them all + +## Context + +[ADR 0239](0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md) +decision 4 orders a delivery group's members by a line `after: ` and by three inferred rules: +*built by* (a member that moves a module goes before a member whose modules are built by it or stand on +it), *version skew* (the controller before a manifest change) and *engine before controller* (the +node-engine before the controller, from ADR 0236's order for its walks). It says nothing about two rules +ordering one pair in opposite directions. The planner treated every such pair as a cycle, and a declared +order against an inferred one as a cycle too. + +On 2026-10-08 the group `feat/a-machine-joins-through-the-tunnel` held three pull requests, each `ready` +on its own: the controller's, the node-engine's and the lab's +([issue 309](../04-ISSUES/309-two-order-rules-ordered-one-pair-both-ways/00-report.md)). The controller's +repository also holds the build agent, and its pull request moved it. Every source-built module is built +by the build agent, so *built by* put the controller's member first. *Engine before controller* put the +node-engine's member first. The group was rejected: "its order contradicts itself", naming the two +members and neither rule. The person merged it by hand, the controller first, since that member only added +a verb the new node-engine calls. That is the order *built by* gave, and the order +[ADR 0246](0246-a-seats-new-verb-is-promised-before-it-is-required.md) asks for: a verb is promised before +it is required. + +The rules are not of one kind. *Built by* and *version skew* are read from the graph and from what the +change does: which module builds which, and whether a manifest changes. *Engine before controller* is +read from two module names alone. It holds when the controller starts sending something the node-engine +must first accept. It is wrong when the node-engine starts asking for something the controller must first +serve, as here. The rule cannot tell the two apart. + +## Considered Options + +1. **A precedence among the rules, and a declared order above them all.** Chosen. +2. **Narrow *built by* so it never applies through the build agent to the node-engine.** It would end + this case. But a builder that changes how the node-engine is built does have to go first, and the next + pair of rules that disagree would be refused the same way. Rejected. +3. **Drop *engine before controller*.** ADR 0236's reason still holds when the node-engine is what must + accept something new. Rejected. +4. **Keep refusing, and name the two rules.** Then every group that moves the controller's repository and + the node-engine together is refused, and the person must still merge by hand. A declared order could not + help, because a declared order against an inferred one was also a cycle. Rejected. + +## Decision + +1. **When rules order one pair of members in opposite directions, the rule of higher precedence decides.** + From highest to lowest: + - *declared*: an `after:` line a person wrote; + - *built by* and *version skew*: what the graph and the change say; + - *engine before controller*: the default for walks, read from module names alone. +2. **A declared order outranks every inferred rule.** This replaces ADR 0239 decision 4's sentence "a + declared order that contradicts an inferred one is a cycle". A person who knows the order the rules + cannot see writes one line, and the group follows it. +3. **The order says which rule won.** Each pair carries its rule and the rules it won over. The delivery's + `show`, `groups` and plan note print them, for example "the controller's member before the node-engine's: + built by, over engine before controller". +4. **Rules of one rank in opposite directions are still refused.** Two `after:` lines naming each other, + or *built by* both ways, have no precedence between them. The group is rejected. The reason names both + members, both rules and the direction each gives, and says how to declare the order. A cycle through + three members or more is refused naming the pairs in it. + +## Consequences + +- The group of issue 309 is ordered without a person: the controller's member first. +- A group can no longer be refused because a person's `after:` disagrees with an inferred rule. The person + can now overrule *version skew*, and a manifest change merged before the controller that parses it fails + at the gate, not silently. The rule the person overruled is printed on the pair. +- *Engine before controller* now decides only where nothing in the graph or the pull requests does. +- The ranks are a list in the controller's planner. A new inferred rule must be given a rank when it is + added. + +**How it is checked.** The controller's tests `TestAnOrderRuleYieldsToAStrongerOne` and +`TestAGroupIsOrderedByTheGraphAndWhatItsPullRequestsSay` check that *built by* wins over *engine before +controller*, that a declared line wins over both and over *version skew*, that each pair names what it won +over, and that equal-rank rules both ways are refused with both rules named and the `after:` lines to +write. mesh-delivery's `TestAGroupSaysWhichOrderRuleWonOrWhyNoneDid` and +`TestACycleWithoutAContradictionNamesItsPairs` check that the refusal and the won-over rules reach +`groups` and the group's state. The replay R309 in mesh-lab's register fails before the fix and passes on it. + +## References + +- [Issue 309](../04-ISSUES/309-two-order-rules-ordered-one-pair-both-ways/00-report.md), its report and + diagnosis. +- [ADR 0239](0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md) + decision 4, the sentence this replaces. +- [ADR 0236](0236-a-build-is-judged-on-its-first-machine-and-put-back-by-something-other-than-itself-and-so-it-rolls-out-unattended.md), + *Rollout order*, where *engine before controller* comes from. +- [ADR 0246](0246-a-seats-new-verb-is-promised-before-it-is-required.md), a verb promised before it is + required. +- [Design 47](../03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md), *A delivery group*. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md new file mode 100644 index 00000000..38248b47 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md @@ -0,0 +1,249 @@ +--- +topic: the mesh +status: accepted +date: 2026-10-10 +deciders: jochen +reconstructed: false +supersedes-in-part: + - 02-DECISIONS/0162-a-merge-produces-a-tiered-plan-the-mesh-keeps.md + - 02-DECISIONS/0218-a-plan-sends-grants-before-code-rolls-out-one-machine-first-and-a-newer-merge-takes-over-an-older-plan.md + - 02-DECISIONS/0238-a-commit-is-the-build-at-hand-one-commit-one-change-plan-checked-off-the-trunk-and-published-only-on-it.md + - 02-DECISIONS/0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md +extends: 02-DECISIONS/0249-a-delivery-groups-order-rules-have-a-precedence-and-a-declared-order-outranks-them-all.md +--- + +# 276. Merges are assembled in a rolling window, and each batch is delivered by one walk with one commit per repository + +> **Superseded in part — 2026-10-10, by [ADR 0282](0282-a-fix-to-a-leaf-module-runs-healthy-on-every-node-within-five-minutes-of-its-merge-and-a-core-module-within-ten.md).** +> Decision 4's "one walk at a time", and decision 1's window for every merge, no longer hold: a lone merge is +> cut at once, and walks that share no repository, module or edge of the module graph run at once, one +> first-node judgement per node at a time. Two walks of one repository never at once, no walk superseded once +> it started, and the window for a merge that waits for its delivery group or arrives while a batch assembles +> stand as decided here. + +## Context + +Shortly after midnight on 2026-10-10 two pull requests of the catalogue were merged 18 seconds apart, the +claude-code change at 00:20:52 and the dunst change at 00:21:09 +([issue 362](../04-ISSUES/362-two-merges-seconds-apart-left-their-delivery-waiting-for-a-person/00-report.md)). +The controller opened one walk for each merge, as [ADR 0162](0162-a-merge-produces-a-tiered-plan-the-mesh-keeps.md) +decided ("a merge produces a tiered plan"). The second walk superseded the first, as +[ADR 0218](0218-a-plan-sends-grants-before-code-rolls-out-one-machine-first-and-a-newer-merge-takes-over-an-older-plan.md) +decision 3 decided, and both were planned at the dunst commit, as the fix for +[issue 349](../04-ISSUES/349-a-merge-acted-on-late-superseded-the-merge-after-it-and-built-the-older-commit/00-report.md) +decided. mesh-delivery then tied the surviving walk to the dunst delivery, which the supersession had already +ended, and tied no walk to the claude-code delivery. Nothing gave the walk its word. The change waited 58 +minutes, until the operator started the walk by hand with `plans go`. + +The diagnosis found two parts that each behave as written and disagree on what a walk's commit means. That +is the narrow cause. The wide one is that the mesh plans one walk per merge, while merges arrive in bursts: + +- **A burst is the normal case.** The operator merges a batch of reviewed pull requests at once, often + across repositories (a catalogue change with the controller change it needs). Every merge opened a walk, + and every walk after the first superseded the one before. Three supersession paths now exist (ADR 0218, + issue 254, issue 349), each with its own bookkeeping, and issue 362 is a fourth way for them to disagree. +- **A walk superseded mid-gate wastes the gate and confuses its record.** A first machine judged healthy + for a build that the next walk replaces a minute later proves nothing about the build that stays. On + 2026-10-09 a controller merge landing while another walk was at its gate rolled everything back; the rule + "one controller rollout at a time" was kept since then by the person merging, not by the mesh. +- **ADR 0239 made a delivery "one commit … from commit to delivered" and walked it alone**, while its own + decision 4 delivers a delivery group across repositories as one unit. The walk the commit gets is + decided by when the controller heard its merge, which is not something the person merging controls. + +On 2026-10-10 the operator decided the model, in their words: + +> "a delivery doesn't really 'run from commit to delivered', we've already discussed that a delivery plan +> might start with a set of commits spanning multiple repo's, however, only 1 commit per repo is allowed +> … we assemble all commits that are coming in with a 1 minute rolling window, so if a new commit comes +> in, less then 1 or 2 minutes after the last one, the builder again waits 1 or 2 minutes, until no new +> commit came in, then it looks at the 'group of commits' and decides if they all fit into 1 delivery +> plan … This is a hard problem to tackle, but it will improve our build setup I believe." + +> "the 'actively assembling plan' is very interesting, the controller can say 'Still waiting for 13 +> seconds for new commits, these are the currently grouped commits, plan is yet to be calculated'." + +On two commits of one repository in one window, the operator chose the later commit over splitting: +"i like your idea better, I just thought it would be more complex, but if it's reasonably doable, go for +it". + +**Checked against GENESIS.** *Failure must be loud*: an assembling batch and a waiting walk each have a +bound and a condition. *The mesh owns the truth*: the window, the batch and the walk are kept by the +controller and shown by its `plans`, not inferred from timing by a person. Nothing here conflicts with +GENESIS. + +**Words.** The glossary had no word for the merges one window collects, nor for the window. This record +adds **merge window** and **batch** to it (Change and delivery), with this record. *Group* is not used for +either, because **delivery group** already names deliveries that share a head branch name. + +## Considered Options + +**What a walk answers.** + +1. **One walk per merge, as today, with the bookkeeping repaired.** The walk names the merges it answers, + and mesh-delivery ties a superseding walk to every live delivery it contains. Rejected as the model, + kept as a repair (decision 8): it makes the 362 shape deliver, but every burst still opens and + supersedes walks, a walk can still be superseded at its gate, and a cross-repository change is still + walked as separate walks in whatever order the merges were heard. +2. **A rolling merge window, and one walk per batch** (chosen). Merges are collected while they keep + arriving; the batch they form is planned once, as one walk with at most one commit per repository. +3. **Every walk started by hand.** The operator named it as the alternative ("this does mean we need to + manually start all delivery plans, or, even better, …"). Rejected: a person in every delivery is the + wait ADR 0239 exists to remove, and a merge that passed its checks must reach its machines without a + person. + +**Two commits of one repository in one batch.** + +1. **Split into two walks in merge order** (the operator's first proposal). The second walk waits for the + first. Rejected: every machine running the module builds, is sent and is judged on the earlier commit, + and then again on the later one minutes after; the gate judges a build that is about to be replaced; + and the batch's walk stops being one unit. +2. **One walk with the later commit** (chosen). On a linear trunk the later merge commit contains the + earlier one, so building it delivers both. One build, one gate, one rollout. The earlier merge is + answered by its successor and ends `covered` when the walk is delivered. Only when that walk fails are + the earlier merges walked on their own, to find which one brought the failure. + +**Who keeps the window.** + +1. **mesh-delivery**, which owns deliveries (ADR 0239). Rejected: a walk on the controller's own path (the + controller, the node-engine, the node tools, the bus, mesh-delivery itself) must not wait for + mesh-delivery, and with no holder of the seat on record the controller plans alone. The window would + then exist twice, once in each. +2. **The controller** (chosen). It hears every merge (the bus, and the catch-up that reads back what the + bus missed), it owns the planner and the walk, and it already plans alone for its own path. mesh-delivery + keeps what it owns: each commit's delivery record, the order of a delivery group, and the word that lets + a waiting walk start. + +## Decision + +1. **A rolling merge window.** The controller collects every merge into a branch a module follows into the + open **batch**. The window is rolling: each merge restarts it. It closes when no merge arrived for the + window's length, 90 seconds by default (the controller's setting `merge-window`), and at the latest 10 + minutes after the batch's first merge (`merge-window-at-most`), so a busy period never starves delivery. + The batch, its merges and its times are kept in the controller's store, so a restarted controller + resumes the window where it stood rather than losing or doubling a merge. +2. **A batch is planned once, as one walk with at most one commit per repository.** When the window closes, + the planner computes one delivery plan for the batch: every module its commits move, their dependents, + in tiers along the module graph, across repositories. For a repository with two or more merges in the + batch the walk takes the latest commit of its branch, which contains the earlier ones. **Every merge + belongs to exactly one walk**: the walk names every merge it answers, its own commits and the earlier + ones they contain. A merge is never dropped and never walked twice. +3. **The earlier merge of a repository is answered by its successor.** Its delivery follows the walk and + ends `covered` when the walk is delivered, naming the merge that carried it (the glossary's word, + [ADR 0270](0270-a-held-delivery-that-moves-nothing-or-that-a-later-delivered-merge-contains-ends-by-itself-and-a-hold-whose-reason-is-gone-lifts.md); + here the containment is the trunk's order inside one batch, so the forge is not asked). **When that walk + fails**, the walk's own commits fail, and each earlier merge it answered is walked on its own commit, the + newest first, one walk each, in the next batches: the first that is delivered ends `delivered`, and the + search stops there. A walk that failed never marks a merge delivered. +4. **One walk at a time, and nothing supersedes a walk that started.** A batch becomes a walk only when no + walk is open. Merges that arrive while a walk runs join the next batch, whatever its window says. A walk + that has not started, because it waits for mesh-delivery's word, is folded into the next batch when that + batch is planned, and the new walk answers every merge the folded one answered. This is the only + supersession left; ADR 0218 decision 3 and the issue 349 rule of planning a late merge at a later commit + are replaced by it. A merge heard after a later merge of its repository and branch was put in a walk is + answered by that walk: by the batch still assembling, by the open walk, or, when that walk was delivered, + it ends `covered` at once. + + > **The mechanism changed — 2026-10-10, by [ADR 0282](0282-a-fix-to-a-leaf-module-runs-healthy-on-every-node-within-five-minutes-of-its-merge-and-a-core-module-within-ten.md).** + > What stands: the window for a merge whose delivery group has a member not yet merged or that arrives while a + > batch assembles (decision 1), two walks of one repository never at once, and no walk superseded once it + > started. What moved: a lone merge is cut at once without the window, and walks that share no repository, + > module or module-graph edge run at once, one first-node judgement per machine at a time. Until ADR 0282's + > second and fourth slices are built, the window for every merge and one walk at a time hold. +5. **The order of a delivery group holds inside a walk** (ADR 0249 unchanged). The pairs its order rules + give (declared, built by, version skew, engine before controller, each with the rule that won) become + edges of the walk's tiers beside the module graph: the modules of a member ordered after another are in + a later tier than that member's. A contradiction still rejects the group before anything merges. + mesh-delivery gives a walk its word only when every delivery it carries is at its turn. +6. **A delivery is one commit's record, and its walk is the batch's.** A delivery keeps its pull request, + its status, its note and its check, as ADR 0239 decided. From its merge on it is delivered by the walk + that answers it, and every delivery a walk carries ends with that walk's result: `delivered` (its own + commit) or `covered` (an earlier commit of the same repository) when the walk is done, `failed` when it + fails, `stopped` when it is stopped. The walk's machine steps are recorded on each delivery it carries. +7. **The assembling state is shown.** The controller's `plans` lists the open batch first, as the operator + asked: "assembling: 13 s left (at the latest 00:31:09); grouped: novox/mesh-catalog@48bda475 (answers + 553b7191), novox/mesh-controller@a6bc0931; plan not yet calculated". It says the batch on the bus as + `plan-moved` with the state `assembling`, so mesh-delivery's `deliveries` and `show` say of a merged + delivery that its batch is assembling and how long is left, and of one whose batch waits that it waits + behind which walk. +8. **The bookkeeping is repaired as well** (the narrow cause of issue 362), because decision 4 keeps one + supersession path. A walk names every merge it answers, and a superseded walk names the walk that took it + over. mesh-delivery ties a walk to every live delivery whose merge it answers, follows a walk to the one + that took it over, and **never ties a walk to a delivery that has ended**. A walk waiting for the word + that no live delivery holds is either adopted as a delivery of its own or listed at once by `stalled`. +9. **Every wait has a bound and a condition.** A batch still assembling a minute past + `merge-window-at-most` while no walk is open raises a condition: the controller failed to cut it. A + batch waiting behind an open walk longer than that walk's bound raises one naming the walk. A walk + waiting for its word past 30 minutes is S16's, as before, and its words name the merges it answers. A + merged delivery no walk answers within ten minutes is held with the true reason (which open walks of its + repository exist and that none names its merge, or that the controller holds none) and listed by + `stalled` at once, so probe D14 raises it for the operator. + +> **Decided during the build, 2026-10-10** (on the operator's delegation). Decision 2 batches every merge of the +> window together, and decision 4 starts a walk on the controller's own path without mesh-delivery's word. A +> batch holding both a merge on that path and a catalogue merge would therefore start the catalogue's deliveries +> without their word: their turn in a delivery group, their holds, and the order of decision 5 would be skipped. +> So **a merge on the controller's own path never shares a batch with a merge that waits for the delivery's +> word.** Such a merge goes into a batch of its own, with its own window; the open catalogue batch closes and is +> cut by the normal rules, and queues behind the own-path walk like any other. Catalogue merges heard during the +> own-path batch's window join the next catalogue batch. An own-path walk being cut folds no catalogue walk that +> waits for its word: that walk's merges are batched again behind it, and the walk names that batch as the one +> that took it over, so no catalogue delivery ever skips its turn. Checked by the controller's test +> `TestAMergeOnTheControllersPathNeverSharesABatch`. + +## Consequences + +- **A merge waits up to 90 seconds before it is planned**, and up to 10 minutes in a busy period. A walk + takes minutes to build and longer to judge, so the wait is small beside it, and it removes the builds, + sends and gates that a superseded walk wasted. +- **A cross-repository change merged within a window is walked as one unit**, tiered by the graph and its + group's order. A person no longer has to merge in order and wait in between. +- **One walk at a time is mechanical.** A controller merge can no longer land in the middle of another + walk's gate; it waits for the next batch. +- **A failing walk fails every delivery it carried**, including one whose own modules passed before the + failure. Each delivery's machine steps say how far it got, and decision 3's search finds the culprit only + among the merges of one repository. A failure in a walk that carried several repositories is the + operator's to read. This is the price of one unit, and the operator chose it. +- **What got harder**: the controller's merge handling holds state across merges (the open batch) and is + restart-safe; the walk's record names several repositories and commits instead of one, and every reader of + it (`plans`, S3, S16, `plan-moved`, mesh-delivery) changes with it. The store gains the batch and the + merges a walk answers, as a numbered migration and in the consolidated schema. + +> **Progressive insight — 2026-10-10.** The controller has no consolidated schema file: a fresh install runs its +> numbered migrations from the first, embedded in the build, so the numbered migration (0089) is the whole of +> the schema change. The bullet above said "as a numbered migration and in the consolidated schema"; that second +> half describes mesh-delivery's kind of store, not the controller's. The decision stands. +- **The replay of issue 362** in the lab raises a mesh, merges two commits of one repository 18 seconds + apart, and passes when one walk delivers both without a person; it fails on the commit before the change. + +## How it is checked + +- The controller's tests: two merges of one repository 18 seconds apart make one batch and one walk at the + later commit, answering both; merges in three repositories within the window make one walk; a merge at + second 80 restarts the window; the window closes at `merge-window-at-most` however busy; a merge arriving + while a walk runs joins the next batch; a walk that has not started is folded into the next one; `plans` + shows the assembling state; the batch survives a restart; the two conditions of decision 9 are raised past + their bounds and not before. +- mesh-delivery's tests: both deliveries of one walk end `delivered` and `covered` with its done record; a + failed walk marks none delivered and walks the earlier merge alone; a walk is never tied to an ended + delivery; a walk is given its word only when every delivery it carries is at its turn; a group's order is + unchanged; a held delivery with no walk names the true reason and is listed by `stalled`. +- Each of those tests fails with its part of the change removed. +- mesh-lab's replay R362 (decision's consequence above), proved to fail before the change and pass after it. + +## References + +- [Issue 362](../04-ISSUES/362-two-merges-seconds-apart-left-their-delivery-waiting-for-a-person/00-report.md), + its diagnosis, and the replay R362 in mesh-lab. +- [ADR 0162](0162-a-merge-produces-a-tiered-plan-the-mesh-keeps.md) (a merge produces a plan), + [ADR 0218](0218-a-plan-sends-grants-before-code-rolls-out-one-machine-first-and-a-newer-merge-takes-over-an-older-plan.md) + decision 3 (a newer merge takes over an older plan), [ADR 0238](0238-a-commit-is-the-build-at-hand-one-commit-one-change-plan-checked-off-the-trunk-and-published-only-on-it.md) + decision 2 (one commit, one change plan), [ADR 0239](0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md) + (a delivery walked by its own commit's walk), each superseded in the part this record names. +- [ADR 0249](0249-a-delivery-groups-order-rules-have-a-precedence-and-a-declared-order-outranks-them-all.md), + whose order rules this record keeps and uses as tier edges. +- [ADR 0270](0270-a-held-delivery-that-moves-nothing-or-that-a-later-delivered-merge-contains-ends-by-itself-and-a-hold-whose-reason-is-gone-lifts.md), + whose `covered` ends an earlier merge of a repository. +- [Issue 349](../04-ISSUES/349-a-merge-acted-on-late-superseded-the-merge-after-it-and-built-the-older-commit/00-report.md), + whose rule decision 4 replaces. +- To-be [47](../03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md) and + [10](../03-DESIGN/01-to-be/10-delivery.md), amended with this record. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0282-a-fix-to-a-leaf-module-runs-healthy-on-every-node-within-five-minutes-of-its-merge-and-a-core-module-within-ten.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0282-a-fix-to-a-leaf-module-runs-healthy-on-every-node-within-five-minutes-of-its-merge-and-a-core-module-within-ten.md new file mode 100644 index 00000000..29ad016f --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0282-a-fix-to-a-leaf-module-runs-healthy-on-every-node-within-five-minutes-of-its-merge-and-a-core-module-within-ten.md @@ -0,0 +1,236 @@ +--- +topic: the mesh +status: accepted +date: 2026-10-10 +deciders: jochen +reconstructed: false +extends: 02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md +supersedes-in-part: + - 02-DECISIONS/0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md +--- + +# 282. A fix to a leaf module runs healthy on every node within five minutes of its merge, and a core module within ten + +## Context + +On 2026-10-10 the operator asked, in their words: "we definitely need to speed up our bug fixing process so a +bugfix can land deployed and rolled out in less than 5 minutes". Issue 382 in the issue tracker (a small fix took +45 minutes to reach a node) names the causes it saw: a 90-second merge window, one walk at a time, about four to +five minutes per tier, and three judgement passes for every module. Issue 338 (a module built from a shared +repository moves on every merge to it) names a fourth: every merge of the controller walks two catalogue modules +in two more tiers. + +### What was measured + +Every walk the controller keeps (`delivery-walks`) records, per module, when its build was asked and finished, +when its first node was sent it, when the first-node gate judged it and when the rest were sent. Read on +2026-10-10 for the 51 walks that finished between 2026-10-09 13:55 and 2026-10-10 17:32 (UTC), each walk's time +from its merge to its builds being sent to every node it targets splits into these phases. A walk is a **core** +walk when it moves a module of the controller's own path (the controller, the node-engine, the tool runner, the +bus, mesh-delivery) or the mesh's resolver, and a **leaf** walk otherwise. Nine walks that failed or were folded +into another are not counted. + +| Phase, in minutes | Leaf: median | Leaf: worst | Leaf: share | Core: median | Core: worst | Core: share | +|---|---|---|---|---|---|---| +| the merge window: merge to walk opened (a wait over 2.2 counted as 1.8 of window, the rest as waiting) | 0.5 | 2.1 | 9 % | 0.4 | 2.1 | 7 % | +| waiting behind another walk | 0.3 | 59.1 | 47 % | 0.0 | 1.8 | 1 % | +| build | 0.4 | 1.6 | 5 % | 1.2 | 4.1 | 14 % | +| built to sent to the first node | 0.3 | 0.6 | 3 % | 0.5 | 3.0 | 5 % | +| first-node judgement, the longest of each tier | 2.6 | 6.3 | 27 % | 7.2 | 14.9 | 63 % | +| first nodes of one tier judged one after another | 0.0 | 4.2 | 8 % | 0.0 | 0.0 | 0 % | +| judged to sent to the rest | 0.0 | 0.9 | 2 % | 0.5 | 5.1 | 6 % | +| between tiers | 0.0 | 0.6 | 0 % | 0.0 | 1.0 | 3 % | +| **merge to sent to every node** | **6.0** | **66.0** | | **9.7** | **20.5** | | + +- **Leaf walks** (20): median 6.0 minutes, 90th percentile 14.8, worst 66.0; **7 of 20 within five minutes**. + The worst is the incident of issue 362 (58 minutes waiting for a person's word), which ADR 0276 already + repaired; without it the worst wait behind another walk is 13.3 minutes. Since the merge window went live on + 2026-10-10 at about 12:40, a lone merge waits 1.6 to 2.1 minutes for its window (median 1.8), and **4 of the 9 + leaf walks since then waited behind another walk**, for 1.8, 4.9, 9.5 and 13.3 minutes, each behind a walk of + the controller's own path. +- **Core walks** (31): median 9.7, 90th percentile 17.0, worst 20.5; 4 of 31 within five minutes. They are two + populations. **13 core walks had one tier**: median 5.6, 90th percentile 7.2, worst 8.8. **18 walks + were controller merges that also walked the build agent and the route proxy** in tiers of their own (issue + 338): median 14.2, worst 20.5, none within ten minutes. +- **The first-node judgement** is three healthy readings, at least forty seconds apart and two minutes after + the send (ADR 0236 decision 2). It took a median of 2.4 minutes for a core module other than the controller (10 + judgements), 3.6 minutes for the controller (19 judgements, worst 4.3, its readiness includes its + self-check), and 2.6 minutes per tier of a leaf walk. **Five of the 20 leaf walks judged two first nodes one + after the other** within one tier (a module first on one node, another first on a second), adding 3.0 to 4.2 + minutes each. +- **The build is small**: a median of 0.4 minutes for a leaf walk and 0.6 minutes for a core walk of one tier. +- **The rest are sent at once already**: a leaf walk sends the rest a median of 0.0 minutes after its judgement. + The walk ends when the rest are *sent*, not when they run the build. Applying a send takes a median of 10 to + 17 seconds per node (the controller's `durations`, seven days, every node), so the measured times are short of + "healthy on every node" by about a quarter of a minute. +- **The merge gate does not build the module.** Its record for a controller pull request on 2026-10-10 shows it + clones the repositories, composes every node's declaration with the change, compiles the controller only to + judge the change with itself (3.2 seconds), and runs the repository's `merge-check.sh` (6 minutes 13 seconds, + before the merge). No artifact is built that the merge could reuse; the merge's build is the first. + +Three limits of the measurement: a walk opens only when the walk before it ends, so time beyond the window's +own 1.6 to 2.1 minutes is counted as waiting; the walk keeps only the last judgement pass, so the time of a +first pass is estimated below, not measured; and the check before the merge is not counted, because the +operator's target starts at the merge. + +**Checked against GENESIS.** *Anything requiring a human to notice it will be noticed late*: a fix that takes +fifteen minutes to land is noticed by the operator waiting for it. *Failure must be loud*: a delivery over its +budget raises a condition. *Evidence over assertion*: every lever below is weighed by what it would have saved +in the walks above. Nothing here conflicts with GENESIS. + +**Words.** The glossary has no word for the time from a merge to its modules running healthy everywhere, nor for +the time it is held to, nor for the two kinds of module. This record proposes **delivery time**, **delivery +budget**, **core module** and **leaf module** for the Change and delivery domain, with this record. + +## Considered Options + +Each lever is weighed by what it saves in the 20 leaf walks measured, against what it costs. + +1. **No merge window for a lone merge** (chosen). Saves the window's 1.8 minutes on every lone merge. The window + exists to put the parts of one change, merged together across repositories, into one walk (ADR 0276). A + merge whose delivery group has no member still unmerged has no part to wait for. +2. **Independent walks in parallel** (chosen). Saves the wait behind another walk: 1.8 to 13.3 minutes in 4 of + the 9 leaf walks since the window went live, 34.7 minutes over the 19 leaf walks outside the issue 362 + incident. Its cost is two builds judged on one node at once, which the rules in decision 3 keep apart. +3. **Judgement passes by the module's class** (chosen). One healthy reading takes an estimated minute after the + send (a send applies in 10 to 17 seconds, and the controller acted on a build in a median of 0.3 minutes), + against 2.6 minutes for three. Saves about 1.5 minutes per tier of a leaf walk. The cost is a crash that shows + only after the first reading, which a second reading forty seconds later catches for a module with a + long-running resource. A module whose every resource is a tools bundle has no process of its own to crash: the + tool runner serves its tools or does not. +4. **The first nodes of one tier judged at once** (chosen; not in issue 382, found by the measurement). Saves + 3.0 to 4.2 minutes in 5 of the 20 leaf walks. +5. **Reuse the merge gate's build of the pull request's head** when the merged tree equals the checked one. + Rejected: the merge gate builds no artifact today (see Context), so there is nothing to reuse. Building every + head's artifacts at its check, to save the merge's build, would save at most the build's median 0.4 minutes + for a leaf walk, cost a build on every push to a pull request, and need ADR 0238 decision 1 ("anything built to + check it is never registrable") reopened. +6. **A build cache.** Rejected as a lever of this record: the build is 5 % of a leaf walk's time, and the + artifact that did not change is already not rebuilt (ADR 0267's build source). +7. **Sending the rest at once after the first passes.** Already so: the rest are sent a median of 0.0 minutes + after the judgement. Nothing to gain. +8. **The plan says when it is expected to land** (chosen). Saves no time. It tells the operator, while waiting, + when to look, from the same measurements. +9. **One budget for every module, five minutes.** Rejected: a core module's judgement is what protects the + mesh's ability to reach a node at all. A broken node-engine, tool runner, bus or resolver cannot be put back + from outside the node, and the controller judges every other build. The controller's judgement alone takes 3.6 + minutes; its three readings are kept. + +With options 1 to 4 applied to the 20 measured leaf walks (no window, no wait, one judgement of about a minute +per tier with its first nodes at once, plus a quarter of a minute for the rest to apply), the median would be 2.1 +minutes and the worst 5.3; **19 of 20 within five minutes**, against 7 of 20 measured. Keeping three readings +and applying only options 1, 2 and 4 gives a median of 3.9 and a worst of 9.6 (18 of 20). + +## Decision + +1. **The target, and how it is measured.** A delivery's **delivery time** runs from its merge to the moment + every node of its deploy plan that is heard from runs its modules' builds and reports them healthy. A node not + heard from (a laptop asleep) is listed and not waited for, as ADR 0236 leaves it. **A leaf module's delivery + budget is five minutes. A core module's is ten.** A delivery held for a person (a module that records, a hold, + a bus step) is shown and not held to a budget: its wait is the person's, and the controller's + condition for a walk left waiting (S16) and its probe of stalled deliveries (D14) already speak for it. + - A **core module** is one on the controller's own path (the controller, the node-engine, the tool runner, the + bus, mesh-delivery) or the mesh's resolver. A **leaf module** is every other module. A delivery's class is + that of the slowest-budgeted module it moves. + - The ten minutes for a core module are the measurement's: the 13 core walks of one tier took a median of + 5.6 minutes and at worst 8.8. A controller merge that also walks the build agent and the route proxy (median + 14.2) meets it once issue 338's path precision is built: that work is tracked by issue 338 and is the + planner's, not this record's. +2. **No merge window for a lone merge.** When a merge arrives, no batch is assembling, and its delivery belongs to + no delivery group with a member not yet merged, the controller cuts its batch at once. A merge of a group still + waiting for members, or a merge arriving while a batch assembles, waits for the window as ADR 0276 decided. +3. **Independent walks run at once.** A batch becomes a walk without waiting for an open walk when it shares with + every open walk no repository, no module, and no edge of the module graph between their modules. Where they + meet, they wait for each other: + - **one first-node judgement per node at a time**: a walk's first node is chosen among its module's nodes + where no other walk is judging; a send to a node where another walk's build is being judged waits for that + verdict, so ADR 0236 decision 4a (no build reaches a node without a judgement) holds as written; + - **a core walk keeps its ground**: no leaf build is sent to a node where a core build is being judged, and + while a new controller is judged, no leaf judgement counts a reading; those resume when it passes or is put + back. A core send never waits for a leaf judgement: a leaf judgement open on that node is set aside without + a verdict and starts again, from its first reading, after the core build's verdict, so a core delivery is + not held past its budget by a leaf one; + - two walks of one repository never run at once (a repository's later merge contains its earlier ones, ADR 0276 decision 2), and a merge into a repository with + an open walk joins that repository's next batch. + + This replaces ADR 0276 decision 4's "one walk at a time"; its rule that a walk which started is never + superseded stands. +4. **Judgement by class.** The first-node gate's readings, each at least forty seconds after the one before: + - a **core module**: three, the first at least two minutes after the send, as ADR 0236 decision 2 decided; + - a **leaf module with a long-running resource** (a service, a container, a process the node-engine runs): + two, the first after the node-engine states every such resource healthy (ADR 0240); + - a **leaf module whose every resource is a tools bundle**: one, once the tool runner serves its tools. + + Everything else ADR 0236 decided of the first-node gate stands: no witness put the build back, no condition + raised since the send, ten minutes at the most, and a rollback when it fails. +5. **One tier's first nodes are judged at once**, each by its own readings, and the tier passes when every one + has passed. +6. **Every walk keeps its phases, and every delivery its delivery time.** + - The controller records in the walk, and says in `plan-moved`, each phase of the table above with its start + and end, each judgement reading with its time, and the first healthy report of each node of the rest. Its + `durations` gains the kind `walk-phase`, per class. + - mesh-delivery records each delivery's delivery time, its class and its phases from the walk. A new verb, + `times`, answers each class's budget, the last seven days' median and worst delivery time, and every + delivery over its budget with where its time went; `deliveries` heads its list with one line of the same, + and `show` gives a delivery's phases. + - The controller's `status` shows that line, read from `times` by the self-check, beside what is wrong. +7. **A delivery over its budget is loud.** The self-check's probe reads `times` and raises the warning + `delivery..over-budget` when a delivery's time exceeds its class's budget, naming the delivery and its + longest phase. It clears when the next delivery of that class lands within its budget. +8. **The plan says when it will land.** `plans` and mesh-delivery's `show` give an open batch and an open walk an + expected landing time: now plus the remaining phases at the last seven days' median for its class, and once a + walk is judging, plus the readings still owed. + +## Consequences + +- **A leaf fix lands within five minutes when nothing else is in its way**, by the measurement's own estimate: + build 0.4, send 0.3, one or two readings at about a minute each, the rest a quarter of a minute. +- **A burst of unrelated merges no longer queues**; it walks in parallel, and one node judges one walk at a time. + The controller holds several open walks, and every reader of a walk (`plans`, the walk's conditions, `plan-moved`, + mesh-delivery) reads a list where it read one. +- **A leaf module is judged on less evidence.** A build that fails after its last reading reaches the rest. That + is bounded: the rest's first healthy report is recorded, a failure there is a condition on that node, and the + build that broke it is put back the ordinary way. The trade is the operator's stated choice of speed for leaf + modules; core modules keep every reading. +- **A core walk still holds its ground.** A leaf delivery whose node is judging a core build waits up to that + judgement (3.6 minutes for the controller) and may exceed its budget; the condition says so, and the week's + numbers show how often. +- **The core budget depends on issue 338.** Until the planner moves only the modules whose build source a merge + touched, a controller merge exceeds ten minutes and raises the condition each time. That is intended: the + condition counts what issue 338 costs. +- **What got harder:** the walk's record grows by the phases and readings, kept in the controller's store as a + numbered migration; the scheduler of walks gains the independence test and the per-node judgement rule, each a + place where two walks can disagree, and each tested. +- **On acceptance**, ADR 0236 (decision 2, three readings for every module) and ADR 0276 (decision 4, one walk at + a time; decision 1, the window for every merge) each gain a note saying the mechanism moved here, and to-be 47 + lists this record among its decisions. + +## How it is checked + +| Rule | Checked by | +|---|---| +| a lone merge is cut at once; a group's member and a merge during assembly wait | the controller's tests: a lone merge asks its build with no window; a merge whose group has an unmerged member waits for the window; a second merge within the window joins the batch | +| independent walks run at once, dependent ones wait | the controller's tests: two catalogue merges of unrelated modules walk at once; two of one repository, two sharing a module, and two joined by a graph edge do not; two walks never judge on one node at once; a send to a node under another walk's judgement waits for its verdict; no leaf reading counts while a new controller is judged | +| judgement by class | the controller's tests: a tools-only leaf passes on one reading, a leaf with a service on two forty seconds apart, a core module on three two minutes after the send; each fails and is put back as before | +| one tier's first nodes at once | the controller's test: a tier whose modules are first on two nodes judges both at once and passes when both pass | +| every phase and the delivery time are recorded | the controller's test of the walk record and `plan-moved`; mesh-delivery's tests of the delivery time, its class, `times` and `show` | +| a delivery over budget is loud | the probe's test: a leaf delivery of 5 minutes 10 seconds raises `delivery.leaf.over-budget` naming its longest phase; the next within budget clears it | +| the target holds on the live mesh | `mesh-delivery.times`: the week's leaf median within five minutes and the condition raised by no more than one leaf delivery in ten; the same measurement as this record's Context, repeated a week after the last part is built | + +## References + +- Issue 382 (a small fix takes 45 minutes to reach a node) and issue 338 (a module built from a shared repository + moves on every merge to it), in the issue tracker. +- [ADR 0236](0236-a-build-is-judged-on-its-first-machine-and-put-back-by-something-other-than-itself-and-so-it-rolls-out-unattended.md): + the first-node gate's three readings, kept for core modules. +- [ADR 0238](0238-a-commit-is-the-build-at-hand-one-commit-one-change-plan-checked-off-the-trunk-and-published-only-on-it.md): + a check's build is never registrable, which option 5 would have reopened. +- [ADR 0239](0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md): + mesh-delivery owns the delivery, and so its delivery time. +- [ADR 0267](0267-an-artifact-is-rebuilt-only-when-its-build-source-changes-and-a-module-moves-only-along-build-dependencies-on-artifacts.md): + an unchanged artifact is not rebuilt. +- [ADR 0276](0276-merges-are-assembled-in-a-rolling-window-and-each-batch-is-delivered-by-one-walk-with-one-commit-per-repository.md): + the merge window and the walk this record changes in part. +- [Research 044](../01-RESEARCH/044-what-leaves-the-controller-next/00-overview.md), whose question 6 asks for + the time from merge to a node running the fix as a baseline; the table above is that baseline. +- To-be [47](../03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md), amended with this record. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0290-a-decision-record-lives-whole-in-the-knowledge-base-made-of-clauses.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0290-a-decision-record-lives-whole-in-the-knowledge-base-made-of-clauses.md new file mode 100644 index 00000000..11393a8b --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/0290-a-decision-record-lives-whole-in-the-knowledge-base-made-of-clauses.md @@ -0,0 +1,187 @@ +--- +topic: how we work +status: accepted +date: 2026-10-11 +deciders: jochen +reconstructed: false +extends: 02-DECISIONS/0153-the-record-is-read-by-a-module-and-the-console-lists-it.md +--- + +# 290. A decision record lives whole in the knowledge base, made of clauses + +> **Rewritten — 2026-10-11, on the operator's word.** This record was merged an hour earlier as *The knowledge base +> holds each record's structure and clauses, and hq keeps its reasoning*: the store held the structure, and this +> repository the reasoning, reviewed in pull requests. The operator asked why one record should live in two places, +> and asked for this record to be updated in place rather than superseded. Nothing had been built on the earlier +> version. It is in this repository's history at commit `08b1077b`. + +> **Updated — 2026-10-11, on the operator's word.** Rule 9 left open whether this repository keeps a generated +> public copy of accepted decision records and research efforts (issue 435). The operator answered: no copy is needed. Rule 9 and the consequences +> say so. + +## Context + +[Research 045](../01-RESEARCH/045-a-knowledge-base-the-mesh-writes/00-overview.md) measured, on 2026-10-11, how an +agent learns what the mesh decided ([findings](../01-RESEARCH/045-a-knowledge-base-the-mesh-writes/01-findings.md)). +The operator gave the purpose the same day: the decisions and research should become shared knowledge that agents +reach through tools, instead of reading markdown files, and a session should no longer have to start in this +repository's folder to know what was decided. + +**An answer costs too much.** "What holds about the merge window" took 26 search hits in 11 documents and about 85 KB +of reading, some 21,000 tokens. The decision index, generated by the records module +([ADR 0248](0248-the-decision-index-is-generated-when-it-is-read-and-never-stored.md)), is 77 KB, more than one +tool answer may be. The records module matches a phrase literally and knows nothing of which record still holds +([ADR 0153](0153-the-record-is-read-by-a-module-and-the-console-lists-it.md)). + +**What a decision decided is not data.** 226 of 263 decision records write their `Decision` section as prose; 37 +write it as numbered statements with a bold lead (198 in all). A later record that changes one statement of an older +one could say so only in prose or by naming the whole record: 21 `supersedes-in-part` links had no reverse, and 6 +more records said it in prose alone, until hq pull request 305 declared all of them in both records and added a check. + +**The checks run after the fact.** Of the 33 rules the hq checks enforce, 25 judge one record and 4 judge its prose; +all 29 could refuse a bad record when it is written. Only 4 need the whole record set. + +**Numbers collide.** 16 decision numbers were taken twice by sessions working at once between 2026-09-25 and +2026-10-10. [ADR 0275](0275-the-mesh-numbers-and-tracks-its-issues-in-a-module-of-its-own-and-hq-keeps-only-the-narrative-of-a-design-or-governance-issue.md) +rule 8 already decided that the issue tracker hands out decision and research numbers; issue 424 tracks building it. + +### Against GENESIS + +- **The mesh owns the truth** ([mission](../00-META/mission.md)): a record lives in one place, written through one + module, not in a file every branch may edit. +- **The mesh brokers everything the work needs, knowledge included**: an agent asks the mesh what holds, by + capability, instead of knowing which folder to read. +- **The mesh remembers** ([effect](../00-META/effect.md)): what was decided, and why, is available to whoever needs it + next, on any node, in any folder, with every earlier version kept. +- **Failure must be loud**: a write that would leave the records inconsistent is refused when it is made. + +## Considered Options + +### Where a record lives + +1. **hq stays the truth; a module indexes it** (the research's option A). Rejected: a link about one statement of a + decision stays prose, and every inconsistency is found after it is written. +2. **Divided: the knowledge base holds a record's structure and clauses; hq keeps its reasoning.** Rejected by the + operator on 2026-10-11: one record in two places, an agent sent to a file for the *why*, and the structure written + twice until the frontmatter left hq. +3. **The knowledge base holds a record whole: structure, clauses and reasoning, with every version.** Adopted. It is + the division the operator made for issues ([ADR 0291](0291-an-issue-lives-whole-in-the-issue-tracker.md)), applied + to decisions and research. + +### The unit + +1. **The record.** Rejected: a later record changes one statement of an older one far more often than the whole. +2. **The clause: one numbered statement a decision makes, with its own status.** Adopted. The research called it a + *rule*; *rule* already names a line of [how-we-build](../00-META/how-we-build.md), and one word names one thing + ([ADR 0244](0244-the-mesh-is-described-in-domains-and-one-word-names-one-thing.md)). + +### How a record is reviewed, once it is not a pull request + +1. **The operator approves every record.** Rejected: records are reviewed today by an independent agent, and the + operator is asked only for real decisions; making every record wait for one person slows what works. +2. **An independent agent reviews it, the write-time checks pass, and a record that needs the operator waits for the + operator's Approve on a channel that proves who answered.** Adopted. It is how a pull request here is merged + today, and the operator's Approve already reaches the mesh that way + ([ADR 0274](0274-an-agent-proposes-a-shared-instruction-section-and-every-node-takes-it-only-on-the-operators-warrant-which-it-proves-itself.md)). + +### Who confirms the clauses drafted for the 226 prose decisions (the research's open question 1) + +1. **The operator, topic by topic.** Rejected: 226 records is days of reading for one person, for statements already + decided and reviewed once. +2. **Nobody: drafted clauses are served as they are.** Rejected: a summary nobody checked would speak as the record's + word, which is the work-that-reports-success-and-did-nothing fault. +3. **A second judgement, independent of the one that drafted them, confirms each record's clauses against its text; + the operator is told per topic and may send any record back.** Adopted, and confirmed by the operator on + 2026-10-11. + +## Decision + +1. **The knowledge base is a Go module, `mesh-knowledge`, with one instance on the control-node.** It declares and + claims one seat held once for the mesh, `knowledge-base` + ([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, + 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: + `proposed`, `in force`, `changed` by a clause of a later record, or `superseded`. A link that is about a clause + names the clause, not only the record. A record is written as clauses from the start. Until the knowledge base + takes writes, a record written in this repository from 2026-10-11 on writes its `Decision` section as numbered + clauses with a bold lead, and `records.py` refuses an accepted one that does not. +4. **A record is proposed, reviewed and accepted in the knowledge base.** `propose` writes it with a number from + `reserve`, and refuses it outright when one of the 29 rules that judge one record or its prose fails. An + independent agent reviews it (`review`), and its approval moves the record and its clauses to `accepted` and + `in force`, and every clause it changes or supersedes accordingly. A record that says it needs the operator waits + for the operator's Approve, asked on a channel that proves who answered, and the warrant is kept with it + ([ADR 0259](0259-an-ask-is-a-message-on-the-bus-any-channel-answers-it-and-the-asker-acts-on-a-warrant.md)). + An accepted record changes only by a new record, or by a dated correction of a fact, written as a new version and marked as one; + the 4 rules that judge the whole record set run over it after every acceptance and raise a condition when one + fails. +5. **Numbers come from the issue tracker's counters**, as ADR 0275 rule 8 decided: `reserve` asks the tracker for the + next decision or research number, and a reserved number is spent whether or not its record is accepted. Until the + tracker hands them out, tracked by issue 424, a session takes the highest number on `main` and on every open + branch, plus one, as the shared instruction section *writing-decision-records* says. +6. **An answer is the shape agents need, bounded.** The verbs are `ask` (records and clauses bearing on a question, + ranked, each saying whether it holds or what changed it), `get` (one record: clauses, links both ways, what changed + it since; its reasoning only when asked), `holds` (the clauses in force for a topic or a record), `links`, + `history` (a record's versions and the difference between two), `reserve`, `propose`, `review`, `import` and + `return` (send drafted clauses back to be drafted again). `ask`, `get` and `holds` stay under a size bound they + state; the default is 4 KiB. +7. **State is in a database in the store**, provided to the module, not in buckets: `ask` needs ranked full-text + search, and a record's versions are a record set to search, not current state to watch + ([ADR 0201](0201-a-module-keeps-its-current-state-in-key-value-buckets-it-declares-and-reaches-through-the-runtime.md) + is not narrowed). **Every change is an event the module declares** + ([ADR 0041](0041-events-are-a-relationship.md)), carrying what changed and who changed it. +8. **The import reads this repository at a commit and can run again.** It writes every decision record and research + effort whole, at its own number, with the commit as its first version's source; it creates what is absent, never + overwrites, never advances a counter, and a second run changes nothing and says so. A record whose clauses are + written as numbered statements gets them as `written`. A prose record gets them `drafted` by the agent's judgement + ([ADR 0278](0278-the-issue-tracker-checks-every-new-issue-for-a-duplicate-through-a-judgement-the-agent-makes-without-tools.md)), + then `confirmed` by a second judgement that sees only the record and the drafts; the operator is told per topic and + may send a record back. An answer marks a drafted or confirmed clause as such, and never serves a drafted clause as + in force. +9. **This repository stops holding decision records and research efforts** once the import is checked against it, + record by record: one pull request removes them, rewrites the mentions of their paths to "ADR NNNN" and "research + NNN", and changes playbooks 01 and 02, tracked by issue 426. This repository keeps no copy of them, generated or + otherwise; the knowledge base is the only place a decision record or research effort is read. The records module + stays the literal reader of what this repository still holds. +10. **It is built in slices, each tracked by an issue.** The first is the module for decisions and research: import, + clauses, answers, and proposing and reviewing a record, tracked by issue 425. The records leave this repository + under issue 426. Designs, playbooks and glossary entries follow the same way, tracked by issue 428. Meeting notes, + drawings and blog posts come last and are not decided here, tracked by issue 429. The design is + [to-be 55](../03-DESIGN/01-to-be/55-the-knowledge-base.md). + +## Consequences + +- An agent on any node asks what holds and why, and gets the clauses in force, the records they come from and what + changed them, in one call, instead of reading several records whole. No session needs this repository's folder to + read or write a decision. +- A later record that changes one statement of an older one says which, and the older clause's status changes when + the later record is accepted. +- Review moves from a pull request to the knowledge base's `review`, and the forge's line comments and diff are + replaced by the record's versions and `history`. A record is checked when it is written, not when it is merged. +- Until the first slice takes writes, records are still written here as pull requests, with numbered clauses, and the + import takes them in with the rest. +- What got harder: one more module the mesh's own process depends on. Reading or writing a decision needs the mesh to + be reachable; a node that cannot reach the control-node says so rather than guessing. Once the records leave it + (issue 426), the public repository no longer shows the mesh's decisions or research. + +## How it is checked + +- **Clauses in a record written here** (rule 3): `records.py`, check `clauses`, on every pull request of this + repository, until the records leave it. +- **What the module does** (rules 2, 4, 6, 7, 8): the module's tests and its live acceptance, listed in + [to-be 55](../03-DESIGN/01-to-be/55-the-knowledge-base.md) §9, built under issue 425. +- **Nothing lost when the records leave** (rule 9): every record compared with its file at the import's commit before + the files are removed, the result written on issue 426. +- **Numbers** (rule 5): the issue tracker's tests of its counters, built under issue 424; until then the + `numbering` and duplicate checks of `records.py` and `cycle.py` find a collision on `main`. + +## References + +- [Research 045](../01-RESEARCH/045-a-knowledge-base-the-mesh-writes/00-overview.md) and its + [findings](../01-RESEARCH/045-a-knowledge-base-the-mesh-writes/01-findings.md). +- [To-be 55 — The knowledge base](../03-DESIGN/01-to-be/55-the-knowledge-base.md). +- hq pull request 305: every partial supersession declared in both records, and the `partial-supersession` check. +- Issues 424, 425, 426, 428, 429 and 435 (answered: no copy in this repository). diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/README.md b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/README.md new file mode 100644 index 00000000..a9080ed5 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/02-DECISIONS/README.md @@ -0,0 +1,172 @@ +# 02-DECISIONS + +Architecture decision records — the "why" trail behind the rules in +[`00-META`](../00-META/) and the specifications in [`03-DESIGN`](../03-DESIGN/). + +**Numbered `02` because a decision precedes the design it authorises.** Research concludes, +the decision is recorded here, and only then is the design written. Following the folder +numbers walks the process in the order it happens. + +One file per decision, numbered, never deleted. A superseded record has its `status:` changed +and gains a pointer to what replaced it — **its reasoning is never rewritten**. The reasoning that +was rejected is the expensive half to rediscover. + +## Progressive insight + +A record is a decision, not a snapshot of everything that was true the day it was written, and +those two fail differently. **A fact a record asserted can turn out to be wrong while the decision +it supports stays right** — a count taken before anyone measured, a file named that does not +exist, a proof attributed to a step that cannot run it. Superseding a record for that buries a +correct decision under a second one, and teaches every reader to first work out which of two +records is live. Done a few times, the reading order stops being one. + +So: **a correction of fact that leaves the decision standing is made in the record, in place, +marked and dated.** + +> **Progressive insight — YYYY-MM-DD.** What was found, what the record said before, and what it +> says instead. + +Three conditions, all of which hold: + +- **It corrects a fact, not a judgement.** That a suite does not exist is a fact. That building it + is the wrong order is a judgement, and judgements supersede. +- **It adds; it never quietly replaces.** Where body text changes, the note says what stood there + before, so a reader who followed a citation to the old wording can find out what happened to it. + A correction nobody can see is indistinguishable from a record that was always right, which is + the failure the immutability rule exists to prevent. +- **The decision, the options weighed and the consequences stand untouched.** If the correction + changes what was decided, which alternatives were rejected, or a consequence another record + relies on, it is not an insight — write the superseding record. + +**What still supersedes**, without exception: reversing a decision, changing its scope, rejecting +an option it accepted, or making a consequence false that a later record cites. The test is not +how large the edit looks in a diff; it is whether a reader who acted on the old text would now be +wrong about *what was decided* rather than about *a detail the decision did not rest on*. + +**How this is checked.** `00-META/checks/records.py` requires every insight to be marked in the +form above and dated no earlier than the record's own `date:` — an unmarked edit is a rule +violation the reviewer looks for in the diff, and a marked one is legible in the record itself. +The git history is the backstop, not the record of intent; the note is the record of intent. + +## A pointer back from what a record changes + +A new record naming an old one is not enough. **Where a record changes a mechanism an older record +states — without reversing the decision, so no supersession — the older record gets a dated note +saying where its mechanism now lives.** A reader arrives at the old record by following a citation, +and finds text that is still the decision and no longer the method; nothing in it says a later record +moved the method, and the new record is not in their hands. + +> **The mechanism changed — YYYY-MM-DD, by ADR NNNN.** What still stands, what moved, +> and why. + +Three examples of the shape, all found by being missed: ADR 0066 still described a routed name being +written into every container after 0148 replaced that with resolution; ADR 0047 still said a module's +code runs in a container after 0150 made it a supervised process; and ADR 0016 still read as though the +lab were the test bed after 0149 said the live mesh is. Each was a citation leading to the wrong +answer, in a record that was not wrong about anything it decided. + +**This is not machine-checked, and it cannot be from `extends:` alone.** 102 records extend another and +87 name a parent that does not mention them, which is correct: extending usually means building on a +context, and a one-directional pointer is the right shape for that. What needs a note is the narrower +case where the parent's own text has gone stale, and which case that is, is a judgement — so it is a +rule for the author and the reviewer, and the diff is where it is caught. Making it mechanical would +mean a record declaring the relationship in its frontmatter, which is a change to the record schema and +has not been decided. + +**A supersession in part is the declared case, and it is machine-checked.** A record that replaces part of +an older one names it under `supersedes-in-part:`, and the older record carries, directly under its +heading and newest first, a note in the form + +> **Superseded in part — YYYY-MM-DD, by ADR NNNN** (a link to it). What no longer holds, and what stands +> as decided here. + +dated by the newer record's `date:`. `00-META/checks/records.py` (`partial-supersession`) fails when +either half is missing, when the note's date is not the newer record's, and on a note in the older form +*Narrowed, not replaced*. Where the note sits is the reviewer's to see in the diff. Saying "this narrows" or "this replaces" an older record in prose alone is not +enough: on 2026-10-11, 6 records did only that, and 11 of 21 declared links had no note on the record +they changed. + +The records run in the order the decisions were taken, oldest first. + +**Every decision is a record.** There is no ledger and no index file — if a decision is worth +recording it is worth a record, and if it is not worth a record it is not recorded +([ADR 0019](0019-how-this-repository-works.md)). A "decision" small enough to be one line is +almost always a **rule**, and a rule belongs in +[`00-META/how-we-build.md`](../00-META/how-we-build.md), where it is enforced and keeps the +incident that earned it. + +## Frontmatter + +```yaml +--- +status: proposed | accepted | superseded +date: YYYY-MM-DD # when the decision was taken, not when it was written down +deciders: name +reconstructed: true|false # true when the record was written after the fact from evidence +superseded-by: # 02-DECISIONS/NNNN-....md, when status is superseded +extends: # 02-DECISIONS/NNNN-....md, when this record widens an earlier one +supersedes: # a list of 02-DECISIONS/NNNN-....md this record replaces whole +supersedes-in-part: # a list of 02-DECISIONS/NNNN-....md of which this record replaces a part +--- +``` + +## Body + +``` +# N. Title in plain language + +## Context what was true, with evidence +## Considered Options numbered, each with why it was rejected +## Decision what was decided +## Consequences what follows, including what got harder +## References commits, pull requests, knowledge-base entries, prior art +``` + +State evidence, not assertion. *"Zero of 124 modules declare `brain` as a dependency"* +outranks *"the dependency rule is not followed"*. + +## Reconstructed records + +Records 0001–0014 were written on 2026-08-23, after the decisions they describe. Records 0015 onward were taken as records. Those +decisions were taken in implementation rather than in a document; the records state what was +decided and the evidence it was decided from, and each carries `reconstructed: true` and says +so in its first lines. + +A reconstructed record is not a transcript. Where the deliberation is not recoverable, the +options section states what the alternatives were and why the chosen one won on the evidence +available — not a discussion that did not happen. Where a date is not establishable it says so +rather than guessing. + +## Reading order + +**A number identifies a record and never changes.** Records are referenced from outside this +repository — code comments, commit messages — so a number that moves invalidates them silently. +Renumbering once cost 96 references across two code repositories, and that is why the numbers +are now fixed. + +So the folder is in creation order, and **the reading order lives here**: six topics, in the +order somebody would learn the system. Each record names its own in `topic:`. + +1. **What the mesh is** — `topic: the mesh`. What it is for, and the parts it is made of. +2. **Its tiers, from the bottom up** — `topic: the tiers`. The foundation, the node and the controller, and + what each one provides to the one above. +3. **What runs on them, and how it gets there** — `topic: what runs on it`. Modules, seats and + provisions, and how they reach a node. +4. **How it is built** — `topic: building it`. The code, its repositories, and what is made from + it for a node. +5. **How it is checked** — `topic: checking it`. What judges a change, and what proves a decision holds. +6. **How we work** — `topic: how we work`. This repository, its playbooks, and how decisions and + designs are made. + +**The list of records under each topic is generated when it is read, and never stored here** +([ADR 0248](0248-the-decision-index-is-generated-when-it-is-read-and-never-stored.md)). A stored list +was one more line in this file for every decision, so two decisions open at once always conflicted +([issue 297](../04-ISSUES/297-two-open-decisions-always-conflict/00-report.md)). Read it with: + +``` +python3 00-META/checks/index.py --print the records, by topic, in reading order +``` + +or the `hq-status` skill, or the records module's `records_decisions` from anywhere on the mesh. +`index.py` checks that every record's topic is one of the six above, and fails if this file stores the +list again. diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/COMMIT b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/COMMIT new file mode 100644 index 00000000..8b826a45 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/testdata/hq/COMMIT @@ -0,0 +1 @@ +d1edcf544b384502fded36c1605571ae74b07ed5 diff --git a/modules/mesh-knowledge/cmd/mesh-knowledge/wholeset_test.go b/modules/mesh-knowledge/cmd/mesh-knowledge/wholeset_test.go new file mode 100644 index 00000000..7cbd0776 --- /dev/null +++ b/modules/mesh-knowledge/cmd/mesh-knowledge/wholeset_test.go @@ -0,0 +1,92 @@ +package main + +import ( + "strings" + "testing" +) + +// to-be 55 §10: "A whole-set rule that fails is loud — the module's test: an acceptance that leaves a decision +// cited by nothing raises the condition." The condition is the mesh's, raised when the module's health answers +// unhealthy; the test reads the health answer the node-engine reads. +func TestAnAcceptanceThatLeavesADecisionCitedByNothingMakesTheModuleUnhealthy(t *testing.T) { + eachStore(t, func(t *testing.T, s Store) { + w := imported(t, s) + if h := w.k.Health(nil); !h.Healthy { + t.Fatalf("unhealthy after the import of real records: %s", h.Why) + } + n := proposed(t, w, "author@g14", false) + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: n, Verdict: VerdictApprove}); err != nil { + t.Fatal(err) + } + h := w.k.Health(nil) + if h.Healthy || h.State != "unhealthy" || !strings.Contains(h.Why, "the rule cited") || !strings.Contains(h.Why, itoaKey(n)) { + t.Fatalf("an accepted decision nothing cites left the module %+v", h) + } + // The acceptance stands: the condition says it, and undoes nothing. + if mustGet(t, s, Key{KindDecision, n}).Current.Status != StatusAccepted { + t.Fatal("the acceptance was undone") + } + // A record that cites it heals it. + m := w.reserved(t, "author@g14") + p := valid(m) + p.Links = append(p.Links, LinkAsk{Kind: LinkCites, To: itoa4(n)}) + if _, err := w.k.Propose("author@g14", p); err != nil { + t.Fatal(err) + } + if _, err := w.k.Review("reviewer@novox", ReviewAsk{Kind: KindDecision, Number: m, Verdict: VerdictApprove}); err != nil { + t.Fatal(err) + } + h = w.k.Health(nil) + if strings.Contains(h.Why, itoaKey(n)+" is accepted and nothing cites it") { + t.Fatalf("still said after a record cited it: %s", h.Why) + } + }) +} + +// Each of the 4 whole-set rules, failing on a record set made to break it. +func TestEachWholeSetRuleFails(t *testing.T) { + acc := func(n int, links ...Link) *Record { + return &Record{Kind: KindDecision, Number: n, Status: StatusAccepted, Links: links, + Clauses: []Clause{{N: 1, Text: "**One.** x", Status: ClauseInForce, Source: SourceWritten}}} + } + to := func(kind string, n, c int) Link { + return Link{Kind: kind, To: Ref{Kind: KindDecision, Number: n, Clause: c}} + } + cases := []struct { + rule string + set []*Record + }{ + {"cited", func() []*Record { r := acc(1); r.AcceptedAt = r.AcceptedAt.AddDate(2026, 0, 0); return []*Record{r} }()}, + {"supersession", []*Record{func() *Record { r := acc(1); r.Status = StatusSuperseded; return r }()}}, + {"supersession", []*Record{acc(1), acc(2, to(LinkSupersedes, 1, 0))}}, + {"partial", []*Record{acc(1), acc(2, to(LinkChanges, 1, 1))}}, + {"partial", []*Record{func() *Record { r := acc(1); r.Clauses[0].Status = ClauseChanged; return r }()}}, + {"rests-on-live", []*Record{func() *Record { r := acc(1); r.Status = StatusSuperseded; return r }(), + acc(3, to(LinkSupersedes, 1, 0)), acc(2, to(LinkExtends, 1, 0))}}, + } + seen := map[string]bool{} + for _, c := range cases { + found := false + for _, f := range JudgeSet(c.set) { + found = found || f.Rule == c.rule + } + if !found { + t.Errorf("the rule %s did not fail on its case: %+v", c.rule, JudgeSet(c.set)) + } + seen[c.rule] = true + } + for _, r := range WholeSetRules { + if !seen[r.ID] { + t.Errorf("the whole-set rule %s has no case", r.ID) + } + } + if len(WholeSetRules) != 4 { + t.Errorf("%d whole-set rules; ADR 0290 counts 4", len(WholeSetRules)) + } + // A consistent set: the superseder names it, the extender is the superseder, the change is applied. + ok := []*Record{func() *Record { r := acc(1); r.Status = StatusSuperseded; return r }(), + acc(2, to(LinkSupersedes, 1, 0), to(LinkExtends, 1, 0))} + if f := JudgeSet(ok); len(f) != 0 { + t.Errorf("a consistent set fails: %+v", f) + } +} diff --git a/modules/mesh-knowledge/go.mod b/modules/mesh-knowledge/go.mod new file mode 100644 index 00000000..0478dd45 --- /dev/null +++ b/modules/mesh-knowledge/go.mod @@ -0,0 +1,28 @@ +module mesh-knowledge + +go 1.25.0 + +require ( + git.novox.be/novox/mesh-sdk/go v0.1.12 + github.com/jackc/pgx/v5 v5.11.0 + github.com/nats-io/nats-server/v2 v2.11.17 + github.com/nats-io/nats.go v1.51.0 +) + +require ( + github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op // indirect + github.com/google/go-tpm v0.9.8 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect + github.com/jackc/puddle/v2 v2.2.2 // indirect + github.com/klauspost/compress v1.18.5 // indirect + github.com/minio/highwayhash v1.0.4 // indirect + github.com/nats-io/jwt/v2 v2.8.1 // indirect + github.com/nats-io/nkeys v0.4.15 // indirect + github.com/nats-io/nuid v1.0.1 // indirect + golang.org/x/crypto v0.50.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/text v0.36.0 // indirect + golang.org/x/time v0.15.0 // indirect +) diff --git a/modules/mesh-knowledge/go.sum b/modules/mesh-knowledge/go.sum new file mode 100644 index 00000000..4cfd952c --- /dev/null +++ b/modules/mesh-knowledge/go.sum @@ -0,0 +1,53 @@ +git.novox.be/novox/mesh-sdk/go v0.1.12 h1:QvmLlT88F+OYt8MOytMGM5ZEOo0fKmNZvNVeJe6gnTk= +git.novox.be/novox/mesh-sdk/go v0.1.12/go.mod h1:GFuZUElBZ9A++mxgIKo97aXXo+kV0uJ/UkbhQPPIbrY= +github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= +github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op/go.mod h1:FQyySiasQQM8735Ddel3MRojmy4dA1IqCeyJ5jmPMbI= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-tpm v0.9.8 h1:slArAR9Ft+1ybZu0lBwpSmpwhRXaa85hWtMinMyRAWo= +github.com/google/go-tpm v0.9.8/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.11.0 h1:IzBBtyK9AHqf98cctWFifYSci2hgQR/cd56wB4p+ogg= +github.com/jackc/pgx/v5 v5.11.0/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= +github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/minio/highwayhash v1.0.4 h1:asJizugGgchQod2ja9NJlGOWq4s7KsAWr5XUc9Clgl4= +github.com/minio/highwayhash v1.0.4/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= +github.com/nats-io/jwt/v2 v2.8.1 h1:V0xpGuD/N8Mi+fQNDynXohVvp7ZztevW5io8CUWlPmU= +github.com/nats-io/jwt/v2 v2.8.1/go.mod h1:nWnOEEiVMiKHQpnAy4eXlizVEtSfzacZ1Q43LIRavZg= +github.com/nats-io/nats-server/v2 v2.11.17 h1:GKEghcFK6A+aFx11Yf1LjgLC3txAwvyhnYzhBIQZA8I= +github.com/nats-io/nats-server/v2 v2.11.17/go.mod h1:B1sFVz4StNosQ903ak4N1G01Fl/9f8e06mXpFIE2K24= +github.com/nats-io/nats.go v1.51.0 h1:ByW84XTz6W03GSSsygsZcA+xgKK8vPGaa/FCAAEHnAI= +github.com/nats-io/nats.go v1.51.0/go.mod h1:26HypzazeOkyO3/mqd1zZd53STJN0EjCYF9Uy2ZOBno= +github.com/nats-io/nkeys v0.4.15 h1:JACV5jRVO9V856KOapQ7x+EY8Jo3qw1vJt/9Jpwzkk4= +github.com/nats-io/nkeys v0.4.15/go.mod h1:CpMchTXC9fxA5zrMo4KpySxNjiDVvr8ANOSZdiNfUrs= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/modules/mesh-knowledge/module.json b/modules/mesh-knowledge/module.json new file mode 100644 index 00000000..df9f51ef --- /dev/null +++ b/modules/mesh-knowledge/module.json @@ -0,0 +1,185 @@ +{ + "module": "mesh-knowledge", + "version": "1", + "slug": "knowledge", + "requires": [ + "postgres-database" + ], + "contributes": { + "postgres-database": { + "name": "knowledge" + } + }, + "binds": { + "postgres-database": "${dir:state}/database.json" + }, + "secrets": { + "postgres-database": "${dir:state}/database.secret" + }, + "seats": [ + { + "name": "knowledge-base", + "scope": "mesh", + "serves": [ + "ask", + "get", + "holds", + "links", + "history", + "reserve", + "propose", + "review", + "import", + "return" + ] + } + ], + "claims": [ + { + "name": "knowledge-base", + "scope": "mesh", + "serves": [ + "ask", + "get", + "holds", + "links", + "history", + "reserve", + "propose", + "review", + "import", + "return" + ] + } + ], + "tools": [ + "knowledge_health" + ], + "emits": [ + "reserved", + "proposed", + "reviewed", + "accepted", + "changed", + "imported", + "drafted", + "confirmed", + "returned" + ], + "uses": [ + "operator-channel" + ], + "invokes": [ + "seat:issue-tracker.reserve", + "claude-code.claude_code_judge", + "records.records_status", + "records.records_list", + "records.records_read", + "seat:operator-channel.notify" + ], + "resources": [ + { + "id": "state", + "type": "directory", + "mode": "0700", + "place": "." + }, + { + "id": "database-url", + "type": "file", + "path": "${dir:state}/database.url", + "mode": "0600", + "content": "postgresql://${bound:postgres-database:as}:${secret:postgres-database}@${bound:postgres-database:at}:${bound:postgres-database:port}/${bound:postgres-database:as}\n" + }, + { + "id": "settings", + "trusted": false, + "type": "file", + "path": "${dir:state}/settings.json", + "mode": "0600", + "merge": "json", + "content": "{\n \"judge-model\": \"sonnet\",\n \"drafting\": \"on\",\n \"reserved-for\": \"168h\"\n}\n" + }, + { + "id": "prepare", + "type": "process", + "name": "mesh-knowledge-prepare", + "artifact": "tools", + "run": [ + "./mesh-knowledge", + "prepare" + ], + "run-once": true, + "env": { + "DATABASE_URL_FILE": "${dir:state}/database.url" + }, + "restart-on": [ + "database-url" + ] + }, + { + "id": "keep", + "type": "process", + "name": "mesh-knowledge-keep", + "artifact": "tools", + "run": [ + "./mesh-knowledge", + "keep" + ], + "env": { + "DATABASE_URL_FILE": "${dir:state}/database.url" + }, + "restart-on": [ + "database-url" + ], + "health": { + "kind": "unit" + } + }, + { + "id": "watch", + "type": "process", + "name": "mesh-knowledge-watch", + "artifact": "tools", + "run": [ + "./mesh-knowledge", + "watch" + ], + "env": { + "DATABASE_URL_FILE": "${dir:state}/database.url", + "MESH_KNOWLEDGE_STATUS": "${dir:state}/health.json" + }, + "restart-on": [ + "database-url" + ], + "health": { + "kind": "tool", + "tool": "knowledge_health", + "interval": "60s", + "timeout": "10s", + "looks": 2, + "grace": "180s" + } + } + ], + "build": { + "artifacts": [ + { + "name": "tools", + "kind": "bundle", + "language": "go", + "system": "arch", + "from": "cmd/mesh-knowledge", + "binary": "mesh-knowledge", + "loads": [ + "mesh-knowledge" + ], + "env": { + "DATABASE_URL_FILE": "${dir:state}/database.url", + "MESH_KNOWLEDGE_SETTINGS": "${dir:state}/settings.json", + "MESH_KNOWLEDGE_STATUS": "${dir:state}/health.json" + } + } + ] + } +}