proto: continuous swept road deck; coarse-LOD proxies keep thin pillars intact (L143)

Road: one swept-deck stamp on a shared cubic-Hermite centerline (stamp vocabulary V5), 376.8 m, max 8.5 deg, walk
audit clean, short-road control fails as expected. Pillars: regular fillPillar stamps get deterministic 24-sided
capped-cylinder proxies once the LOD step exceeds their radius or half-height (applies to all worlds). Owner hashes
unchanged (v227); five-fixture Clang/GCC determinism; fast tier green.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-11-01 10:08:37 +01:00
1 parent 6cd9e4da76
commit a4e214561f
19 files changed
+1167 -73

No files matched your search

+23 -12
View File
@@ -1935,15 +1935,24 @@ int main(int argc,char** argv)
std::sort(deck.begin(),deck.end(),[](const auto* a,const auto* b)
{return a->stableId<b->stableId;});
double pathLength=0.0,maxGradeDegrees=0.0;
for(std::size_t i=0;i<deck.size();++i)
std::vector<std::array<std::int64_t,3>> centerline;
if(deck.size()==1&&!deck.front()->sweepPathMicrometres.empty())
centerline=deck.front()->sweepPathMicrometres;
else
{
const auto* segment=deck[i];
const double dx=(segment->sweepEndpointsMicrometres[1][0]
-segment->sweepEndpointsMicrometres[0][0])/1.0e6;
const double dy=(segment->sweepEndpointsMicrometres[1][1]
-segment->sweepEndpointsMicrometres[0][1])/1.0e6;
const double dz=std::abs(segment->sweepEndpointsMicrometres[1][2]
-segment->sweepEndpointsMicrometres[0][2])/1.0e6;
for(std::size_t i=0;i<deck.size();++i)
{
const auto* segment=deck[i];
if(i==0)centerline.push_back(segment->sweepEndpointsMicrometres[0]);
centerline.push_back(segment->sweepEndpointsMicrometres[1]);
}
}
for(std::size_t i=1;i<centerline.size();++i)
{
const auto& a=centerline[i-1];const auto& b=centerline[i];
const double dx=(b[0]-a[0])/1.0e6;
const double dy=(b[1]-a[1])/1.0e6;
const double dz=std::abs(b[2]-a[2])/1.0e6;
const double horizontal=std::hypot(dx,dy);
pathLength+=horizontal;
maxGradeDegrees=std::max(maxGradeDegrees,
@@ -1952,14 +1961,16 @@ int main(int argc,char** argv)
const double width=deck.empty()?0.0:
2.0*deck.front()->halfExtentsMicrometres[1]/1.0e6;
std::printf("[LiminalRoadResolved] vocabulary=%u id=liminal/road-clouds-v2 "
"strate=%d shape=swept_deck_segments deck_segments=%zu supports=%zu "
"strate=%d shape=continuous_swept_deck deck_stamps=%zu centerline_points=%zu supports=%zu "
"path_length_m=%.3f width_m=%.3f grade_max_deg=%.3f "
"placement=free route_keepout=PASS band_clearance=PASS status=%s\n",
resolvedLayout.stampVocabularyVersion,
deck.empty()?-1:deck.front()->strateIndex,deck.size(),supportCount,pathLength,
width,maxGradeDegrees,deck.size()>1&&pathLength>=300.0&&width>=3.0
deck.empty()?-1:deck.front()->strateIndex,deck.size(),centerline.size(),
supportCount,pathLength,width,maxGradeDegrees,
deck.size()==1&&centerline.size()>=2&&pathLength>=300.0&&width>=3.0
&&maxGradeDegrees<=15.0?"PASS":"FAIL");
if(deck.size()<2||pathLength<80.0||width<3.0||maxGradeDegrees>15.0)
if(deck.size()!=1||centerline.size()<2||pathLength<80.0
||width<3.0||maxGradeDegrees>15.0)
{std::fprintf(stderr,"Liminal road resolved outside the walkable road bounds\n");return 2;}
}
if(hasLiminalPillarGrid)