- CODEMAP: data-flow diagram, §3.2b/§3.2d, generator and strate-manager
rows, test rows and §4.2/§5 now describe the stack-only path; the
deleted archetype functions, bUseOperatorStack and the Not Op Stack
stats are gone; line hints re-synced for VoxelGenerator.cpp,
VoxelStrateManager.cpp and VoxelStrateDefinition.h.
- ARCHITECTURE §8.1: archetype table lists stack builders; §8.10 surface
column and shaft cache entries name their current owners.
- REVIEW_FINDINGS: tick "Operator stack as the only density path"; add
the no-strate-manager fallback world as its own open item.
- fable-idea: T1.a status names the current column caches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
With the operator stack as the only density path, the per-archetype
density functions have no caller left in the game:
- Delete UVoxelGenerator::GetSlabDensity, GetMazeDensity,
GetSurfaceDensity, SurfaceDensityFromColumn, GetVerticalShaftDensity
and GetFloatingIslandDensity (~1000 lines) with their declarations.
- Drop GetDensityWithParams' OutWarpedPosition out-parameter; only
the native GetDensityAt branch removed in the previous commit used it.
- OpStack Slab/Maze/VerticalShaft/FloatingIsland and SurfaceHeight
tests: remove the stack-vs-legacy comparisons; keep decomposition,
finiteness, liveness, window-invariance, cache-cost and box-verdict
checks (Shaft cache timing now measures the stack source).
- PassageLandsInOpenSpace: the source-only footing probe evaluates
the archetype stack built without a strate manager instead of the
deleted functions.
- Comments that cited the deleted functions now cite the operators
(FSlabVoidSource, FLatticeCorridorSource, FIslandBlobSource, ...).
GSurfColCache is documented as ClassifyTile's column cache.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
Every strate now generates through its operator stack: authored
definitions, cooked-season entries (recipe or native) and editor
composer candidates alike. The per-strate opt-in and the archetype
switch it guarded are gone.
- Remove UVoxelStrateDefinition::bUseOperatorStack and the season
wiring that set it; UsesOperatorStackForChunk now only says whether
the slot has a known archetype.
- GetDensityAt always builds a stack (composer, then recipe, then the
native archetype stack); a degenerate zero-height strate stays air.
- Remove the startup opt-in warning, the operator_stack startup-trace
field and the four "Cave Bail Not Op Stack" stats (the remaining
bail is counted by Cave Bail No Stack).
- Explore commandlet: drop -opstack and the operator_stack fields;
VoxelForgeTest.ps1 no longer passes -opstack=1.
- Tests: FTestWorld::Build loses its bool parameter; legacy-vs-stack
comparisons (MazeSeam, VerticalShaftSeam, TerrainDetailLiveness,
WorldEdgeSeal, TilePostReach) collapse to the single stack path.
This changes terrain for any strate asset that did not already have
the opt-in ticked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
The far sheet ring was already gone from the runtime; this removes what
was left of it:
- UVoxelSettings::bFarSheetRing / FarSheetSpanLevels, the
voxel.TestFarSheetRing switch, and their log/trace/dump fields.
- The sheet branch of VoxelClipmapDesiredTiles (FParameters sheet fields,
OuterShell sheet level, sheet ring emission). Output for the runtime
configuration (sheet off) is unchanged: same rings, same alignment.
- Tests: VerticalStrateReach now asserts the sheet-free selector (its
expected counts were stale since the aligned-ring change 85a803b:
LOD0 343 -> 512); ClipmapNoOverlap drops the sheet sweep cases and the
frozen 7486c29 oracle's sheet branch. New expected values were computed
with a Python port of the selector that reproduces the test's existing
635/594487 and 508/74295 measurements exactly; all 5,145 sweep cases
pass (no overlap, full coverage).
- Tools/VoxelForgeTest.ps1 no longer passes voxel.TestFarSheetRing or
reports far_sheet_ring. The sheet_tile dump field is kept (the parity
compare reads it).
Also removes settings nothing reads: CeilingViewMultiplier,
CeilingBandChunks (pre-clipmap ceiling band) and DensityVolumeMaxTasks
(the volume fill runs on its own thread). Saved assets that still carry
these values load normally; the values are ignored.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
The single player-following water plane only uses the strate's
WaterMaterial; UVoxelBiomeDefinition::WaterMaterial is never read. The
design (§8.14 content profile) still lists it, so record the gap as an
open owner decision instead of silently dropping it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
ProcessDecoResults folds cell results into BuildId-matched region builds
(MergeCellResult) and applies whole regions under the per-frame budget;
there is no epoch guard on decoration results. Comment-only change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
Workers return tile results through CriticalProcessQueue,
EditedProcessQueue, NearProcessQueue or ProcessQueue (VoxelWorld.h), all
EQueueMode::Mpsc; the rule named only ProcessQueue. Rules and links are
otherwise unchanged (all links resolve, the other stated facts match the
code).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
- Replace the T2.b/T2.c/T2.d/F2 detail in the batch-3 note with a pointer:
those items are tracked in fable-idea.md (and ARCHITECTURE §8.10).
- Tick the 2026-09 cleanup under Dead code.
- New "Owner decisions" checklist: reflected settings/fields and plain
enums that nothing in Source/ reads but that assets, Blueprints, tools
or tests may reference by name, so they were kept (sheet-ring settings,
ceiling settings, DensityVolumeMaxTasks, unused audio/creature fields,
biome WaterMaterial, EVoxelFace / EVoxelSeasonSelectionReason /
EVoxelOpCombine, MaxDisplacement hooks).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
- Header: drop the false note that .gitignore ignores this file (the
whitelist keeps every *.md) and the "nothing here is implemented" line.
- Perf §0 / F3 ticked: stat VoxelForge group (VoxelStats.h) + Insights
scopes exist. F6 ticked (Stage 1): mesher writes FVoxelMeshData::Colors
from MaterialPaletteIndex (ARCHITECTURE §8.15). F7 marked partly done
(landmark AnchorMode/exclusion, FTerrainCondition, FDecoCompanion; SDF
stamps not built).
- F18 far-field sheets: marked REMOVED (owner decision) with what remains
(unused settings, runtime passes false).
- Suggested-order list annotated with what is done and what is open.
- T1.b status no longer repeats the dead-trio removal (tracked in
REVIEW_FINDINGS dead code).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
- §8.10 render-distance paragraph: remove the F18 far "sheet" ring
description (GenerateSheetMesh, SheetHole*, sheet re-queue). The ring
is plain level-MaxClipLevel MC tiles; bFarSheetRing/FarSheetSpanLevels
are documented as unused settings the runtime always passes as false.
All other §8.10 invariants are kept; the budgeted-teardown note now says
what UnloadTile does today (park the component), not ClearChunk.
- Fix the claim that GetLODForChunk/LODToStep/IsChunkInRange/
GetStrateChunkZBounds and the ViewDistance settings are dead (the first
three are gone, the last two are used); only the ceiling settings are.
- §8.5: decoration results are BuildId-guarded region builds applied by
ApplyRegion (no ReadyResults/DecoEpoch/ApplyDecoResult); water is one
player-following plane (UpdateWater), not per-tile planes; palette tags
are per-grid EntryBiome; FStrateSetPiece no longer "coming" (folded into
landmarks); drop the dead ContentMaxLevel/MaxLODLevel notes.
- §9.3: anchors fold in after the player clipmap (no sheet ring).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
- Refresh every numeric line hint in the §3 tables, the §4 pipeline step
anchors, the §5 "go here" table and the inline (h:NNN) / (NNN) hints;
most pointed at a much older file layout (e.g. AVoxelWorld at 12,
now 176; GetDensityWithParams at 277, now 3851).
- Remove rows/mentions of symbols that no longer exist: the far sheet
ring (GenerateSheetMesh, SheetHole*, sheet-tile routing in LoadTile and
BuildDesiredTiles), EvaluateSDF, the generator's ApplyPassageCarving
forwarder, VoxelTypes chunk-local helpers (LocalToIndex & co.,
CHUNK_SIZE_SQUARED/CHUNK_VOLUME), GetLODForChunk/LODToStep,
VF_RollStrateParams (now VF_RollStrateParamsDetailed), and the stale
AVoxelWorld storage list (Chunks/ChunkMeshes/ChunkLODs/PendingChunkCoord
-> LoadedTiles/TileComponents/PendingTiles + the four MPSC queues).
- bFarSheetRing / FarSheetSpanLevels are documented as unused settings.
- Add the 13 test files that were missing from §3.12.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
Rewrite comments that told the story of past rounds instead of the
current code: dated "fixed on / tried on / reverted on" notes, "this used
to...", "stale paragraph removed", "Phase 1/2" progress labels, and the
"ClassifyTile still does not use ClassifyBox" claim (it does now, via
VF_ClassifyBoxWithWarpRetry). Every invariant, unit, sign convention,
trap and measurement that justified the design is kept, rephrased in the
present tense and in its original language (French or English).
Also fix comments that named symbols removed in the dead-code commit
(EvaluateSDF wrapper, FTunnelCoreWorldEvaluation support-floor fields,
BlendChunks -> TransitionBlendChunks) and the stale function name in the
VF_RollStrateParamsDetailed determinism checkf message.
Comment and message text only; no code token changed. Tests untouched.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
Remove three one-off investigation aids pinned to one seed/coordinate:
- [VoxelForgeExplore][TemporaryShaftConnectors] in the shaft connector
op's Eval (a thread_local flag + coordinate test in the density path);
- [VoxelForgeExplore][TemporaryVerticalLanding] in the vertical-shaft
landing search (seed 14, bottom Z -736 only);
- [VoxelForgeExplore][TemporaryShaftProbe] in the explore commandlet walk
mode (seed 14 VerticalShafts only; its own comment said it would be
removed once the seam was fixed).
No tool, test or script matches these tags (Tools/*.ps1 only parse
[VoxelForgeExplore][OwnerAssets] under that prefix). The probe's density
reads were log-only, so generated geometry and reports are unchanged.
All cvar-gated diagnostics and test result lines are kept.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
Each symbol below had zero references in Source/ (tests included), Tools/,
Config/ and the build files after comment/string stripping.
Functions: EvaluateTunnelCoreSDF, EvaluateSDF (uncached wrapper),
IsTunnelSupportFloorWorldPoint, BuildTunnelSupportFloorColumn,
IsTunnelSupportFloorColumnZ, GetTunnelSupportFloorColumnBand,
VF_TunnelFloorAtSegment, VF_ProjectSweptTunnelFloor, FVoxelWormField
EvaluateExact, ApplyPassageLandingAirMC, ApplyPassageTunnelAirMC,
GetGenerationParamsFingerprint, FVoxelStrateCorpus::LoadFromSettings,
GetSkippedDefinitions, VF_RollStrateParams, VF_ArePlayerFitConnectedWithSampler,
VF_GetVoxelSeasonSelectionReasonName, UVoxelSeasonAsset::GetManifestContentHash,
FVoxelStackSampler::IsRunning, CompareSkippedPostValue,
MakeSurfaceColumnSource, WriteObjTile, ExploreEffectName,
ExploreTileClassName, and the VoxelTypes.h chunk-local helpers
(WorldToLocalCoord, ChunkToWorldPos, LocalToIndex, IndexToLocal,
IsValidLocalCoord, GetFaceDirection, GetFaceNormal, CHUNK_SIZE_SQUARED,
CHUNK_VOLUME).
Members/types: write-only floor flags (FVoxelOpSample::
bProtectedStructuralFloor, StructuralFloorMinimumDensity,
bTunnelCoreSupportFloor; bSupportFloor on the tunnel evaluations;
FTunnelFloorSegmentProfile::NumSteps), UVoxelStrateManager::BlendChunks,
unused FSummary counters in the stack sampler, two unused
FVoxelSeasonCompositionSettings aliases, and a few unused locals/constants.
No UPROPERTY, UFUNCTION, reflected type or enum was touched. Behaviour is
unchanged: removed code was unreachable or only written, never read.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01URDGLsu7c4nunqNFPJEFPU
The owner dropped the far sheet ring. Remove it from the streaming path:
- UVoxelMarchingCubesMesher::GenerateSheetMesh (declaration + definition);
- sheet-tile branches in LoadTile / GenerateTileResult / SyncRemeshTile and
the bSheetTile / SheetChunkZ / Hole* parameters;
- the SheetHole* XY-hole state and its per-crossing re-queue block;
- VF_MaxMarchingCubesLevel (equal to the clamped MaxClipLevel without sheets);
- the sheet-only band arming and the 'sheet' field of the desired-level
startup-trace events (no tool reads it).
AVoxelWorld now always passes bFarSheetRing=false to the tile selector, and
the descendant index covers levels up to the MaxClipLevel clamp (8) instead
of the old sheet maximum (12); no tile above 8 can exist any more.
Kept on purpose: UVoxelSettings::bFarSheetRing / FarSheetSpanLevels
(UPROPERTYs, now marked unused), the voxel.TestFarSheetRing switch and the
far_sheet_ring / sheet_tile fields the test harness compares (sheet_tile is
always false), and the selector's sheet parameters in
VoxelClipmapDesiredTiles.h, which two automation tests still exercise.
Move closed audits, task briefs, design rounds, perf reports, the OPSTACK
plan/progress logs and WORK-NEXT.md into Docs/archive/ (git mv, history kept).
Whitelist Docs/ in the strict .gitignore, ignore Tools/**/__pycache__/, and
remove the tracked .pyc. Repoint references in the kept docs and in non-test
source comments to the new paths.