docs/carrier-purpose.md
Carrier purpose — and a correction to the separation result
Measurement. Classifies every visible carrier by which of three questions its fact answers, then identifies carriers serving more than one.
Correction 1 — the scope of "decision loss = 2"
The previous document's headline was overstated. What was established is:
Within the currently observed organizational model, two independent facts have been demonstrated to produce operationally different outcomes while remaining visually indistinguishable.
Not that decision loss is 2 in general. The audit covered the facts this system currently emits, against one organizational model, with no live data for one item (district health). A different organization, or richer telemetry, would have a different figure. The number is a measurement of this world, not a property of the renderer.
Correction 2 — the identity/alert separation was incomplete
The separation experiment reported that emissive had been cleaned to carry
identity alone. That is true of emissive and false of the encoding.
Measured at WorldScene.tsx:439, inside the agent's Html label:
color: agent.blocked > 0 ? ALERT : agent.accent
The identity/alert overload survives in the label text colour — the same fact competing with the same fact, moved one channel over.
The instrument could not see it. The scene-graph walker enumerates
Scene, lights, Mesh, Group, Line2; it captures no Html nodes. So the
separation experiment measured a channel it had fixed, could not measure the
channel the defect moved to, and reported success.
This is the fourth instrument blindness found, and the first to have concealed a contradiction of a result I reported. The earlier three hid facts; this one hid a failure.
The three kinds of perceptual information
| Kind | Question | Where it belongs |
|---|---|---|
| State | What is true? | primary scene |
| Decision | What should I do? | primary scene, sparingly |
| Explanation | Why is this true? | interaction, on demand |
They should not share a carrier budget. A scene can be excellent at state recognition and useless for explanation, and that is an acceptable design — but only if the two are not competing for the same channel.
Classification of every carrier in use
State recognition
| Carrier | Fact |
|---|---|
position.y |
building height (cumulative output); agent idle-vs-working |
| geometry params | footprint; height |
color |
building kind; agent identity |
emissive |
identity |
emissiveIntensity |
activity; lot; agent status |
wireframe |
unstaffed — missing ownership |
opacity (district ring, :174) |
district activity |
opacity (link, :239) |
link flow, handoff |
opacity (building, :295 — isLot branch) |
reserved ground |
animation (useFrame) |
link flow |
Decision support
| Carrier | Fact | Action implied |
|---|---|---|
beacon mesh (:308) |
building health = fail |
investigate here |
beacon mesh (:413) |
agent blocked > 0 |
investigate here |
Both beacons say the same thing — look here — for two different reasons. That is consistent, not overloaded: the carrier has one meaning, and the reason is recovered on inspection.
Explanation
| Carrier | Fact |
|---|---|
opacity (building, :295 — unobserved branch) |
no observation exists |
Html labels |
shortLabel, focus |
| side panel text | source provenance (live / unreachable / not-wired) |
Carriers serving more than one purpose
opacity — state and explanation, in one expression
opacity={isLot ? 0.35 : unobserved ? 0.5 : 1}
isLot = 0.35— state: this ground is reserved and unbuiltunobserved = 0.5— explanation: we have no observation of this building1— everything else
A viewer sees a faded building and cannot tell whether it is reserved or unmeasured. Those answer different questions, and the two values (0.35, 0.5) are near enough that the distinction rests on a fine luminance judgement that has never been tested with an observer.
This is where the next ambiguity will arise, and the prediction is
falsifiable: an observer study should show higher confusion between lot and
unobserved than between either and a normal building.
Across the whole scene opacity also carries district activity and link flow —
so it is the single most contended carrier: four facts, two purposes.
Html label colour — state and decision
accent (identity, state) versus ALERT (blocked, decision), on the same text.
Identical in kind to the emissive overload that motivated the separation
experiment.
What this changes
The carrier budget in perceptual-information-budget.md treated every carrier
as one pool. It should be three pools, and opacity is currently drawing
from two of them.
The free carrier — scale — is unallocated to any purpose. The two decision-loss
facts are both state (warn) and decision (saturation), so purpose does
not by itself decide which carrier they should take.
Still no Legend amendment. Two overloads remain, one of them invisible to
the current instrument, and the honest next step is unchanged from the last
measurement: extend the instrument to Html and animation. It is now the
prerequisite for verifying a fix, not merely for budgeting — the last
separation could not be confirmed because of it.