Symptom

TEXT and JSON DataPoint values were invisible on the swarm canvas. A COLOR DataPoint rendered a color swatch, a DIGITAL DataPoint switched between toggle-on/toggle-off icons, and a DOUBLE DataPoint showed its first 4 characters centered on the icon — but a TEXT or JSON DataPoint showed only the generic {} icon with no value indication. LLM answers, incoming-webhook bodies, and text sensor readings could not be monitored at a glance; the editor had to be opened to see any content.

Root cause

IconManager.NodeCompoundImage had explicit value overlays for DataType.DOUBLE (short numeric text at center) and DataType.COLOR (filled circle) but nothing for DataType.TEXT or DataType.JSON. The type-specific when arm for KrillApp.DataPoint simply did not handle those two DataTypes, so they fell through with no visible value representation.

Fix

Added a truncated NamePill below the icon circle for TEXT/JSON DataPoints whose snapshot is non-empty. The pill is positioned with Modifier.offset(y = iconEnclosureSize / 2 + CHIP_VERTICAL_PADDING) — just below the 62dp circle boundary — and shows the first NODE_LABEL_MAX_LENGTH (12) characters of the snapshot value, with a suffix when truncated. Empty snapshots render nothing, consistent with how DOUBLE behaves on a blank value. Changed files: composeApp/src/commonMain/kotlin/krill/zone/app/IconManager.kt. New test: composeApp/src/desktopTest/kotlin/krill/zone/app/krillapp/datapoint/DataPointTextCanvasPreviewTest.kt.

Prevention