Summary
The label "SWM n" currently means three different quantities in three places, and no view shows the number a reader most plausibly expects (total entities in shared memory). A community member comparing the dashboard against a contributor lens sees SWM 30 in one and SWM 93 in the other for the same channel, with nothing explaining that the units differ.
Measured on the live Web of Trust channel (buzz-7e741ed2…, community gateway, 2026-08-14):
| Where |
Shows |
Actual unit |
Value |
Panel dashboard layer cards (MemoryOverview) |
SWM 30 |
layers.SWM[] array length = SWM layer graphs (one per capture) |
30 |
Contributor lens header legend (ContributorGraphOverlay → lensLayerCounts) |
SWM 93 |
deduped lens nodes (trail events + linked targets) carrying layer:"SWM" |
93 |
Ground truth via semantic_query |
— |
COUNT(DISTINCT ?d) { ?d rdf:type b:DecisionCluster } → 30; COUNT(DISTINCT ?s) { ?s rdf:type ?t } → 312 typed entities; b:Claim → 2 |
30 / 312 |
So: 30 is correct in its own unit (captured decisions ≙ SWM layer graphs — it matches the DecisionCluster ground truth exactly), and 93 is also internally correct (this contributor's lens contains 93 SWM-tagged nodes) — but putting both behind the identical WM/SWM/VM chip design invites exactly the "which one is wrong?" question this report started from. The number a reader plausibly expects from an "SWM recap" — the entity total across all contributors, 312 — is shown nowhere.
Three concrete defects
1. One chip design, two units. LayerCountsLegend is rendered both on the dashboard (unit: layer graphs) and in the lens overlay headers (unit: lens nodes; introduced with the lens work in #9 — my change, so this part is on me). Identical visual, different semantics, no qualifier.
2. The dashboard count silently degrades to a display bound. ChannelMemory.layers is documented as "Layer graph lists are display-bounded; the *Count fields are uncapped" — but the community gateway does not send WMCount/SWMCount/VMCount, so the UI falls back to layers.SWM.length. Today that happens to equal the true total (30). The moment the channel exceeds the gateway's list bound, the dashboard will render the bound as if it were the total, with no indicator.
3. contributor_trail.decision links entity URNs, not decisions. The live trail for contributor c9f4f94b yields 43 distinct decision URIs — against 30 DecisionClusters existing in the entire channel. Inspection shows values like urn:buzz-dkg:entity:…:alice — arbitrary linked entities, not b:DecisionCluster instances. The contributor lens therefore renders inflated "decision" cards (43 > 30 for a single participant), and its ⊕/⊖ structure attaches evidence to things that are not decisions. Either the gateway should restrict the decision field to DecisionClusters (adding e.g. target/targetKind for other entities), or the client must not present every linked target as a decision.
Also worth deciding while here: the trail returns exactly 100 rows (suspiciously round). If that is a cap, prolific contributors' lenses undercount silently — the response should carry total/truncated so the UI can say "showing latest 100".
Proposed counting contract
- Channel-truth chips only from uncapped counts. Gateway sends
WMCount/SWMCount/VMCount; the dashboard never renders an array length as a total (show ≥n or — when the count is absent).
- Lens legends are scoped and say so. Overlay legend label becomes "in this view" (or drops the layer-chip styling entirely) so it cannot be read as a channel total.
- Give the expected number a home. The dashboard already shows "N decisions · M topics · K people & agents"; add the entity total (
312 today) — that is the actual "size of shared memory" and is one bounded aggregate query away.
- Type the trail's link targets (
decisionUri only for DecisionClusters; target + targetKind otherwise) and mark truncation.
Repro
- Dashboard: open ◈ Memory in the Web of Trust channel → layer card SWM = 30.
- Lens: People & agents →
c9f4f94b… → overlay header legend SWM = 93 (= 43 "decisions" + 50 evidence nodes after dedup of 100 trail rows).
- Ground truth (authenticated
semantic_query, LIMIT 25, no GRAPH clause — the gateway rejects unbound patterns and explicit graph identifiers):
SELECT (COUNT(DISTINCT ?d) AS ?n) WHERE { ?d rdf:type b:DecisionCluster } → SWM 30, VM 0
SELECT (COUNT(DISTINCT ?s) AS ?n) WHERE { ?s rdf:type ?t } → SWM 312, VM 0
🤖 Generated with Claude Code
Summary
The label "SWM n" currently means three different quantities in three places, and no view shows the number a reader most plausibly expects (total entities in shared memory). A community member comparing the dashboard against a contributor lens sees SWM 30 in one and SWM 93 in the other for the same channel, with nothing explaining that the units differ.
Measured on the live Web of Trust channel (
buzz-7e741ed2…, community gateway, 2026-08-14):MemoryOverview)layers.SWM[]array length = SWM layer graphs (one per capture)ContributorGraphOverlay→lensLayerCounts)layer:"SWM"semantic_queryCOUNT(DISTINCT ?d) { ?d rdf:type b:DecisionCluster }→ 30;COUNT(DISTINCT ?s) { ?s rdf:type ?t }→ 312 typed entities;b:Claim→ 2So: 30 is correct in its own unit (captured decisions ≙ SWM layer graphs — it matches the DecisionCluster ground truth exactly), and 93 is also internally correct (this contributor's lens contains 93 SWM-tagged nodes) — but putting both behind the identical WM/SWM/VM chip design invites exactly the "which one is wrong?" question this report started from. The number a reader plausibly expects from an "SWM recap" — the entity total across all contributors, 312 — is shown nowhere.
Three concrete defects
1. One chip design, two units.
LayerCountsLegendis rendered both on the dashboard (unit: layer graphs) and in the lens overlay headers (unit: lens nodes; introduced with the lens work in #9 — my change, so this part is on me). Identical visual, different semantics, no qualifier.2. The dashboard count silently degrades to a display bound.
ChannelMemory.layersis documented as "Layer graph lists are display-bounded; the*Countfields are uncapped" — but the community gateway does not sendWMCount/SWMCount/VMCount, so the UI falls back tolayers.SWM.length. Today that happens to equal the true total (30). The moment the channel exceeds the gateway's list bound, the dashboard will render the bound as if it were the total, with no indicator.3.
contributor_trail.decisionlinks entity URNs, not decisions. The live trail for contributorc9f4f94byields 43 distinctdecisionURIs — against 30 DecisionClusters existing in the entire channel. Inspection shows values likeurn:buzz-dkg:entity:…:alice— arbitrary linked entities, notb:DecisionClusterinstances. The contributor lens therefore renders inflated "decision" cards (43 > 30 for a single participant), and its ⊕/⊖ structure attaches evidence to things that are not decisions. Either the gateway should restrict thedecisionfield to DecisionClusters (adding e.g.target/targetKindfor other entities), or the client must not present every linked target as a decision.Also worth deciding while here: the trail returns exactly 100 rows (suspiciously round). If that is a cap, prolific contributors' lenses undercount silently — the response should carry
total/truncatedso the UI can say "showing latest 100".Proposed counting contract
WMCount/SWMCount/VMCount; the dashboard never renders an array length as a total (show≥nor—when the count is absent).312today) — that is the actual "size of shared memory" and is one bounded aggregate query away.decisionUrionly for DecisionClusters;target+targetKindotherwise) and mark truncation.Repro
c9f4f94b…→ overlay header legend SWM = 93 (= 43 "decisions" + 50 evidence nodes after dedup of 100 trail rows).semantic_query,LIMIT 25, noGRAPHclause — the gateway rejects unbound patterns and explicit graph identifiers):SELECT (COUNT(DISTINCT ?d) AS ?n) WHERE { ?d rdf:type b:DecisionCluster }→ SWM 30, VM 0SELECT (COUNT(DISTINCT ?s) AS ?n) WHERE { ?s rdf:type ?t }→ SWM 312, VM 0🤖 Generated with Claude Code