input-actions-acceptance.json
docs/evidence/input-actions-acceptance.json
1{
2 "sourceBase": "58bbf33ea83addfa5ae8d1cc99546d2f3aa4f9b9",
3 "sourceSha256": {
4 "packages/input/index.ts": "519186d9f3e40b2c5b0374e5d4022133910e33d623ca609991ba5f6deccc6d2a",
5 "games/darkwind/controls.ts": "f7d857624bd6e7fdb9621ccacae3baa5207e6470998c73c9d247945d68e03b81",
6 "games/engine-zoo/controls.ts": "13c03391a9c2379691e542d7c37ca4baaedbcfe749292581816ec384eee2172f",
7 "apps/player/controls.ts": "9e1284688a22c5cf3547689dc69c28cfbc2eab4ee4b226e51d41c118ca0b123f",
8 "apps/player/main.ts": "218800cb1ac17b4ca3eb3e5e44a0ad2e429603d99508bd04f16455e1983be4d6",
9 "apps/player/style.css": "4c50b4e428610124c3acacdf7371b6f545ad1c5ac02dfa8cc0c4f63012e5f14e",
10 "tools/cli/check-boundaries.ts": "a7050eb9d78e7b7fea1357e85324b553b5d732b8e6a21cf9c1b6702fffbdf06c",
11 "tests/input.test.ts": "b5db306bc05c8c3f3defb6f4f8930b3a8c02f0971f07232a1f1172a5663bb2ae",
12 "tests/net.test.ts": "9b491086c5b969b7baef1a5808e5881697244f1793200558928c432eed121296",
13 "tests/browser/controls.spec.ts": "96125d5d81174b2b3fd71ec1bf511eb07a502b0efbd6fc837a05c5a32b8feb81",
14 "tests/browser/motion-proxy.ts": "504d967042ec0266eb63aa5157c7e7de50a69074209c2a135c2638429dc84992"
15 },
16 "engine": "0.1.0",
17 "environment": {
18 "platform": "Linux",
19 "node": "22.23.4",
20 "playwright": "1.56.1",
21 "browser": "Chromium 141 headless shell, software WebGPU/SwiftShader",
22 "quality": "high",
23 "viewport": [
24 960,
25 640
26 ],
27 "narrowViewport": [
28 400,
29 780
30 ]
31 },
32 "checks": {
33 "typescript": "passed",
34 "importBoundaries": 79,
35 "headless": {
36 "passed": 370,
37 "failed": 0
38 },
39 "browserProductionBuild": "passed in isolated /tmp directory",
40 "livePreview": "8788 health ready; 5180 serves the new controls editor"
41 },
42 "browser": {
43 "feature": {
44 "stats": {
45 "startTime": "2026-10-25T05:16:37.628Z",
46 "duration": 25035.135000000002,
47 "expected": 3,
48 "skipped": 0,
49 "unexpected": 0,
50 "flaky": 0
51 },
52 "cases": [
53 {
54 "title": "rebound controls move and jump, reject conflicts, update hints and survive reload",
55 "passed": true,
56 "results": [
57 "passed"
58 ]
59 },
60 {
61 "title": "rebound interaction and chat remain playable while focus and reconnect release held keys",
62 "passed": true,
63 "results": [
64 "passed"
65 ]
66 },
67 {
68 "title": "invalid and unwritable control storage keep defaults and session rebinding usable",
69 "passed": true,
70 "results": [
71 "passed"
72 ]
73 }
74 ]
75 },
76 "regression": {
77 "stats": {
78 "startTime": "2026-10-25T05:17:28.481Z",
79 "duration": 63655.378,
80 "expected": 4,
81 "skipped": 0,
82 "unexpected": 0,
83 "flaky": 0
84 },
85 "cases": [
86 {
87 "title": "rebound controls move and jump, reject conflicts, update hints and survive reload",
88 "passed": true,
89 "results": [
90 "passed"
91 ]
92 },
93 {
94 "title": "two real browsers share doors and chat, then the guest takes over when the host leaves",
95 "passed": true,
96 "results": [
97 "passed"
98 ]
99 },
100 {
101 "title": "held movement and keyboard look continue without animation frames and release on pause",
102 "passed": true,
103 "results": [
104 "passed"
105 ]
106 },
107 {
108 "title": "graphics recovery preserves the world, releases held movement and bounds repeated losses",
109 "passed": true,
110 "results": [
111 "passed"
112 ]
113 }
114 ]
115 },
116 "distinctScenarios": 6
117 },
118 "visualReview": "Inspected desktop and narrow captures. Gold/green controls follow the existing player UI; long groups scroll within the panel and narrow controls fit without horizontal overflow.",
119 "corrections": [
120 "First feature run identified a conflict message that named the edited slot. bind() now identifies the existing owner; unit and browser assertions cover the message.",
121 "The browser observer initially replaced remembered room state with undefined on frames that omit unchanged room data. It now records only actual room updates.",
122 "Initial full suite: 369 passed, one reconnect assertion read the old connected state before the close event arrived. The isolated network suite passed; the restart predicate now requires the new stream before checking persistence. Final full suite: 370 passed."
123 ],
124 "commands": [
125 "npm run check",
126 "npm test",
127 "CI=1 PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser -- tests/browser/controls.spec.ts",
128 "CI=1 PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser -- tests/browser/controls.spec.ts tests/browser/player.spec.ts tests/browser/multiplayer.spec.ts --grep \"rebound controls move|held movement and keyboard look|two real browsers share doors|graphics recovery preserves the world\""
129 ],
130 "limits": [
131 "Keyboard remapping and relative mouse adapter; touch/gamepad adapters remain open.",
132 "Physical keyboard codes use Latin layout labels; localization remains open.",
133 "Generic source API is tested, not a claim of connected physical devices.",
134 "Software-rendered browser acceptance does not establish hardware performance.",
135 "World and save formats unchanged; preview remains garden-ferry.3.",
136 "No main-branch merge or Coolify deployment.",
137 "Final character art redesign remains deferred."
138 ]
139}
140