feat(simulation): D-252 — Facing is view-only; NPC gaze moves to path-follow intent (T-1093)

apply_move no longer writes Facing (was the only movement-facing coupling,
player-only); the player's view changes solely via explicit SetFacing.
NPC path-follow now sets Facing to the step direction — a strict improvement
recorded as a D-252 correction: NPCs previously never received Facing from
movement, their cones sat at spawn direction while walking. Bump-to-turn
retired (blocked moves change nothing) with a regression test for each
semantic. Wire schema unchanged; player_facing docs now say view/aim.
Gauntlet fixtures regenerated (facing octants now reflect view-only
semantics); client replay + live-roundtrip suites green against the new
server.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 21:07:18 +02:00
co-authored by Claude Fable 5
parent 629c0a9b1e
commit 0c91ef28ba
11 changed files with 2317 additions and 349 deletions
+379 -8
View File
@@ -82,13 +82,7 @@
"relationship": 0,
"total": 0
},
"conversation_ended": [],
"conversation_events": [],
"current_monologue": {
"duration_seconds": 5.0,
"id": "recognition_02",
"text": "Those footsteps... I've heard that pattern before."
},
"current_monologue": null,
"dialogue_response": null,
"entities": [
{
@@ -174,8 +168,15 @@
"state_hash": 8686526522907766805,
"tick": 2,
"triangle_crisis_events": [],
"version": 17,
"visible_tiles": [
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 35,
"y": 32,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -200,6 +201,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 36,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -232,6 +241,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 37,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -264,6 +281,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 38,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -304,6 +329,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 39,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -344,6 +377,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 40,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -392,6 +433,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 41,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -440,6 +489,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 42,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -496,6 +553,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 43,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -560,6 +625,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 44,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -624,6 +697,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 45,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -696,6 +777,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 46,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -768,6 +857,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 47,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -848,6 +945,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 48,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -928,6 +1033,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 49,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1016,6 +1129,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 50,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1112,6 +1233,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 51,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1208,6 +1337,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 52,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1312,6 +1449,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 53,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1416,6 +1561,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 54,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1528,6 +1681,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 55,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1648,6 +1809,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 56,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1760,6 +1929,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 57,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1864,6 +2041,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 58,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -1968,6 +2153,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 59,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2064,6 +2257,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 60,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2160,6 +2361,14 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 61,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2248,6 +2457,28 @@
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 62,
"y": 33,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 62,
"y": 34,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 62,
"y": 35,
"z": 0
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2350,6 +2581,13 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 63,
"y": 36,
"z": 0
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2452,6 +2690,13 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 64,
"y": 36,
"z": 0
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2546,6 +2791,13 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 65,
"y": 36,
"z": 0
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2640,6 +2892,13 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 66,
"y": 36,
"z": 0
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2726,6 +2985,13 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 67,
"y": 36,
"z": 0
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2812,6 +3078,13 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 68,
"y": 36,
"z": 0
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2890,6 +3163,21 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 69,
"y": 36,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 70,
"y": 26,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -2960,6 +3248,45 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 70,
"y": 36,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 71,
"y": 27,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 71,
"y": 28,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 71,
"y": 29,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 71,
"y": 30,
"z": 0,
"zone_id": 1
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -2990,6 +3317,13 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 71,
"y": 36,
"z": 0
},
{
"tile_kind": "Floor",
"visibility": "Forward",
@@ -3011,6 +3345,20 @@
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 72,
"y": 36,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 73,
"y": 33,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -3024,6 +3372,29 @@
"x": 73,
"y": 35,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 73,
"y": 36,
"z": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 74,
"y": 34,
"z": 0,
"zone_id": 9
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 74,
"y": 35,
"z": 0,
"zone_id": 9
}
]
}
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
+280 -3
View File
@@ -83,8 +83,6 @@
"relationship": 0,
"total": 0
},
"conversation_ended": [],
"conversation_events": [],
"current_monologue": null,
"dialogue_response": null,
"entities": [
@@ -137,8 +135,55 @@
"state_hash": 3925209675202732823,
"tick": 2,
"triangle_crisis_events": [],
"version": 17,
"visible_tiles": [
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 38,
"y": 47,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 38,
"y": 48,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 38,
"y": 49,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 38,
"y": 50,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 38,
"y": 51,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 39,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -179,6 +224,22 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 39,
"y": 52,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 40,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -227,6 +288,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 41,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -275,6 +344,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 42,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -331,6 +408,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 43,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -387,6 +472,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 44,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -451,6 +544,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 45,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -523,6 +624,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 46,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -595,6 +704,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 47,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -675,6 +792,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 48,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -755,6 +880,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 49,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -843,6 +976,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 50,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -939,6 +1080,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 51,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1027,6 +1176,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 52,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1107,6 +1264,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 53,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1187,6 +1352,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 54,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1259,6 +1432,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 55,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1331,6 +1512,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 56,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1395,6 +1584,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 57,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1451,6 +1648,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 58,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1507,6 +1712,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 59,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1555,6 +1768,14 @@
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 60,
"y": 46,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "Forward",
@@ -1602,6 +1823,62 @@
"y": 52,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 60,
"y": 53,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 61,
"y": 47,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 61,
"y": 48,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 61,
"y": 49,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 61,
"y": 50,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 61,
"y": 51,
"z": 0,
"zone_id": 0
},
{
"tile_kind": "Wall",
"visibility": "BoundaryWall",
"x": 61,
"y": 52,
"z": 0,
"zone_id": 0
}
]
}
Binary file not shown.