fix(streaming): vertical reach follows the strate, and the level below the sheet ring is filled
The owner marked missing tiles around him in a 64-chunk surface strate with RenderDistanceChunks=768. Cause: the desired-set vertical clamp used the player's small window (bClampViewToStrate on, ViewDistanceUp/Down=5, margin 3), so at chunk Z=0 only [-5..3] was ever requested; the rest of his strate was never asked for. Second cause: with MaxClipLevel=3 and a two-level sheet span the outer ring is level 5, while the marching-cubes loop stopped at 3, leaving level 4 empty. The band now follows the player's whole strate plus margin ([-66..3] in the pinned case) and keeps the small window only when there are no strate bounds (inter-strate gap), so the hidden-rock column the clamp exists to avoid does not return. Bridge shells are emitted up to the level below the sheet ring, filling level 4. Pinned case desired tiles per level, before -> after: l0 343->343, l1 218->218, l2 129->178, l3 80->178, l4 0->178, l5 4801->9586; total 5,571 -> 10,681 (+91.7%). New focused fixture VoxelForgeVerticalStrateReachTest fails before and passes after. Stress repro passes (140.089 m, 4 holds, 0 full stops); strate crossing passes (0 holds, 0 floor overlap). ⚠️ Cost not established: the post-fix perf sample was incomplete and showed a 55.7 s p50 queue wait, which may be the fixture's extreme settings (768 render distance -> 9,586 sheet tiles) or a real backlog. Measure in the owner's world before merging. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
1 parent
d7af2cab97
commit
30253f0e89
5 files changed
+344
-165
No files matched your search
@@ -43,9 +43,17 @@ $BuildRecord = [ordered]@{ requested = [bool]$Build; status = 'not_requested' }
|
||||
$AssetEvidence = @()
|
||||
$CommandletMetrics = [ordered]@{}
|
||||
$GameMetrics = [ordered]@{}
|
||||
$SurfaceFallMetrics = [ordered]@{ requested = $Scenario -in @('tests', 'surface-fall'); status = 'not_run' }
|
||||
$SurfaceFallMetrics = [ordered]@{
|
||||
requested = $Scenario -eq 'surface-fall' -or
|
||||
($Scenario -eq 'tests' -and [string]::IsNullOrWhiteSpace($TestFilter))
|
||||
status = 'not_run'
|
||||
}
|
||||
$StrateCrossingMetrics = [ordered]@{ requested = $Scenario -eq 'crossing'; status = 'not_run' }
|
||||
$CollisionGateStressMetrics = [ordered]@{ requested = $Scenario -in @('tests', 'gate-stress'); status = 'not_run' }
|
||||
$CollisionGateStressMetrics = [ordered]@{
|
||||
requested = $Scenario -eq 'gate-stress' -or
|
||||
($Scenario -eq 'tests' -and [string]::IsNullOrWhiteSpace($TestFilter))
|
||||
status = 'not_run'
|
||||
}
|
||||
$TestMetrics = @()
|
||||
$ParityEvidence = [ordered]@{ requested = $Scenario -eq 'parity'; status = 'not_run' }
|
||||
$DllEvidence = [ordered]@{
|
||||
@@ -1038,9 +1046,9 @@ try {
|
||||
Add-Failure "automation tests failed: $failedNames"
|
||||
}
|
||||
|
||||
# The runtime collision-gate repro is part of the tests scenario as an integration
|
||||
# test alongside the 44 pure automation tests. It uses the same isolated host/assets
|
||||
# and gets its own launch ledger entry and log.
|
||||
if ([string]::IsNullOrWhiteSpace($TestFilter)) {
|
||||
# The unfiltered suite includes its collision integration repros. A filtered run is
|
||||
# bounded to its named automation tests and does not launch unrelated scenarios.
|
||||
$surfaceBaseCvars = [ordered]@{
|
||||
'voxel.TestSurfaceFall' = 1
|
||||
'voxel.TestSurfaceFallSpawnHeightVoxels' = 20
|
||||
@@ -1071,6 +1079,7 @@ try {
|
||||
$stressReason = [string](Get-JsonValue $CollisionGateStressMetrics 'reason' '')
|
||||
Add-Failure "collision-gate stress repro did not pass: $($CollisionGateStressMetrics.status) $stressReason"
|
||||
}
|
||||
}
|
||||
}
|
||||
'parity' {
|
||||
$parityArgs = New-CommonArguments 'commandlet' (Join-Path $RunRoot 'Logs\parity-commandlet.log') (Merge-Cvars $baseCvars)
|
||||
|
||||
Reference in new issue
Block a user