standalone: cheap far-survival repairs -- whole view 1.80 -> 1.40 s, payload 277 -> 111 MiB

- Far repairs are source-aware (only where the sampled mesh lost a shell) and redundant radius probes
  trimmed; ~175k two-triangle repair panels remain (+18 MiB over the no-shell 92.6 MiB).
- Pipelined start builds the shape world once; the 27-tile neighbourhood is ready ~0.73 s from
  process start; pipelined whole view is no slower than direct.
- Far audit passes, bad-shell control still fails (16 missing / 16 holes); look audits pass; routes
  5642/5642; 60 W1/W8 + direct/pipeline hash fields equal; six fixed captures pixel-identical.
Verified by me head to head (8 workers, cold, BelowNormal 0xFF00, quiet machine, two runs each):
1.40 s vs 1.80 s for the previous default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-05 01:56:41 +02:00
1 parent a40b0454b3
commit d4fa89204d
4 files changed
+837 -303

No files matched your search

@@ -1,5 +1,70 @@
# Shape world speed round — final half-load verification
## Round 7 — sparse far repairs and single shape compile (2026-10-05)
Round 7 cut the LOD8 survival build from **276.74 MiB** to **110.90 MiB** of full mesh-payload allocation, a 59.9% reduction from Round 6. The final CPU follow-up keeps that payload and trims about 0.28 seconds from summed worker time and 0.04 seconds from stream wall. The result remains **18.29 MiB above** the no-shell 92.61 MiB baseline, and the process-wall target below 1.3 seconds was not reached.
### What changed and what it costs
The large Round 6 payload came from forced air samples along every far connector plus explicit repairs. Removing those far air samples cut the remaining allocation sharply. The repair follows the source at the same 128-voxel axial stations used by the audit, compares each source-visible radial wall with the tile mesh, and emits a panel only when that tile misses the wall beyond audit tolerance. Its four-panel cross-section is rotated so audit rays pass through panel interiors. A 2048-voxel spatial-bin index narrows connector candidates. The final CPU trim limits exact source-radius searches to the audit-relevant radius band and skips cross-section radii unused by missing panels; its geometry hashes are unchanged.
The payload drop from the no-shell reference is concentrated at LOD8:
| Level | No-shell payload | Round 7 payload | Added |
| ---: | ---: | ---: | ---: |
| LOD6 | 3.34 MiB | 3.41 MiB | 0.07 MiB |
| LOD7 | 5.48 MiB | 6.28 MiB | 0.80 MiB |
| LOD8 | 13.59 MiB | 31.01 MiB | 17.42 MiB |
| **Whole view** | **92.61 MiB** | **110.90 MiB** | **18.29 MiB** |
The final view-output allocation is 56.13 MiB versus 45.40 MiB without shells. For context, the Round 6 build was 276.74 MiB allocated and 150.35 MiB of viewer output. The remaining cost is mostly the missing connector walls in LOD8. Connector repair skips radial directions whose sampled mesh hit is already within tolerance; the final audit records 47,858 additional ray intersections across the mesh, while reporting no missing or unsampled connector walls.
The [no-shell probe](round7_round5_no_shell_probe_w8.stdout.log) has 155,576 LOD8 vertices and 843,312 indices; the final LOD8 mesh has 406,992 vertices and 1,893,900 indices. The repair adds 251,416 vertices and 1,050,588 indices, equivalent to 175,098 two-triangle panels. This is where the remaining 17.42 MiB LOD8 increase comes from. Two coarsening probes passed the far audit but produced the same payload and counts: [tile-range sampling](round7_tile_range_far_audit_w8.stdout.log) and [whole-run rings](round7_coarse_rings_far_audit_w8.stdout.log). A [tolerance-band traversal probe](round7_tolerance_traversal_far_audit_w8.stdout.log) also passed; its [cold direct run](round7_tolerance_traversal_direct_probe_w8.stdout.log) showed no stream-time gain. Those no-gain variants were reverted. The final exact-radius search optimization is in [its build](round7_band_search_build.log).
The final `/MP8` build is [here](round7_band_search_build.log). The final default far audit is [here](round7_band_search_far_audit_w8.stdout.log); it reports 3 strata boundaries, 7,200 boundary surfaces, 10,976 connectors, 178,351 connector sections, zero missing surfaces, zero holes, and zero unsampled connectors. The injected bad-shell control removes 512 shell triangles and reports 16 missing surfaces and 16 holes, exiting 14 as expected: [control log](round7_band_search_bad_shell_w8.stdout.log). The [look audit](round7_band_search_shape_audit_w8.stdout.log) passes walkability, room floors, floor slopes and profiles, tunnel radius, flat surfaces, grid stairs, thin sheets, both surface-band families, flat patches, and detail scale. Route samples remain **5,642/5,642**.
### Cold W8 timing and pipeline
All four runs used fresh processes, `--force-generate`, full payload, BelowNormal priority, and affinity `0xFF00`. No mesh-cache hits were used.
| Path | Run A process wall | Run B process wall | Mean | Other milestones |
| --- | ---: | ---: | ---: | --- |
| Direct | 1.581 s | 1.560 s | 1.571 s | Shape 0.692 / 0.698 s; stream 0.647 / 0.650 s; full detail 0.221 / 0.226 s |
| Pipeline | 1.538 s | 1.531 s | 1.535 s | Neighborhood 0.738 / 0.729 s; full detail 0.934 / 0.926 s; whole view 1.350 / 1.344 s |
The pipeline builds the full shape world once. It produces the 27/27 neighborhood in about 0.73 seconds, then reaches 960/960 full-detail tiles and 2,226/2,226 whole-view tiles. Direct shape-plus-stream whole-view time is about 1.34 seconds; pipeline whole-view time is 1.344–1.350 seconds, within measurement noise. The pipeline process-wall mean is 36 ms below direct, while both paths still miss the **under-1.3-second** process target by 0.24–0.27 seconds. Direct logs: [A](round7_band_search_direct_probe_w8.stdout.log), [B](round7_band_search_direct_b_w8.stdout.log). Pipeline logs: [A](round7_band_search_pipeline_a_w8.stdout.log), [B](round7_band_search_pipeline_b_w8.stdout.log).
At W1 and W8, direct full-detail and every LOD hash match; direct and pipeline full-detail/whole-view hashes also match. The [60-field comparison](round7_band_search_hash_compare.log) passes. Full-detail hashes are density `0x67609e3f9aa3a0b0`, mesh `0xd98eb46b92a59917`, payload `0x8f148240ca4a4a8f`, topology `0x954e28f6fd44967f`. Whole-view hashes are density `0xa78b0985b1b8fefd`, mesh `0xb44e0c998152d1f5`, payload `0x1eb6b48127fd8e26`, topology `0x8b2557006b5ce3c8`. The direct W1/W8 runs are [W1](round7_band_search_direct_hash_w1.stdout.log) and [W8](round7_band_search_direct_hash_w8.stdout.log); pipeline runs are [W1](round7_band_search_pipeline_hash_w1.stdout.log) and [W8](round7_band_search_pipeline_hash_w8.stdout.log). Both pipeline runs report `cache_hits=0 full_payload=1`.
### Captures
The six fixed views compare pixel-identically against Round 6. The remote captures are visually close, with these measured differences from the Round 6 LOD8 images:
| View | Changed pixels | Mean channel delta | Max channel delta |
| --- | ---: | ---: | ---: |
| Fixed chamber | 0 / 1,024,000 | 0.000000 | 0 |
| Fixed tunnel | 0 / 1,024,000 | 0.000000 | 0 |
| Fixed passage | 0 / 1,024,000 | 0.000000 | 0 |
| Fixed far | 0 / 1,024,000 | 0.000000 | 0 |
| Passage floor close-up | 0 / 1,024,000 | 0.000000 | 0 |
| Tunnel bend | 0 / 1,024,000 | 0.000000 | 0 |
| Remote X=500 m, yaw 0 | 5,094 / 1,024,000 | 0.145049 | 70 |
| Remote X=500 m, yaw 90 | 110 / 1,024,000 | 0.003791 | 48 |
| Remote X=500 m, yaw 180 | 29 / 1,024,000 | 0.000009 | 1 |
| Remote X=500 m, yaw 270 | 0 / 1,024,000 | 0.000000 | 0 |
The [capture comparison](round7_final/capture_compare.log) and all ten final capture processes succeeded. Images are in [round7_final](round7_final/); Round 6 LOD8 images are the before set in [round6_far_survival](round6_far_survival/). The later CPU-only follow-up has identical direct and pipeline density, mesh, payload, and topology hashes, so these captures still represent its exact geometry.
### Failed builds and runs
No `/MP8` build failed. The tile-range, coarse-ring, tolerance-traversal, and final search builds completed with existing MSVC conversion warnings; there was no `0xC0000142` or out-of-memory failure. The following exploratory connector candidates failed their far audit before the final source-aware panels: [centerline radius](round7_centerline_radius_audit_w8.stdout.log) (17,527 sections / 23,805 rays missing), [iterative rings](round7_iterative_rings_audit_w8.stdout.log) (2 rays just outside tolerance: 22.42 vs 22.4), [cardinal search](round7_cardinal_audit_w8.stdout.log) (1 missing ray), [single interval](round7_single_interval_audit_w8.stdout.log) (3,102 samples / 4,239 rays), [adaptive rings](round7_adaptive_audit_w8.stdout.log) (761 / 1,177), [exact sample rings](round7_exact_sample_ring_audit_w8.stdout.log) and [fine radial](round7_fine_radial_audit_w8.stdout.log) (1,739 / 2,113), [first single panel](round7_single_panel_audit_w8.stdout.log) (1,989 / 2,007), [final candidate](round7_final_candidate_audit_w8.stdout.log) (3 rays just outside tolerance), and [interval guard](round7_interval_guard_audit_w8.stdout.log) (204 LOD8 rays lost at edge-support triangles). The later [one-panel far audit](round7_single_panel_far_audit_w8.stdout.log) also failed with 4,597 samples / 4,664 rays missing. The [single-segment adaptive candidate](round7_single_segment_audit_w8.stdout.log) failed with 40 missing visible samples/rays and 40 connector holes. Its rotated-panel replacement passed.
Two exploratory commands omitted `--stream-benchmark` and opened interactive viewers instead of running audits: [far audit invocation](round7_step128_far_audit_w8.stdout.log) was stopped after 216.531 seconds, and [bad-shell invocation](round7_step128_bad_shell_w8.stdout.log) after 20.932 seconds; both runner exits were -1. These were rerun correctly: [default audit](round7_step128_far_audit_benchmark_w8.stdout.log) passed and [bad-shell control](round7_step128_bad_shell_benchmark_w8.stdout.log) exited 14 as expected. The first strict Round 7 capture comparator also exited 1 because it demanded pixel identity for the provisional remote views; the numeric comparison on the final captures is [here](round7_final/capture_compare.log).
All injected bad-shell controls were expected audit failures with exit 14: [acceptance](round7_acceptance_bad_shell_w8.stdout.log), [128-step](round7_step128_bad_shell_benchmark_w8.stdout.log), [single-panel](round7_single_panel_bad_shell_w8.stdout.log), [rotated-panel](round7_rotated_panels_bad_shell_w8.stdout.log), [connector-index](round7_connector_index_bad_shell_w8.stdout.log), [no forced air](round7_no_forced_air_bad_shell_w8.stdout.log), the prior [final control](round7_final_bad_shell_w8.stdout.log), and the current [band-search control](round7_band_search_bad_shell_w8.stdout.log).
All benchmark, audit, and capture executables were launched through `RunMachine.ps1` at BelowNormal priority with affinity `0xFF00`; builds used `/MP8`. No viewer that this work did not start was closed. No commit, push, or stash was made.
## Round 6 — far survival proof and neighborhood-first startup (2026-10-04)
This result supersedes Round 5's LOD6 default. The far-survival audit now passes at LOD6, LOD7, and LOD8, and LOD8 is the least expensive passing level. The standalone viewer also starts the player's neighborhood before compiling the full shape world.