Skip to content
← Documentation

docs/decision-observables.md


Decision observables — measured over generated worlds

The optimization target is no longer facts. It is decision observables: properties of the rendered world that let a knowledgeable observer answer an organizational question correctly.

The system already declares its questions. world/answers.ts projects seven standing questions from the world, so they were used rather than invented.

Method: for each question, generate two worlds whose correct answers differ, render both, and compare byte-for-byte. Only observed organizational inputs are varied; every downstream projection recomputes.


Result

# Decision observable Facts it depends on Renders differ?
1 Which agent is busiest? agent.load, queue depth yes
2 Which project is behind? events on svc-* yes
3 What is blocked? agent.queue blocked items yes
4 Who needs help? agent.blocked yes
5 Where is the redundancy risk? events on security yes
6 What should I work on today? first open queue item yes
7 Which projects make money? district.revenue NO

Six of seven distinguish. That is a far better result than the fact-level audit implied, and the reason is the reframing: several facts that appeared invisible individually are visible through the decision they serve.

Terminology, kept honest

The column says "renders differ", not recoverable. Differing renders are necessary and not sufficient for an observer to answer the question. Whether anyone can read which agent is busiest from a height comparison is a decision-correctness claim and requires observers. Every result here is projection correctness.


The one gap — and why no change follows

"Which projects make money?" is genuinely undistinguished at the render. Measured on the generated world: three of six districts carry declared revenue (platform 119.98, academy 149, charisma 19.99), and swapping revenue between districts produces a byte-identical scene.

Applying the five questions:

  1. Which decision depends on this? Investment and prioritisation.
  2. Already recoverable? Not from the render.
  3. Which facts contribute? district.revenuelistedMonthly, listedOneTime, realisedMonthly.
  4. Which carriers communicate them? None.
  5. Would a change increase recoverability, or merely redistribute? Neither — and that is the finding.

The render is not the only decision surface

deriveAnswers already answers this question, in text, from the same generated world: "Which projects make money?" → the earning districts and the listed total. The panel carries it.

So a new visual carrier would improve render recoverability without improving decision recoverability. The decision is already supported; the render simply is not the surface supporting it.

By the standing rule — optimize decision correctness; optimize projection correctness only when it demonstrably improves decision correctnessno change is justified. Whether a spatial encoding would beat reading the figure is an observer question, and no evidence exists either way.


The refinement this measurement forced

Decision correctness must be evaluated over the whole interface, not the render alone.

This project has been measuring the render as though it were the only projection into human understanding. It is not: the answers panel is a second projection from the same generated world, and for at least one standing question it is the only one that works.

That changes what a perceptual gap means. A fact absent from the render is a projection gap. It is a decision gap only if no surface carries the decision it serves. Those were being conflated, and question 7 is the case that separates them.

The pipeline is therefore not a single chain:

Generated world ──┬── spatial projection → rendered world ──┐
                  └── answer projection  → panel text ──────┴→ human understanding

Both branches are projections of the same generated world, and both are subject to the same conservation questions. Only the first has ever been measured here.


Standing count

  • Decision observables measured: 7
  • Distinguished at the render: 6
  • Distinguished at any surface: 7
  • Verified for decision correctness: 0 — requires observers