diff --git a/00-META/glossary.md b/00-META/glossary.md index 959540a6..5f431f12 100644 --- a/00-META/glossary.md +++ b/00-META/glossary.md @@ -524,6 +524,7 @@ asking, never the act. **Decided by** ADR 0152, 0175, 0234, 0259, 0272. 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 diff --git a/02-DECISIONS/0253-a-condition-says-itself-to-the-operator-in-plain-words-beside-its-summary.md b/02-DECISIONS/0253-a-condition-says-itself-to-the-operator-in-plain-words-beside-its-summary.md index aff806e9..4e88c3bb 100644 --- a/02-DECISIONS/0253-a-condition-says-itself-to-the-operator-in-plain-words-beside-its-summary.md +++ b/02-DECISIONS/0253-a-condition-says-itself-to-the-operator-in-plain-words-beside-its-summary.md @@ -117,16 +117,18 @@ What the mesh had, on the main branches of 2026-10-08: "agent", no "session", and `needs` never says "by hand". `needs` is one sentence ending in a full stop. Words that break the rule are replaced by the scope's words and reported; a condition is never refused for its words. -> **The mechanism changed — 2026-10-10, by [ADR 0285](0285-an-issue-tracks-a-condition-by-its-key-and-every-message-about-the-condition-says-the-issue-and-where-it-stands.md).** What stands: the condition's own -> words, their plain rule and their verdict, made where the condition is made. What moved: the router adds the -> **tracking line** below the explanation, naming the issue that tracks the condition by its number (the one -> numbered id a message may carry), and changes "Nothing for you to do." to "Needs you: answer issue N." while that -> issue waits for the operator, or leaves it out while nobody works on any issue tracking it. - 4. **Whether the operator is needed is decided per condition, by its producer.** "Nothing for you to do." is said where the mesh handles it or it passes by itself; "Needs you:" where only the operator can do the next thing. A condition a healer gave up on (`resolver: operator` with attempts) that needed nothing now needs the operator: its verdict becomes "Needs you:". +> **The mechanism changed — 2026-10-10, by [ADR 0285](0285-an-issue-tracks-a-condition-by-its-key-and-every-message-about-the-condition-says-the-issue-and-where-it-stands.md).** What stands: the producer +> decides the condition's own verdict (rule 4), and the condition's words keep the plain rule (rule 3). What moved: the +> router says, below the explanation, the **tracking line** naming the issue that tracks the condition by its number, +> the one numbered id a message may carry; and in what it says, it overrides "Nothing for you to do." in two cases: +> it becomes "Needs you: answer issue N." while that issue waits for the operator, and it is left out while nobody +> works on any issue tracking the condition. Why: the operator could not tell from a notification whether its cause +> was known and being fixed (issue 400), and the producer of a condition does not know the issues that track it. + 5. **A warning that needs nothing is not sent.** The operator channel keeps it open, its history says it was kept quiet, and it is said the moment it needs the operator: when it becomes urgent at its bound, or when its words change to "Needs you:". An urgent condition is always said. At this decision these kinds diff --git a/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 b/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 index 92edb16f..02e18445 100644 --- a/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 +++ b/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 @@ -109,7 +109,8 @@ way. It is a read: it changes nothing and emits nothing. The router invokes `issue-tracker.tracking` over the bus, outside its work: at most once a minute, waiting at most 5 seconds, and a failed ask is tried again a minute later. It uses an answer for **10 minutes**. Every message about a condition (raised, reopened, reminded, escalated, quiet reminder) says one line below the explanation and before -since when, the **tracking line**. A clearing and a silence say none, and neither does a module's notice. +since when, the **tracking line**. A clearing and a silence say none, and neither does a module's notice, nor a +message whose words the content rule withheld whole. | The issue | The tracking line says | |---|---| @@ -135,7 +136,7 @@ as issue N:", at most **3**, then "And K more issues." Times are the operator's, ### 4. The verdict -- "Nothing for you to do." becomes **"Needs you: answer issue N."** while an issue tracking the condition needs +- "Nothing for you to do." becomes **"Needs you: answer issue N."** ("answer issues N and M." for several) while an issue tracking the condition needs the operator (`needs: operator`), is not closed, and has no fix merged. **The router never says "Nothing for you to do." about a condition whose issue waits for the operator.** - "Nothing for you to do." is **left out** while nobody works on any issue tracking the condition: each is closed @@ -181,6 +182,8 @@ issue tracks it links that issue first, so the silence and the message agree. Pl | `tracking` answers by key, those not closed first, at most ten per key, with worker, stale, needs and fix; only the keys asked when given; a key not of a key's shape refused | the tracker's tests (mesh-catalog `modules/mesh-issues`, `tracking_test.go`) | | Its answer carries no title, report or note | the tracker's verb test, over an issue whose note holds a secret's shape | | `fix` follows the delivery's facts, in the delivery line's order | the tracker's table test of `FixState`, one row per state | +| `tracking` is a read: it emits nothing and writes nothing | the tracker's verb test calls it and finds no event said and no revision changed | +| The link is set by whoever opens the issue or works on it, an agent at once; never by the triage or the controller | no code sets a `condition` link (the triage's and the controller's code hold none, which the review of each change to them sees); that agents set it is checked by nothing mechanical: a condition an issue is about that says "No issue tracks this yet." is the visible gap, and playbook 03's reviewer looks for the link | | Live | on the mesh, issue 352 linked to the rolled-back healer-wanted key and 379 and 386 to the mounts key: the next message about each names its issues and where they stand | ## References @@ -189,4 +192,5 @@ issue tracks it links that issue first, so the silence and the message agree. Pl - [ADR 0253](0253-a-condition-says-itself-to-the-operator-in-plain-words-beside-its-summary.md): the plain words and the verdict this record extends - [ADR 0284](0284-an-agent-moves-an-issue-to-fixing-under-its-own-name-and-an-issue-is-resolved-only-from-fixing.md): the worker this record says - [ADR 0281](0281-an-issue-knows-whether-its-fix-is-delivered-and-a-fix-stuck-after-its-merge-is-loud.md): where a fix is +- mesh-catalog#191 (the tracker's `tracking` and the router's tracking line) and hq#299 (this record) - [To-be 53](../03-DESIGN/01-to-be/53-the-issue-tracker.md) and [to-be 45](../03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md): the designs this record amends