02 · The interpretive lens

Misleading Without Ever Lying

Doc 04 states one constraint before it states anything else: the lens never fabricates. Every fact it shows a player is true. The manipulation lives entirely in what gets noticed first, what gets suggested, what gets compared to what, how it gets worded, and what quietly slides out of view. Five channels, each auditable on its own.

Needs Two Readings of the Same Sword for the worked case; nothing else.

Channel 1: observation salience

An inspection produces an ordered list of properties, and order does most of the work. A property's finalWeight is its baseWeight plus the sum of every hypothesis's individual adjustment, clamped to [0.1, 3.0]; anything below a threshold drops into a collapsed “on closer inspection” section that costs an extra click. Nothing is removed from the list. A player who believes this culture traded by sea sees the ray skin first; a player who believes it fought sees the use-wear first. The wear marks are on the object either way.

Every adjustment carries a reason string naming the hypothesis that caused it. That field does no computation; it exists purely so the effect can be audited after the fact, which is the shape all five channels share.

Channel 2: classification suggestions

When a player is asked what kind of thing an artefact is, the suggestion list is real plausibility (basePlausibility) multiplied by hypothesis alignment (1 + lensBoost). A player can type any classification they like, including one absent from the list; the gravity is entirely in which options are offered first and how confident they look. A doc 11 ruling (§2.9) sharpens this further: a suggestion scored against a culture-relative baseline is scored against whichever culture the lens currently attributes the artefact to, not the artefact's true producing culture. Two players holding different provenance beliefs see genuinely different suggestion weights for the identical object, and that divergence is the mechanic working, not a defect in it.

Channel 3: cross-reference priming

Studying twelve prior artefacts builds a pool of comparisons, and the pool a new artefact draws from is biased the same way: finalRelevance is baseRelevance * (1 + lensRelevance), where the boost comes from hypothesis alignment rather than genuine similarity. A player convinced this culture lived by a river gets pointed at every prior river find as a match, including one that actually belongs to a different culture entirely. The type carries a potentiallyMisleading flag for exactly this case: the comparison is truthful (both objects did come from riverbeds) and it still steers the reading toward a false cluster.

Channel 4: descriptive framing

The same blade edge supports three complete, equally true descriptions. The shipped registers are observational (what can be measured: notching depth, abrasion pattern), interpretive (what it might have been for: combat wear, deliberate dulling) and technical (how it was made: bevel angle, reworking). All three exist for every property simultaneously; the lens picks selectedRegister and, within it, selectedVariant, based on which framing aligns with the player's current beliefs. Nothing is invented for the occasion: the interpretive register describing combat damage and the interpretive register describing ritual dulling are both pre-authored variants of the same underlying fact, and the lens is choosing between existing options, not generating a new one to fit.

Channel 5: omission blindness

The inverse of channel 1. A property that contradicts a player's existing belief isn't hidden, but its adjustedVisibility is baseVisibility * (1 - suppressionLevel * 0.6), and that 0.6 is doing real work: it's a hard ceiling, not a tunable constant reached for convenience. Iron rivets on an artefact from a culture the player believes never worked iron can slip into the detail view unremarked. A full iron sword from that same culture cannot be suppressed past the cap; it still surfaces as something worth noticing. The cap is the honesty mechanism made numeric: strong enough evidence always breaks through, however committed the player's prior belief.

one true observation 1 salience 2 suggestion 3 cross-ref 4 framing 5 omit Player A’s panel ray skin foregrounded, iron unremarked if any Player B’s panel use-wear foregrounded, ray skin reads as “grip” same five channels, same true data, same object: different priors in, different panel out
Five independently auditable channels acting on the same observation. Channel 5 is drawn narrower because suppressionLevel is capped: it can dampen a weak signal, never erase a strong one.
Where the spec runs ahead of the type Doc 04 §4 describes six graduated dissemination values feeding lens strength: private, circulated, presented, submitted, published, collected. The shipped LensStrength.factors.dissemination JSDoc still documents that six-value scale, but DisseminationState itself (the type dissemination is actually tracked in) ships only four: private, circulated, submitted, published. presented and collected are deferred to post-MVP and documented as deferred at the type's own definition. A strength calculation reaching for a dissemination state the type doesn't yet carry is a gap the lens engine will have to close when it lands, not a contradiction anyone has silently resolved.
Where it lives Spec: docs/04-interpretive-lens.md §3–4 · Types: src/lib/types/lens.ts (all five channel interfaces, LensStrength) · Related: src/lib/types/documents.ts (DisseminationState)