REPOSITORY SOURCE

touch-input-acceptance.json

docs/evidence/touch-input-acceptance.json

1{
2  "recordedAt": "2026-10-25T17:25:57.766242+00:00",
3  "baseCommit": "03c0b86902865eba931aa5d41b5048ec115f1ba0",
4  "scope": "Touch exploration through the existing semantic action map, responsive controls, multiplayer authority/persistence and desktop input regressions. Full milestones 0–18 remain open.",
5  "fullPlanEstimatePercent": 71,
6  "sourceSha256": {
7    "packages/input/touch.ts": "8943802ddff4fe7df06e6e08aa76a56bce8fe0b76a1b25363255189098062b48",
8    "apps/player/touch.ts": "00678a8e0b8cf42cba95464e81ebcce76cf078c9f21a3d7f7baadb3dacdf6333",
9    "apps/player/main.ts": "9c6b9e8a66d6ce7a9bfba7421dfe81ce171813d47958d9b632ca7cea8852bbfe",
10    "apps/player/style.css": "96f542d8e50bce307151d6e742a2597f06532dc2c2bfaf63dc1530bf1a2c646f",
11    "tests/touch-input.test.ts": "4ae402eb4677531b2170761944cabad51989cb1bf39a08843e54c6114eb1c8f6",
12    "tests/browser/touch.spec.ts": "bb74140263bd08581dbcf57ec373a753e010e239d3e92046b50dd4d7f8c6173c",
13    "tests/browser/touch-gestures.ts": "5019a759160827c475c9cd4886c63dde56930a55c3c60f2938f53be022a9b962",
14    "tests/browser/persistent-touch.spec.ts": "437abc884ed5353be35b4b3bc2038843e5a583463c80bffb571670e67c8d7c12",
15    "tests/browser/player.spec.ts": "b76b163cd2bf3299263c66162f6858d16796da440ee114bfe4a888ee0a98a1bf",
16    "tests/browser/controls.spec.ts": "58981031e00cdd678042fe33e5d054ab5e50ac36b7a7a0072be33b92dccd140d",
17    "playwright.persistent-touch.config.ts": "50512577fcc1275396a3155520b3c50795ae52ea84f950673d8760718c8ae62d",
18    "tools/cli/test-persistent.mjs": "08ff4aefeb60d41719a35a0f7299245dac557494f4c3532598009cc59fa8ee7f",
19    "package.json": "eb5f84234e44941b00927cd27d1ada2fafc7fa33b02ec3454340cef8e4ffc16f"
20  },
21  "environment": {
22    "node": "22.23.4",
23    "playwright": "1.56.1",
24    "browser": "Chromium 141.0.7390.37 headless shell",
25    "graphics": "SwiftShader WebGPU/Vulkan on Linux",
26    "physicalTouchDevice": false,
27    "viewports": [
28      [
29        320,
30        640
31      ],
32      [
33        390,
34        844
35      ],
36      [
37        844,
38        390
39      ]
40    ],
41    "desktopViewport": [
42      1440,
43      900
44    ]
45  },
46  "checks": {
47    "typeAndImports": "passed; 128 package source files",
48    "headless": {
49      "total": 703,
50      "pass": 647,
51      "fail": 0,
52      "skip": 56,
53      "log": "touch-headless.tap",
54      "scopeNote": "Pure touch adapter and full headless suite passed; later DOM-only fixes verified by typecheck/browser tests."
55    },
56    "browser": {
57      "pass": 10,
58      "fail": 0,
59      "report": "touch-browser-reports.json",
60      "log": "touch-browser.log"
61    },
62    "cadenceFinal": {
63      "pass": 1,
64      "fail": 0,
65      "note": "After the ten-case run, strengthened the test to cancel already scheduled frames when suspending presentation, then reran it successfully. Runtime source unchanged.",
66      "log": "touch-cadence.log"
67    },
68    "trusted": {
69      "pass": 1,
70      "fail": 0,
71      "addedRoundTripDelayMs": 150,
72      "log": "touch-trusted.log",
73      "report": "touch-browser-reports.json"
74    }
75  },
76  "verified": [
77    "Simultaneous real touch movement/look/jump/run and independent finger release",
78    "Second real relay traveler observes movement",
79    "Secondary finger activates ordinary buttons while movement is held; dragging cancels the tap",
80    "Menus, pointer cancellation, blur, reconnect and viewport rotation clear held input; stale fingers cannot rearm",
81    "Controller takeover releases touch; a fresh touch reclaims control once the controller is neutral",
82    "Phone welcome/playing layout bounds, minimum 44px targets and keyboard access after disabling touch",
83    "Trusted host acknowledges touch motion; peer sees shared ownership with independent inventories",
84    "PostgreSQL restores identity, inventory and committed pose after local pose data is removed",
85    "Keyboard rebinding, controller play, pause/input release, local checkpoint restoration and bounded graphics recovery"
86  ],
87  "developmentFindings": [
88    "CDP gesture helper initially ended the remaining contacts instead of the released contact. Corrected the touchEnd payload; no application input threshold was relaxed.",
89    "Real secondary touches did not synthesize native button clicks. Added bounded tap ownership, drag cancellation and matching duplicate-click suppression.",
90    "Initial portrait/landscape welcome placement overlapped the header. Adjusted responsive layout and verified bounds and screenshots.",
91    "Replaced an arbitrary minimum event count with exact agreement between trusted pointer-down events and driver starts.",
92    "Trusted journey initially passed motion, ownership and durable restoration but failed the pixel diversity check while aimed at a blank wall. Turned with actual touch gestures before the unchanged render check.",
93    "Three desktop failures reproduced on isolated committed HEAD. Cursor recentering delivered movement (-877,-387) before pointerlockchange; added suppression during the request and retained the existing post-lock guard. Both affected rebinding tests now pass, including a new yaw-preservation assertion.",
94    "The cadence test withheld every animation frame before startup, conflicting with the required first rendered scene. It now admits normally then cancels pending frames and withholds new callbacks, verifies movement/look/release with zero UI callbacks, and resumes callbacks at the end.",
95    "Review found touch could not reclaim control after a connected controller became neutral. Added fresh-contact handoff and a real touch/controller regression test."
96  ],
97  "visuals": [
98    "touch-welcome-portrait.png",
99    "touch-welcome-small.png",
100    "touch-welcome-landscape.png",
101    "touch-playing-portrait.png",
102    "touch-playing-small.png",
103    "touch-playing-landscape.png",
104    "touch-trusted-restored.png"
105  ],
106  "limitations": [
107    "Emulated touch only: physical phone/tablet performance, thermal load, notches, Safari/Firefox and long sessions unqualified",
108    "Full accessibility/screen-reader qualification remains open",
109    "Docker/Coolify execution and remote CI not run for this increment",
110    "Character redesign and arrival/camera art polish remain deferred to final pass",
111    "No numbered roadmap milestone closed; no merge or deployment"
112  ]
113}
114