CAT-MS1, CAT-MS2: offered and closed carry the operator-channel definition's fields (id, asker, headline, channels; id, asker, how); the page reads them

The test of the five ends holds every key of a body to the seat definition's holder events, so the router and the contract cannot drift.

Issue 1968.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
2026-11-04 12:35:35 +01:00
parent 0d86833123
commit 91cd016f65
4 changed files with 16 additions and 12 deletions
@@ -398,9 +398,10 @@ func (o *Overview) Heard(source, event string, body json.RawMessage) {
case SourceAsks:
switch name {
case "offered":
o.asks[f.Key] = askRow{Key: f.Key, Asker: f.Asker, Headline: f.Headline, Offered: firstStrings(f.Offered, f.Channels)}
k := firstNonEmpty(f.Key, f.Asker+"."+f.ID)
o.asks[k] = askRow{Key: k, Asker: f.Asker, Headline: f.Headline, Offered: firstStrings(f.Offered, f.Channels)}
case "closed":
delete(o.asks, f.Key)
delete(o.asks, firstNonEmpty(f.Key, f.Asker+"."+f.ID))
}
}
o.rebuilt = o.now()