Skip to content
← Documentation

docs/decision-sufficiency.md


Decision sufficiency — the deficit is 2, not 9

SCOPE CORRECTED — see carrier-purpose.md. "Decision loss = 2" is not a general result. What was established: within the currently observed organizational model, two independent facts produce operationally different outcomes while remaining visually indistinguishable. A different organization or richer telemetry would yield a different figure.

Measurement. Independence was the wrong stopping criterion. A fact can be independent and still operationally unnecessary. This measures, per fact, whether a decision becomes wrong when it is absent from the render.


The four-level state discipline

Recorded because conflating the first two produced two errors in the previous map:

Level Definition Belongs in the budget?
Possible any assignment of field values the types permit no
Reachable states composeWorld can actually emit from real facts yes
Rendered states that reach the scene graph measured
Distinguishable rendered states an observer can separate requires study

An unreachable state is not a perceptual gap — it is impossible in reality. status = active ∧ blocked = 0 is unreachable, and counting it as a collision inflated the deficit. building.blocked was not even possible: the field does not exist.

Reachability must now be established before a fact enters the budget, and that means verifying the fact is actually emitted, not merely typed.


Emission audit — is each fact live?

Fact Emitted? Evidence
building health = warn yes severity: "warn" at 2 substrate sites; ranks to warn
capacity yes, one subject only runtime.ts:285subjectId: "datacenter", limit: MAX_CONCURRENT_RUNS, an enforced dispatcher guard
district health yes incidents at product-${id}, 2 sites
district revenue yes declared in the estate register
agent blocked / queueDepth magnitude yes derived from the work-item queue

All are live. None is dormant.


Decision sufficiency, fact by fact

1. Datacenter at capacity — RETRACTED 2026-08-03: not a deficit

The finding below was an artifact of an unreachable fixture. It varied capacity while holding activity fixed. composeWorld cannot emit that: runtime.ts:273 sets activity.level = min(1, runs.length / MAX_CONCURRENT_RUNS) and :285 sets capacity = {used: runs.length, limit: MAX_CONCURRENT_RUNS}. Both derive from runs.length, so they co-vary in every reachable state.

Re-measured over reachable states only:

used/limit activity emissiveIntensity
0/10 0.00 0.12
5/10 0.50 0.545
8/10 0.80 0.80
9/10 0.90 0.885
10/10 1.00 0.97

4/4 reachable states distinct. Saturation is not invisible; it is carried by activity through emissiveIntensity.

This is the second time a reachability error inflated a deficit, after status = active ∧ blocked = 0. The lesson did not transfer the first time, and the fixture was the same shape.

What remains, stated precisely and NOT counted as decision loss: the ramp is continuous and the enforced threshold is unmarked. 9/10 renders at 0.885 and 10/10 at 0.97. Whether an observer reads that difference as one slot free versus at the limit is a condition-3 question and requires observers. It is not machine-answerable, so it is recorded as undetermined rather than as a deficit.

It is also an Article II.3 instance — a continuous metric reaching geometry unquantised, the same class as tripwire W5. Marking the threshold would need declared units and a Legend row, so it is blocked on the same governance decision, not on engineering.

No change was implemented. The measured basis for one dissolved.

1. Datacenter at capacity — original finding, superseded

  • Decision: can more work be dispatched?
  • Consequence if unperceived: the limit is enforced — exceeding it rejects a dispatch. This is not a soft signal; work fails.
  • Reconstructible from visible information? No. activity derives from activity facts, capacity from hq_agent_run counts against MAX_CONCURRENT_RUNS. Different sources. A busy datacenter and a saturated one are the same picture.
  • Scope: exactly one subject. This is not "capacity across the estate" — it is one building whose meter is real.

2. Building health = warngenuine deficit

  • Decision: intervene before failure?
  • Consequence: warn is the only state that is actionable before something breaks. Invisible warnings convert prevention into response.
  • Reconstructible? No. ok and warn are byte-identical.

3. District healthdeficit, sufficiency undetermined

  • Decision: portfolio triage.
  • Reconstructible? Not by derivation — district health comes from incidents keyed on the district, buildings from incidents keyed on buildings.
  • But sufficiency is unmeasured: whether a failing district reliably co-occurs with visibly failing buildings is an empirical question about live data, and there is no live data yet. If they co-occur, the decision is already supported and no carrier is needed.
  • Marked open, not counted as a deficit.

4. District revenuenot a render deficit

  • Decision: investment.
  • The decision is slow, deliberate, and made against figures — the panel already carries them. Nothing about it requires perception at a glance.
  • A fact can be important and still not belong in the render.

5. Agent blocked magnitude — not a render deficit

  • Decision: escalation sizing between two blocked agents.
  • Blocked is already visible via the beacon. Choosing between two blocked agents requires reading their queues, which is an inspect-panel act, not a glance.
  • The render's job is to say look here; it already does.

6. Agent queueDepth magnitude — not a render deficit

  • Decision: load balancing. Reversible, low consequence, and steady vs idle already carries the categorical signal.

Result

Metric Before After
"Invisible facts" 8
Independent facts 6
Missing distinguishable states 9
Decision loss 2 → 0 measured

Updated 2026-08-03. warn was given a carrier (decision loss 2 → 1); datacenter saturation was then retracted as a reachability artifact (1 → 0). Measured decision loss is now zero — with the explicit caveat that measured means distinguishable at the scene graph, and that interpretability remains unverified for every fact, because it requires observers.

Two facts, if unperceived, make an organizational decision wrong: datacenter saturation and building warn. One further is open pending live data.

Four of the six independent facts are operationally sufficient without a carrier — not because they are unimportant, but because the decisions they support are made elsewhere, or are already triggered by a categorical signal the render does carry.

This is the strongest argument yet against the previous metric. Distinguishable-state count would have demanded nine encodings into one free carrier. Decision loss demands two, and one of them applies to a single subject.


Perceptual bandwidth — what cannot be measured here

The request was to measure detection speed, pre-attentive visibility, ambiguity, capacity and channel interaction empirically. Those are properties of human vision, not of this repository. No instrument here can measure them, and producing numbers would be exactly the substitution defect this methodology exists to prevent: measuring pixels and reporting perception.

What can be stated:

  • Every carrier estimate in perceptual-information-budget.md — "opacity ≈ 3 levels", "wireframe = 2 states" — is a structural count of distinct rendered values, not a perceptual capacity. Whether an observer separates them is untested.
  • The interaction claim is likewise untested. Animation may interfere with neighbouring encodings; nothing here has measured that.

What would measure it: a study with informed observers, timed, over rendered scenes with known ground truth — detection latency per carrier, error rate under distractors, and confusion matrices between states. That is the same instrument needed for condition 3 of Perceptual Fidelity, and it is now needed for two independent reasons.

Until it exists, carrier "capacity" figures should be read as how many values the renderer emits, and nothing more.


The optimisation target

Retired: distinguishable-state count. It served its purpose — it exposed overloading and collisions — and it is now actively misleading, because it counts states an observer may never need.

Adopted: truthful decision support per unit of perceptual complexity.

Its numerator is measurable in part (decision loss, above). Its denominator — perceptual complexity — is not measurable without the observer study. So the target is currently optimisable only in the direction of reducing decision loss without adding carriers, which is what the next implementation should attempt: two facts, and one high-bandwidth carrier free.