Say each notification in plain words the operator reads at a glance
mesh/merge-gate pass: builds messenger → novox; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery-group group feat/plain-notifications ready: every member ready, and composed together they pass
mesh/delivery superseded: a newer head of the same pull request

The desktop popups were walls of plan ids, commits, keys and verb syntax in UTC.
The messenger now shows the condition's headline, explanation and resolved line,
since when in the operator's time zone, and a clearance in one line (hq ADR 0253).
This commit is contained in:
jochen
2026-10-08 13:26:26 +02:00
parent c78b5fc9f5
commit a6296dfd6f
12 changed files with 573 additions and 116 deletions
@@ -17,6 +17,8 @@ package main
// - `severity` is `urgent` or `warning`. Anything else is not guessed: the event is unreadable.
// - `silenced` is absent, null, or an object {until, by, why}; `until` in the past is not silenced.
// - Times are RFC 3339.
// - `headline`, `explanation` and `resolved` are the plain words the operator reads (novox/hq ADR
// 0253): a condition from a controller older than them has none, and is said from its summary.
// - `key` is `<scope>.<id>.<kind>`. When it is absent it is made from subject and kind; when
// neither gives one the event is unreadable.
// - A cleared event carries the condition as last held, and may add `cleared` (its time).
@@ -60,6 +62,9 @@ type Condition struct {
Machine string
Severity string
Summary string
Headline string
Explanation string
Resolved string
Source string
Resolver string
Raised time.Time
@@ -164,6 +169,9 @@ func DecodeCondition(event string, body []byte) (Condition, error) {
c.Kind = str("kind")
c.Severity = str("severity")
c.Summary = str("summary")
c.Headline = str("headline")
c.Explanation = str("explanation")
c.Resolved = str("resolved")
c.Resolver = str("resolver")
c.Raised = when("raised")
c.LastObserved = when("last-observed", "last_observed", "lastObserved")