Commit Graph
100 Commits
Author SHA1 Message Date
Brian Neumann-Fopiano e5e3ae112d Fixed saved biome scoreboard
- Studio scoreboards recover while saved biome reads are pending
- Combined environment queries retain mantle cave overrides
- World changes refresh rows and genuine failures retain their cause
2026-09-06 12:12:15 -04:00
Brian Neumann-Fopiano 9fdb5615d6 Bounded routing test cleanup
- Shutdown assertions interrupt and drain workers before fallback router close
2026-09-06 12:11:56 -04:00
Brian Neumann-Fopiano 3425c05e8b Fixed saved biome scoreboards
- Keep Studio board refreshes alive while saved biome data loads
- Sample mantle-aware biome environments and clear prior world values
- Report permanent failures once per display context
- Localize loading states and verify recovery and Jigsaw transitions
2026-09-06 12:11:41 -04:00
Brian Neumann-Fopiano fb4585b62d Reduced generation routing contention
- Ready runtime leases avoid repeated metadata lock acquisition
- Concurrent routing retains shutdown and history ownership checks
2026-09-06 12:09:49 -04:00
Brian Neumann-Fopiano e69140e752 Cached native biome handles
- Terrain capture reuses bounded biome wrappers by native identity
- Canonical biome keys use the supported typed accessor
2026-09-06 12:09:49 -04:00
Brian Neumann-Fopiano 6b450fdea4 Fixed saved biome previews
- Pregeneration paints saved biome details on its bounded renderer worker
- Pending queries retain historical definitions through preview consumption
2026-09-06 12:09:49 -04:00
Brian Neumann-Fopiano fca4a58388 Reduced generation routing contention
- Ready generation bindings acquire their lease in one metadata lock pass
- Shared routing metadata uses nonfair lock handoffs under worker contention
- Single-runtime release avoids allocating an empty retirement list
- Concurrent route tests verify shutdown drains and rejects active workers
2026-09-06 12:09:33 -04:00
Brian Neumann-Fopiano cb85a09c0a Cached native biome handles
- Biome wrappers read canonical keys only on cache insertion
- Native handle identity prevents stale biome reuse after registry replacement
- The biome wrapper cache retains at most 4096 entries
- Regression tests cover key reuse, namespaces, replacement handles, and eviction
2026-09-06 12:08:31 -04:00
Brian Neumann-Fopiano df717cf151 Fixed saved biome previews
- Pregeneration previews wait for saved biome reads on the bounded renderer worker
- Preview colors retain historical definitions through rendering
- Existing chunk previews avoid biome reads while the window is hidden
- Query completion handles cache eviction and capture refresh
- Regression tests cover read failures, interruption, and shutdown ownership
2026-09-06 12:05:19 -04:00
Brian Neumann-Fopiano 5570923d30 Fixed saved world startup
- Check spawn chunks asynchronously before hydrology prefetch
- Reject stale runtime callbacks and retain failure stacktraces
- Verify saved-world Folia startup and Paper create unload reload
2026-09-06 05:17:22 -04:00
Brian Neumann-Fopiano d093ff0e41 Fixed Folia spawn initialization
- Check existing spawn chunks asynchronously during world initialization
- Guard delayed hydrology preparation with runtime lifecycle ownership
- Preserve prefetch failure reporting during concurrent shutdown
2026-09-06 05:08:32 -04:00
Brian Neumann-Fopiano 03b0f6e801 Fixed spawn prefetch startup
- Spawn hydrology checks existing chunks asynchronously without generating them
- Prefetch admission rejects closed or replaced generation runtimes
- Studio entry retains tracked hydrology preparation
- Admitted planning failures retain their stacktraces during shutdown
- Regression coverage checks startup admission and delayed completion
2026-09-06 05:08:13 -04:00
Brian Neumann-Fopiano 04471678b2 Refined Iris generation core
- Terrain, hydrology, and feature generation avoid repeated work and temporary allocations
- Deposits preserve configured ordering and independent chance samples
- Object transforms and layer boundaries handle previously failing cases
- Runtime shutdown, storage failures, and world reload retain resource ownership through completion
2026-09-06 04:52:13 -04:00
Brian Neumann-Fopiano f916c81bc0 Restored world reload lifecycle
- Generation admission retires after complete runtime cleanup
- Fresh world loads can activate pending compatible updates
- Failed generator closes remain sealed and retryable
2026-09-06 04:47:26 -04:00
Brian Neumann-Fopiano 2b124a2a25 Fixed world reopen admission
- Generation admission retires after every runtime closes
- Engine setup retains admission across activation replacements
- Failed generator closes stay sealed and retryable
- Regression tests cover reopening and pending promotions
2026-09-06 04:46:38 -04:00
Brian Neumann-Fopiano 62f6a32362 Reviewed object placement changes
- Object transform and smart boring changes remain integrated
2026-09-06 04:19:22 -04:00
Brian Neumann-Fopiano c49a9ddba8 Preserved complex hotload ownership
- Failed replacement cleanup remains owned for shutdown retry
- Published replacements remain current after late activation failure
2026-09-06 04:18:24 -04:00
Brian Neumann-Fopiano d454f25f4d Retained failed hotload complexes
- Retain unpublished complex assemblies when cleanup fails
- Keep published replacement runtimes owned after activation failure
- Cover failed cleanup retries and successful hotload rollback
2026-09-06 04:17:40 -04:00
Brian Neumann-Fopiano 723426177c Separated deposit chance samples
- Clump seeds mix the generator seed and attempt index before sampling
- Deposit plans share immutable seeds across preparation workers
- Probability checks cover generator independence and adjacent clumps across batch boundaries
2026-09-06 04:16:09 -04:00
Brian Neumann-Fopiano 0bfb4d6718 Completed shutdown retry ownership
- Retain generation stages and world services until shutdown completes
- Preserve failed runtime cleanup across resource hash changes
2026-09-06 04:09:34 -04:00
Brian Neumann-Fopiano 046b389925 Completed shutdown retry ownership
- Mark generation modes closed only after every stage finishes cleanup
- Retain manager loop and cleanup executor ownership until their existing shutdown waits succeed
- Propagate manager shutdown timeouts and interruption so resource release remains blocked
- Track unpublished runtimes by identity while resource state changes during cleanup
- Verify failed joins, interrupted waits, stage retries, and changing resource hashes
2026-09-06 04:07:51 -04:00
Brian Neumann-Fopiano fda24db789 Refined featurette edge behavior
- Keep coral tips attached to the fan silhouette
- Preserve large leaf weights and disable zero threshold ores
- Reuse formation palette sources across each object
2026-09-06 03:58:21 -04:00
Brian Neumann-Fopiano 2c66367606 Retained failed generation ownership
- Keep writers until cancelled components actually finish
- Retain incomplete runtime and target ownership for retries
- Gate storage release on completed service drains and saves
2026-09-06 03:58:02 -04:00
Brian Neumann-Fopiano 9a1c3546ba Preserved mantle task ownership
- Keep component cancellation separate from actual completion before releasing writers and deduplication claims
- Reject cancelled queued component claims before they can start writing
- Retain failed runtime assemblies and unpublished runtimes for shutdown retry
- Gate storage and data release on completed runtime cleanup
- Cover cancellation, shared writers, interrupted waits, and failed shutdown retries
2026-09-06 03:57:35 -04:00
Brian Neumann-Fopiano 0efe919ff4 Reused formation palette sources
- Formation resolution shares one base palette source per object
- Strata reuse one seeded source per occupied band
- Mixed palette tests preserve block choices across negative bands and reversed traversal
2026-09-06 03:56:40 -04:00
Brian Neumann-Fopiano ce431b524e Fixed featurette edge cases
- Fan coral tips follow the existing top of each occupied column
- Large secondary leaf weights preserve their authored proportions
- Zero ore thresholds skip noise sampling and block generation
- Regressions cover fan silhouettes, weighted leaf choices, and ore cutoffs
2026-09-06 03:56:26 -04:00
Brian Neumann-Fopiano 2967efbf35 Merged core stability fixes
- Object verification includes stable deposits and featurette fixes
2026-09-06 03:54:14 -04:00
Brian Neumann-Fopiano b3c3a0b183 Bounded feature preparation memory
- Stage at most 32 deposit clumps before ordered placement
- Preserve configured attempt counts and parallel preparation
- Apply consistent sea surface output bounds
2026-09-06 03:48:32 -04:00
Brian Neumann-Fopiano 420148fcc7 Bounded deposit preparation
- Deposit preparation retains at most 32 clumps between ordered placement passes
- Large deposit counts retain parallel preparation and stable per-clump seeds
- Overlap tests cover every attempt across preparation windows
- Deposit tests isolate platform block conversion from cached registry fixtures
2026-09-06 03:46:25 -04:00
Brian Neumann-Fopiano 4c989fe1c0 Merged object stability fixes
- Keep scaling geometry and volume in one locked snapshot
- Skip unsupported block orientations and their tile data
- Replace smart bore executor scaffolding with ordered loops
2026-09-06 03:44:26 -04:00
Brian Neumann-Fopiano 1a2c8a8845 Simplified object smart boring
- Smart boring runs direct axis passes under the existing write lock

- Negative object bounds stop at the last occupied coordinate

- Bore insertion avoids redundant map callbacks

- Regression tests cover ordered fills and repeated calls
2026-09-06 03:43:25 -04:00
Brian Neumann-Fopiano 606aa2e704 Fixed object transform stability
- Placement skips blocks omitted by unsupported rotations

- Rotated object copies omit matching tile data

- Scaling captures geometry and volume under one read lock

- Regression tests cover omitted orientations and concurrent scaling
2026-09-06 03:43:08 -04:00
Brian Neumann-Fopiano 5baea8dd5b Bounded sea surface decoration
- Sea surface decorators respect engine and output ceilings in every placement mode
- Clipped sea stacks retain their top palette
- Tests cover short outputs negative bases and engine ceilings
- Multi-palette tests verify shared random sources match fresh per-block sources
2026-09-06 03:40:27 -04:00
Brian Neumann-Fopiano 75353d43c7 Bounded sea surface decoration
- Sea surface decorators respect engine and output ceilings in every placement mode
- Clipped sea stacks retain their top palette
- Tests cover short outputs negative bases and engine ceilings
- Multi-palette tests verify shared random sources match fresh per-block sources
2026-09-06 03:36:35 -04:00
Brian Neumann-Fopiano 3f9759b05f Merged procedural feature improvements
- Simplify tree fungus and coral generation
- Enforce sea decorator limits and deterministic deposit writes
- Restore branch tip accents outside terminal leaves
2026-09-06 03:34:28 -04:00
Brian Neumann-Fopiano b9b969f1f9 Simplified procedural feature generation
- Fungi build stem roles directly without intermediate maps or coordinate arrays
- Tree palettes reuse one random source per object
- Persistent leaves skip distance traversal when plausibility is disabled
- Tree support scans avoid copied coordinate sets
- Coral arm samples reuse their endpoint array
- Sea decorators share scaled stack limits and respect output bounds
- Unresolved sea floor palette entries preserve existing water
- Tests cover stem geometry persistent leaves and sea stack limits
2026-09-06 03:31:54 -04:00
Brian Neumann-Fopiano 1e3831263c Restored branch tip decorators
- Branch tip accents occupy the first free outward cell beyond their leaf cluster
- Existing wood leaves and accents retain their positions
- Tests cover opposite branch directions and repeated placement
2026-09-06 03:30:29 -04:00
Brian Neumann-Fopiano ebaa616536 Restored branch tip decorators
- Branch tip accents occupy the first free outward cell beyond their leaf cluster
- Existing wood leaves and accents retain their positions
- Tests cover opposite branch directions and repeated placement
2026-09-06 03:29:45 -04:00
Brian Neumann-Fopiano 79690edaaf Stabilized deposit overlap order
- Clumps prepare in parallel and place in dimension region biome order
- Placement evaluates host rules against preceding deposits
- Each clump uses independent deterministic random state
- Configured attempt counts are sampled once per chunk
- Block traversal reuses cursor coordinates
- Tests cover reversed worker completion and generation context cleanup
2026-09-06 03:28:02 -04:00
Brian Neumann-Fopiano 6276bb7327 Merged compact biome selection
- Replace expanded rarity lists with cumulative counts
- Preserve ordinary selection mapping and bound extreme rarity storage
2026-09-06 03:27:31 -04:00
Brian Neumann-Fopiano 587e0fdee0 Merged hydrology planning improvements
- Reuse downstream route distances and primitive footprint indexes
- Bound diagnostic history and reduce containment bookkeeping
2026-09-06 03:27:31 -04:00
Brian Neumann-Fopiano 47f77df0e8 Stabilized deposit overlap order
- Clumps prepare in parallel and place in dimension region biome order
- Placement evaluates host rules against preceding deposits
- Each clump uses independent deterministic random state
- Configured attempt counts are sampled once per chunk
- Block traversal reuses cursor coordinates
- Tests cover reversed worker completion and generation context cleanup
2026-09-06 03:27:23 -04:00
Brian Neumann-Fopiano 534c844a7d Compacted biome selection
- Biome and carving children share compact rarity selection
- Weighted choices preserve alternating insertion order
- Rarity totals use long counts without expanded lists
- Natural child selection preserves its existing noise calls
- Differential tests cover normal and extreme rarity values
2026-09-06 03:24:46 -04:00
Brian Neumann-Fopiano b7e7f64bcf Bounded hydrology diagnostics
- Cold-query log suppression retains a bounded window of tile keys
- Hydrology closure releases cold-query diagnostic history
2026-09-06 03:22:07 -04:00
Brian Neumann-Fopiano 20b9b3dce3 Reduced hydrology planning work
- Downstream route lengths are evaluated once per routing grid
- Footprint construction sorts primitive column keys without a temporary tree
- Footprint lookups use primitive keys and preserve immutable ordered views
- Closed cave components keep one ordered flood-fill membership set
- Surface pools and rivers share their layer construction
- Regression tests cover routing limits, cycles, coordinate bounds, and footprint ordering
2026-09-06 03:21:55 -04:00
Brian Neumann-Fopiano a68cad5893 Merged terrain assembly improvements
- Ceiling layer thickness resolves independently from surface layers
- Locked strata repeat correctly above the internal height reference
- Cave scratch releases generation references after each pass
- Terrain actuators omit redundant setup and checks
2026-09-06 03:16:51 -04:00
Brian Neumann-Fopiano 3ac441484a Merged hydrology shutdown fixes
- Hydrology stops admitting plans during shutdown
- Active planning completes before mantle data is released
2026-09-06 03:16:16 -04:00
Brian Neumann-Fopiano c27a233a50 Retained active generation resources
- Failed planner drains retain mantle and generation data for retry
- Detached runtime cleanup retains its target until runtime teardown succeeds
- Terrain caches clear after hydrology shutdown completes
2026-09-06 03:16:16 -04:00
Brian Neumann-Fopiano 23bad0e1a2 Refined terrain assembly
- Ceiling layers use their own thickness generators
- Pack validation accepts independent ceiling layer counts
- Locked strata repeat across the reference height
- Surface and cave palettes share layer emission
- Cave passes release retained chunk sections
- Nested carving preserves outer blend buffers
- Profile blending reuses bounded numeric buffers
- Terrain actuators remove unused state and duplicate checks
- Regression tests cover layers and carving scratch lifetimes
2026-09-06 03:15:57 -04:00
Brian Neumann-Fopiano dde3c149ad Fixed hydrology shutdown
- Hydrology close drains active tile plans and column composition before returning
- Queued tile plans cancel without waiting for their executor to start them
- Closed caches reject new tile and column demand
- Shutdown tests cover background plans, queued demand, active composition, and recursive close
2026-09-06 03:15:15 -04:00
Brian Neumann-Fopiano 80155cef93 Merged object placement improvements
- Native structure protection uses transformed object bounds
- Object copies share the volume mutation lock
- Upscaling writes expanded voxels without temporary lists
2026-09-06 03:10:04 -04:00
Brian Neumann-Fopiano 057d51f211 Completed offline decorator hooks
- Offline generation resolves decorator support without Bukkit classes
- Probe coverage checks solid, fluid and air spike support
2026-09-06 03:10:04 -04:00
Brian Neumann-Fopiano 23316d2d5e Reduced object scaling allocations
- Enlarged objects write expanded cells through one reusable coordinate
- Scaling removes temporary voxel lists and unused bound reads
- Expanded tiles retain independent copies and existing write order
2026-09-06 03:08:00 -04:00
Brian Neumann-Fopiano d55c77572b Fixed object placement bounds
- Native structure vetoes use the full transformed object bounds
- Object copies hold the volume read lock during mutation-sensitive reads
- Object copies retain independent tiles without redundant coordinate clones
- Regression tests cover oblique rotations and off-center object origins
- Concurrent copy tests verify volume lock ownership
2026-09-06 03:08:00 -04:00
Brian Neumann-Fopiano 942545dcb9 Fixed mantle failure barriers
- Worker barriers propagate failed shared component tasks
- Cancelled shared tasks stop generation before later passes
- Local worktree directories remain excluded from source control
2026-09-06 03:06:52 -04:00
Brian Neumann-Fopiano 17c927acdd t 2026-09-06 02:33:09 -04:00
Brian Neumann-Fopiano 13263f1a03 Removed Iris CI
- Removed the GitHub Actions workflow for pushes and pull requests
2026-09-05 21:48:50 -04:00
Brian Neumann-Fopiano 3a0e4557b7 Fixed cave biome identity
- Missing cave biome identities use the column surface biome
- Capture tests cover omitted caves, configured caves, and invalid surface keys
- Runtime scope tests retain keyed cave biome fixtures
2026-09-05 21:18:05 -04:00
Brian Neumann-Fopiano f8cbbde683 Merged Iris updates
- Historical biome retention is integrated

- Replacement staging progress and admission fixes are integrated
2026-09-05 20:37:46 -04:00
Brian Neumann-Fopiano 3f1448dc33 Merged replacement staging fixes
- Replacement progress and admission fixes are integrated with retained biome behavior
2026-09-05 20:31:17 -04:00
Brian Neumann-Fopiano 80843114fc Merged biome retention
- Saved biome behavior is integrated with current Iris changes
2026-09-05 20:30:52 -04:00
Brian Neumann-Fopiano b17fe811f3 Preserved historical biome behavior
- Generated chunks retain surface and vertical biome assignments
- Floating biome assignments persist through terrain transitions
- Archived pack definitions remain available for saved biome rules
- Spawns and effects use each saved biome environment
- Saved biome lookups load asynchronously with bounded caches
- Missing biome identities recover only from exact recorded evidence
- Effects and entity placement follow existing world surfaces
- New pack fingerprints ignore Finder metadata
- Tests cover biome storage, recovery, consumers, and scoped definitions
2026-09-05 20:30:50 -04:00
Brian Neumann-Fopiano 27d511d99a Fixed replacement staging stalls
- Concurrent replacement requests report busy before waiting for the manager lock
- Replacement staging reports localized phases and elapsed time
- Player progress messages use entity scheduling
- Pack copies flush completed files after traversal
- Replacement admission and progress tests cover scheduling and cleanup
- Language editor tests use a local catalog response
2026-09-05 20:30:30 -04:00
Brian Neumann-Fopiano c53e9f8261 Wand fix for WE 2026-09-05 20:24:01 -04:00
Brian Neumann-Fopiano 064ec0cae9 Merged noise refinement
- Existing noise corrections and fifteen new styles are integrated
2026-09-05 19:38:41 -04:00
Brian Neumann-Fopiano 14cfe3ed68 Added diverse noise styles
- Dune and Strata add dunes and layered bands
- Wood and Marble add warped grain and mineral veins
- Gabor and Scales add oriented waves and overlapping scallops
- Chladni and Kaleidoscope add nodal lines and mirrored motifs
- Menger Sponge and Circuit add recursive voids and connected traces
- New styles use the shared scale and full seeds
- Tests cover tile seams, volume variation, bounds, and octaves
2026-09-05 19:33:53 -04:00
Brian Neumann-Fopiano 645edcff5c Added patterned noise
- Gyroid and Quasicrystal provide labyrinths and wave interference
- Truchet tiles join quarter-circle ribbons
- Crater and Vortex provide bowls and spiral fields
- Pattern samplers share bounded octave accumulation
- Tests cover seeds, geometry, volume sampling, and world edges
2026-09-05 19:33:14 -04:00
Brian Neumann-Fopiano 50894b90ce Refined existing noise
- Hexagon styles produce coherent solid cells with contained subdivisions
- Sierpinski triangles use equilateral recursive geometry
- Noise styles share a 64-block base scale
- Zoom scales the complete pattern with its distortion
- Octaves preserve the base seed and feature scale
- Coordinate dispatch uses the native dimensional sampler
- Classic kernels retain seed precision and bounded output
- Interpolation preserves fractional coordinates and symmetric curves
- Noise caches respect sampling bounds and generation identity
- Clover sampling reuses vertices and cached trigonometry
- Noise and terrain tests cover corrected sampling behavior
2026-09-05 19:32:13 -04:00
Brian Neumann-Fopiano f2887632fe Dicing things up a little
- Trying to slim this beauty down to a size 6.
- Shes a size 7.1
2026-09-05 16:45:31 -04:00
Brian Neumann-Fopiano d10d70a894 Merged terrain generation updates
- Existing worlds retain generated terrain across generator updates
- New terrain blends at generation boundaries
- Cold generation and Studio startup improvements are integrated
- Terrain sampling validates active generator bounds and noise
2026-09-05 12:32:03 -04:00
Brian Neumann-Fopiano 5a5e8a8dc8 Validated terrain samples
- Terrain sampling rejects non-finite active bounds and noise before caching heights
- Validation tests cover invalid samples and unchanged finite arithmetic
- Bukkit packaging uses the existing 8 MB artifact limit
2026-09-05 12:31:36 -04:00
Brian Neumann-Fopiano 965606bbcc Merged generation improvements
- Cold startup and hydrology changes integrate with terrain history
- Flat authoring worlds skip native features under the history write guards
- Native decoration checks retain recorded structure and terrain ownership
- Automatic build revisions replace manual source seals
2026-09-05 12:05:14 -04:00
Brian Neumann-Fopiano b1e1fbc15e Preserved terrain across updates
- Saved chunks retain their natural geometry and generation ownership
- Future chunks blend against frozen terrain boundaries
- Build revisions capture generation source and dependencies automatically
- Native terrain queries use contained transition geometry and final height caches
- Historical searches retain recorded pack identities and placement facts
- World creation and Studio updates preserve native lifecycle ordering
- Hydrology containment and scoped content workers retain generation context
- Pregeneration validates saved completion before trusting cached progress
2026-09-05 11:57:01 -04:00
Brian Neumann-Fopiano 73d640943c Improved cold generation
- Flat authoring studios skip terrain and native structure preparation
- Normal Studio entry prepares the exact hydrology column asynchronously
- Hydrology prefetch admits the complete frontier before stale queued work
- Concurrent hydrology loads avoid cache monitor contention
- Cave density tasks drain failures before releasing chunk state
- Terrain and interpolation queries reuse exact bounded samples
- Pregeneration counts requested chunks directly from its bounds
2026-09-05 11:57:01 -04:00
Brian Neumann-Fopiano 20ad49b9d2 Merged generation history
- Integrated immutable generation epochs after dimension stacking
- Preserved historical terrain, biome, structure, and locate behavior
- Validated combined Bukkit and modded generation contracts
2026-09-04 15:07:18 -04:00
Brian Neumann-Fopiano 56b5f4dd0b Merged generation history
- Immutable generation epochs now coexist with dimension stacks
- Historical terrain, biomes, structures, and locate behavior remain stable across updates
- Versioned generation kernels preserve the combined runtime contract
2026-09-04 15:06:55 -04:00
Brian Neumann-Fopiano 8247f167cf Merged dimension stacking
- Upright stacked dimension generation is now part of master
- Superflat generation coverage is now part of the Iris test suite
2026-09-04 14:23:38 -04:00
Brian Neumann-Fopiano 6549b40797 Added dimension stacking
- Dimension files define upright top-to-bottom terrain layers
- Spacer values set exact air gaps between layers
- Optional noise styles shape blended layer boundaries
- Runtime queries resolve stacked terrain and biome ownership
- Pack validation rejects invalid stack definitions
- Project copy and hotload paths include stack dependencies
- Superflat fixtures cover gaps, blending, clipping, and fluids
- Platform tests cover stacked world generation contracts
2026-09-04 14:23:15 -04:00
Brian Neumann-Fopiano 30113c4133 Added generation history
- World-local pack epochs preserve generated chunks across restart-only updates
- Kernel catalogs and source seals retain executable generation behavior across jar changes
- Crash-safe ownership, boundary, registry, semantic, and mantle records survive activation changes
- New terrain blends lower surfaces and inverted ceilings against frozen historical boundaries
- Cave, object, structure, biome, and hydrology work respects activation ownership
- Find commands merge recorded facts with eligible active predictions for biomes, regions, structures, objects, and rivers
- Bukkit, Fabric, Forge, and NeoForge route generation through retained runtime scopes
- Shutdown ordering preserves class-loader resources until world and service cleanup finishes
- Tests cover activation chains, failure recovery, retained registries, bounded lookup, and transition geometry
2026-09-04 13:57:39 -04:00
Brian Neumann-Fopiano c1bcdd0a9d Reduced jar container overhead
- Seekable ZIP output removes redundant data descriptors without changing entry contents
- Compaction validates entry size and CRC before replacing the artifact
- Tests cover metadata preservation, deterministic output, corrupt payloads, and duplicate entries
2026-09-04 13:36:14 -04:00
Brian Neumann-Fopiano 366033a535 CORRECTIONS
- this is the corrections from the afoemrnioned commits
2026-09-04 00:02:43 -04:00
Brian Neumann-Fopiano a771fa6856 BuildFix 2026-09-03 16:38:23 -04:00
Brian Neumann-Fopiano a368d42558 Terrain is important
- Fixed Ores generating all over the surface.
- fixed UI bug
2026-09-03 15:20:51 -04:00
Brian Neumann-Fopiano 0510c108be Disregard. 2026-09-03 14:01:45 -04:00
Brian Neumann-Fopiano e4ca7d4e70 Merge feature/version-compat: gate pack content on the running Minecraft version
- Every registrant is evaluated on load (IrisData.preprocessObject ->
  IrisRegistrant.evaluateCompat) by a cached per-class reflective walker over the
  annotated key fields; the verdict is stored on the registrant and pool sites filter
  with isCompatExcluded(). Block keys resolve through the live registry, the legacy
  rename table, IrisDimension.blockFallbacks and the entry backup, in that order.
- Unit of exclusion is the compat unit that composes the missing content (registrant
  or object placement). A referencing unit drops the reference; an emptied required
  pool excludes the container (CompatPools cascade through regions, biomes, dimension,
  spawners, loot tables, jigsaw pools and structures). A cascade that reaches the
  dimension is a blocking validation error and world creation is refused.
- Object placements are evaluated per object from the .iob palette header: an object
  is excluded from a placement's pool unless a chance-1 type-replace (edit rule
  matching the key) or a fallback covers the key. edit find lists and marker mark
  lists are match-only. Missing palette keys stay MissingBlockState placeholders
  (air everywhere, real air nativeHandle) so a chance-1 edit rule can still rewrite
  them at placement time.
- Approved decisions: exclude the composing unit; console-only reporting; no version
  fields on packs and no cross-version pre-check (authors build on their version,
  older servers gate at load).
- IrisDimension.blockFallbacks (base key -> full block state) applies to every
  palette, decorator, deposit, replace rule and object in the pack.
- IrisBlockData.backup is revived on every platform (it was dead on Bukkit because
  B.getState returned air).
- The legacy rename table now lives in LegacyBlockRenames and is applied identically
  on Bukkit and the mod loaders.

Operator surface
- Boot listing per pack after the validation lines (IrisWorldGeneratorResolver on
  Bukkit, ModdedStartup on modded), grouped by key, capped at three subjects per key.
- Validation summary line on /iris pack validate and /iris pack status, findings
  persisted in PackValidationResult through PackValidationCache.
- One summary line per world engine when its pack has findings.
- /iris pack compat [pack] (alias cp) on Bukkit and modded, uncapped, from the
  persisted validation so no pack is reloaded; catalog keys in all 17 locales.

Verification on the branch
- Full build green in the .compatwt worktree; modded adapters compile.
- Golden hash unchanged on Paper 26.2, seed 1337, radius 8.
- Live boots on Paper 26.1.2 and 26.2: the stock Overworld lists 6 unavailable keys
  on 26.1.2 and none on 26.2; the world creates and generates without the excluded
  content on 26.1.2.

Integration on top of master (df34f328e..fc3a26dd9)
- Conflicts: PackValidator keeps both import sets (JSONObject for static object
  validation plus the compat and loader types); RiverPolicyResolver.State.apply takes
  the confinement scope and the pack data (confined rivers and gate-filtered river
  biome selections); IrisRiverPolicy keeps shoreBiomeWidth and confined next to
  compatBiomes.
- Static objects honour the gate. The per-object palette evaluation moved out of
  IrisObjectPlacement into the shared IrisObjectCompat helper; IrisStaticObject
  .evaluateCompat mirrors a one-object placement, records findings with subject type
  "static object" and the object key (DROPPED for uncovered palette keys, EXCLUDED
  for a missing edit replace palette), IrisStaticObjectLayer.compile skips gated
  entries instead of failing, and PackValidator.gateContent asks every dimension for
  its static objects (IrisDimension.evaluateStaticObjectsCompat) so the boot listing
  is complete. CompatWalker treats IrisStaticObject like IrisObjectPlacement: never
  descended, so a static object's edit palette excludes only that entry, never the
  dimension. Covered by IrisStaticObjectCompatTest.
- The modded compat and cp subcommands run inside ModdedCommandTree.localized like
  the rest of the pack tree and are documented in the modded help; the parity test
  asserts both.
- Locale keys stay in core/src/main/resources/languages: master's on-demand download
  reads those files from the repository and the build only keeps them out of the jar,
  so the compat keys sit next to the debugdump keys in the same form.
- Placeholder audit of master's new code: the only native casts added are the
  isFaceSturdy fallbacks in IrisSpeleothems and ModdedDecoratorHooks, both behind
  B.isAir guards, and MissingBlockState.nativeHandle is the real air anyway;
  IrisObjectTransforms only asks B.isAir; decorators resolve palettes through
  IrisBlockData.getBlockData, which never yields a placeholder. No new guards needed.
- core/purity-allowlist.txt gains IrisSpeleothems: 5053a644c split the Bukkit
  isFaceSturdy fallback out of the already allowlisted DecoratorCore without moving
  the allowlist entry, so master's own build failed the Bukkit purity ratchet.
- CompatTestPlatform states now answer isAir, isSolid, isFluid and materialKey like a
  real adapter: B caches the first registries it sees per JVM, so an interned mock
  air that never said isAir leaked into the core.compat tests once the static layer
  ran under that platform.

Gate commands on the merged tree
- ./gradlew build (default VolmLib composite, ../VolmLib at 7b8029e): BUILD SUCCESSFUL;
  core 3499 (8 skipped) tests, bukkit plugin 343 tests, nms v26_2_R1 255 (1 skipped) tests,
  probe 78 tests, buildSrc 10 tests, 0 failures.
- cd adapters/fabric && ../../gradlew compileJava: BUILD SUCCESSFUL (:compileJava executed)
- cd adapters/forge && ../../gradlew compileJava: BUILD SUCCESSFUL (:compileJava executed)
- cd adapters/neoforge && ../../gradlew compileJava: BUILD SUCCESSFUL (:compileJava executed)
- cd adapters/forge && ../../gradlew test --tests IrisModdedCommandParityTest --tests
  ModdedLanguageCommandsTest: BUILD SUCCESSFUL, 11 tests, 0 failures.
2026-09-03 10:48:37 -04:00
Brian Neumann-Fopiano fc3a26dd9e Ignore the compat lane worktree
The .compatwt/ directory holds a generated worktree for the
version-content compat lane and is never source.
2026-09-03 05:03:33 -04:00
Brian Neumann-Fopiano 657aaeaccf Add /iris language and /iris debugdump on both platforms
/iris language opens a locale menu and sets the language for the caller
or, for a gamemaster, the server default; /iris debugdump writes a
diagnostic report and optionally uploads it. Neither needs iris.all, so
a plain player can reach them. Every modded command now executes inside
a language audience scope, and the Bukkit dispatcher opens one around
execution, tab completion and help. Permissions, message keys and the
shipped locales follow.
2026-09-03 05:03:28 -04:00
Brian Neumann-Fopiano b25937f986 Download translations on demand instead of bundling them
Locales are fetched from the Iris repository at runtime into
languages/downloaded and cached against the revision the jar was built
from; the artifact ships only a manifest of the available locales.
IrisLanguage gains a player language service, per-audience snapshots and
an in-game message editor that writes locale overrides. The Bukkit
artifact verifier now fails when any locale file is embedded, and the
modded shadow jars drop the Bukkit-only switcher and editor classes.
2026-09-03 05:03:21 -04:00
Brian Neumann-Fopiano 5053a644c7 Grow speleothems from decorators and keep them supported
Dripstone and sulfur spikes are placed as oriented, thickness-graded
columns by the surface and ceiling decorators through a shared
IrisSpeleothems helper, replacing the ad hoc dripstone fixups, and the
stacking path is unified for both directions. The perfection modifier
renormalizes a spike whose support a pool replaced, dropping the
unsupported run and re-tipping what remains. Surface sturdiness is asked
per face now, so a downward spike tests the ceiling it hangs from.
2026-09-03 05:03:14 -04:00
Brian Neumann-Fopiano fd66b41bad Answer server-thread terrain queries from natural terrain
A height or biome query from the tick thread no longer blocks on a cold
hydrology plan: it answers from the natural streams and asks the
planning pool for the tiles meanwhile. A new world prefetches the tiles
around spawn when the generator is injected, and the hydrology pool gets
full parallelism instead of a third. Also stops the shared corner-bounds
cache from pinning a non-finite sample and fences its two stamp reads.
2026-09-03 05:03:07 -04:00
Brian Neumann-Fopiano a4fe527d65 Polish surface rivers: estuaries, ponds, erosion, sea caves
Surface rivers gain a drowned inlet at the mouth, a spring pond and an
inland terminal pond, a configurable erosion profile (thalweg fraction,
blend curve, bed noise, smoothing) and a per-area shore biome width;
banks lose freeboard and inset for a single sink. Underground courses
accept tributaries, coastal grottos can be admitted as standalone sea
caves, and a region or biome can confine the rivers born in it. Tile
planning forks its ring work through HydrologyForkJoin. Pack validation,
the schema, the probes and the tests follow.
2026-09-03 05:03:00 -04:00
Brian Neumann-Fopiano e92c0efe09 Keep native structures out of static object cells
Vanilla structure and feature placement now runs through the bounded
worldgen access with a protected-position predicate, so a jigsaw piece
or an imported feature can read a static object's blocks but never
overwrite them, and never schedules a tick or block entity there.
Dimensions without static objects keep the plain level as before.
2026-09-03 05:02:53 -04:00
Brian Neumann-Fopiano 0a791bb8bf Place static objects at absolute world coordinates
A dimension can now list staticObjects: an object key, a world position, a
fixed rotation and scale, block edits and an optional bore or smart bore.
The layer compiles once per dimension and stamps its blocks into every
newly generated chunk it covers, later entries winning overlaps. Pack
validation, the schema, the export closure and the object transforms
(origin-anchored scaling, tile rotation) cover the new fields.
2026-09-03 05:02:45 -04:00
Brian Neumann-Fopiano 0b543bf7ee Compat report, validation and commands
- Force-load every registrant and placement during pack validation and persist the findings with the Minecraft version in the validation cache
- Turn an excluded dimension into a blocking validation error and suppress content-key warnings the gate already reported
- Print the capped per-key listing after the validation lines on Bukkit and modded, ordered excluded, dropped, substituted
- Log one summary line per world engine from the published validation result
- Add /iris pack compat on Bukkit and modded with help and locale keys for every shipped language
2026-09-03 04:54:38 -04:00
Brian Neumann-Fopiano 0d464aabf3 Gate pools, placements and structures
- Filter excluded biomes, regions, spawners, loot tables, jigsaw pieces and structures out of every pool through CompatPools and cascade empty pools to the container
- Evaluate each object placement per object from the .iob palette header, honouring chance-1 edit rules and reporting every missing palette key
- Treat edit find lists and marker mark lists as match-only
- Exclude jigsaw pieces on missing palette keys, drop them from pools and exclude structures whose start pool is gone
- Drop custom biome spawns whose entity is missing before the datapack JSON is written
- Skip excluded placements in the object, floating object, tree and locator paths while keeping the per-chunk RNG draws unchanged
- Keep the engine focus biome and region null when the gate excluded them
2026-09-03 04:54:35 -04:00
Brian Neumann-Fopiano 516ef71c9c Version content gate core
- Add the ContentGate, CompatWalker, PackCompatReport and finding types under core.compat
- Resolve block keys through the live registry, the legacy rename table, dimension blockFallbacks and the entry backup on every platform
- Move the legacy rename table into LegacyBlockRenames so Bukkit and the mod loaders apply it identically
- Evaluate every registrant on load from IrisData.preprocessObject and store the verdict on IrisRegistrant
- Add IrisDimension.blockFallbacks as a plain object property
- Keep missing palette keys as MissingBlockState placeholders so a chance-1 edit rule can still rewrite them
- Guard the modded rotator, merger and face fixer against non-modded states
- Source the legacy potion effect aliases from the gate so the Bukkit-typed table stays unloaded on modded
2026-09-03 04:54:22 -04:00
Brian Neumann-Fopiano df34f328e7 Pregeneration throughput
A pregeneration now generates in multicore mode: the matter stage runs
on the calling thread so its mantle window fans out across the burst
pool while biome and terrain run alongside, components are claimed
through the in-flight map so overlapping windows join instead of
blocking, and each region's chunks are ordered in stride-4 lattices so
consecutive chunks never share a window. Hydrology tiles for the whole
area are planned ahead nearest the centre first on a dedicated planning
pool, and the ring around every needed tile stays planned as the front
moves. Height bounds at grid corners are shared between threads and
from planning into generation, the sole engine of a pack is answered
from a snapshot instead of the registry lock, composed chunk keys are
mixed, cached tiles are answered in place, the burst pool grows to two
workers per core for the run, and large chunk-worker pools admit up to
256 requests.
2026-09-02 13:56:58 -04:00
Brian Neumann-Fopiano 88bd8feeeb A hydrology tile that fails to plan generates without rivers
Planning failures used to escape into the chunk system and crash the
server. The tile cache now catches them, logs the failure in full and
publishes an empty tile so terrain keeps generating. A natural height
that is not finite is no longer memoized, and its error names the
region, biome, fluid height, overlay, every interpolator's bounds and
generator heights, and the cached and fresh values for the column.
2026-09-02 11:46:30 -04:00
Brian Neumann-Fopiano e63fd9c448 Describe the river placement, routing and grotto pool enums for the schema 2026-09-02 11:46:29 -04:00
Brian Neumann-Fopiano 1c577fc580 Fit the Bukkit artifact to VolmLib master
VolmLib master added remote language catalogs and TOML language tooling.
The TOML language editor and parser depend on the excluded config
package and nothing in Iris uses them, so they are excluded too, and the
artifact size budget rises to 7.5 MB for the shipped localization
classes.
2026-09-02 03:08:27 -04:00