Skip to content
← Documentation

docs/geometry-provenance.md


Audit: the geometry-driving fields

Item 1's remainder. Three questions per field, measured before anything moves — the discipline that made Item 1 small.

tests/geometry-provenance.test.ts.


The audit

height accent activity
who consumes it WorldScene:294 box height · WorldView:33 camera framing · constitution:191 invariant CityMap ×8 (2-D view) · WorldScene emissive WorldScene:193,314 opacity + emissive · WorldView:251 displayed as %
observed or derived derivedresolveHeight(heightRule, load, tallest, measure) derivedhueFor(id), a hash of identity derived — normalised against a ceiling
value or relation relation. The claim is ordering; any monotone map preserves it relation. The claim is distinctness; any injective map preserves it relation, except WorldView shows the value
verdict pre-derived geometry realization choice, stored as a fact pre-derived, and carrying a convention

accent is the clearest case. The Information Ledger already declares identity→hue as a projection (projection.ts:96). The World stores that projection's output and calls it a field. It is a realization choice living inside the canonical model.

height needs a value at exactly one non-geometry siteWorldView:33 passes it to jumpTo to frame the camera. That is a real dependency on the number, not the ordering, and it is worth knowing before the field moves.


The defect the audit surfaced

Asking "is activity observed or derived?" led to the ceiling it is normalised against, and then to this:

4 activity ceilings, all assumed: hall=8, security=6, library=50, conference=3

declared ceilings unreferenced by id:   4/4
same values present as bare literals:   4/4

Every activity reading in the product divides by a number that is declared in ASSUMED_CONSTANTS and read by nothing. The substrate divided by /50, /3, /8, /6 as literals.

Article VI requires these to be named and their basis stated. They were — in a table nothing read. Two authorities for one quantity, free to diverge, with nothing detecting it: the same defect class as id duplicating factIdentity.

And the consequence reaches the screen. WorldView:251 renders (building.activity * 100).toFixed(0)"Activity 87%" — where the denominator is assumed: true. A stipulation presented with the precision of a measurement.

Repaired

constitution.assumed(id) is now the single source, and it throws on an unknown id rather than returning a default — a silent fallback would reintroduce the untraceable number it replaces.

declared ceilings unreferenced by id:   4/4 → 0/4
same values present as bare literals:   4/4 → 0/4

department-task-ceiling was unreferenced too and is now wired. Six call sites across runtime.ts and telemetry.ts.

The percentage is still shown to two significant figures over an admitted guess. That was not repaired: the number is now traceable, and whether a convention-warranted value should be displayed with evidential precision is a presentation decision, not a correctness one.


Standing

Measurable defect exposed? yes — 4 declared constants read by nothing
Measurable improvement? yes — 4/4 → 0/4, asserted against regression
Fields moved? none — the audit is the deliverable

What is still not established

  • Nothing was moved out of World. The audit says accent is a realization choice and height/activity are pre-derived geometry; acting on that means the renderer computes them, and WorldView:33's dependency on the height value is the constraint to design around.
  • activity's ceilings are still guesses. Wiring them changed traceability, not warrant. Four of the six constants remain assumed: true, correctly declared and still unmeasured.
  • The audit covers three fields. footprint is also geometry and was not examined — tests/footprint-identity.test.ts asserts it answers "what kind of thing", which now means subtype, so it is likely a fourth realization choice.

231 → 235 tests, 26 DOM, 40 mutations, tsc clean.