docs(perf): commit physical Slice A baselines

Capture the authoritative capped, uncapped, and dense-Arwic routes on the physical AMD display path. Preserve the portal allocation, exception-storm, and repeated-Caul memory failures as MP1c's before-state while unblocking the prepared-asset cutover.
This commit is contained in:
Erik 2026-07-24 14:41:50 +02:00
parent 49f3a48ee6
commit 2421d09f5d
6 changed files with 335 additions and 19 deletions

View file

@ -1562,8 +1562,8 @@ port in any phase — no separate listing here.
> remains DEFERRED**: ECS is the *throughput* lever (raise avg FPS ~230→300), a
> DIFFERENT goal from steadiness — revisit ONLY if the user wants a higher raw FPS
> number and accepts the rewrite risk. Rust rejected. Parked (resume from the table
> below): MP1b pak/bake is now complete; MP1c remains gated on corrected
> physical-local baselines. The remaining parked items are
> below): MP1b pak/bake is now complete and the corrected physical-local
> baselines have landed, so MP1c is active. The remaining parked items are
> MP-Alloc hard sites and MP1c. MP2 has shipped. Full rationale:
> `project_mp_track_findings.md`.
> The 2026-07-18 portal/resource-lifetime repair does not resume MP's ECS, pak,
@ -1582,11 +1582,14 @@ port in any phase — no separate listing here.
> unifies the unfinished MP pak/render-world work with future Track LH, preserves
> retail-shaped simulation and the N.5 renderer, and reorders execution around
> prepared content and cost-budgeted streaming before render-ECS throughput.
> **Execution update 2026-07-24:** Slice A's corrected tooling and diagnostic
> RDP captures have landed. The committed evidence includes capped/uncapped
> nine-stop routes, dense Arwic, portal windows, observer-effect measurement,
> binary provenance, and contention stacks. The physical-local AMD-display gate
> remains open and blocks Slice C. Slice B EnvCell dedup is complete; its
> **Execution update 2026-07-24:** Slice A's corrected tooling, diagnostic RDP
> captures, and authoritative physical-local captures have landed. The
> committed evidence includes capped/uncapped nine-stop routes, dense Arwic,
> portal windows, observer-effect measurement, binary provenance, and
> contention stacks. The physical runs confirm fast steady rendering but also
> preserve repeated-portal memory plateau failures, ~200 MiB allocation frames,
> and thousands of invalid typed-Setup probes as MP1c's before-state. Slice C
> is unblocked and active. Slice B EnvCell dedup is complete; its
> [full-bake report](../research/2026-07-24-slice-b-full-bake-report.md)
> records the 42.6× result and corrected geometry-identity collision.
@ -1613,7 +1616,7 @@ hitch and follows.
| MP1b | Pak format + `acdream-bake` CLI + mmap `PakReader` + equivalence/full-scale gate | ✅ **SHIPPED 2026-07-24** — 729,888 EnvCell keys → 17,117 unique geometries + 712,771 aliases (42.6×), 751,141 total keys / 38,370 physical blobs, zero failures, 28,192.4 MiB, 81.4 s validated atomic publish; full-DAT gate also corrected a real collision in WB's legacy geometry hash. [Report](../research/2026-07-24-slice-b-full-bake-report.md) |
| **MP-Alloc (safe batch)** | Reuse per-frame buffers: anim pose, particle draw-list, interior partition, animatedIds/drawableCells sets | ✅ SHIPPED + USER-GATED 2026-07-05 — dense-town frame-time spikes 2087ms → 610ms, alloc spikes (3075MB single-frame) eliminated, gen2 GC 511/window → ~0; user confirms FPS steady. 4 commits `b8c05e2b`..`91afea24` |
| MP-Alloc (hard sites) | EnvCell settled-camera rebuild gate + physics `Transition` pooling — the residual steady ~1.6MB/frame | ⚪ OPTIONAL follow-up — would lower the median too, but the wild-swing complaint is already resolved; each needs its own careful gate (batch correctness / physics faithfulness) |
| MP1c | Streaming cutover to pak + hitch gate | ⏸ blocked on the physical-local corrected Slice A baseline; Slice B package foundation is complete |
| MP1c | Streaming cutover to pak + hitch gate | **ACTIVE 2026-07-24** — physical-local Slice A gate committed; baseline: uncapped CPU p50/p95/p99 1.520/5.694/7.825 ms, GPU 0.897/3.239/3.406 ms, portal allocation max 212.7 MiB, repeated-Caul working-set growth 295.1 MiB. Slice B package foundation is complete |
| MP2 | Retail particle distance/cell-view degradation: DAT-authored range, exact infinite/finite off-view update branches, emitter-first render scan, user-requested 2× default range | ✅ SHIPPED 2026-07-17 — Aerlinthe hotspot `0x32000223` resolves to retail 64m and defaults to 128m; landscape/entity streaming distance unchanged |
| MP3 | Arch ECS render world + delta submission (the 300-FPS lever) | ⚪ — note: does NOT fix the steady-state GC churn (that's MP-Alloc); MP3 is the draw-submission throughput lever |
| MP4 | Zero-alloc frame loop + flat physics data (residual, post-MP-Alloc) | ⚪ hard-queued behind M1.5 #137 |

View file

@ -2,8 +2,8 @@
**Date:** 2026-07-24
**Status:** Slice A tooling and diagnostic RDP baselines landed; Slice B
complete. The physical-local Slice A gate still blocks Slice C.
**Status:** Slice A complete on the physical reference display; Slice B
complete. Slice C is unblocked and active.
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
@ -577,8 +577,14 @@ and uncapped nine-stop RDP routes, a pinned dense-Arwic RDP sample, observer
effect, portal windows, and contention stacks are committed in
[`../research/2026-07-24-slice-a-rdp-baselines.md`](../research/2026-07-24-slice-a-rdp-baselines.md)
and its machine-readable companion. They prove the tooling is usable but are
diagnostic-only. The physical-local AMD-display repetitions remain required,
so Slice C is still blocked. Slice B was baseline-independent and is complete.
diagnostic-only. The authoritative capped/uncapped nine-stop and pinned
dense-Arwic repetitions are committed in
[`../research/2026-07-24-slice-a-physical-local-baselines.md`](../research/2026-07-24-slice-a-physical-local-baselines.md)
and its machine-readable companion. All routes completed and disconnected
gracefully. They also preserve the two repeated-portal memory plateau failures,
~200 MiB portal allocation frames, and typed-Setup exception storm as Slice C's
before-state instead of weakening the gates. Slice A and Slice B are complete;
Slice C is unblocked.
### Slice B — Finish MP1b EnvCell dedup and full bake
@ -1123,11 +1129,13 @@ an improvement" carries the same evidence burden as a regression claim.
## 14. Current execution point
Slice A's tooling and diagnostic RDP evidence are complete, and Slice B's
prepared-content bake is complete. The next implementation is Slice C, but its
physical-local prerequisite remains open. Do not start Slice C until the
capped/uncapped nine-stop and pinned dense-Arwic routes have been repeated on
the physical local AMD display path and committed.
Slice A's tooling and authoritative physical-local evidence are complete, and
Slice B's prepared-content bake is complete. Slice C is active. Its comparison
baseline is the committed physical-local capture at
`49f3a48ee63b82d00731b0f91497930925279c86`: uncapped CPU p50/p95/p99
1.520/5.694/7.825 ms, GPU p50/p95/p99 0.897/3.239/3.406 ms, portal allocation
max 212.7 MiB, process allocation mean 50.0 MB/s, and a repeated-Caul working
set plateau failure of 295.1 MiB.
The intended order is therefore:

View file

@ -0,0 +1,216 @@
{
"schemaVersion": 1,
"capturedUtcDate": "2026-07-24",
"authority": "physical-local-performance-gate",
"referenceConfig": "docs/research/2026-07-24-performance-reference-configuration.json",
"sourceCommit": "49f3a48ee63b82d00731b0f91497930925279c86",
"binaryCommit": "49f3a48ee63b82d00731b0f91497930925279c86",
"binaryMatchesSource": true,
"trackedSourceCleanAtLaunch": true,
"rawArtifactPolicy": "Raw CSV, EventPipe, screenshot, process report, and runtime logs remain local and uncommitted.",
"captures": [
{
"name": "capped-nine-stop",
"renderMode": "default-240hz-cap",
"route": "Caul, Sawato, Rynthid, Aerlinthe, Sawato, Holtburg, Caul, Sawato, Caul",
"result": "behavior-pass-graceful-memory-plateau-fail",
"failures": [
"Caul plateau: private memory grew by 699.8 MiB",
"Caul plateau: working set grew by 685.6 MiB"
],
"elapsedSeconds": 518.992,
"measuredSeconds": 506.231,
"frames": 107081,
"frameCpuUs": { "p50": 4287, "p95": 6972, "p99": 9404, "p999": 24353, "max": 400864 },
"gpuUs": { "p50": 1702, "p95": 3261, "p99": 3847, "max": 392882 },
"frameThreadAllocationBytes": {
"p50": 28736,
"p95": 71792,
"p99": 138872,
"max": 213380600,
"total": 6479379592
},
"updateUs": { "p50": 330, "p95": 918, "p99": 1451, "max": 344610 },
"uploadUs": { "p50": 3, "p95": 14, "p99": 95, "max": 26968 },
"process": {
"allocationBytesPerSecondMean": 44249541,
"allocationBytesPerSecondMax": 3058988720,
"gcPauseSecondsTotal": 2.900301,
"gcPauseSecondsMax": 0.311808,
"gen0Collections": 191,
"gen1Collections": 159,
"gen2Collections": 54,
"contentions": 7292,
"workingSetBytesMax": 1714360320,
"privateMiBMax": 2193.0,
"argumentOutOfRangeExceptions": 4851
},
"caulOwnership": {
"baseline": {
"worldEntities": 21031,
"animatedEntities": 18,
"meshRenderData": 604,
"meshAtlasArrays": 41,
"trackedGpuBytes": 389182880,
"ownedCompositeTextures": 163,
"managedBytes": 236408440,
"managedCommittedBytes": 449298432,
"lohSizeBytes": 177433280,
"lohFragmentationBytes": 91783776
},
"plateau": {
"worldEntities": 21025,
"animatedEntities": 13,
"meshRenderData": 560,
"meshAtlasArrays": 40,
"trackedGpuBytes": 426820784,
"ownedCompositeTextures": 120,
"managedBytes": 303350840,
"managedCommittedBytes": 1235050496,
"lohSizeBytes": 258374440,
"lohFragmentationBytes": 156493168
}
},
"portalWindows": [
{ "destination": "Caul", "cpuP99Us": 15014, "cpuMaxUs": 133252, "gpuP99Us": 4720, "allocationMaxBytes": 55772024, "updateP99Us": 3533, "uploadP99Us": 341 },
{ "destination": "Sawato", "cpuP99Us": 9807, "cpuMaxUs": 400864, "gpuP99Us": 2825, "allocationMaxBytes": 213252672, "updateP99Us": 1544, "uploadP99Us": 192 },
{ "destination": "Rynthid", "cpuP99Us": 5995, "cpuMaxUs": 274134, "gpuP99Us": 1436, "allocationMaxBytes": 13526920, "updateP99Us": 1297, "uploadP99Us": 168 },
{ "destination": "Aerlinthe", "cpuP99Us": 5108, "cpuMaxUs": 315555, "gpuP99Us": 1383, "allocationMaxBytes": 13427160, "updateP99Us": 744, "uploadP99Us": 91 },
{ "destination": "Sawato-revisit", "cpuP99Us": 5131, "cpuMaxUs": 323338, "gpuP99Us": 2193, "allocationMaxBytes": 213380600, "updateP99Us": 727, "uploadP99Us": 129 },
{ "destination": "Holtburg", "cpuP99Us": 8234, "cpuMaxUs": 292479, "gpuP99Us": 1876, "allocationMaxBytes": 14842560, "updateP99Us": 2160, "uploadP99Us": 599 },
{ "destination": "Caul-return", "cpuP99Us": 13311, "cpuMaxUs": 333240, "gpuP99Us": 4885, "allocationMaxBytes": 36023344, "updateP99Us": 1570, "uploadP99Us": 109 },
{ "destination": "Sawato-plateau", "cpuP99Us": 10072, "cpuMaxUs": 335565, "gpuP99Us": 3314, "allocationMaxBytes": 213099368, "updateP99Us": 1419, "uploadP99Us": 169 },
{ "destination": "Caul-plateau", "cpuP99Us": 9972, "cpuMaxUs": 299721, "gpuP99Us": 5049, "allocationMaxBytes": 36022664, "updateP99Us": 1290, "uploadP99Us": 185 }
]
},
{
"name": "uncapped-nine-stop",
"renderMode": "uncapped",
"route": "Caul, Sawato, Rynthid, Aerlinthe, Sawato, Holtburg, Caul, Sawato, Caul",
"result": "behavior-pass-graceful-memory-plateau-fail",
"failures": [
"Caul plateau: working set grew by 295.1 MiB"
],
"elapsedSeconds": 511.607,
"measuredSeconds": 501.007,
"frames": 232974,
"frameCpuUs": { "p50": 1520, "p95": 5694, "p99": 7825, "p999": 14316, "max": 366745 },
"gpuUs": { "p50": 897, "p95": 3239, "p99": 3406, "max": 363685 },
"frameThreadAllocationBytes": {
"p50": 27912,
"p95": 70496,
"p99": 96224,
"max": 212712648,
"total": 11250290080
},
"updateUs": { "p50": 179, "p95": 651, "p99": 1029, "max": 303775 },
"uploadUs": { "p50": 2, "p95": 14, "p99": 25, "max": 29763 },
"process": {
"allocationBytesPerSecondMean": 50017254,
"allocationBytesPerSecondMax": 3040363520,
"gcPauseSecondsTotal": 2.567187,
"gcPauseSecondsMax": 0.288320,
"gen0Collections": 278,
"gen1Collections": 143,
"gen2Collections": 58,
"contentions": 5944,
"workingSetBytesMax": 1297494016,
"privateMiBMax": 1731.8,
"argumentOutOfRangeExceptions": 4659
},
"caulOwnership": {
"baseline": {
"worldEntities": 21031,
"animatedEntities": 18,
"meshRenderData": 543,
"meshAtlasArrays": 30,
"trackedGpuBytes": 262573784,
"ownedCompositeTextures": 163,
"managedBytes": 271950608,
"managedCommittedBytes": 438009856,
"lohSizeBytes": 249819600,
"lohFragmentationBytes": 155506192
},
"plateau": {
"worldEntities": 21025,
"animatedEntities": 13,
"meshRenderData": 560,
"meshAtlasArrays": 37,
"trackedGpuBytes": 393876972,
"ownedCompositeTextures": 120,
"managedBytes": 274691720,
"managedCommittedBytes": 867143680,
"lohSizeBytes": 223628576,
"lohFragmentationBytes": 115311320
}
},
"portalWindows": [
{ "destination": "Caul", "cpuP99Us": 14462, "cpuMaxUs": 44835, "gpuP99Us": 3406, "allocationMaxBytes": 355200, "updateP99Us": 1730, "uploadP99Us": 52 },
{ "destination": "Sawato", "cpuP99Us": 7804, "cpuMaxUs": 366745, "gpuP99Us": 3322, "allocationMaxBytes": 148397032, "updateP99Us": 1004, "uploadP99Us": 80 },
{ "destination": "Rynthid", "cpuP99Us": 1946, "cpuMaxUs": 304536, "gpuP99Us": 1153, "allocationMaxBytes": 13062928, "updateP99Us": 627, "uploadP99Us": 49 },
{ "destination": "Aerlinthe", "cpuP99Us": 2227, "cpuMaxUs": 312978, "gpuP99Us": 1244, "allocationMaxBytes": 13556576, "updateP99Us": 329, "uploadP99Us": 18 },
{ "destination": "Sawato-revisit", "cpuP99Us": 3026, "cpuMaxUs": 301905, "gpuP99Us": 1926, "allocationMaxBytes": 212712648, "updateP99Us": 360, "uploadP99Us": 29 },
{ "destination": "Holtburg", "cpuP99Us": 3522, "cpuMaxUs": 300609, "gpuP99Us": 1437, "allocationMaxBytes": 15578112, "updateP99Us": 720, "uploadP99Us": 98 },
{ "destination": "Caul-return", "cpuP99Us": 4304, "cpuMaxUs": 318926, "gpuP99Us": 2287, "allocationMaxBytes": 36022976, "updateP99Us": 957, "uploadP99Us": 69 },
{ "destination": "Sawato-plateau", "cpuP99Us": 8143, "cpuMaxUs": 321871, "gpuP99Us": 3257, "allocationMaxBytes": 145983776, "updateP99Us": 1096, "uploadP99Us": 58 },
{ "destination": "Caul-plateau", "cpuP99Us": 3273, "cpuMaxUs": 300828, "gpuP99Us": 1427, "allocationMaxBytes": 36021144, "updateP99Us": 1111, "uploadP99Us": 63 }
]
},
{
"name": "uncapped-dense-arwic",
"renderMode": "uncapped",
"result": "pass-graceful",
"elapsedSeconds": 68.447,
"measuredSeconds": 58.288,
"frames": 15785,
"frameCpuUs": { "p50": 3672, "p95": 6561, "p99": 14121, "p999": 114715, "max": 388321 },
"gpuUs": { "p50": 2476, "p95": 3284, "p99": 3752, "max": 383673 },
"frameThreadAllocationBytes": {
"p50": 41680,
"p95": 82352,
"p99": 627032,
"max": 29875456,
"total": 1401888696
},
"updateUs": { "p50": 496, "p95": 1125, "p99": 4821, "max": 226228 },
"uploadUs": { "p50": 3, "p95": 79, "p99": 254, "max": 26022 },
"stableFiveSeconds": {
"frames": 1044,
"frameCpuUs": { "p50": 4239, "p95": 6139, "p99": 6760 },
"gpuUs": { "p50": 2712, "p95": 3235, "p99": 3263 },
"frameThreadAllocationBytes": { "p50": 38400, "max": 13634832 },
"updateUs": { "p95": 982 },
"worldEntities": 15530,
"animatedEntities": 111
},
"process": {
"allocationBytesPerSecondMean": 88929887,
"allocationBytesPerSecondMax": 1925396448,
"gcPauseSecondsTotal": 0.622912,
"gcPauseSecondsMax": 0.260645,
"gen0Collections": 53,
"gen1Collections": 34,
"gen2Collections": 14,
"contentions": 2396,
"workingSetBytesMax": 970518528,
"privateMiBMax": 1489.0,
"argumentOutOfRangeExceptions": 331
},
"portalWindows": [
{ "destination": "Arwic-dense", "cpuP99Us": 9076, "cpuMaxUs": 115845, "gpuP99Us": 3717, "allocationMaxBytes": 29875456, "updateP99Us": 1509, "uploadP99Us": 437 }
]
}
],
"gate": {
"sliceAPhysicalLocalEvidenceCommitted": true,
"sliceCUnblocked": true,
"memoryBehaviorAccepted": false,
"requiredSliceCImprovements": [
"Materially reduce portal single-frame allocation and p99.",
"Remove the invalid typed-Setup exception storm.",
"Reduce process-wide allocation and GC pressure.",
"Pass the repeated-Caul memory plateau assertion without weakening it.",
"Preserve screenshot pixels, gameplay, ownership convergence, and graceful teardown."
]
}
}

View file

@ -0,0 +1,89 @@
# Slice A physical-local baselines
**Date:** 2026-07-24
**Authority:** performance-gate baseline
**Source and measured binary:** `49f3a48ee63b82d00731b0f91497930925279c86`
The corrected Slice A tooling was exercised on the authoritative physical AMD
display path defined by
[`2026-07-24-performance-reference-configuration.md`](2026-07-24-performance-reference-configuration.md):
RX 9070 XT driver `32.0.31021.5001`, 2560 x 1440 at 240 Hz, with the client
rendering 1280 x 720 Release gameplay without developer UI. The tracked source
tree was clean at every launch, source and binary commits matched exactly, all
route actions completed, and all three clients disconnected gracefully.
The full sanitized metrics and every portal window are in
[`2026-07-24-slice-a-physical-local-baselines.json`](2026-07-24-slice-a-physical-local-baselines.json).
Raw CSV, EventPipe, screenshots, logs, and process reports remain local
untracked diagnostic artifacts.
## Headline measurements
| Capture | Frames | CPU p50 / p95 / p99 | GPU p50 / p95 / p99 | Frame-thread allocation p50 / max |
|---|---:|---:|---:|---:|
| 240 Hz capped nine-stop | 107,081 | 4.287 / 6.972 / 9.404 ms | 1.702 / 3.261 / 3.847 ms | 28.1 KiB / 203.5 MiB |
| Uncapped nine-stop | 232,974 | 1.520 / 5.694 / 7.825 ms | 0.897 / 3.239 / 3.406 ms | 27.3 KiB / 202.9 MiB |
| Uncapped dense Arwic | 15,785 | 3.672 / 6.561 / 14.121 ms | 2.476 / 3.284 / 3.752 ms | 40.7 KiB / 28.5 MiB |
| Dense Arwic, stable 5 s | 1,044 | 4.239 / 6.139 / 6.760 ms | 2.712 / 3.235 / 3.263 ms | 37.5 KiB / 13.0 MiB |
The physical path confirms that ordinary steady rendering is fast. The stable
dense-Arwic window contained 15,530 world entities and 111 animated entities
while remaining below 6.8 ms CPU p99 and 3.3 ms GPU p99. The 32 ms RDP envelope
was therefore a remote-presentation artifact rather than local renderer cost.
Portal materialization remains the dominant transient. Sawato allocated up to
203.5 MiB in one capped frame and 202.9 MiB in one uncapped frame. The
uncapped route allocated 11.25 GB on the frame thread in 501 seconds, while the
process-wide runtime counter averaged 50.0 MB/s and recorded 58 Gen-2
collections. `ArgumentOutOfRangeException` was also emitted 4,659 times during
that route. This is the invalid typed-Setup probe storm already in Slice C's
scope, not an accepted steady-state mechanism.
## Repeated-portal memory result
Both nine-stop sessions completed behaviorally but deliberately failed the
existing memory plateau assertion:
- The capped final Caul checkpoint was 685.6 MiB higher in working set and
699.8 MiB higher in private memory than the first Caul checkpoint.
- The uncapped final Caul checkpoint was 295.1 MiB higher in working set.
- In the uncapped comparison, world entities returned from 21,031 to 21,025,
animated entities from 18 to 13, and owned composite textures from 163 to
120. Managed live bytes changed only 271.95 MB to 274.69 MB, while committed
managed memory rose from 438.01 MB to 867.14 MB.
- The capped comparison likewise ended with fewer mesh records, atlas arrays,
and composite textures than the first Caul checkpoint, but committed managed
memory rose from 449.30 MB to 1,235.05 MB.
The evidence does not point to retained world ownership. It points to very high
allocation churn, LOH fragmentation, and GC heap segment reservation after
portal decode. The baseline is intentionally recorded as a failure instead of
loosening the assertion; prepared-content Slice C must remove the decode/probe
traffic and then repeat this exact gate.
## Contention and ownership interpretation
The physical capped route recorded 7,292 runtime contentions. The committed
stack-attributed RDP capture remains the attribution oracle because the same
code and route ranked `DatDatabaseWrapper.TryGet` first (75.3%), followed by
`ObjectMeshManager.ProcessQueue` (16.3%) and
`DecodedTextureCache.GetOrCreate` (4.2%). Slice C removes demand from those
paths before any lock redesign is considered.
Canonical ownership counters and graceful teardown passed on every run. No
pending mesh uploads, landblock retirements, live-entity teardowns, or
composite warmups remained at the final checkpoints.
## Gate state
Slice A's physical-local exit criterion is complete: a committed 240 Hz capped
nine-stop baseline, uncapped nine-stop baseline, pinned uncapped dense-Arwic
baseline, and per-portal frame/allocation windows now exist on the reference
display path. This unblocks Slice C.
It does **not** mark the measured memory behavior healthy. The plateau failures,
~200 MiB portal frames, ~50 MB/s process allocation, exception storm, and
heap-reservation growth are the before-state that Slice C must materially
improve without changing pixels or gameplay.

View file

@ -3,7 +3,7 @@
"capturedUtcDate": "2026-07-24",
"authority": "diagnostic-rdp-only",
"purpose": "Corrected Slice A tooling validation and directional baseline. This does not satisfy the physical-local exit criterion.",
"referenceConfig": "docs/research/2026-07-24-performance-reference-config.md",
"referenceConfig": "docs/research/2026-07-24-performance-reference-configuration.md",
"rawArtifactPolicy": "Raw CSV, EventPipe, screenshot, and process logs remain local and uncommitted. This file contains the sanitized reproducible summary.",
"captures": [
{

View file

@ -12,7 +12,7 @@ were both commit `24f898c54d7c6547555a4402543b6a3cd7ced7f6`, the tracked source
tree was clean, and the report recorded an exact match.
The machine/display contract is defined in
[`2026-07-24-performance-reference-config.md`](2026-07-24-performance-reference-config.md).
[`2026-07-24-performance-reference-configuration.md`](2026-07-24-performance-reference-configuration.md).
The full sanitized figures and portal windows are in
[`2026-07-24-slice-a-rdp-baselines.json`](2026-07-24-slice-a-rdp-baselines.json).
Raw CSV, EventPipe, screenshot, and process logs are intentionally local,