scripted-patrol-acceptance.json
docs/evidence/scripted-patrol-acceptance.json
1{
2 "sourceBase": "703d78a38c04eba8914928c35a7b8b9b8bde94a0",
3 "sourceSha256": {
4 "packages/schema/patrol.ts": "9e32698ca1602e8074cf04314a6d1e0d82486fadced54cc4614b8c16380a52f1",
5 "packages/schema/index.ts": "75c3498e87cd60fbf980c01a67115b5a4fc5b0e30302ce9c993b02ac0cf7e316",
6 "packages/compiler/index.ts": "b8b8ddfed769a58fbc835aae55e0420382e2e9332f9bbfcedfee1b0328b89380",
7 "packages/simulation/index.ts": "f68a0526adb6b515ea6a9cb688fc22e04b77d927740d857676094a99bbc3370a",
8 "packages/simulation/checkpoint.ts": "508c2d9812fa095635bdcc195f3a94c8ee819cd889a753420f8cd414eb888db4",
9 "packages/net/protocol.ts": "afe676befafee1a633702579cbebcc55c11a30fc489fe9d6c4523fd578085f85",
10 "packages/net/client.ts": "f249b570ff8cd20d0c139bb5a5ddc0d1c12f829b89009fb820186227ca52a736",
11 "packages/net/packets.ts": "58503870f0b3794c7cffd6d447842f6477e95f54acb1c697c3c5011db4a513e2",
12 "services/relay/server.ts": "5aeb8c7486cfe3c91bb140ff5c779aa79cb438a17d981b79fe3aa13d26f3db4c",
13 "packages/presentation/index.ts": "f57cf2e9bb4cfe119e143263dfbef3a8c6feb49eb0fdea795a385bc1882e0a96",
14 "packages/render-webgpu/index.ts": "a1ba6bda3f91d5099c4d58fb10c62e79ff21f3d60880d3af8ea2b909978638bd",
15 "apps/player/main.ts": "a2841fc360bac95f0bc1c117e29330a7bb797bd66f43358146d6d11538e8d300",
16 "apps/player/simulation.worker.ts": "96b40b46930152fda10b9337ca5b1971526a0701439e047f8852c5fcf1315689",
17 "games/darkwind/garden-ferry.ts": "cdae74eba417d558f38aca7dcac23ebd9c4916ef211c6475fbb89ed569dd0710",
18 "games/engine-zoo/patrol.ts": "ab7ee523a01c111f027da1c1146ab3340fd0cb78c34830d24c223242c89072c7",
19 "tests/patrol.test.ts": "7c2ea85425a7c43260c922cb8df991610b6b4c98b1c0670ef95ca11ce4944117",
20 "tests/browser/ferry.spec.ts": "fa075b9263d61247ac873284095869cf6398cfc4182947d51ded3eb5687c565f"
21 },
22 "headless": {
23 "fullSuitePassed": 363,
24 "fullSuiteFailed": 0,
25 "finalFocusedPassed": 5,
26 "finalFocusedFailed": 0,
27 "followup": "Final focused relay test additionally waits for the disconnected owner lease and authored waypoint pause, then verifies canonical late-join NPC movement."
28 },
29 "checks": {
30 "typescript": "passed",
31 "importBoundaries": 78,
32 "serverBuild": "passed in /tmp/dw-patrol-server-build",
33 "composeConfig": "passed"
34 },
35 "browser": {
36 "startTime": "2026-10-25T05:03:43.678Z",
37 "duration": 108992.354,
38 "expected": 4,
39 "skipped": 0,
40 "unexpected": 0,
41 "flaky": 0
42 },
43 "browserSourceNote": "After this browser build, the read-only actor diagnostics getter was changed to copy returned position arrays. Final type/import checks cover that ownership change; renderer behavior is unchanged.",
44 "observed": {
45 "garden-keeper-rejoined.json": {
46 "position": [
47 -9.892773232422769e-05,
48 0.7848891019821167,
49 -0.6133849620819092
50 ],
51 "paused": true,
52 "time": 21.356581645017883,
53 "npcTime": 105.35658164501788,
54 "npcs": {
55 "garden-keeper": {
56 "phase": 22.02997179100001,
57 "until": 100.58062419800001,
58 "owner": ""
59 }
60 },
61 "props": {
62 "garden-lantern-crate": 4
63 },
64 "flags": [
65 "garden-lantern-lit",
66 "met-gardener"
67 ],
68 "velocity": [
69 0,
70 0,
71 0
72 ],
73 "room": {
74 "self": "d62ce9e6-96a2-4fa2-a5d3-c6f612954341",
75 "host": "d62ce9e6-96a2-4fa2-a5d3-c6f612954341",
76 "epoch": "17"
77 },
78 "rendered": {
79 "authored:fedf0000-0000-4000-8000-eeeeeeeeeeee": {
80 "position": [
81 0,
82 0.785,
83 1.7495569180079482
84 ],
85 "yaw": -3.141592653589793,
86 "walking": true,
87 "airborne": false,
88 "stalled": false
89 }
90 },
91 "actors": {
92 "rigged": 0,
93 "walking": 0,
94 "airborne": 0
95 }
96 }
97 },
98 "visualReview": "Inspected garden-keeper-speaking.png: actual rig visible in world with content-provided speaker label and conversation UI. Existing temporary character art retained as requested.",
99 "corrections": [
100 "Normalize a zero patrol yaw to positive zero for stable exact assertions.",
101 "The real lease-expiry assertion includes the authored waypoint wait before expecting walking; expiration does not cancel that wait."
102 ],
103 "limits": [
104 "Scripted horizontal authored paths with nonblocking actors; no navmesh, avoidance or dynamic actor collision.",
105 "Elected browser game rules and client poses remain trusted.",
106 "Server clock must remain accurate across restarts.",
107 "Fresh version-3 preview storage; previous releases retained without automatic migration.",
108 "Final character redesign remains open.",
109 "No Coolify deployment or physical-device performance claim."
110 ]
111}
112