Skip to content
← Documentation

docs/projection-manifest.md


The Projection Manifest

"Not a redesign. Just expose the information already discovered."

src/lib/projection/manifest.ts, tests/manifest.test.ts, wired into WorldView.


It derives from the audit; it does not restate it

Every scope, warrant and discarded comes from lib/ledger/warrant.ts, which the audit tests already enforce. A second copy would be the declared-authority/actual-authority defect this project has now found six times, committed inside the module built to explain it.

The test asserts the match field by field: if a channel's scope changes upstream, the explanation changes with it, or the gate fails.

It lives in projection, not in World

Building { height } is what the audit found wrong — a projection's output stored as a world property. Putting the explanation on Building would repeat it. The manifest takes a building and produces an explanation; the building carries no part of it.

What a viewer gets

5 marks explained, all traced to the audit

marks that mislead on scope:
  height     → tall relative to the current population of the world
  brightness → as busy as the busiest subject currently observed
  position   → near, given every other subject

Each entry answers all five questions, and the test enforces that none is empty:

height — 21.92 world units
  from code-size = 50000 · logarithmic scale, then normalised against the largest subject present
  scope world · warrant evidence
  actually claims: tall relative to the current population of the world
  discarded (hidden-basis): the measured magnitude itself …

footprint — 3 · decorative
  from nothing · a constant per subtype
  scope subject · warrant none: no source-side input
  discarded (unbound): nothing, because it carries nothing

Ordering is part of the honesty. Claim-changing marks sort first and decorative ones last, so a reader who stops after two entries has seen the marks most likely to mislead — not the footprint. Asserted by a test.

Footprint is now the first explicitly decorative channel. It says from nothing rather than pretending every pixel encodes data.


Standing

Measurable improvement? yes — 5 marks explained per building, traced to the audit
New authority created? no — the manifest reads the ledger
World changed? no — no field moved, nothing added to Building

What is still not established

  • The panel is not visually verified. The app is passkey-gated and signing in is the user's action, so this is wired, typechecked and unit-tested, and nobody has seen it render. The renderer consumes the manifest test is a source-level assertion, not a screenshot.
  • Condition 3 is unchanged. That a viewer reads the explanation and understands the scope caveat is not something any test here can establish.
  • Only buildings are explained. Districts, links and agents have channels in the audit and no manifest entry.
  • The transform strings are prose written by hand, unlike scope and discarded which are read from the ledger. A transform that changed in code would not fail this gate.

265 → 272 tests, 26 DOM, 40 mutations, tsc clean.