audit: passage interior must be air for every capsule sample (L146)
Root cause of liminal seed 5 (measured): passage carve makes the bore air (+3.52), then the liminal route fill stamp re-solidifies it (-0.16) where the deck crosses the tube. Three fixes cleared the bore but left 28-29 road stations unsupported; none kept. New gate: zero solid samples inside any passage interior, with no-passage negative controls. Owner v227 hashes and fast tier pass. 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
7d654ff861
commit
4290672d1c
3 files changed
+300
-6
No files matched your search
@@ -2828,6 +2828,7 @@ namespace StandaloneStreamBenchmark
|
||||
struct FWalkAudit
|
||||
{
|
||||
std::uint64_t segments=0,centers=0,capsuleSamples=0,blocked=0;
|
||||
std::uint64_t passageInteriorCapsuleSamples=0,passageInteriorSolidSamples=0;
|
||||
std::uint64_t supportSamples=0,unsupported=0,gradeFailures=0;
|
||||
std::uint64_t supportOverlapSkips=0;
|
||||
std::array<std::array<double,4>,8> firstBlocked{};
|
||||
@@ -2841,7 +2842,8 @@ namespace StandaloneStreamBenchmark
|
||||
double supportStartMetres,double supportStepMetres,
|
||||
double supportMaximumMetres,std::uint32_t minimumSupportProbes,
|
||||
double supportProbeRadiusMetres,
|
||||
const std::function<bool(double,double,double)>& supportExemption={})
|
||||
const std::function<bool(double,double,double)>& supportExemption={},
|
||||
const std::function<bool(double,double,double)>& passageInteriorPredicate={})
|
||||
{
|
||||
FWalkAudit audit;
|
||||
if(path.size()<2)return audit;
|
||||
@@ -2854,10 +2856,14 @@ namespace StandaloneStreamBenchmark
|
||||
const auto solidAt=[&](double xMetres,double yMetres,double zMetres)
|
||||
{
|
||||
++audit.capsuleSamples;
|
||||
const bool inPassageInterior=passageInteriorPredicate
|
||||
&&passageInteriorPredicate(xMetres,yMetres,zMetres);
|
||||
if(inPassageInterior)++audit.passageInteriorCapsuleSamples;
|
||||
const VoxelForgeCore::Vec3d position{xMetres/coreMetres,yMetres/coreMetres,zMetres/coreMetres};
|
||||
const float density=Field.densityAt(position);
|
||||
if(density<0.0f)
|
||||
{
|
||||
if(inPassageInterior)++audit.passageInteriorSolidSamples;
|
||||
if(audit.firstBlockedCount<audit.firstBlocked.size())
|
||||
{
|
||||
audit.firstBlocked[audit.firstBlockedCount++]={xMetres,yMetres,zMetres,density};
|
||||
@@ -3544,7 +3550,8 @@ namespace StandaloneStreamBenchmark
|
||||
}
|
||||
const auto passageInteriorWinsAt=[&](double xMetres,double yMetres,
|
||||
double zMetres,std::size_t ignoredPassage=std::numeric_limits<std::size_t>::max(),
|
||||
std::size_t ignoredSegment=std::numeric_limits<std::size_t>::max())
|
||||
std::size_t ignoredSegment=std::numeric_limits<std::size_t>::max(),
|
||||
std::size_t selectedPassage=std::numeric_limits<std::size_t>::max())
|
||||
{
|
||||
constexpr double CornerBlendMetres=0.50;
|
||||
constexpr double WallReliefMetres=0.21;
|
||||
@@ -3558,6 +3565,8 @@ namespace StandaloneStreamBenchmark
|
||||
for(std::size_t passageIndex=0;
|
||||
passageIndex<ResolvedLayout->passages.size();++passageIndex)
|
||||
{
|
||||
if(selectedPassage!=std::numeric_limits<std::size_t>::max()
|
||||
&&passageIndex!=selectedPassage)continue;
|
||||
const auto& passage=ResolvedLayout->passages[passageIndex];
|
||||
if(passage.controlPoints.size()<2)continue;
|
||||
const auto& route=allPassageSmoothRoutes[passageIndex];
|
||||
@@ -4857,6 +4866,8 @@ namespace StandaloneStreamBenchmark
|
||||
&&zUm<stratum->content.topMicrometres;
|
||||
};
|
||||
std::uint64_t passageCount=0,passagePasses=0,blockedControls=0,naturalPasses=0;
|
||||
std::uint64_t passageInteriorCapsuleSamples=0,passageInteriorSolidSamples=0;
|
||||
std::uint64_t passageInteriorControls=0;
|
||||
std::uint64_t mouthProfilePasses=0,ripplePasses=0,rippleControlsDetected=0;
|
||||
std::uint64_t floorRippleControlsDetected=0,floorStepRippleControlsDetected=0;
|
||||
std::uint64_t shellAudits=0,shellFloorSamples=0,shellFloorViolations=0;
|
||||
@@ -4880,8 +4891,18 @@ namespace StandaloneStreamBenchmark
|
||||
const std::function<bool(double,double,double)> passageSupportExemption=
|
||||
[&](double x,double y,double z)
|
||||
{return passageInteriorWinsAt(x,y,z-0.25);};
|
||||
const std::function<bool(double,double,double)> passageInteriorPredicate=
|
||||
[&](double x,double y,double z)
|
||||
{return passageInteriorWinsAt(x,y,z,
|
||||
std::numeric_limits<std::size_t>::max(),
|
||||
std::numeric_limits<std::size_t>::max(),passageIndex);};
|
||||
const FWalkAudit passageAudit=auditPlayerPath(Shape,path,0.375,0.125,
|
||||
1.125,3,0.45,passageSupportExemption);
|
||||
1.125,3,0.45,passageSupportExemption,passageInteriorPredicate);
|
||||
const bool passageInteriorAirPassed=
|
||||
passageAudit.passageInteriorCapsuleSamples>0
|
||||
&&passageAudit.passageInteriorSolidSamples==0;
|
||||
passageInteriorCapsuleSamples+=passageAudit.passageInteriorCapsuleSamples;
|
||||
passageInteriorSolidSamples+=passageAudit.passageInteriorSolidSamples;
|
||||
const FPassageNaturalnessAudit naturalAudit=
|
||||
auditPassageNaturalness(Shape,passageIndex);
|
||||
const auto lowerProfileStratum=std::find_if(ResolvedLayout->strates.begin(),
|
||||
@@ -4940,13 +4961,17 @@ namespace StandaloneStreamBenchmark
|
||||
rippleControlsDetected+=rippleAudit.controlDetected;
|
||||
floorRippleControlsDetected+=rippleAudit.floorControlDetected;
|
||||
floorStepRippleControlsDetected+=rippleAudit.floorStepControlDetected;
|
||||
passagePasses+=passageAudit.passed&&mouthsInRadius&&mouthsInContent
|
||||
passagePasses+=passageAudit.passed&&passageInteriorAirPassed
|
||||
&&mouthsInRadius&&mouthsInContent
|
||||
&&naturalAudit.passed&&mouthProfileAudit.passed&&rippleAudit.passed;
|
||||
std::printf("[ResolvedPassageAudit] id=%s interface=%d-%d control_points=%zu center_samples=%llu capsule_samples=%llu blocked=%llu support_samples=%llu support_overlap_skips=%llu unsupported=%llu grade_failures=%llu mouth_content=%d/2 mouth_radius=%d/2 walkability=%s\n",
|
||||
std::printf("[ResolvedPassageAudit] id=%s interface=%d-%d control_points=%zu center_samples=%llu capsule_samples=%llu blocked=%llu passage_interior_capsule_samples=%llu passage_interior_solid_samples=%llu interior_air=%s support_samples=%llu support_overlap_skips=%llu unsupported=%llu grade_failures=%llu mouth_content=%d/2 mouth_radius=%d/2 walkability=%s\n",
|
||||
passage.stableId.c_str(),passage.upperStrateIndex,passage.lowerStrateIndex,
|
||||
passage.controlPoints.size(),static_cast<unsigned long long>(passageAudit.centers),
|
||||
static_cast<unsigned long long>(passageAudit.capsuleSamples),
|
||||
static_cast<unsigned long long>(passageAudit.blocked),
|
||||
static_cast<unsigned long long>(passageAudit.passageInteriorCapsuleSamples),
|
||||
static_cast<unsigned long long>(passageAudit.passageInteriorSolidSamples),
|
||||
passageInteriorAirPassed?"PASS":"FAIL",
|
||||
static_cast<unsigned long long>(passageAudit.supportSamples),
|
||||
static_cast<unsigned long long>(passageAudit.supportOverlapSkips),
|
||||
static_cast<unsigned long long>(passageAudit.unsupported),
|
||||
@@ -5239,13 +5264,38 @@ namespace StandaloneStreamBenchmark
|
||||
path.push_back({point.x/coreMetres,point.y/coreMetres,
|
||||
playerZ/coreMetres});
|
||||
}
|
||||
const std::function<bool(double,double,double)> passageInteriorPredicate=
|
||||
[&](double x,double y,double z)
|
||||
{return passageInteriorWinsAt(x,y,z,
|
||||
std::numeric_limits<std::size_t>::max(),
|
||||
std::numeric_limits<std::size_t>::max(),passageIndex);};
|
||||
const FWalkAudit blockedAudit=auditPlayerPath(blockedWorld,path,
|
||||
0.125,0.125,0.25,3,0.45);
|
||||
0.125,0.125,0.25,3,0.45,{},passageInteriorPredicate);
|
||||
blockedControls+=blockedAudit.blocked>0&&!blockedAudit.passed;
|
||||
const bool passageInteriorControlDetected=
|
||||
blockedAudit.passageInteriorCapsuleSamples>0
|
||||
&&blockedAudit.passageInteriorSolidSamples>0;
|
||||
passageInteriorControls+=passageInteriorControlDetected;
|
||||
std::printf("[ResolvedPassageBlockedControl] id=%s blocked_capsule_samples=%llu detected=%s\n",
|
||||
passage.stableId.c_str(),static_cast<unsigned long long>(blockedAudit.blocked),
|
||||
blockedAudit.blocked>0&&!blockedAudit.passed?"true":"false");
|
||||
std::printf("[ResolvedPassageInteriorNegativeControl] id=%s passage_interior_capsule_samples=%llu interior_solid_samples=%llu detected=%s status=%s\n",
|
||||
passage.stableId.c_str(),
|
||||
static_cast<unsigned long long>(blockedAudit.passageInteriorCapsuleSamples),
|
||||
static_cast<unsigned long long>(blockedAudit.passageInteriorSolidSamples),
|
||||
passageInteriorControlDetected?"true":"false",
|
||||
passageInteriorControlDetected?"PASS":"FAIL");
|
||||
}
|
||||
const bool passageInteriorAuditPassed=passageCount>0
|
||||
&&passageInteriorCapsuleSamples>0&&passageInteriorSolidSamples==0
|
||||
&&passageInteriorControls==passageCount;
|
||||
std::printf("[PassageInteriorCapsuleAuditSummary] interfaces=%llu capsule_samples=%llu solid_samples=%llu negative_controls=%llu/%llu status=%s\n",
|
||||
static_cast<unsigned long long>(passageCount),
|
||||
static_cast<unsigned long long>(passageInteriorCapsuleSamples),
|
||||
static_cast<unsigned long long>(passageInteriorSolidSamples),
|
||||
static_cast<unsigned long long>(passageInteriorControls),
|
||||
static_cast<unsigned long long>(passageCount),
|
||||
passageInteriorAuditPassed?"PASS":"FAIL");
|
||||
const bool shellAuditPassed=shellAudits==passageCount
|
||||
&&shellFloorViolations==0&&shellWallViolations==0
|
||||
&&shellInteriorViolations==0&&shellOpenAirSamples>0;
|
||||
@@ -5285,6 +5335,7 @@ namespace StandaloneStreamBenchmark
|
||||
floorStepRippleControlsDetected==passageCount?"DETECTED":"MISSED",
|
||||
ripplePasses==passageCount?"PASS":"FAIL");
|
||||
const bool auditPassed=passageCount>0&&passagePasses==passageCount
|
||||
&&passageInteriorAuditPassed
|
||||
&&naturalPasses==passageCount&&l23SmoothWallDetected
|
||||
&&mouthProfilePasses==passageCount&&l23TerraceControlDetected
|
||||
&&ripplePasses==passageCount
|
||||
|
||||
Reference in new issue
Block a user