portal-acceptance.json
docs/evidence/portal-acceptance.json
1{
2 "recordedAt": "2026-10-25T20:07:58.904947+00:00",
3 "baseCommit": "25f251d35ca544c750e6fd709acf9f725da99048",
4 "fullPlanEstimatePercent": 77,
5 "scope": "One-level owned-renderer portal foundation and diagnostic gallery. Authored gateway fields, editor placement, destination residency/interest, replicated destination actors and playable-world activation are not implemented by this increment. No numbered milestone closed.",
6 "sourceSha256": {
7 "apps/probe/main.ts": "ba2fe0b54c53c39884b2f7ef5d63101587a8f2907e2d1befa6f4944761f45c57",
8 "apps/probe/protocol.ts": "ebe0bfba6ebfce52a986ea2e09d499eba91dbc23df926228b738e51206f83d27",
9 "apps/probe/render.worker.ts": "96a89e70e73b6900d6cbe536f17cb193c2b73f33bdf4184993a04be608fd098c",
10 "apps/probe/portals.ts": "5a0db39f1556e67bb5e571d2246e0dd785a9edf12b721db6dd11ca79f3e980bc",
11 "packages/render-webgpu/graph.ts": "a0aa610eae4fd9c5f2ac6791a4c69dbf63cc538f4a58ce28c7c6d77cc738ccc4",
12 "packages/render-webgpu/index.ts": "4571372871e71c6d48c015463364f21df7063cf0b7b56819f819c3f7aba11a43",
13 "packages/render-webgpu/particles.ts": "bfb7f07163e73ed406c3f3aecd60716113b182063330ed7cc0bd544f750d05c7",
14 "packages/render-webgpu/shaders.ts": "80ac5c99114cb4cef7b8c036879f871481b6c4d1ef5244c657b3f85a9550fd96",
15 "packages/render-webgpu/world-text.ts": "f872691fdcab4caa93b18f3d785819d6a3624c5f305ffca94cf198ed046838a2",
16 "packages/render-webgpu/portal.ts": "4bbd688337d368f0d7ad6528f43b66a1ed3e4f203831bdee1b8abf278b6f4b1e",
17 "packages/render/index.ts": "ef0de99f9ce985ec5bab9dc5a614eb4e369d3ad446157fe85f3729aeb4f4c535",
18 "packages/render/portals.ts": "65230db3d4f1aeda355d1f0619470a6e6e7c0d7dd533fb324768da68679b88c8",
19 "tests/render-graph.test.ts": "ed664aaacb1e4c3d77d5e473edcbaf59f7695f4f985ac9e13e8b63ff3759365b",
20 "tests/portal-target.test.ts": "fe6d24636d959899f075d9295d851b5a1d427cb0a971a648721f17a89248b5de",
21 "tests/portals.test.ts": "f6f90209a93c903147b89196402fb44610cbf5754ccd78ceb9174a29fe50d936",
22 "tests/browser/portal-rendering.spec.ts": "8e53c7988ba5ec42212241763d5668a26f67a952c1bf466e1eb48ca8f47610b9",
23 "tests/browser/probe.spec.ts": "fa7374fc1734281fe61468c0427740df7ff1f0dc6637aa346161affa7c6f82db",
24 "tests/browser/editor-surfaces.spec.ts": "a7e8042967d28f3c4cae6aae0789eb5569fba93a6521a99bbeb15e1931e2963a"
25 },
26 "environment": {
27 "node": "22.23.4",
28 "browser": "Chromium 141 headless shell / Playwright 1.56.1",
29 "graphics": "SwiftShader WebGPU/Vulkan",
30 "temporaryStorage": "isolated workspace-disk directories"
31 },
32 "contracts": {
33 "worldFormatChanged": false,
34 "presentationFormatChanged": false,
35 "visualUniformBytes": 464,
36 "activeDestinationViews": 1,
37 "maximumPreparedCandidates": 1,
38 "recursionHops": 1,
39 "preparationDeadlineMs": 20000,
40 "shaderDeadlineMs": 15000,
41 "destinationGraphPeakBytes": 25165824,
42 "destinationOutputPeakBytes": 4194304,
43 "shadowDimension": 2048,
44 "tiers": {
45 "performance": {
46 "pixels": 65536,
47 "dimension": 512,
48 "hz": 15
49 },
50 "balanced": {
51 "pixels": 131072,
52 "dimension": 768,
53 "hz": 20
54 },
55 "high": {
56 "pixels": 262144,
57 "dimension": 1024,
58 "hz": 30
59 }
60 },
61 "textPreparedBeforeCommit": true
62 },
63 "checks": {
64 "typeAndImports": {
65 "passed": true,
66 "packageFiles": 146,
67 "log": "portal-check.log"
68 },
69 "headless": {
70 "total": 760,
71 "passed": 704,
72 "skipped": 56,
73 "failed": 0,
74 "durationMs": 28005.99917,
75 "log": "portal-headless.log"
76 },
77 "browser": {
78 "passed": 4,
79 "failed": 0,
80 "stats": {
81 "startTime": "2026-10-25T20:05:24.288Z",
82 "duration": 113497.672,
83 "expected": 4,
84 "skipped": 0,
85 "unexpected": 0,
86 "flaky": 0
87 },
88 "report": "portal-browser-results.json",
89 "scope": [
90 "portal gallery/lifecycle with actual allocation instrumentation",
91 "diagnostic cancellation and control restoration",
92 "two complete owned-renderer probe runs across existing fixtures",
93 "existing two-player surface publication and worker device recovery"
94 ]
95 },
96 "controlsFollowup": {
97 "passed": 4,
98 "failed": 0,
99 "stats": {
100 "startTime": "2026-10-25T20:07:35.755Z",
101 "duration": 7756.266,
102 "expected": 4,
103 "skipped": 0,
104 "unexpected": 0,
105 "flaky": 0
106 },
107 "report": "portal-controls-results.json",
108 "scope": "After the full four-case run, only diagnostic UI startup cleanup and gesture exclusion plus the portal browser test changed. Final follow-up reran both portal cases and verified worker startup failure and the existing input/audio gesture case. Renderer and other package sources are unchanged from fullRegressionSourceSha256."
109 },
110 "distinctBrowserScenarios": 6
111 },
112 "measurementFiles": [
113 "portal-shared-recovery.json",
114 "portal-measured.json"
115 ],
116 "nativeCensus": [
117 {
118 "mode": "gallery",
119 "buffers": 15,
120 "textures": 7,
121 "destination": {
122 "views": 1,
123 "recursion": 1,
124 "preparing": false,
125 "staged": false,
126 "visible": true,
127 "coverage": 0.12765103888716678,
128 "frames": 7,
129 "width": 640,
130 "height": 400,
131 "targetBytes": 21897216,
132 "buffers": 8,
133 "textures": 4
134 }
135 },
136 {
137 "mode": "lifecycle",
138 "buffers": 15,
139 "textures": 7,
140 "destination": {
141 "views": 1,
142 "recursion": 1,
143 "preparing": false,
144 "staged": false,
145 "visible": true,
146 "coverage": 0.12765103888716678,
147 "frames": 1,
148 "width": 640,
149 "height": 400,
150 "targetBytes": 21897216,
151 "buffers": 8,
152 "textures": 4
153 }
154 }
155 ],
156 "initialRuns": {
157 "portal-initial": "First native gallery/lifecycle passed before near-plane clamp, native allocation instrumentation and fixture lighting refinement. Preserved report and screenshot.",
158 "portal-second": "Gallery, cancellation and full owned-renderer case passed before added partial-allocation failure injection and constructor cleanup hardening.",
159 "portal-reference-initial": "Independent camera reference initially required maximum error <= 2 at every pixel; this failed at edges (max 11, mean about 0.073). Final acceptance separately bounds smooth interiors and mean error across all pixels. Report retained."
160 },
161 "remaining": [
162 "Upright rectangular rendering API only; no authored portal schema/editor, place identity/residency/interest or shared destination activation yet",
163 "No recursive views, per-pixel destination depth, cross-boundary volumetrics or physical traversal changes",
164 "One active and one staged destination may coexist; target budgets exclude separately bounded model assets and lettering atlases",
165 "Fixed 2048-square destination shadows are outside the tier color-pixel ceiling",
166 "Viewport/quality resizing and first visibility refresh immediately, outside the ordinary cadence gate",
167 "GPU pipeline/cache memory and physical-device frame time are not measured by handle counts",
168 "No hardware-GPU, Docker/Coolify, remote CI, long-soak or cross-vendor acceptance claimed",
169 "Final character and arrival art pass remains deferred"
170 ],
171 "fullRegressionSourceSha256": {
172 "apps/probe/main.ts": "5fca814805775ab2bbbd3caacbe16d843ae2f0c4913d058aa6bd0e0134b85a02",
173 "apps/probe/protocol.ts": "ebe0bfba6ebfce52a986ea2e09d499eba91dbc23df926228b738e51206f83d27",
174 "apps/probe/render.worker.ts": "96a89e70e73b6900d6cbe536f17cb193c2b73f33bdf4184993a04be608fd098c",
175 "apps/probe/portals.ts": "5a0db39f1556e67bb5e571d2246e0dd785a9edf12b721db6dd11ca79f3e980bc",
176 "packages/render-webgpu/graph.ts": "a0aa610eae4fd9c5f2ac6791a4c69dbf63cc538f4a58ce28c7c6d77cc738ccc4",
177 "packages/render-webgpu/index.ts": "4571372871e71c6d48c015463364f21df7063cf0b7b56819f819c3f7aba11a43",
178 "packages/render-webgpu/particles.ts": "bfb7f07163e73ed406c3f3aecd60716113b182063330ed7cc0bd544f750d05c7",
179 "packages/render-webgpu/shaders.ts": "80ac5c99114cb4cef7b8c036879f871481b6c4d1ef5244c657b3f85a9550fd96",
180 "packages/render-webgpu/world-text.ts": "f872691fdcab4caa93b18f3d785819d6a3624c5f305ffca94cf198ed046838a2",
181 "packages/render-webgpu/portal.ts": "4bbd688337d368f0d7ad6528f43b66a1ed3e4f203831bdee1b8abf278b6f4b1e",
182 "packages/render/index.ts": "ef0de99f9ce985ec5bab9dc5a614eb4e369d3ad446157fe85f3729aeb4f4c535",
183 "packages/render/portals.ts": "65230db3d4f1aeda355d1f0619470a6e6e7c0d7dd533fb324768da68679b88c8",
184 "tests/render-graph.test.ts": "ed664aaacb1e4c3d77d5e473edcbaf59f7695f4f985ac9e13e8b63ff3759365b",
185 "tests/portal-target.test.ts": "fe6d24636d959899f075d9295d851b5a1d427cb0a971a648721f17a89248b5de",
186 "tests/portals.test.ts": "f6f90209a93c903147b89196402fb44610cbf5754ccd78ceb9174a29fe50d936",
187 "tests/browser/portal-rendering.spec.ts": "0b7c24af238049333ab37178c5e395744db5dbf6dceea6aa3fa57fbf37b46bf2",
188 "tests/browser/probe.spec.ts": "fa7374fc1734281fe61468c0427740df7ff1f0dc6637aa346161affa7c6f82db",
189 "tests/browser/editor-surfaces.spec.ts": "a7e8042967d28f3c4cae6aae0789eb5569fba93a6521a99bbeb15e1931e2963a"
190 },
191 "cameraReference": {
192 "views": 2,
193 "regionPixelsPerView": 2500,
194 "rawMaximumChannelError": 11,
195 "smoothInteriorMaximumChannelError": 1,
196 "maximumMeanChannelError": 0.07506666666666667,
197 "acceptance": "At least half of sampled RGB channels have locally smooth reference neighborhoods (range <= 2 in 3x3). Their maximum error must be <= 2. Mean across all sampled channels, including edges, must be < 0.25. Both views use an independent +10 X camera without portalCamera."
198 }
199}
200