wip: Core.Liminal.Field v1 recipe, 4 seed-selected variants between fixed mouths (L144, fails mouth joins)
Plans and draws flat field+monolith, repeating hills, road over cloud floor and pillar grid in a 3-strata fixture, binding passage/0-1 and 1-2 as fixed endpoints. Composed W1 probes: 3/4 seeds fail one passage interface, 4/4 fail the liminal walk audit near the mouths (support itself passes). Stopped per AGENTS.md. Same mouth-ownership failure class as FI (L133/L140) and VS seed 2 (L139). 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
a4e214561f
commit
a45ba9bb10
18 files changed
+1547
-43
No files matched your search
@@ -1523,6 +1523,8 @@ public:
|
||||
&nativeLatticeFloorSupport);
|
||||
}
|
||||
const auto* bound=FindBoundStratumForManagerZ(Z);
|
||||
const bool liminalRouteComposition=bound&&bound->Resolved
|
||||
&&bound->Resolved->recipeId==VoxelForgeCore::CoreLiminalFieldRecipeIdV1;
|
||||
const bool nativeLattice=bound&&bound->Resolved
|
||||
&&VoxelForgeCore::IsNativeLatticeFieldStratum(*bound->Resolved)
|
||||
&&bound->Resolved->passageCapabilities.hasNativeLatticeField;
|
||||
@@ -1546,7 +1548,9 @@ public:
|
||||
VoxelForgeCore::Linux77Profiler::FScopedPhase l77StampPhase(
|
||||
VoxelForgeCore::Linux77Profiler::EPhase::Stamps);
|
||||
FScopedLegacyFieldTermTimer TermTimer(ELegacyFieldTerm::ComposerStamps);
|
||||
stamped=ApplyResolvedSdfStamps(composed,X,Y,Z);
|
||||
stamped=ApplyResolvedSdfStamps(composed,X,Y,Z,
|
||||
liminalRouteComposition?std::string_view("core/liminal-field/route/")
|
||||
:std::string_view{});
|
||||
}
|
||||
static const bool bL75TraceTnComposition=[]
|
||||
{
|
||||
@@ -1598,6 +1602,12 @@ public:
|
||||
ELegacyFieldTerm::ComposerPassage);
|
||||
final=ApplyResolvedStratePassageCarves(final,X,Y,Z);
|
||||
}
|
||||
// A liminal route is authored to terminate at fixed passage mouths. The
|
||||
// passage carve owns the surrounding bore, while the deck/support stamps
|
||||
// restore its walkable floor so the composed route crosses the interface.
|
||||
if(liminalRouteComposition)
|
||||
final=ApplyResolvedSdfStamps(final,X,Y,Z,{},
|
||||
"core/liminal-field/route/");
|
||||
if(bTraceTnComposition)
|
||||
std::printf("[L75TNCompositionTrace] input=%.9g graph=%.9g boundary=%.9g passage=%.9g stamp=%.9g final=%.9g native=0\n",
|
||||
density,graphDensity,boundary,composed,stamped,final);
|
||||
@@ -7156,10 +7166,16 @@ private:
|
||||
const float halfThickness=stamp.halfExtentsVoxels[2];
|
||||
const float round=std::min(0.35f,std::min(halfWidth,halfThickness)*0.15f);
|
||||
const float searchMargin=halfWidth+halfThickness+2.0f;
|
||||
const auto first=std::lower_bound(path.begin(),path.end(),x-searchMargin,
|
||||
[](const auto& point,float value){return point[0]<value;});
|
||||
const auto last=std::upper_bound(first,path.end(),x+searchMargin,
|
||||
[](float value,const auto& point){return value<point[0];});
|
||||
const bool increasingX=std::adjacent_find(path.begin(),path.end(),
|
||||
[](const auto& a,const auto& b){return a[0]>=b[0];})==path.end();
|
||||
const auto first=increasingX
|
||||
?std::lower_bound(path.begin(),path.end(),x-searchMargin,
|
||||
[](const auto& point,float value){return point[0]<value;})
|
||||
:path.begin();
|
||||
const auto last=increasingX
|
||||
?std::upper_bound(first,path.end(),x+searchMargin,
|
||||
[](float value,const auto& point){return value<point[0];})
|
||||
:path.end();
|
||||
const std::size_t firstIndex=static_cast<std::size_t>(first-path.begin());
|
||||
const std::size_t lastIndex=static_cast<std::size_t>(last-path.begin());
|
||||
const std::size_t segmentBegin=std::min(path.size()-2,
|
||||
@@ -7426,7 +7442,9 @@ private:
|
||||
std::nextafter(maximum+outwardPadding,
|
||||
std::numeric_limits<double>::infinity()),true};
|
||||
}
|
||||
float ApplyResolvedSdfStamps(float density,float X,float Y,float Z) const
|
||||
float ApplyResolvedSdfStamps(float density,float X,float Y,float Z,
|
||||
std::string_view excludedStableIdPrefix={},
|
||||
std::string_view includedStableIdPrefix={}) const
|
||||
{
|
||||
if(StampRuntime.empty()||!Owner||Owner->CoreVoxelSizeMicrons==0)return density;
|
||||
const auto* tileQueries=ActivePassageTileQueries;
|
||||
@@ -7443,6 +7461,10 @@ private:
|
||||
if(index>=StampRuntime.size())return;
|
||||
const auto& runtime=StampRuntime[index];const auto& record=*runtime.record;
|
||||
if(record.strateIndex!=bound->StrateIndex)return;
|
||||
if(!excludedStableIdPrefix.empty()
|
||||
&&record.stableId.starts_with(excludedStableIdPrefix))return;
|
||||
if(!includedStableIdPrefix.empty()
|
||||
&&!record.stableId.starts_with(includedStableIdPrefix))return;
|
||||
if(UsesCoarsePillarProxy(runtime,CurrentStampSamplingStep()))return;
|
||||
for(std::size_t axis=0;axis<3;++axis)
|
||||
if(worldMicrometres[axis]<record.boundsMinimumMicrometres[axis]
|
||||
|
||||
Reference in new issue
Block a user