REPOSITORY SOURCE

portal-interest-acceptance.json

docs/evidence/portal-interest-acceptance.json

1{
2  "recordedAt": "2026-10-25T20:34:57.636445+00:00",
3  "baseCommit": "588e782bfdee186e5de5fc83df363117e8a48bea",
4  "fullPlanEstimatePercent": 77,
5  "scope": "Server-derived one-hop portal destination presence for relay and persistent rooms; revision-safe subscriptions, strict readers, capability compatibility, and corrected persistent anchored gateway reach. Player portal rendering is still open. No numbered milestone closed.",
6  "sourceSha256": {
7    "apps/player/main.ts": "060a83a0516fd88f088c2ce565cebbdf4daed7838663c3fb1e0cf98b33b4e506",
8    "packages/net/client.ts": "a430b78e67f82fc4494a7a3ffc06b01f86262db18aa2b6c3001e02c917314688",
9    "packages/net/interest.ts": "f032cbc025c3de3726d5431271e25686bf54fcf35ca8b856f6a5320ca2e0a335",
10    "packages/net/packets.ts": "c0c84b316fb712b8dac719d23dfcc4e48b9126c6e92edc70f0d6ce5f69d9ba84",
11    "packages/net/persistent-client.ts": "339983bb8baee30394c4eecac4ab32a4b81dc8a658f3bf2f44074b879ec9a76c",
12    "packages/net/protocol.ts": "50c1d3cdb545b4549783b410aac3750d0c079ce9b3519d63e1ed90965bb9ea09",
13    "packages/schema/index.ts": "98c5071387fdc5c6df0979d9bef4a8a43a8a0edcd888c22a5fb7a33a3161228a",
14    "services/control/ledger.ts": "420b200310a4989152d9e0c882066eebfa77c41e98a975879e947f27e5ce8315",
15    "services/persistent/server.ts": "1a5a197fd9ddec78846abcf3228e97d70bda3960093b1199f1a05681775e1889",
16    "services/relay/server.ts": "26ed9f1ab9e779cf8351a1cbd9e5e3741c6e115f8d403372e1dc536acbb6c800",
17    "tests/browser/editor-portal-windows.spec.ts": "a8b4c5efd31a366124116ad3e0f9ef78ba1b4053560e4822601793d69e5d20cb",
18    "tests/fixtures/portal-interest-world.ts": "c997308fc99beb11138b7d556d5d6cbb7efe7b49b1b7ac2d79aad507ff3dc766",
19    "tests/net-packets.test.ts": "f650465f74c231d69728c19941d32db972a57a28e561a5001eb77f659fe8dc39",
20    "tests/persistent-room.test.ts": "b7683765096242b1f4d2f832648027722beb455a4760af77f904c6704433a0f1",
21    "tests/portal-interest.test.ts": "16e3517f305ca57ada61298d0d27e26d6180507581d002dc85dde8c17c9d8b7d"
22  },
23  "environment": {
24    "node": "22.23.4",
25    "browser": "Chromium 141 headless shell / Playwright 1.56.1",
26    "graphics": "SwiftShader WebGPU/Vulkan",
27    "postgres": "isolated local cluster with fsync and synchronous_commit enabled",
28    "temporaryStorage": "isolated workspace-disk directories"
29  },
30  "contract": {
31    "worldFormatChanged": false,
32    "presentationFormatChanged": false,
33    "maximumDestinations": 1,
34    "maximumInterestPlaces": 2,
35    "roomPeerCap": 8,
36    "relayHello": {
37      "placeInterest": 1,
38      "portalInterest": 1
39    },
40    "persistentHello": "portalInterest: 1 only when advertised by session response",
41    "serverPacketDuringRevision": "fieldless heartbeat on portal-capable connections; no presence until barrier release",
42    "authorityContext": "interaction place only",
43    "authoredConditions": "Current format-17 anchored windows are unconditional. Defensive requirement-selector unit coverage does not add condition authoring."
44  },
45  "checks": {
46    "typeAndImports": {
47      "passed": true,
48      "packageFiles": 148,
49      "log": "portal-interest-check.log"
50    },
51    "headless": {
52      "total": 768,
53      "passed": 711,
54      "skipped": 57,
55      "failed": 0,
56      "durationMs": 33671.746371,
57      "log": "portal-interest-headless.log"
58    },
59    "postgres": {
60      "passed": 16,
61      "skipped": 0,
62      "failed": 0,
63      "durationMs": 33873.682521,
64      "log": "portal-interest-postgres.log",
65      "scope": "Persistent and trusted room regressions, translated anchored gateway reach, one-hop filtering, committed travel, reconnect and old-hello fallback"
66    },
67    "browser": {
68      "distinctPassedCases": 4,
69      "finalSeparateRuns": {
70        "portal": {
71          "stats": {
72            "startTime": "2026-10-25T20:33:05.470Z",
73            "duration": 35861.465,
74            "expected": 1,
75            "skipped": 0,
76            "unexpected": 0,
77            "flaky": 0
78          },
79          "report": "portal-interest-portal-browser-results.json"
80        },
81        "place": {
82          "stats": {
83            "startTime": "2026-10-25T20:33:42.177Z",
84            "duration": 45340.057,
85            "expected": 1,
86            "skipped": 0,
87            "unexpected": 0,
88            "flaky": 0
89          },
90          "report": "portal-interest-place-browser-results.json"
91        }
92      },
93      "recoveryCases": "Both existing development-recovery cases passed in the initial combined run before the persistent-only advertisement follow-up. Initial source hashes and report retained in portal-interest-initial. The later follow-up changes admission only for persistent rooms and was covered by final headless and PostgreSQL checks.",
94      "initialReport": "portal-interest-initial/browser-results.json",
95      "initialFailure": "Running unrelated creator fixtures after an active recovery world was invalid: room rejected interaction/place identity replacement with an explicit-state-migration error. Existing runbook requires fresh rooms. Final creator cases each ran in a new server and passed without weakening the migration check."
96    }
97  },
98  "measurements": "portal-interest-measured.json",
99  "initialHeadlessFindings": [
100    "Fixture conversion initially retained legacy fields/IDs incompatible with anchored gateways; normalized IDs, local position, and removed legacy requirement/denial fields. No authoring schema was loosened.",
101    "Using routes packets as barrier heartbeats failed the static-world reader, which correctly requires routed content. Replaced with an explicit fieldless heartbeat negotiated by portal capability. Final static-world barrier case passed."
102  ],
103  "remaining": [
104    "Player source/destination graphics transactions in main and worker placements",
105    "Destination scene and actor projection, bounded catalogs/residency and device recovery",
106    "Shared peers are received but still projected only into their current place; the browser asserts zero source-room rigged actors while the other traveler is at the destination",
107    "No GPU performance, Docker/Coolify, remote CI or long-soak claim",
108    "Final character and arrival art pass remains deferred"
109  ]
110}
111