diff --git a/docs/reports/game-portal-p3-performance-20261010.json b/docs/reports/game-portal-p3-performance-20261010.json new file mode 100644 index 00000000..129c6781 --- /dev/null +++ b/docs/reports/game-portal-p3-performance-20261010.json @@ -0,0 +1,613 @@ +{ + "schema": "fsgg.portal.p3-structural-release-record/1", + "feature": "GAME-PORTAL-01", + "item": "GAME-PORTAL-01.P3", + "originalAttempt": "portal-p3-qualification-prep-20261007", + "disposition": "accepted selected finite structural-cost Release verification; numeric magnitudes observational", + "acceptanceObservedAt": "2026-10-10T03:39:13.503647+00:00", + "source": { + "revision": "e514d018013f740b73fc54daa078f8f9f5f34014", + "tree": "f523e396cec8a1011da51f8bca12ccdca7729abc" + }, + "prospectiveDeclaration": { + "schema": "fsgg.portal.structural-performance-intent/1", + "status": "PROSPECTIVE; selected property root-admitted, repository landing and execution not admitted", + "owner": "FS-GG/FS.GG.Game", + "feature": "GAME-PORTAL-01", + "item": "GAME-PORTAL-01.P3", + "route": "Presentation.view: copied-snapshot interpolation + Adapter.drawPoints", + "sourceRevision": "e514d018013f740b73fc54daa078f8f9f5f34014", + "sourceTree": "f523e396cec8a1011da51f8bca12ccdca7729abc", + "definitionVersion": 1, + "workloadDefinition": "GAME-PORTAL-01.P3;Presentation.view;areas=2;entities=2;setupTicks=5;pairs=4;alpha=0,0.5,1;viewsPerCycle=12;warmupCycles=5;samples=20;cyclesPerSample=100;maxAreaNodesPerView=2;pointsPerView=2;noSimulationDuringMeasurement;v1", + "definitionDigest": "66113918829ada39ae1a4fdfd32255e300e3986db4bbabc0b6e69807f34d4fd4", + "scale": { + "areas": 2, + "entities": 2, + "snapshots": 5, + "consecutivePairs": 4, + "alphas": [ + 0, + 0.5, + 1 + ], + "viewsPerCycle": 12, + "warmupCycles": 5, + "samples": 20, + "cyclesPerSample": 100, + "measuredViews": 24000 + }, + "structuralLimits": { + "maxOccupiedAreaNodesPerView": 2, + "exactEntityBoundPointsPerView": 2, + "singleInterpolationPerView": "source-bound call path, not a dynamic internal counter", + "presentationPhysicsSteps": 0, + "snapshots": "immutable copied values; worlds disposed before warmup/measured views", + "ordering": "area/entity stable; traversal destination snap and ordinary interpolation" + }, + "requiredCounters": [ + "elapsedTicks", + "processCpuTicks", + "currentThreadAllocatedBytes", + "processGcCollections[0..2]", + "areaNodes", + "points" + ], + "numericPassCeilings": null, + "fpsTarget": null, + "historicalPreEditBaseline": "unknown", + "measurementCapability": "bounded headless managed.NET10; elapsed/processCPU/current synchronous-thread allocation/processGC; no raster/GPU/swapchain", + "liveCompositorRequired": false, + "counterMagnitudeDisposition": "observational only; no timing/speedup/allocation ceiling inferred", + "blockingConditions": [ + "binding mismatch", + "missing/incomplete/nonfinite/invalid raw counters", + "semantic/structural failure", + "failed command/custody unknown", + "required independent verdict fails if such a capability becomes available" + ], + "scopeExclusions": [ + "interactive-game/FPS acceptance", + "physics throughput", + "browser/server authority", + "Portal-to-Portal upgrade", + "global Wizard", + "original resume04/resume05 settlement" + ] + }, + "prospectiveDeclarationByteSha256": "de90c3a96455505b0d99e7fbedadf927d19f113333432c2cec2ce6c0568892f2", + "declarationStatusInterpretation": "Original declaration preserved as authored before the operation; its preparation status is historical. Actual operation and subsequent root acceptance are separate below, not a retroactive smoke reclassification.", + "actualRawObservation": { + "architecture": "X64", + "assemblySha256": "4b85f5ee755376f300916b97c193302ddeada2b03b5039bb25bfff491c7cadd0", + "counterScope": "Elapsed stopwatch; process CPU and GC collections; current synchronous measurement-thread allocations. Process CPU has coarse resolution and may include runtime threads. No overhead subtraction.", + "currentThreadAllocatedBytesPerView": { + "maximum": 1975.3333333333333, + "median": 1970.0666666666666, + "minimum": 1970.0666666666666 + }, + "declaredSourceRevision": "e514d018013f740b73fc54daa078f8f9f5f34014", + "elapsedNanosecondsPerView": { + "maximum": 9338.938333333334, + "median": 866.3941666666667, + "minimum": 814.6741666666667 + }, + "historicalPreEditBaseline": "unknown", + "measuredViews": 24000, + "originalItem": "GAME-PORTAL-01.P3", + "os": "Arch Linux", + "processCpuNanosecondsPerView": { + "maximum": 9267.5, + "median": 862.0833333333333, + "minimum": 813.3333333333334 + }, + "processorCount": 1, + "runtime": "10.0.12", + "samples": [ + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 1560.7183333333332, + "elapsedTicks": 1872862, + "points": 2400, + "processCpuNanosecondsPerView": 1560.8333333333333, + "processCpuTicks": 18730, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 1, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 1627.0783333333334, + "elapsedTicks": 1952494, + "points": 2400, + "processCpuNanosecondsPerView": 1590, + "processCpuTicks": 19080, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 2, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 1607.8666666666666, + "elapsedTicks": 1929440, + "points": 2400, + "processCpuNanosecondsPerView": 1602.5, + "processCpuTicks": 19230, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 3, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 947.0766666666667, + "elapsedTicks": 1136492, + "points": 2400, + "processCpuNanosecondsPerView": 945, + "processCpuTicks": 11340, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 4, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 971.665, + "elapsedTicks": 1165998, + "points": 2400, + "processCpuNanosecondsPerView": 967.5, + "processCpuTicks": 11610, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 5, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 992.4625, + "elapsedTicks": 1190955, + "points": 2400, + "processCpuNanosecondsPerView": 983.3333333333334, + "processCpuTicks": 11800, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 6, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 2347.9575, + "elapsedTicks": 2817549, + "points": 2400, + "processCpuNanosecondsPerView": 2341.6666666666665, + "processCpuTicks": 28100, + "processGcCollections": [ + 1, + 1, + 0 + ], + "sample": 7, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2370400, + "currentThreadAllocatedBytesPerView": 1975.3333333333333, + "elapsedNanosecondsPerView": 9338.938333333334, + "elapsedTicks": 11206726, + "points": 2400, + "processCpuNanosecondsPerView": 9267.5, + "processCpuTicks": 111210, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 8, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 819.9508333333333, + "elapsedTicks": 983941, + "points": 2400, + "processCpuNanosecondsPerView": 819.1666666666666, + "processCpuTicks": 9830, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 9, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 824.9108333333334, + "elapsedTicks": 989893, + "points": 2400, + "processCpuNanosecondsPerView": 823.3333333333334, + "processCpuTicks": 9880, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 10, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 830.3375, + "elapsedTicks": 996405, + "points": 2400, + "processCpuNanosecondsPerView": 828.3333333333334, + "processCpuTicks": 9940, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 11, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 823.325, + "elapsedTicks": 987990, + "points": 2400, + "processCpuNanosecondsPerView": 820.8333333333334, + "processCpuTicks": 9850, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 12, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 856.93, + "elapsedTicks": 1028316, + "points": 2400, + "processCpuNanosecondsPerView": 855, + "processCpuTicks": 10260, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 13, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 841.3341666666666, + "elapsedTicks": 1009601, + "points": 2400, + "processCpuNanosecondsPerView": 840.8333333333334, + "processCpuTicks": 10090, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 14, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 849.1408333333334, + "elapsedTicks": 1018969, + "points": 2400, + "processCpuNanosecondsPerView": 813.3333333333334, + "processCpuTicks": 9760, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 15, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 831.0141666666667, + "elapsedTicks": 997217, + "points": 2400, + "processCpuNanosecondsPerView": 829.1666666666666, + "processCpuTicks": 9950, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 16, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 1739.0575, + "elapsedTicks": 2086869, + "points": 2400, + "processCpuNanosecondsPerView": 1733.3333333333333, + "processCpuTicks": 20800, + "processGcCollections": [ + 1, + 0, + 0 + ], + "sample": 17, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 814.6741666666667, + "elapsedTicks": 977609, + "points": 2400, + "processCpuNanosecondsPerView": 813.3333333333334, + "processCpuTicks": 9760, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 18, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 870.3725, + "elapsedTicks": 1044447, + "points": 2400, + "processCpuNanosecondsPerView": 869.1666666666666, + "processCpuTicks": 10430, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 19, + "views": 1200 + }, + { + "areaNodes": 2400, + "currentThreadAllocatedBytes": 2364080, + "currentThreadAllocatedBytesPerView": 1970.0666666666666, + "elapsedNanosecondsPerView": 862.4158333333334, + "elapsedTicks": 1034899, + "points": 2400, + "processCpuNanosecondsPerView": 825, + "processCpuTicks": 9900, + "processGcCollections": [ + 0, + 0, + 0 + ], + "sample": 20, + "views": 1200 + } + ], + "schema": "fsgg.portal.presentation-smoke/1", + "scope": "Actual Presentation.view interpolation+scene projection; loop, frame storage and counter overhead included. Setup, validation and JSON outside timing. No physics, raster, GPU or product-adoption timing.", + "stopwatchFrequency": 1000000000, + "stopwatchHighResolution": true, + "verdict": "current-smoke-observed-no-timing-threshold", + "warmupCycles": 5, + "workloadDefinition": "GAME-PORTAL-01.P3;Presentation.view;areas=2;entities=2;setupTicks=5;pairs=4;alpha=0,0.5,1;viewsPerCycle=12;warmupCycles=5;samples=20;cyclesPerSample=100;maxAreaNodesPerView=2;pointsPerView=2;noSimulationDuringMeasurement;v1", + "workloadSha256": "66113918829ada39ae1a4fdfd32255e300e3986db4bbabc0b6e69807f34d4fd4" + }, + "actualRawStdoutByteSha256": "bc9688d9659dd2fa4d6ca01597c8c8338cd0bc1b75d63a2a0edb634457270aea", + "actualAssemblySha256": "4b85f5ee755376f300916b97c193302ddeada2b03b5039bb25bfff491c7cadd0", + "actualLockSha256": "7769c72f28bca3fc4b40e6ce710852c8d5e26098c5e6d5c35cefbe9f7c11f66b", + "graph": { + "FS.GG.Game.Core": "0.17.0", + "FS.GG.Game.Physics.Box2D": "0.17.0", + "FS.GG.Game.Render": "0.17.0", + "FS.GG.UI.Scene": "0.31.0", + "FS.GG.UI.KeyboardInput": "0.31.0", + "Box2D.NET": "3.1.654", + "FSharp.Core": "10.1.302" + }, + "fullReleaseVerification": { + "route": "source/project preflight; offline locked seven-package restore/boundary; warnings-as-errors Release build; real default/presentation; six CLI refusals; one real performance run; typed binding/structural Verify", + "stageResults": [ + { + "stage": "sdk-version", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "sdk-info", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "source-project-preflight", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "offline-locked-restore", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "seven-package-boundary", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "Release-build", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "default", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "presentation", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "missing-revision", + "actualExit": 2, + "expectedExit": 2 + }, + { + "stage": "short-revision", + "actualExit": 2, + "expectedExit": 2 + }, + { + "stage": "uppercase-revision", + "actualExit": 2, + "expectedExit": 2 + }, + { + "stage": "nonhex-revision", + "actualExit": 2, + "expectedExit": 2 + }, + { + "stage": "invalid-argument", + "actualExit": 2, + "expectedExit": 2 + }, + { + "stage": "extra-performance-argument", + "actualExit": 2, + "expectedExit": 2 + }, + { + "stage": "one-real-performance-observation", + "actualExit": 0, + "expectedExit": 0 + }, + { + "stage": "typed-binding-Verify", + "actualExit": 0, + "expectedExit": 0 + } + ], + "sourceControlReuse": "Eight source-qualified Portal presentation tests remain byte-identical to their accepted producer. Program executes actual structural/interpolation/snap/identity/order predicates and real scene; invalid-alpha/nonconsecutive and malformed-projection/missing-point injected fixtures are separately reused source proof, not newly executed Release tests.", + "originalDescriptorSha256": "a939139ae69e126b33f5eba41e51c0a0461307f35dc4163da764e54d53085a43", + "originalResultsSha256": "e5485e7abe677aaa8ad45ac2d38018615f0be39e571b2a7b181ff295395efb67", + "validatorSha256": "f36ae74a1485b4dfd5fbb49e16b3e8d4eaf3ffd538040da272c38d3d823ca767", + "actualVerifierRecordSha256": "3c6b06f60d469827173535f5e08676f246bc27930d5510a93e092b4e97791a42", + "ownerResultSha256": "28b85872de07534f5968bfc160dc31ed41dd3311dfdaaab5e74e9115ebc65dce", + "rootAcceptanceSha256": "8fcc8eff13cc8fa684026dc70770c6ce92ea957152bd0ff9d18846f03b8d9fe9", + "rootIndependentChecks": [ + "15 retained artifact hashes", + "16 exact descriptor stage vectors and expected exits", + "all stages firstFailure null, no signals, empty observed cleanup", + "all known original process births absent at independent root read", + "independent parser recomputation exactly agrees with actual20rows24kviews" + ], + "parserNegativeControlCount": 36, + "replayControlScriptSha256": "36345e9baf9ce7dd76b0156789e59ad24d1ea4990809d0e57a8396531ad68217" + }, + "capability": { + "sdk": "10.0.401", + "runtime": "10.0.12", + "architecture": "X64", + "os": "Arch Linux", + "processorCount": 1, + "cpuAffinity": [ + 1 + ], + "gcHeapCapBytes": 1610612736, + "sampledRssLimitBytes": 2147483648, + "sampledPeakRssBytes": 437309440, + "hardMemoryContainment": false, + "workWindowSeconds": 300, + "cleanupWindowSeconds": 30, + "scope": "Actual Presentation.view interpolation+scene projection; loop, frame storage and counter overhead included. Setup, validation and JSON outside timing. No physics, raster, GPU or product-adoption timing.", + "counterScope": "Elapsed stopwatch; process CPU and GC collections; current synchronous measurement-thread allocations. Process CPU has coarse resolution and may include runtime threads. No overhead subtraction.", + "liveCompositorRequired": false, + "independentGovernanceVerdict": null, + "independentGovernanceCapability": "Unavailable configured Portal/performance oracle; ordinary Debug/advisory CI is not a performance verdict" + }, + "cleanup": { + "all16ObservedOwnedGroupsEmpty": true, + "independentCurrentLiveAndZombieCensusEmpty": true, + "rootIndependentKnownBirthCensusAbsent": true, + "signals": [], + "retries": 0, + "firstFailure": null, + "independentTerminalCensusSha256": "19ae13446a97fff572adb6160c83414214f4a50e88f0fce757456621e57f036f", + "unobservedTransientOrDetachedDescendants": "unknown" + }, + "historicalPreEditBaseline": "unknown", + "original13a8SmokeDisposition": "prior iteration evidence only; not renamed Release evidence", + "numericPerformanceCeilings": null, + "scopeExclusions": [ + "interactive-game/FPS acceptance", + "physics throughput", + "browser/server authority", + "Portal-to-Portal upgrade", + "global Wizard", + "original resume04/resume05 settlement" + ], + "originalInterruptedCustody": "resume04 failed/resume05 unrun remain held; not reused, retried or accepted" +} diff --git a/docs/roadmaps/game-area-portals.md b/docs/roadmaps/game-area-portals.md index 2a228b88..a1c20a0c 100644 --- a/docs/roadmaps/game-area-portals.md +++ b/docs/roadmaps/game-area-portals.md @@ -4,8 +4,9 @@ Status: P1/P2 source delivered and public installed support accepted in Game `0. 2026-10-05. Game owns topology and traversal; the Box2D adapter owns local-world transfers; Rendering owns portal presentation. fdev integrates their joins. Parent: [GAME-BOX2D-01](game-box2d-physics.md#area-topology-and-portals). -P3 managed presentation and public Template adoption are qualified for the selected -headless scope; P3 performance release acceptance and P4 queries remain open. +P3 is complete for the selected finite headless managed presentation and public +Template adoption scope, including its declared structural-cost Release verification. +P4 queries and the separate browser/server/viewport follow-ups remain unselected. ## Local geometry, arbitrary connections @@ -165,7 +166,7 @@ a separately observed runtime profile; P3 product adoption and browser physics r - [x] P1 topology and crossing: source delivered by PR696. - [x] P2 headless whole-body transfer: source delivered by PR698. -- [ ] P3 presentation and installed opt-in: managed presentation and public fresh/retained Template adoption are qualified below; performance release acceptance remains open. +- [x] P3 presentation and installed opt-in: traversal-safe managed presentation, fresh/retained public Template adoption and the selected finite structural-cost Release verification are qualified below. This closes only the declared headless managed scope. - [ ] P4 portal-aware queries: separate follow-up, not selected. Game's [accepted `0.17.0` release and fresh public consumer](game-box2d-physics.md#accepted-public-release-and-installed-example) @@ -184,7 +185,7 @@ position was `(9.899999618530273, 5.150000095367432)` and velocity `(-1, 4)`. This establishes public producer support and P3's installed prerequisite. At that checkpoint, presentation and fresh/retained Template adoption required their own -outcomes; their subsequent scoped acceptance is recorded below. P3 remains open. +outcomes; their subsequent scoped acceptance is recorded below. No browser physics, cross-platform determinism or hidden-solver restoration is inferred. ## Later physics and workspace boundaries @@ -305,7 +306,8 @@ total RSS and detached descendants were not independently measured. Physics step raster/GPU timing and installed-product/adoption are outside the measured scope. At that measurement checkpoint, performance release requirements and fresh/retained product adoption remained open. The later Template acceptance below closes only the -declared adoption contribution; P3 is not done. +declared adoption contribution; the separate final Release acceptance below resolves +the remaining selected performance obligation. Original resume04/resume05 effects and custody remain unchanged. Native PR709 checks on Ubuntu and Windows subsequently failed compilation at the @@ -353,13 +355,77 @@ recorded separately; whole-tree equality is not claimed. The first direct privat snapshot failure is retained separately from its admitted fresh successful successor. This closes Box2D `.4` for the declared managed-template scope and P3's fresh/retained -adoption contribution. Whole P3 remains Done: No. Existing raw performance smoke is -still bound to `13a8cdeb` and its measured assembly; T4 supplied no new timing evidence -or accepted budget. A genuine Portal-to-Portal version upgrade awaits a separately +adoption contribution. At that boundary P3 remained open for performance acceptance. +The old raw smoke stays bound to `13a8cdeb` and its measured assembly; T4 supplied +no timing evidence or accepted budget. The separate final Release acceptance follows. A genuine Portal-to-Portal version upgrade awaits a separately needed public successor. Global Wizard acceptance, browser physics/rendering, server authority and P4 remain separate. Original resume04/resume05 custody and effects were not reused, retried or accepted by these operations. +### P3 finite structural-cost Release acceptance — 2026-10-10 + +The producer/root prospectively selected the existing finite copied-snapshot route: +two areas, two entities, five snapshots, four consecutive pairs and alpha 0/0.5/1. +Each actual view must retain stable area/entity order, traversal destination snap and +ordinary interpolation, produce at most two occupied-area points nodes and exactly +two entity-bound points, and never step physics during presentation. Setup creates +and validates the real scene once; its worlds are disposed before warmup/measurement. +The selected property requires complete source-bound stock counters, not a latency, +FPS, speedup or allocation ceiling. The [durable typed record](../reports/game-portal-p3-performance-20261010.json) +preserves the original prospective declaration and actual twenty raw samples. + +The full Release verification for this narrow example is source/project preflight, +offline locked seven-package restore and boundary, warnings-as-errors Release build, +actual default/presentation entrypoints, all six CLI refusal controls, one real +performance-mode execution and typed binding/structural verification. It ran once +at protected `e514d018013f740b73fc54daa078f8f9f5f34014`, tree +`f523e396cec8a1011da51f8bca12ccdca7729abc`. Ten stages exited 0 and six refusals +exited the required 2; no failure, retry or signals occurred. The actual Release +assembly SHA256 is `4b85f5ee755376f300916b97c193302ddeada2b03b5039bb25bfff491c7cadd0`. +Lock `7769c72f` stayed unchanged; source/project/package, definition, declaration, +assembly, runtime and original operation bindings were verified. This is the final +Release example route, not the repository's Debug CI or an absent generic target. + +All twenty samples and 24,000 checked views passed after five warmup cycles. Each +sample contains 1,200 actual views, 2,400 nodes and 2,400 points. Actual semantic checks +run through the unchanged production scene/presentation modules. The eight original +source tests remain byte-identical; their specialized malformed-input/frame controls +are reused source qualification, not freshly executed Release test cases. Thirty-six +private parser mutations independently exercised record refusal, including internally +consistent foreign source/digest pairs and float-valued workload counts. Root review +independently verified fifteen actual artifact hashes, sixteen exact command vectors, +expected exits/cleanup, known process births and recomputed every raw row and total. + +The original stdout label remains `current-smoke-observed-no-timing-threshold`. +The separate accepted typed verification proves the prospectively selected structural +property and counter completeness. Elapsed ns/view median was 866.39, range +814.67–9,338.94; process CPU median was 862.08, range 813.33–9,267.50. Measurement-thread +allocation median was 1,970.07 bytes/view, range 1,970.07–1,975.33. All outliers and +raw GC deltas are retained. These values remain observations without a pass ceiling +or subtraction. The historical pre-edit baseline remains unknown; the previous +`13a8cdeb`/`cd1fcc61` smoke remains iteration evidence and was not relabelled. + +The exact profile was SDK 10.0.401 / .NET 10.0.12 / Linux X64 / CPU 1, with a 1.5 GiB +managed heap cap and practical sampled 2 GiB RSS control. Peak sampled aggregate RSS +was 437,309,440 bytes. All sixteen owned groups were observed empty; independent +terminal LIVE/zombie and root known-birth censuses were empty. Transient or detached +descendants remain unknown; sampling is not hard memory containment. The configured +independent Portal performance Governance capability is unavailable, so its verdict +is null, not passed. Advisory/Debug CI does not fill that gap; root accepted this +accurately scoped capability limit for the selected finite example property. + +**Required P3 outcomes complete:** traversal-safe presentation, public installed +prerequisite, genuine fresh public opt-in, preserving retained adoption/removal and +recoveries, ordinary workspace behavior after recovery, and the selected finite +Release structural-cost verification. No required outcome remains for this declared +headless managed scope. A through-portal viewport was optional in the original P3 row; +browser physics/rendering, production-server authority, P4, global Wizard and a later +Portal-to-Portal version upgrade are separate deferred boundaries. Their absence +neither expands this acceptance nor becomes an invented P3 gate. No interactive-game +performance promise, unavailable Governance pass or original resume04/resume05 +acceptance is inferred. A documentation-only successor preserves the exact qualified +runtime bytes; it does not claim a new successor assembly measurement. + A crate straddling an opening and colliding on both sides, or a rope/joint spanning areas, requires a separately designed and measured solver/constraint strategy. Body recreation does not preserve hidden contacts, warm-start state or exact solver rollback.