Skip to content

Fog movement and individual light observations

Dave previously received Plantern positions but not their current light modes. Both Dave and plants received measured clear cells without the current fog-bank displacement. This could produce a reply crediting one lamp for an entirely clear lawn. A Plantern's own action panel already knew its normal/focused mode.

The optional fog-state-v1 contract carries the current renderer displacement (settled, displaced, returning) and each living Plantern's native identity and normal/focused/inactive state. The countdown is not evidence that the player used a Blover: setup and cutscenes can also write it. The prompt therefore separates global movement from the plant's actual light footprint without inventing its cause or an exact visibility boundary.

The shared parser checks terrain, phase, identities, duplicate lamps and consistency with the selected plant's own light state. Dave and plant prompts use the same one-based position projection. Raw native state is omitted from the prompt. Older hosts receive no new field; older snapshots leave movement unknown. No new action, save field, pause, combat rule or player-facing text is introduced.

Verification so far:

  • All 531 NPC tests pass, including malformed identities, inconsistent light state, EN/ZH/ES shared projections and old snapshots.
  • Hosted build and typecheck pass. The first typecheck caught untyped new test callbacks; the corrected final run passes.
  • OSS export verification passes all seven tasks.
  • The matching game build passes 105 native visibility assertions and 755 web checks. The first web run lacked the local canvas dependency; the complete run using the bundled dependency passes.

Eight compiled EN desktop/ZH touch-emulated conversations pass with current native saves and the actual host parser. Focused fog, a visible breach, displaced fog and older-host compatibility preserve the clock and lamp state. The experimental density observer is absent. A signed-in level-skip check covers ten entries across the five worlds with unchanged account saves and AI settings, zero provider calls and zero production analytics.

Eight single-attempt upstream samples use these captured browser requests with synthetic account contexts. All four full-clearance replies distinguish the lamp's own light from the cleared lawn instead of crediting the Plantern for all six rows. Partial-fog quality is still incomplete: Qwen's English Dave says he cannot see anything in the bottom row despite four measured clear columns; other partial-fog descriptions also overstate the unmeasured boundary or haze. No rerolls were made. These are paid upstream generations with no production account, notebook, save or Yumina billing writes.

Release scope is the verified missing native observation and conditional-lore correction, not a claim that generated tactical descriptions are fully reliable. The remaining partial-fog wording problem stays open; no forced fallback line, extra provider call, new prompt warning or gameplay restriction is added to hide it. Local receipts are in output/fog-state-* and the game worktree's output/fog-state/.