wip: L174 Design50 steps 0-2 in progress (interrupted for a power cut)
Audits collect gates and run seams (landing discs + end runs, LOD0/1), tagged uncapped failures, separate exempt counts, self-overlap census; level end runs; overlap/turn constraints. Partial sweep: end runs pass 3/3 per seed; 1-2 end-turn violations per seed; 50-110k tagged seam mismatches per seed (real vs audit artefact not yet decided). Not verified; resume L174. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
b09728354d
commit
dee53c8d2a
9 files changed
+2155
-257
No files matched your search
@@ -60,6 +60,7 @@ namespace
|
||||
bool AuditBasePageEquivalence=false;
|
||||
bool AuditRouteParity=false;
|
||||
bool AuditPassageTileSeams=false;
|
||||
bool InjectPassageSeamMismatch=false;
|
||||
bool AuditPassageSourceClamp=false;
|
||||
bool AuditPassageCarveReach=false;
|
||||
bool RegionCrossing=false;
|
||||
@@ -1476,7 +1477,8 @@ namespace
|
||||
" --shape-helper-limit=8|12 (default 8; shape build A/B)\n"
|
||||
" --audit-base-page-equivalence (hash one tile through both shape routes)\n"
|
||||
" --audit-route-parity (compare page, native-only, exact-query and mesh routes)\n"
|
||||
" --audit-passage-tile-seams (compare shared LOD0 density samples in adjacent route tiles)\n"
|
||||
" --audit-passage-tile-seams (compare shared LOD0/1 density samples across passage regions)\n"
|
||||
" --inject-passage-seam-mismatch (negative control for seam gate)\n"
|
||||
" --audit-passage-source-clamp (compare passage source floors 2,3,4,6 over all near tiles)\n"
|
||||
" --audit-passage-carve-reach (compare post-composer reaches 1.5,2,2.5,4 m over all near tiles)\n"
|
||||
" --audit-tile-shape-readiness (run a deliberately mis-marked tile against the native-only guard)\n"
|
||||
@@ -1568,6 +1570,8 @@ namespace
|
||||
else if(arg=="--audit-base-page-equivalence")options.AuditBasePageEquivalence=true;
|
||||
else if(arg=="--audit-route-parity")options.AuditRouteParity=true;
|
||||
else if(arg=="--audit-passage-tile-seams")options.AuditPassageTileSeams=true;
|
||||
else if(arg=="--inject-passage-seam-mismatch")
|
||||
{options.AuditPassageTileSeams=true;options.InjectPassageSeamMismatch=true;}
|
||||
else if(arg=="--audit-passage-source-clamp")options.AuditPassageSourceClamp=true;
|
||||
else if(arg=="--audit-passage-carve-reach")options.AuditPassageCarveReach=true;
|
||||
else if(arg=="--region-crossing")options.RegionCrossing=true;
|
||||
@@ -1742,6 +1746,7 @@ int main(int argc,char** argv)
|
||||
const auto coldStart=Clock::now();
|
||||
FOptions options;
|
||||
if(!ParseOptions(argc,argv,options))return 2;
|
||||
bool preflightGateFailure=false;
|
||||
if(options.TlsProbeRequested)
|
||||
return StandaloneTlsProbe::Run(options.TlsProbeWorkers,options.TlsProbeTouch);
|
||||
std::printf("[HeadlessConfig] data=%s workers=%d clip_radius=%d max_clip_level=%d max_level=%d hash=%s hash_uniform_skips=%s column_overlap=%s force_generate=%s recipe=%s lattice_strate=%d shared_column_cache=%s camera_step_m=(%.3f,%.3f,%.3f) camera_override=%s camera_m=(%.6f,%.6f,%.6f) camera_rotation_deg=(%.3f,%.3f) seed_override=%s render_distance_override=%s\n",
|
||||
@@ -2392,24 +2397,24 @@ int main(int argc,char** argv)
|
||||
if(actualRecipe!=requestedRecipe)
|
||||
{std::fprintf(stderr,"Requested recipe %.*s resolved to %.*s\n",
|
||||
static_cast<int>(requestedRecipe.size()),requestedRecipe.data(),
|
||||
static_cast<int>(actualRecipe.size()),actualRecipe.data());return 2;}
|
||||
static_cast<int>(actualRecipe.size()),actualRecipe.data());preflightGateFailure=true;}
|
||||
std::printf("[ResolvedLayoutCompatibility] accepted=%s issues=%zu error=%s\n",
|
||||
compatibilityAccepted?"true":"false",compatibilityIssues.size(),compatibilityError.c_str());
|
||||
for(const auto& issue:compatibilityIssues)
|
||||
std::printf("[ResolvedLayoutCompatibilityIssue] code=%s detail=%s\n",
|
||||
issue.code.c_str(),issue.detail.c_str());
|
||||
if(!compatibilityAccepted)
|
||||
{std::fprintf(stderr,"Resolved-layout compatibility validation failed: %s\n",compatibilityError.c_str());return 2;}
|
||||
{std::fprintf(stderr,"Resolved-layout compatibility validation failed: %s\n",compatibilityError.c_str());preflightGateFailure=true;}
|
||||
std::printf("[ResolvedLayoutStrict] accepted=%s issues=%zu error=%s\n",
|
||||
strictAccepted?"true":"false",strictIssues.size(),strictError.c_str());
|
||||
for(const auto& issue:strictIssues)
|
||||
std::printf("[ResolvedLayoutStrictIssue] code=%s detail=%s\n",issue.code.c_str(),issue.detail.c_str());
|
||||
if(!strictAccepted)
|
||||
{std::fprintf(stderr,"Resolved-layout strict validation failed: %s\n",strictError.c_str());return 2;}
|
||||
{std::fprintf(stderr,"Resolved-layout strict validation failed: %s\n",strictError.c_str());preflightGateFailure=true;}
|
||||
std::printf("[ResolvedLayoutValidatorControls] rejected=%u/%u status=%s\n",
|
||||
controls.controlsRejectedAsExpected,controls.controlsRun,controls.passed?"PASS":"FAIL");
|
||||
if(!controls.passed)
|
||||
{for(const auto& failure:controls.failures)std::printf("[ResolvedLayoutValidatorControlFailure] %s %s\n",failure.code.c_str(),failure.detail.c_str());return 2;}
|
||||
{for(const auto& failure:controls.failures)std::printf("[ResolvedLayoutValidatorControlFailure] %s %s\n",failure.code.c_str(),failure.detail.c_str());preflightGateFailure=true;}
|
||||
if(options.DensityDispatchReport)
|
||||
{
|
||||
const auto& slots=ownerWorld->Manager->GetLayout();
|
||||
@@ -2577,7 +2582,7 @@ int main(int argc,char** argv)
|
||||
plan->route.size(),MaximumRouteZ,CeilingFace-MaximumRouteZ,
|
||||
MaximumRouteZ<CeilingFace?"PASS":"COLLISION");
|
||||
}
|
||||
if(options.ResolvedLayoutOnly)return 0;
|
||||
if(options.ResolvedLayoutOnly)return preflightGateFailure?2:0;
|
||||
}
|
||||
if(options.AutoSurfaceCamera)
|
||||
{
|
||||
@@ -2667,7 +2672,7 @@ int main(int argc,char** argv)
|
||||
?FVector(options.CameraStepMeters.X*1000000.0f/std::max<std::uint32_t>(1,ownerWorld->CoreVoxelSizeMicrons),
|
||||
options.CameraStepMeters.Y*1000000.0f/std::max<std::uint32_t>(1,ownerWorld->CoreVoxelSizeMicrons),
|
||||
options.CameraStepMeters.Z*1000000.0f/std::max<std::uint32_t>(1,ownerWorld->CoreVoxelSizeMicrons)):FVector::ZeroVector;
|
||||
return StandaloneStreamBenchmark::RunPipelinedStreamingBenchmark(ownerWorld,snapshot,
|
||||
const int pipelineResult=StandaloneStreamBenchmark::RunPipelinedStreamingBenchmark(ownerWorld,snapshot,
|
||||
cameraVoxels,options.WorkerCount,options.MaxLevel,VoxelForgeCore::DetailVariant::coherent,
|
||||
scheduler,options.StreamHash,false,false,false,false,coldStart,
|
||||
options.ProfileColumnOverlap,options.FarHorizonLOD8InteriorStepVoxels,
|
||||
@@ -2690,6 +2695,8 @@ int main(int argc,char** argv)
|
||||
options.MovingCameraSpeedMetersPerSecond,options.MovingCameraDurationSeconds,
|
||||
options.MovingCameraDwellSeconds,options.ColdWorkerTimeline,
|
||||
options.AuditPassageSourceClamp,options.AuditPassageCarveReach,
|
||||
options.AuditPassageTileSeams,options.AuditLiminalRoadWalk,
|
||||
options.AuditPassageTileSeams,options.InjectPassageSeamMismatch,
|
||||
options.AuditLiminalRoadWalk,
|
||||
options.LiminalStampWalkAuditPath);
|
||||
return pipelineResult!=0?pipelineResult:(preflightGateFailure?2:0);
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -202,7 +202,9 @@ FVoxelMeshData UVoxelMarchingCubesMesher::GenerateMesh(FIntVector OriginVoxels,
|
||||
std::vector<float>* OutDebugDensitySamples,
|
||||
FVoxelMarchingCubesStageTimings* OutStageTimings,
|
||||
FVoxelUniformBlockProofAuditStats* OutBlockProofAudit,
|
||||
bool bForceFullDensityCapture)
|
||||
bool bForceFullDensityCapture,
|
||||
FIntVector* OutDebugDensityOriginVoxels,
|
||||
FIntVector* OutDebugDensityDimensions)
|
||||
{
|
||||
TRACE_CPUPROFILER_EVENT_SCOPE(VoxelForge_MesherGenerateMesh);
|
||||
FStandaloneShapeWorld::FScopedPassageDensityQueryCaller densityQueryCaller(
|
||||
@@ -215,6 +217,8 @@ FVoxelMeshData UVoxelMarchingCubesMesher::GenerateMesh(FIntVector OriginVoxels,
|
||||
if (OutStageTimings) { *OutStageTimings = FVoxelMarchingCubesStageTimings{}; }
|
||||
if (OutBlockProofAudit) { *OutBlockProofAudit = FVoxelUniformBlockProofAuditStats{}; }
|
||||
if (OutDebugDensitySamples) { OutDebugDensitySamples->clear(); }
|
||||
if (OutDebugDensityOriginVoxels) *OutDebugDensityOriginVoxels=FIntVector::ZeroValue;
|
||||
if (OutDebugDensityDimensions) *OutDebugDensityDimensions=FIntVector::ZeroValue;
|
||||
if (!Generator) return MeshData;
|
||||
const bool bEmitUV = !bStandaloneSkipUvAndColors && !bStandaloneSkipUV;
|
||||
const bool bEmitColors = !bStandaloneSkipUvAndColors && !bStandaloneSkipColors;
|
||||
@@ -640,6 +644,14 @@ FVoxelMeshData UVoxelMarchingCubesMesher::GenerateMesh(FIntVector OriginVoxels,
|
||||
}
|
||||
const int32 GzLo = CzLo - 1; // coins CzLo..CzHi+1, gradients ±1
|
||||
const int32 GzHi = CzHi + 2; // (== -1..GridDim sans bande)
|
||||
if(OutDebugDensitySamples)
|
||||
{
|
||||
if(OutDebugDensityOriginVoxels)
|
||||
*OutDebugDensityOriginVoxels=OriginVoxels
|
||||
+FIntVector(-Step,-Step,GzLo*Step);
|
||||
if(OutDebugDensityDimensions)
|
||||
*OutDebugDensityDimensions=FIntVector(MDim,MDim,GzHi-GzLo+1);
|
||||
}
|
||||
|
||||
MesherSetupTimer.End();
|
||||
|
||||
|
||||
@@ -171,7 +171,9 @@ public:
|
||||
std::vector<float>* OutDebugDensitySamples = nullptr,
|
||||
FVoxelMarchingCubesStageTimings* OutStageTimings = nullptr,
|
||||
FVoxelUniformBlockProofAuditStats* OutBlockProofAudit = nullptr,
|
||||
bool bForceFullDensityCapture = false);
|
||||
bool bForceFullDensityCapture = false,
|
||||
FIntVector* OutDebugDensityOriginVoxels = nullptr,
|
||||
FIntVector* OutDebugDensityDimensions = nullptr);
|
||||
|
||||
//=========================================================================
|
||||
// SERVICES (injectés par AVoxelWorld)
|
||||
|
||||
Reference in new issue
Block a user