Skip to content
← Documentation

docs/height-ownership.md


Height: does it belong to the World?

The test: if the renderer disappears, does height still exist?

tests/height-ownership.test.ts.


Measured

service height 15.80 → 30.20        (a real code-size measurement reaches it)

hall height when services are small: 30.02
hall height when a service is large: 57.38
observations about the hall itself:  unchanged

City Hall's height nearly doubles when a different building grows. Its rule is { kind: "orchestration", multiple: 1.9 }tallest × 1.9 — so height is a function of the set, not of the subject. Nothing observed about City Hall changed.

That alone settles it. A world fact about a subject does not move when a neighbour is measured.

The correction

My hypothesis was that the magnitude is unrecoverable from the World once height is written. The test refuted it:

height 21.92 world units · magnitude 50000 code-size — both present
transform parameters (base, scale) in World: no

World.measurements carries the raw quantity. The World is not lossy here — it keeps the measurement alongside the pre-computed height.

That is a stronger argument for moving height, not a weaker one. The World already holds the input, so height is a premature projection sitting next to its own source, and removing it would lose nothing. Had the magnitude been absent, moving height would have required rescuing it first.

Second retraction in two rounds where the measurement improved the conclusion by refusing my framing.

Verdict

Property a world fact would have height
function of the subject alone no — depends on the set
magnitude survives in the World yes — in measurements
invertible from the mark alone nobase/scale are not written
meaningful without a scene no — world units are scene units

code-size = 50000 bytes survives any renderer. height = 21.92 world units does not.

Height belongs to projection. It was not moved: the jumpTo dependency in WorldView:33 means the projection must expose a size to the camera, and that interface is a design decision this measurement does not make.


Loss kinds — not every loss is equally bad

The audit's fourth column now carries a kind, because a uniform list of losses reads as uniformly damning and they are not. The discriminator is whether the discarded information changes the claim.

aggregation   alert beacon and label colour
ambiguity     district ring opacity
compression   identity hue, co-change position
hidden-basis  box emissive intensity, box height
irrelevant    capacity readout, box footprint
  • compression — a colour cannot encode an identity mapping. Expected of the channel; the claim is unaffected.
  • aggregationmax() keeps the worst incident. "Failing" stays true; the count does not survive.
  • ambiguity and hidden-basis are the two that change what the mark claims, and they are asserted as a set:
claim-changing loss: box emissive intensity · box height · district ring opacity

box height joins that set for a reason this round produced: its scale parameters are not written, so a viewer sees a size whose normalisation is unrecoverable — the same shape as activity's ceiling, in geometry rather than light.


Standing

Measurable defect exposed? yes — height is set-dependent and scene-only
Measurable improvement? none made — height not moved, deliberately
Hypothesis corrected by measurement? yes — the magnitude does survive

What is still not established

  • Height was not moved. WorldView:33 passes b.height to jumpTo, so the projection must expose a size to the camera. What that interface looks like is the open design question, and building it blind would produce the generic "projection blob" worth avoiding.
  • orchestration is one rule of four. fixed, load and measure do not depend on the set; only City Hall's does. The set-dependence finding is real and applies to one building.
  • Loss kinds are assigned by hand. The taxonomy discriminates — five kinds across eight channels — and nothing derives the assignment from the channel.
  • footprint is filed irrelevant because it carries nothing. That is accurate and slightly generous: a channel with no input has no loss, and it still occupies a visual dimension.

258 → 263 tests, 26 DOM, tsc clean.