Commit Graph
4931 Commits
Author SHA1 Message Date
Brian Neumann-Fopiano 1be563bd28 Unblock pregen throughput limiters
- Replace the pregen cache global monitor with atomic per-plate and per-region state and a lock-free resident-plate memo
- Serialize plate eviction and its disk write under the residency lock so a reloaded plate can never lose a concurrent bit
- Retry a chunk or region cache write whose plate was retired mid-write
- Delete SynchronizedCache and the isThreadSafe wrapper it existed for
- Replace the AsyncPregenMethod semaphore and permit monitor with PregenAdmissionGate, one condition that signals on release, adaptive-limit change and cancellation
- Attribute the adaptive and permit waits separately from the single gate wait
- Wait on a progress signal instead of sleeping 25ms in PregenMantleBackpressure, signalled by chunk completion
- Wait on a state signal instead of sleeping 50ms and 150ms in IrisPregenerator pause, heap pressure and tectonic reclaim loops
- Restore the burst pool parallelism when the last pregen job finishes
- Add PregenCacheConcurrencyTest, PregenAdmissionGateTest and PregenWaitPolicyContractTest
2026-09-08 04:33:31 -04:00
Brian Neumann-Fopiano e030ac3be5 Report silent pregen failures
- Add PregenDiagnostics.probeFailed so capability probes log their name, class and message at debug instead of vanishing
- Report the moonrise worker pool, mantle radius, engine access and Folia submit probe failures through that helper
- Report async pregen mantle cleanup failures through IrisLogging.reportError with the trace instead of dropping them
- Report a stranded plugin chunk ticket through IrisLogging.reportError so the leaked pin is visible
- Emit the chunk load failure trace before the metrics snapshot so a failing snapshot can no longer silence it
- Report the pregen cancellation and mantle handle probe failures in PregenMantleBackpressure
- Report the Medieval engine resolution probe failure
- Record the real Vector API initialization failure in SimdSupport and print the accurate kernel selection reason
- Add PregenDiagnosticsTest, PregenSilentFailureContractTest and SimdSupportStatusTest
2026-09-08 04:33:31 -04:00
Brian Neumann-Fopiano 9d22a18a3a Close route off the caller thread
- Complete the async route close on the worker executor so the cross-thread assertion no longer depends on whether the first stage finished before the handler was attached
2026-09-08 04:28:40 -04:00
Brian Neumann-Fopiano e5b7cb97a8 Anchor repository root probe
- Require the core source tree alongside the settings file when walking up for the repository root, so modded-common tests built inside a loader adapter no longer stop at that adapter's own settings file
2026-09-08 04:28:40 -04:00
Brian Neumann-Fopiano bdb13d1647 Fix cross-thread report assertion
- Assert the spawn failure report through the bound platform instead of a thread-confined static mock, so the report is seen whichever thread wins the reporting race
- Guard WorldEntitySpawnerLifecycleTest against a leaked platform binding
- Unbind the stub platform after the probe module's platform state test
2026-09-08 04:28:17 -04:00
Brian Neumann-Fopiano 42798c6340 Poll instead of sleeping
- Add the Await test helper that polls a condition every ten milliseconds under a bounded timeout
- Replace every Thread.sleep in the fourteen polling test classes with a condition wait, a latch wait or a bounded quiet window
- Keep the crash-consistency fsync interception in GenerationHistoryAdmissionTest and SavedBiomeStoreBatchTest on real barriers
2026-09-08 04:28:17 -04:00
Brian Neumann-Fopiano c75b0e01af Resolve test paths from code source
- Add the ProjectPaths test helper that derives the module root from the test class code source and the repository root from the settings file above it
- Replace the working-directory-relative source and resource literals in thirty-five test classes with module and repository lookups
- Drop the bespoke source-root walk in PregenMantleCleanupContractTest
2026-09-08 04:26:33 -04:00
Brian Neumann-Fopiano 03c645b66f Isolate platform binding
- Add the PlatformBinding rule that binds a mock platform for a class or method, unbinds on teardown and restores the previous binding
- Add the PlatformLeakGuard rule that fails a class when a platform is still bound or a service is still registered at class start or end
- Add IrisRuntimeState so the guard reads the registered services without adding a test-only method to the SPI
- Replace the inline mock-platform setup and teardown of twenty test classes with the rule
- Guard the remaining sixty-four platform and service touching core test classes
- Rename the pack-compat pool fixtures to PackCompatFixtures so the two CompatFixtures names cannot collide
- Scope BukkitTestServer branding to a ServerBranding rule that restores the shared mock after each test
2026-09-08 04:22:49 -04:00
Brian Neumann-Fopiano c332c86849 Relax test fsync
- Add Durability, a process-wide fsync policy defaulting to real barriers and switchable to relaxed through the iris.durability system property
- Route the history, studio, journal, structure and datapack fsync barriers through Durability so relaxed mode skips both the force and the channel open
- Add the DurabilityMode test rule and enable relaxed durability on the twenty slowest core stores tests
- Split GenerationHistoryTest into epoch, legacy adoption and recovery classes over a shared GenerationHistorySupport base
2026-09-08 04:18:01 -04:00
Brian Neumann-Fopiano c75cfd387e Retire source-text tests
- Delete 22 test classes whose assertions only read production .java text and check call ordering or literal presence
- Remove 77 source-text assertion methods from 34 test classes that keep real behavioural coverage
- Replace the core process-stream source grep with an ASM gate over compiled core classes in CoreProcessStreamPurityGateTest
- Replace the packs-root source grep in PacksFolderContractTest with an ASM call-site gate over compiled core classes
- Replace the IrisData registered-root regex in PackTypeBukkitPurityGateTest with an ASM scan of the registerLoader class constants
- Trim six mixed tests down to their behavioural assertions and drop their source-text tails
- Drop the eight iris.*Source and three iris.moddedCommonSources test system properties now that nothing reads them
2026-09-08 04:01:33 -04:00
Brian Neumann-Fopiano 7841efed54 Run modded and buildSrc tests
- Add a root moddedTest that runs adapters/modded-common through the Fabric build
- Make check depend on moddedTest, ordered ahead of the loader jars
- Gate the buildSrc jar on the buildSrc tests so they stop being skipped
- Drop an unreachable classpath guard from SchemaBuilderPlatformIsolationTest
2026-09-08 03:41:15 -04:00
Brian Neumann-Fopiano 89dc5d0447 Drop execution-time project access
- Delete stale jars through an injected FileSystemOperations in the root build
- Delete stale loader jars through an injected FileSystemOperations in each adapter
- Resolve stale-jar file trees and copy sources at configuration time
- Expand the loader metadata templates from the configured version string
2026-09-08 03:41:03 -04:00
Brian Neumann-Fopiano 5c84c6b8d8 Derive modded bukkit baseline
- Read the modded bukkit-supertype baseline from core/purity-allowlist.txt
- Match nested classes against their top-level source entry
- Exempt VolmLib classes, which Iris' core ratchet does not govern
- Delete the hand-frozen knownBukkitSupertypeClasses inventory
2026-09-08 03:40:51 -04:00
Brian Neumann-Fopiano 0bdacc6fed Restore modded jar incrementality
- Drop outputs.upToDateWhen and outputs.cacheIf from the loader jar Exec tasks
- Declare lombok.config, core/agent and both revision scripts as modded inputs
2026-09-08 03:40:40 -04:00
Brian Neumann-Fopiano 6e3e1f3c64 Single relocation declaration
- Add gradle/runtime-relocations.gradle as the one runtime-download relocation map
- Read the slimJar relocations and shrinkRelocations from that map
- Pass the derived relocation prefixes into BukkitArtifactVerifier
- Drop the duplicate jar size check the packaging audit already enforces
2026-09-08 03:40:29 -04:00
Brian Neumann-Fopiano c83d6964f1 Gate mavenLocal behind property
- Stop mavenLocal shadowing every remote repository in allprojects
- Add -PuseMavenLocal, on by default only when the composite VolmLib is disabled
2026-09-08 03:40:15 -04:00
Brian Neumann-Fopiano b225c0b5be Ratchet net.minecraft purity
- Add minecraftPurityRatchet over core/minecraft-purity-allowlist.txt, wired into check
- Register both purity ratchets from one closure instead of duplicating the scan
- Prune WorldCreationProgressReporter from core/purity-allowlist.txt
2026-09-08 03:39:43 -04:00
Brian Neumann-Fopiano 1913baed17 Baseline Oraxen provider
- Add the Bukkit-only Oraxen data provider to the known Bukkit-supertype set so the modded artifact verifiers accept it like the ItemsAdder provider
2026-09-08 03:02:23 -04:00
Brian Neumann-Fopiano 031d4ade2c Wire Iris jar shrink
- Wire the ProGuard shrink pass into the Bukkit artifact with the core, Bukkit plugin and NMS compile classpaths as library jars
- Map the fourteen SlimJar relocations so runtime-downloaded libraries resolve under their relocated names
- Add packaging/shrink.pro keeping the public API, Iris events, platform SPI, VolmLib integration contract and Bukkit event handler lists
- Lower maximumBukkitArtifactBytes to 7,600,000 so verifyBukkitArtifact enforces the same budget as the packaging gate
- Build VolmitSender.name() from the sender name instead of the relocated CommandSender.name() reference, which cannot resolve on Paper 26.2
2026-09-07 23:28:48 -04:00
Brian Neumann-Fopiano 9b9ca8de34 Unlatch platform block states
- Replaced the nine static final PlatformBlockState fields in IrisDimensionStackActuator, IrisTerrainNormalActuator, IrisPerfectionModifier, IrisPostModifier, IrisBiomeLayerGenerator, BiomeBuffetGenerator, ChunkDataHunkHolder and EngineMantle with BoundBlockState holders that re-resolve when a different platform binds, costing one volatile read of the cached binding, one of the bound platform and a reference compare per read
- Turned the IrisPerfectionModifier ore-hiding table into a Map of BoundBlockState so the four base states follow the bound platform instead of the first one loaded
- Kept the last resolution in BoundBlockState while nothing is bound so in-flight generation on an unbinding server reads the same states it did before, matching what B.registries already does
- Added IrisPlatforms.getOrNull so the block-state holders read the binding once without an exception on a bare JVM
- Added PlatformStateRebindTest, which fails on the old code: it binds two mock platforms in turn and asserts ChunkDataHunkHolder and EngineMantle serve the second one, and rejects any static PlatformBlockState field left on the converted classes
- Indexed the .iob write palette by key so palette lookup is a hash probe rather than a scan of the palette list, cutting the 32767-state IrisObjectIoWriteLimitsTest from 4.9s to 0.7s while writing byte-identical files
- Built the palette once per write instead of once in validateWritable and again in the writer, and shared it between the plain and progress-reporting write paths
- Added IrisObjectIoPaletteTest, which pins the SHA-256 of a 30000-block, 3011-state object written by the previous implementation and asserts the palette keeps first-seen insertion order
- Added BukkitTestServer, a single mock Bukkit server installed once per JVM under a lock, stubbing logger, name, version, plugin manager and both createBlockData overloads, and failing loudly if the install does not take
- Moved IrisRuntimeSchedulerModeRoutingTest, WorldRuntimeControlServiceTimeLockTest, PreObjectMatterTest, CNGInjectorParityTest, BukkitSpiConformanceTest, MantleWriterPreObjectJournalTest, IrisFloatingChildBiomesCarvingResolutionTest and IrisDimensionCarvingResolverParityTest onto it, so whichever class runs first no longer decides whether createBlockData or getPluginManager is stubbed
- Extracted the KeyedBlockState test double out of IrisObjectIoWriteLimitsTest so the palette test can reuse it
- Replaced the IrisServices.clear() teardowns in nine test classes with a targeted remove of the PreservationRegistry each one registers, so a teardown no longer wipes a binding it did not install
- Registered a PreservationRegistry in PackDownloaderTest and StudioSVCWorldPackPublishTest, which reach IrisData.get and openRuntime and were silently getting loaderless IrisData whenever no other class had leaked one
2026-09-07 19:59:22 -04:00
Brian Neumann-Fopiano 266fe0d71c Faster green test suite
- Removed the core processResources skip that fired on test-only invocations, which packaged a core jar with no generation kernel catalog and made all 10 probe and bukkit-plugin tests that reach GenerationKernelRegistry fail on every ./gradlew test
- Set maxParallelForks on :core:test to half the available processors, overridable with -PtestForks, and left the small modules single-forked so they do not re-pay the Minecraft bootstrap per fork or steal worker leases from core
- Resolved B.registries() per bound platform instead of latching the first one for the JVM lifetime, keeping the previous unbound behaviour, so a test that binds its own platform no longer reads a foreign platform's block states
- Resolved IrisObject.States per bound platform through accessors instead of static finals fixed at class-init, removing the NoClassDefFoundError and null material-key failures that appeared whenever class partitioning changed
- Bound an explicit platform in EngineMantleCoverageTest and IrisDimensionStackActuatorMetadataTest so they no longer depend on another class leaking a binding first
- Gated BukkitSpiConformanceTest registry probes on a live RegistryAccess and restored the IrisPlatforms binding it leaked, which was silently swallowing the stderr two SettingsHotloadWatchTest assertions read
- Initialised org.bukkit.Registry and Biome inside the RegistryAccess mock scope in ObjectStudioGeometryTest so Mockito no longer instruments Registry mid-clinit
- Replaced the SettingsHotloadWatchTest fixed 1200ms diagnostic window with a 10ms condition poll bounded at 4s
- Replaced the IrisCaveCarver3DNearParityTest wall-clock speedup benchmark with a deterministic density-sample count, cutting 28 carves to 2
- Cut HydrologyPlannerTest cold-owner parity from 12 tile plans to 4 and shared the immutable baseline plan across the early-owner tests
- Built one prototype project or staged history per class in the jigsaw studio and world replacement tests and copied it per test, replacing repeated fsync-bound fixture construction
- Replaced Mockito block-state fixtures with concrete implementations in the object IO, deposit modifier and nearest-block-index tests, removing about 2.5 million interceptions
- Replaced Thread.sleep with bounded condition polling in HydrologyTileCacheTest
- Deleted 19 test classes and 60 further test methods that asserted on production .java source text rather than behaviour, and removed the 19 now-unread iris.*Source system properties that fed them
2026-09-07 19:59:22 -04:00
Brian Neumann-Fopiano d3245aa1c2 IA Fixes
- Thsi fixes an integration between Itemsadder and Oraxen.
- Waiting on oraxen folks
2026-09-07 19:22:59 -04:00
Brian Neumann-Fopiano 894cef73a6 Studio fixes.
- Fixes the Object and Jigsaw studio errors from the coretapper i made.
2026-09-07 15:23:25 -04:00
Brian Neumann-Fopiano 0dcd1900be Improved world generation
- Terrain and cave scans skip repeated work
- River and structure lookups reuse cached results
- Chunk history saves share disk writes
- History lookups continue during disk writes
- Failed saves retain their original errors
- Deposit failures stop incomplete chunks
- Tests check output and save safety
2026-09-07 03:17:09 -04:00
Brian Neumann-Fopiano 151677f92f Improved pregen persistence
- Saved biome records use one durable append with shorter lock ownership
- Terrain receipts buffer field writes before compression
- Native cache retirement follows the current index
- Server shutdown drains native chunk tasks before world close
- Shutdown flushes retain native save ownership
- Regression coverage checks persistence and shutdown races
2026-09-06 18:27:51 -04:00
Brian Neumann-Fopiano 083e689864 Drained pregen before shutdown
- Server shutdown advances native chunk tasks while waiting for pregeneration
- Native world close owns chunk saves during server shutdown
- Pending plugin flushes stop waiting when native shutdown begins
- Late eviction completion cannot schedule another shutdown flush
- Regression tests cover owner waits and shutdown save ownership
2026-09-06 18:20:26 -04:00
Brian Neumann-Fopiano 319f8aed47 Added native chunk draining
- Native chunk queues can advance on their owning server thread
- Folia and foreign threads cannot run global chunk promotion
2026-09-06 18:13:57 -04:00
Brian Neumann-Fopiano 0324b0c467 Added native chunk pumping
- Add target-world native chunk task polling
- Guard server lifecycle ownership and skip Folia polling
- Cover native queue delegation and ownership guards
2026-09-06 18:13:36 -04:00
Brian Neumann-Fopiano 88008a7fd2 Corrected native cache retirement
- Invalidated volume indexes receive runtime retirement callbacks
- Retired builds cannot republish results after cache eviction
2026-09-06 17:55:45 -04:00
Brian Neumann-Fopiano c8fa5d9d8b Fixed native cache retirement
- Transferred retirement listeners when replacing native structure indexes.
- Prevented retired in-flight builds from repopulating origin and query caches.
- Added deterministic invalidation and eviction regression tests.
2026-09-06 17:55:25 -04:00
Brian Neumann-Fopiano bbf14a7967 Reduced biome persistence overhead
- Biome encoding runs outside the region write lock
- Appends use one framed write before durable publication
- Concurrent claims preserve conflict checks and rollback behavior
2026-09-06 17:44:38 -04:00
Brian Neumann-Fopiano b4440463a5 Reduced saved biome writes
- Saved biome encoding runs outside region locks
- Claims recheck stored content before appending
- Record framing uses one write with unchanged bytes
- Tests cover durable publication, rollback and concurrent pruning
2026-09-06 17:43:28 -04:00
Brian Neumann-Fopiano 04103bd15a Fixed pregen shutdown scheduling
- Scheduler admission avoids the plugin manager monitor
- Saving callbacks no longer block the joined pregenerator during disable
2026-09-06 17:41:40 -04:00
Brian Neumann-Fopiano bb967a673e Buffered terrain receipt encoding
- Native terrain receipts batch compressor input
- Receipt format and geometry remain unchanged
2026-09-06 17:41:40 -04:00
Brian Neumann-Fopiano 634e6ffe57 Buffered native terrain receipts
- Terrain fields reach the compressor in buffered batches
- Receipt bytes and decoded natural geometry retain their current format
- Binary contract coverage includes complete and boundary columns
2026-09-06 17:41:38 -04:00
Brian Neumann-Fopiano be621c0074 Fixed pregenerator shutdown lock
- Scheduler admission reads the hosted plugin state without taking the plugin manager monitor
- Shutdown regression joins a worker already dispatching a saving event
- Event tests preserve normal delivery and full failure reporting during scheduler rejection
2026-09-06 17:37:48 -04:00
Brian Neumann-Fopiano 2415825bb7 Unblocked generation stage reads
- Generation stages read immutable metadata without waiting for semantic journal flushes
- Durable claims and activation cutovers retain their synchronization
- Regression tests cover admission contention, publication ordering, and failure cleanup
2026-09-06 16:31:02 -04:00
Brian Neumann-Fopiano 364d127658 Unblocked generation metadata reads
- Opened generation stages independently of semantic journal flushes
- Preserved durable claim publication and cutover ordering
- Added concurrency and failure regression coverage
2026-09-06 16:24:12 -04:00
Brian Neumann-Fopiano 48a81a3d2c Unblocked history stage admission
- Generation stages read coherent metadata from the immutable store manifest
- Stage admission proceeds while unrelated semantic journal flushes hold the history monitor
- Concurrency tests preserve durable publication, cutover ordering, and failed admission cleanup
2026-09-06 16:22:24 -04:00
Brian Neumann-Fopiano 763f9df2c2 Refreshed pregeneration runtime
- Generation router reads avoid the attachment monitor after publication
- Desktop pregeneration uses a proportional map with distinct controls and metrics
- Preview updates remain bounded through large targets and window state changes
- Pause controls stay bound to their owning job
- Startup failures retain a readable error window
- Bundled language catalogs cover the revised window
2026-09-06 14:48:37 -04:00
Brian Neumann-Fopiano 21d6c2c9f9 Corrected pending time estimates
- Preview shows Pending while remaining chunks have no time estimate
2026-09-06 14:43:22 -04:00
Brian Neumann-Fopiano 28c715ff51 Redesigned pregeneration map
- Desktop pregeneration uses a proportional map with labeled controls and metrics
- Pixel updates remain bounded across large targets and minimized windows
- Preview lifecycle keeps pause controls attached to their owning job
- Bundled language catalogs include the revised desktop labels
2026-09-06 14:36:32 -04:00
Brian Neumann-Fopiano e2761af959 Redesigned pregeneration map
- Native window separates map content from progress and resource status
- Pause controls stay bound to their job through shutdown and replacement
- Inclusive map bounds and fixed raster buffers preserve edge updates without idle repaints
- Minimized windows retain bounded status updates while skipping terrain reads
- Startup failures retain a readable error view after background work stops
- All bundled locales include the new controls and metric labels
- Regression tests cover map edges, coalescing, snapshots, and control ownership
2026-09-06 14:36:09 -04:00
Brian Neumann-Fopiano 95323150c0 Reduced coordinate routing contention
- Published router reads bypass the attachment monitor

- Detached routing retains synchronized validation

- Concurrent reads retain coordinate and lifecycle checks
2026-09-06 14:21:54 -04:00
Brian Neumann-Fopiano eb43cc44fa Reduced coordinate routing contention
- Published history router reads bypass the attachment monitor
- Missing router reads retain synchronized attachment and detach checks
- Concurrent tests cover published reads and pending lifecycle changes
2026-09-06 14:21:07 -04:00
Brian Neumann-Fopiano bfaacb4d38 Improved generation runtime stability
- Generation admission reduces contention while preserving cutover priority
- Native POI changes survive generation during server shutdown
- Chunk ownership and retained POI tickets are covered by regression tests
2026-09-06 13:52:07 -04:00
Brian Neumann-Fopiano af42c69824 Preserved native POI ownership
- Native structure placement records pending POI repairs before block changes
- Chunk loads reconcile affected sections on their owning thread
- Matching POI records retain occupied tickets across repair
- Native capability checks preserve supported version behavior
2026-09-06 13:34:50 -04:00
Brian Neumann-Fopiano a28614c04e Fixed native POI ownership
- Native structure POI changes persist dirty chunk sections before deferred updates
- Chunk load reconciles final POI states on the owning thread
- Matching POI records retain claimed tickets
- Native flag detection keeps unsupported server behavior intact
- Regression tests cover persistence and failed repair retries
2026-09-06 13:34:30 -04:00
Brian Neumann-Fopiano 0d2e8a45ff Reduced admission lock contention
- Stage admission avoids FIFO metadata lock handoffs
- Cutover priority and runtime retirement retain their existing checks
2026-09-06 13:16:16 -04:00
Brian Neumann-Fopiano 34c2e4e560 Reduced admission lock contention
- Generation admission uses nonfair metadata lock handoffs
- Waiting cutovers retain priority over later generation stages
- Concurrent stage tests verify cutover drain and runtime retirement
2026-09-06 13:07:52 -04:00