REPOSITORY SOURCE

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