One story, two presentations — share the meaning, fork the picture

One story, two presentations — share the meaning, fork the picture An architecture diagram generated by Archify. the story files · 17 nodes · 28 dialogues · battles · the shared layer — what a thing is · 2D owns them the story files 17 nodes · 28 dialogues · battles 2D owns them one save file · 14 fields · held whole by both · the shared layer — what a thing is one save file 14 fields · held whole by both place manifests · landmark · water · rooms · exits · the shared layer — what a thing is · meaning, not position place manifests landmark · water · rooms · exits meaning, not position the 2D game · platformer + hub · ships · 2D presentation the 2D game platformer + hub · ships the 3D village · Godot 4.7 · no addons · 3D presentation the 3D village Godot 4.7 · no addons the painted tilemap · 26 × 15 tiles of 64 px · a fountain · 2D presentation · 2D owns it the painted tilemap 26 × 15 tiles of 64 px · a fountain 2D owns it the 3D grid + 2.5D crossing · 19 × 16 cells · 0.758 m per tile · 3D presentation · 3D owns it the 3D grid + 2.5D crossing 19 × 16 cells · 0.758 m per tile 3D owns it its own files refresh · 120 files · SHA-256 lints the painted map binds glyphs to nouns writes holds all 14, writes back the crossing is derived from the 2D tilemap · the jump is not the shared layer — what a thing is 2D presentation 3D presentation

The failure

  • • The 2D square painted a fountain; the 3D legend said well
  • • The story files always agreed — the square is not in them, it is in a picture
  • • The playtester noticed. No check could have

Why it hid

  • • A test compares a thing to a fact; two self-consistent sides share no fact
  • • Lifting one side's map for the other passes every check until the first change
  • • Any one-sided feature that leaks in looks like agreement

The fix, costed

  • • One manifest per place: nouns, never coordinates — a day's work
  • • Missing manifest fail-soft; unknown field fail-loud
  • • The one number that cannot share (0.758 m per tile) lives in one header, with its reason