60\. AI Prompt Pack — Local Model Workflow for Each Build Step

Date added: 05 June 2026

Purpose:  
This section gives copy-and-paste prompts for local AI development using Qwen3.5-9B as the main coding worker and Qwen3.6-27B as the planner, reviewer, debugger, and architecture guard.

Model usage rule:

\- Use Qwen3.5-9B for small, isolated implementation tasks.  
\- Use Qwen3.6-27B for architecture decisions, reviewing several files at once, diagnosing difficult errors, and checking that the code still follows the design.  
\- Do not ask Qwen3.5-9B to build broad systems.  
\- Do not waste Qwen3.6-27B on tiny one-class tasks unless Qwen3.5-9B fails twice.

General 9B worker prompt template:

Use this when asking Qwen3.5-9B to create or edit one file.

MODEL: Qwen3.5-9B

PROMPT:  
You are implementing one small Java task for a Minecraft NeoForge mod called Living World.

Important project rules:  
\- Core simulation code must be plain Java wherever possible.  
\- Do not import Minecraft or NeoForge classes unless this specific task says to.  
\- Do not create extra systems beyond the task.  
\- Keep the code small and testable.  
\- Follow the package path exactly.  
\- Use clear names.  
\- Add validation where requested.  
\- If tests are requested, write the tests too.

Task:  
\[PASTE TASK HERE\]

Output required:  
1\. Brief explanation of what files you will create or edit.  
2\. Full code for each file.  
3\. Any test code required.  
4\. Notes about assumptions.

Do not skip requirements.  
Do not add unrelated features.

General 27B architect/reviewer prompt template:

Use this when asking Qwen3.6-27B to review multiple files, fix design drift, or plan the next batch.

MODEL: Qwen3.6-27B

PROMPT:  
You are the senior architect reviewing the Living World Minecraft NeoForge mod.

Project direction:  
This is an ecosystem-only world evolution mod. It does not simulate villagers, NPC civilisations, settlements, factions, wars, trade, roads, or wildlife AI.

Architecture rules:  
\- Core simulation must remain plain Java where possible.  
\- Minecraft and NeoForge code must stay in platform or integration packages.  
\- Regions are the main simulation unit, not chunks.  
\- Modules must communicate through services, events, or public data contracts.  
\- Save data must be versioned.  
\- Debug and tests are mandatory.

Review these files:  
\[PASTE FILES OR SUMMARIES\]

Check for:  
1\. Incorrect Minecraft/NeoForge imports in core classes.  
2\. Scope creep into NPCs, factions, roads, or settlements.  
3\. Broken package boundaries.  
4\. Missing validation.  
5\. Bad lifecycle handling.  
6\. Save/versioning issues.  
7\. Test gaps.  
8\. Overly broad or fragile code.

Output required:  
1\. Pass/fail summary.  
2\. Specific problems by file.  
3\. Exact fixes.  
4\. Revised code only where necessary.  
5\. Recommended next task.

61\. Milestone 1 AI Prompts — Project Skeleton

Task 1.1 prompt — Create base mod package

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/LivingWorldMod.java for a Minecraft NeoForge mod called Living World.

Requirements:  
\- Package: com.livingworld  
\- Class name: LivingWorldMod  
\- Define public static final String MOD\_ID using LivingWorldConstants.MOD\_ID if that class already exists. If it does not exist yet, temporarily define MOD\_ID \= "livingworld" and add a TODO to replace it after constants are created.  
\- This class must contain only entrypoint wiring.  
\- It must not contain simulation logic.  
\- It must log a startup message.  
\- It must delegate startup work to com.livingworld.bootstrap.LivingWorldBootstrap if available.  
\- If NeoForge annotations/imports are needed, keep them only in this entrypoint file.

Output:  
\- Full Java file.  
\- Any assumptions about the NeoForge version.  
\- Do not create unrelated classes.

Task 1.2 prompt — Create bootstrap class

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/bootstrap/LivingWorldBootstrap.java.

Requirements:  
\- Package: com.livingworld.bootstrap  
\- Class name: LivingWorldBootstrap  
\- Methods:  
  \- void initialize()  
  \- void onCommonSetup()  
  \- void onServerStarting()  
  \- void onServerStarted()  
  \- void onServerStopping()  
\- Each method should log its lifecycle stage.  
\- Use LivingWorldLogger if available. If not available yet, use a minimal temporary logger comment and no System.out.  
\- Do not add gameplay logic.  
\- Do not create region, ecosystem, or persistence systems yet.

Output:  
\- Full Java file.  
\- Short explanation of where it should be called from.

Task 1.3 prompt — Create package placeholders

MODEL: Qwen3.5-9B

PROMPT:  
Create the package placeholder structure for the Living World mod.

Packages:  
\- com.livingworld.api  
\- com.livingworld.bootstrap  
\- com.livingworld.config  
\- com.livingworld.core  
\- com.livingworld.core.lifecycle  
\- com.livingworld.core.registry  
\- com.livingworld.core.services  
\- com.livingworld.core.simulation  
\- com.livingworld.data  
\- com.livingworld.data.saved  
\- com.livingworld.data.migration  
\- com.livingworld.data.serialization  
\- com.livingworld.events  
\- com.livingworld.regions  
\- com.livingworld.regions.cache  
\- com.livingworld.regions.query  
\- com.livingworld.commands  
\- com.livingworld.debug  
\- com.livingworld.networking  
\- com.livingworld.platform  
\- com.livingworld.platform.neoforge  
\- com.livingworld.integration.minecraft  
\- com.livingworld.modules  
\- com.livingworld.modules.ecosystem  
\- com.livingworld.modules.soil  
\- com.livingworld.modules.water  
\- com.livingworld.modules.pollution  
\- com.livingworld.modules.vegetation  
\- com.livingworld.modules.resources  
\- com.livingworld.modules.recovery  
\- com.livingworld.modules.worldeffects  
\- com.livingworld.testing

If Java requires at least one file per package in this project setup, create a package-info.java file with a one-line comment for each package.

Do not add implementation logic.

Task 1.4 prompt — Create constants

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/LivingWorldConstants.java.

Requirements:  
\- Package: com.livingworld.core  
\- Final utility class.  
\- Private constructor.  
\- Constants:  
  \- public static final String MOD\_ID \= "livingworld";  
  \- public static final String MOD\_NAME \= "Living World";  
  \- public static final int CURRENT\_CORE\_SCHEMA\_VERSION \= 1;  
  \- public static final int DEFAULT\_REGION\_SIZE\_CHUNKS \= 8;  
  \- public static final int DEFAULT\_SIMULATION\_INTERVAL\_TICKS \= 100;  
\- Do not import Minecraft or NeoForge classes.  
\- Add short comments explaining each constant.

Output:  
\- Full Java file.

Milestone 1 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the completed Milestone 1 project skeleton for the Living World ecosystem mod.

Files to review:  
\[LivingWorldMod.java, LivingWorldBootstrap.java, LivingWorldConstants.java, and package list]

Check:  
\- Entrypoint contains no simulation logic.  
\- Bootstrap owns startup flow.  
\- Constants are centralised.  
\- No ecosystem/NPC/settlement/faction systems were added early.  
\- Minecraft/NeoForge imports are restricted to entrypoint or platform boundary.

Output:  
\- Pass/fail.  
\- Required fixes.  
\- Next safe milestone.

62\. Milestone 2 AI Prompts — Logging and Diagnostics

Task 2.1 prompt — Create logger wrapper

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/debug/LivingWorldLogger.java.

Requirements:  
\- Package: com.livingworld.debug  
\- Class name: LivingWorldLogger  
\- Provide static methods:  
  \- info(String message)  
  \- warn(String message)  
  \- error(String message)  
  \- error(String message, Throwable throwable)  
  \- debug(String message)  
  \- info(DiagnosticCategory category, String message)  
  \- warn(DiagnosticCategory category, String message)  
  \- error(DiagnosticCategory category, String message)  
  \- debug(DiagnosticCategory category, String message)  
\- Use a standard logger appropriate for the mod environment if available.  
\- Do not use System.out.  
\- If debug config does not exist yet, allow debug messages for now and add a TODO to wire config later.  
\- Do not import ecosystem module classes.

Output:  
\- Full Java file.

Task 2.2 prompt — Create diagnostic category enum

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/debug/DiagnosticCategory.java.

Requirements:  
\- Package: com.livingworld.debug  
\- Enum values:  
  \- BOOTSTRAP  
  \- CONFIG  
  \- REGIONS  
  \- SIMULATION  
  \- PERSISTENCE  
  \- EVENTS  
  \- MODULES  
  \- COMMANDS  
  \- NETWORKING  
  \- PLATFORM  
  \- ECOSYSTEM  
  \- TESTING  
\- Add a method displayName() that returns a readable name.  
\- Do not import Minecraft or NeoForge classes.

Output:  
\- Full Java enum.

Milestone 2 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the logging and diagnostics foundation.

Files:  
\[PASTE LivingWorldLogger.java and DiagnosticCategory.java\]

Check:  
\- No System.out usage.  
\- Logger methods are consistent.  
\- Categories match the ecosystem-only architecture.  
\- No unnecessary Minecraft imports.  
\- Debug behaviour can later connect to config.

Output:  
\- Problems found.  
\- Recommended fixes.  
\- Whether Milestone 3 can begin.

63\. Milestone 3 AI Prompts — Configuration Foundation

Task 3.1 prompt — Create SimulationConfig

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/config/SimulationConfig.java.

Requirements:  
\- Plain Java class.  
\- Fields:  
  \- int regionSizeChunks \= 8  
  \- int simulationIntervalTicks \= 100  
  \- int maxRegionsPerCycle \= 50  
  \- int maxMillisecondsPerCycle \= 25  
  \- int emergencyStopMilliseconds \= 40  
  \- boolean enableDebugCommands \= true  
  \- boolean enableProfiler \= true  
\- Add getters.  
\- Add setters only if needed for tests.  
\- Add validate() method.  
\- Validation rules:  
  \- regionSizeChunks \>= 1  
  \- simulationIntervalTicks \>= 1  
  \- maxRegionsPerCycle \>= 1  
  \- maxMillisecondsPerCycle \>= 1  
  \- emergencyStopMilliseconds \>= maxMillisecondsPerCycle  
\- Throw IllegalArgumentException with clear messages on invalid values.  
\- Do not import Minecraft or NeoForge classes.

Output:  
\- Full Java file.  
\- Basic test suggestions.

Task 3.2 prompt — Create ConfigService interface

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/services/ConfigService.java.

Requirements:  
\- Interface.  
\- Methods:  
  \- SimulationConfig getSimulationConfig()  
  \- void reload()  
  \- void validate()  
\- Import SimulationConfig from com.livingworld.config.  
\- Do not reference NeoForge config APIs here.

Output:  
\- Full Java interface.

Task 3.3 prompt — Create DefaultConfigService

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/config/DefaultConfigService.java.

Requirements:  
\- Implements ConfigService.  
\- Holds a SimulationConfig instance.  
\- Constructor creates default SimulationConfig and validates it.  
\- getSimulationConfig returns the config.  
\- reload can be a safe placeholder for now, but it must revalidate.  
\- validate delegates to SimulationConfig.validate().  
\- Log validation success using LivingWorldLogger if available.  
\- Do not use NeoForge config classes yet.

Output:  
\- Full Java file.

Milestone 3 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the configuration foundation for the Living World ecosystem mod.

Files:  
\[PASTE SimulationConfig.java, ConfigService.java, DefaultConfigService.java\]

Check:  
\- Config is plain Java.  
\- Validation is strict and clear.  
\- No direct NeoForge dependency yet.  
\- Defaults match the design document.  
\- Future Forge/NeoForge config wiring can be added without rewriting core code.

Output:  
\- Pass/fail.  
\- Required fixes.  
\- Any missing config values for ecosystem-only MVP.

64\. Milestone 4 AI Prompts — Core Service Registry

Task 4.1 prompt — Create ServiceKey

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/services/ServiceKey.java.

Requirements:  
\- Generic immutable value object.  
\- Prefer Java record if project Java version supports it.  
\- Fields:  
  \- String id  
  \- Class\<T\> serviceType  
\- Validate id is not null or blank.  
\- Validate serviceType is not null.  
\- Add stable toString().  
\- Do not import Minecraft or NeoForge classes.

Output:  
\- Full Java file.

Task 4.2 prompt — Create ServiceRegistry

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/services/ServiceRegistry.java.

Requirements:  
\- Plain Java class.  
\- Internally store services by ServiceKey.  
\- Methods:  
  \- \<T\> void register(ServiceKey\<T\> key, T service)  
  \- \<T\> T get(ServiceKey\<T\> key)  
  \- \<T\> Optional\<T\> find(ServiceKey\<T\> key)  
  \- boolean isRegistered(ServiceKey\<?\> key)  
  \- void lock()  
  \- boolean isLocked()  
\- Reject duplicate registrations.  
\- Reject null keys and null services.  
\- If locked, reject new registrations.  
\- Missing get() should throw clear IllegalStateException.  
\- No Minecraft imports.

Output:  
\- Full Java file.  
\- Suggested unit tests.

Task 4.3 prompt — Create CoreServices

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/services/CoreServices.java.

Requirements:  
\- Final utility class with private constructor.  
\- Define ServiceKey constants for:  
  \- CONFIG  
  \- REGIONS  
  \- SIMULATION  
  \- PERSISTENCE  
  \- EVENTS  
  \- MODULES  
  \- TIME  
  \- DEBUG  
  \- HISTORY  
\- If some service interfaces do not exist yet, add TODO comments and create keys only for existing interfaces, or use Object temporarily with clear TODOs.  
\- Do not create fake gameplay services.  
\- No Minecraft imports.

Output:  
\- Full Java file.  
\- Note any TODOs caused by missing interfaces.

Milestone 4 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the core service registry.

Files:  
\[ServiceKey.java, ServiceRegistry.java, CoreServices.java\]

Check:  
\- Type safety is acceptable.  
\- Registry cannot be mutated after lock.  
\- Errors are clear.  
\- No hidden global state problems.  
\- No Minecraft imports.  
\- Design is suitable for module dependency injection later.

Output:  
\- Pass/fail.  
\- Fixes.  
\- Risk notes.

65\. Milestone 5 AI Prompts — Region Identity

Task 5.1 prompt — Create RegionCoordinate

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionCoordinate.java.

Requirements:  
\- Java record if available.  
\- Fields:  
  \- String dimensionId  
  \- int x  
  \- int z  
\- Validate dimensionId is not null or blank.  
\- Static methods:  
  \- fromChunk(String dimensionId, int chunkX, int chunkZ, int regionSizeChunks)  
  \- fromBlock(String dimensionId, int blockX, int blockZ, int regionSizeChunks)  
\- Instance methods:  
  \- int minChunkX(int regionSizeChunks)  
  \- int minChunkZ(int regionSizeChunks)  
  \- int maxChunkX(int regionSizeChunks)  
  \- int maxChunkZ(int regionSizeChunks)  
  \- int centerBlockX(int regionSizeChunks)  
  \- int centerBlockZ(int regionSizeChunks)  
  \- String stableId()  
\- Use Math.floorDiv so negative coordinates work correctly.  
\- Validate regionSizeChunks \>= 1\.  
\- Do not import Minecraft classes.

Test requirements:  
Create RegionCoordinateTest if test framework exists.  
Test:  
\- block 0,0 maps to region 0,0  
\- block 127,127 maps to region 0,0 with region size 8 chunks  
\- block 128,0 maps to region 1,0  
\- block \-1,0 maps to region \-1,0  
\- block \-128,0 maps to region \-1,0  
\- block \-129,0 maps to region \-2,0  
\- stableId is stable  
\- works as HashMap key

Output:  
\- Full Java file.  
\- Full test file if possible.

Task 5.2 prompt — Create RegionLifecycleState

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionLifecycleState.java.

Requirements:  
\- Enum values:  
  \- UNLOADED  
  \- LOADING  
  \- ACTIVE  
  \- DIRTY  
  \- SAVING  
  \- FAILED  
  \- UNLOADING  
\- Add comments explaining each state.  
\- Do not add methods unless useful.  
\- No Minecraft imports.

Output:  
\- Full Java enum.

Task 5.3 prompt — Create RegionFlags

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionFlags.java.

Requirements:  
\- Plain Java class.  
\- Fields:  
  \- boolean hasPlayerActivity  
  \- boolean hasHighPollution  
  \- boolean hasLowSoilQuality  
  \- boolean hasActiveEcosystemEvent  
  \- boolean forceLoadedBySimulation  
  \- boolean corrupted  
\- Do not include settlement, road, faction, or NPC flags.  
\- Add getters and setters.  
\- Add copy().  
\- Add clearTransientFlags(). This should clear hasPlayerActivity and hasActiveEcosystemEvent, but not corrupted.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Milestone 5 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review region identity classes.

Files:  
\[RegionCoordinate.java, RegionLifecycleState.java, RegionFlags.java, and tests\]

Check:  
\- Negative coordinate math is correct.  
\- No Minecraft classes leaked into region core.  
\- Flags match ecosystem-only scope.  
\- RegionCoordinate is safe as a HashMap key.  
\- Tests cover edge cases.

Output:  
\- Pass/fail.  
\- Exact fixes if needed.

66\. Milestone 6 AI Prompts — Region Core Data

Task 6.1 prompt — Create RegionMetrics

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionMetrics.java.

Requirements:  
\- Plain Java class.  
\- Ecosystem-only fields:  
  \- double ecosystemHealth  
  \- double pollutionScore  
  \- double soilQuality  
  \- double waterQuality  
  \- double vegetationPressure  
  \- double resourceDepletion  
  \- double recoveryPressure  
\- Values should normally be clamped between 0 and 100\.  
\- Add normalize().  
\- Add copy().  
\- Add static defaults().  
\- Defaults:  
  \- ecosystemHealth \= 60  
  \- pollutionScore \= 0  
  \- soilQuality \= 60  
  \- waterQuality \= 60  
  \- vegetationPressure \= 50  
  \- resourceDepletion \= 0  
  \- recoveryPressure \= 50  
\- Add applyDelta methods if simple and clean.  
\- No Minecraft imports.

Output:  
\- Full Java file.  
\- Suggested tests.

Task 6.2 prompt — Create RegionModuleData

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionModuleData.java.

Requirements:  
\- Stores module-specific data by module ID.  
\- Field:  
  \- Map\<String, Object\> moduleData  
\- Methods:  
  \- void put(String moduleId, Object data)  
  \- \<T\> Optional\<T\> get(String moduleId, Class\<T\> type)  
  \- boolean contains(String moduleId)  
  \- Set\<String\> moduleIds()  
  \- RegionModuleData copyShallow()  
\- Validate moduleId is not null or blank.  
\- Reject null data.  
\- If get type does not match, return Optional.empty instead of throwing.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 6.3 prompt — Create Region

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/Region.java.

Requirements:  
\- Plain Java class.  
\- Fields:  
  \- UUID id  
  \- RegionCoordinate coordinate  
  \- RegionLifecycleState lifecycleState  
  \- long createdAtSimulationTick  
  \- long lastUpdatedSimulationTick  
  \- boolean dirty  
  \- RegionFlags flags  
  \- RegionMetrics metrics  
  \- RegionModuleData moduleData  
\- Constructor validates required fields.  
\- Methods:  
  \- markDirty()  
  \- clearDirty()  
  \- isDirty()  
  \- updateLastSimulatedTick(long tick)  
  \- setLifecycleState(RegionLifecycleState state)  
  \- validate()  
\- validate() checks id, coordinate, lifecycleState, flags, metrics, and moduleData are not null.  
\- Do not include settlement, faction, road, or NPC fields.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Milestone 6 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the region core data classes.

Files:  
\[PASTE RegionMetrics.java, RegionModuleData.java, Region.java\]

Check:  
\- Metrics match ecosystem-only scope.  
\- Region is not bloated with future unrelated systems.  
\- Validation is strong.  
\- Dirty state behaviour is sensible.  
\- No Minecraft imports.  
\- No direct persistence logic inside Region.

Output:  
\- Pass/fail.  
\- Exact corrections.

67\. Milestone 7 AI Prompts — Region Creation and Lifecycle

Task 7.1 prompt — Create RegionLifecycleController

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionLifecycleController.java.

Requirements:  
\- Plain Java class.  
\- Methods:  
  \- boolean canTransition(RegionLifecycleState from, RegionLifecycleState to)  
  \- void transition(Region region, RegionLifecycleState target)  
\- Allowed transitions:  
  \- UNLOADED \-\> LOADING  
  \- LOADING \-\> ACTIVE  
  \- LOADING \-\> FAILED  
  \- ACTIVE \-\> DIRTY  
  \- DIRTY \-\> SAVING  
  \- SAVING \-\> ACTIVE  
  \- SAVING \-\> FAILED  
  \- ACTIVE \-\> UNLOADING  
  \- UNLOADING \-\> UNLOADED  
  \- FAILED \-\> LOADING  
\- Invalid transitions throw IllegalStateException with clear message.  
\- transition() must validate region is not null.  
\- No Minecraft imports.

Output:  
\- Full Java file.  
\- Suggested tests.

Task 7.2 prompt — Create RegionFactory

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionFactory.java.

Requirements:  
\- Plain Java class.  
\- Method:  
  \- Region createNewRegion(RegionCoordinate coordinate, long simulationTick)  
\- New region rules:  
  \- random UUID  
  \- coordinate from argument  
  \- lifecycleState ACTIVE  
  \- createdAtSimulationTick \= simulationTick  
  \- lastUpdatedSimulationTick \= simulationTick  
  \- dirty \= true  
  \- default RegionFlags  
  \- RegionMetrics.defaults()  
  \- empty RegionModuleData  
  \- validate before return  
\- No Minecraft imports.  
\- Do not initialise ecology modules here yet; that comes after ModuleRegistry is connected.

Output:  
\- Full Java file.

Milestone 7 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review lifecycle and region creation.

Files:  
\[PASTE RegionLifecycleController.java and RegionFactory.java\]

Check:  
\- Invalid transitions are rejected.  
\- New regions are immediately dirty.  
\- Factory does not import Minecraft classes.  
\- Factory does not start implementing ecosystem gameplay prematurely.  
\- Tests cover valid and invalid transitions.

Output:  
\- Pass/fail.  
\- Fixes.

68\. Milestone 8 AI Prompts — Module Contracts

Task 8.1 prompt — Create SimulationModule interface

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/SimulationModule.java.

Requirements:  
\- Interface.  
\- Methods:  
  \- String getModuleId()  
  \- ModuleMetadata getMetadata()  
  \- void initialize(ModuleContext context)  
  \- void onServerStarted(ServerContext context)  
  \- void createDefaultRegionData(Region region)  
  \- ModuleUpdateResult updateRegion(RegionUpdateContext context)  
  \- void onLivingWorldEvent(LivingWorldEvent event)  
  \- void saveModuleData(PersistenceWriter writer)  
  \- void loadModuleData(PersistenceReader reader)  
  \- void shutdown()  
\- Create minimal placeholder interfaces/classes if missing:  
n  \- ServerContext  
  \- RegionUpdateContext  
  \- LivingWorldEvent  
  \- PersistenceWriter  
  \- PersistenceReader  
\- Do not implement any real ecosystem module yet.  
\- No Minecraft imports in this interface.

Output:  
\- Full Java interface.  
\- Any minimal placeholder files required.

Task 8.2 prompt — Create ModuleMetadata

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/ModuleMetadata.java.

Requirements:  
\- Immutable class or record.  
\- Fields:  
  \- String moduleId  
  \- String displayName  
  \- String version  
  \- String description  
  \- String requiredCoreVersion  
  \- List\<String\> dependencies  
  \- List\<String\> optionalDependencies  
  \- boolean defaultEnabled  
  \- boolean serverOnly  
  \- boolean experimental  
\- Validate moduleId and displayName are not blank.  
\- Replace null dependency lists with empty lists.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 8.3 prompt — Create ModuleContext

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/ModuleContext.java.

Requirements:  
\- Plain Java class.  
\- Field:  
  \- ServiceRegistry services  
\- Constructor validates services is not null.  
\- Method:  
  \- \<T\> T getService(ServiceKey\<T\> key)  
\- Do not expose the whole registry for mutation if avoidable.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 8.4 prompt — Create ModuleUpdateResult

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/ModuleUpdateResult.java.

Requirements:  
\- Immutable class or record.  
\- Fields:  
  \- boolean changedRegion  
  \- List\<LivingWorldEvent\> generatedEvents  
  \- List\<HistoryRecord\> historyRecords  
  \- int estimatedCost  
  \- List\<String\> warnings  
\- Static constructors:  
  \- noChange()  
  \- changed()  
\- Null lists become empty lists.  
\- estimatedCost must not be negative.  
\- No Minecraft imports.

If HistoryRecord does not exist, create a minimal placeholder in com.livingworld.modules or com.livingworld.events with TODO to move later.

Output:  
\- Full Java file.  
\- Any placeholder file required.

Task 8.5 prompt — Create ModuleRegistry

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/ModuleRegistry.java.

Requirements:  
\- Plain Java class.  
\- Responsibilities:  
  \- register modules  
  \- reject duplicate module IDs  
  \- return all modules  
  \- return enabled modules  
  \- find by module ID  
  \- initialize all  
  \- shutdown all  
\- Methods:  
  \- void register(SimulationModule module)  
  \- List\<SimulationModule\> getAllModules()  
  \- List\<SimulationModule\> getEnabledModules()  
  \- Optional\<SimulationModule\> find(String moduleId)  
  \- void initializeAll(ModuleContext context)  
  \- void shutdownAll()  
\- For v1, enabled modules are modules where metadata.defaultEnabled is true.  
\- Do not implement dependency sorting yet; add TODO.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Milestone 8 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review module contract architecture.

Files:  
\[PASTE SimulationModule.java, ModuleMetadata.java, ModuleContext.java, ModuleUpdateResult.java, ModuleRegistry.java\]

Check:  
\- Modules are generic and not tied to settlements/factions/NPCs.  
\- Core module contracts do not import Minecraft classes.  
\- ModuleRegistry is simple enough for v1.  
\- Missing placeholders are sensible and marked as TODO.  
\- Architecture supports ecosystem modules later.

Output:  
\- Pass/fail.  
\- Required fixes.  
\- Next implementation task.

69\. Milestone 9 AI Prompts — Event Foundation

Task 9.1 prompt — Create LivingWorldEvent

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/events/LivingWorldEvent.java.

Requirements:  
\- Interface.  
\- Methods:  
  \- String eventType()  
  \- long simulationTick()  
  \- String sourceModuleId()  
\- No Minecraft imports.  
\- Events must be usable by ecosystem modules later.

Output:  
\- Full Java interface.

Task 9.2 prompt — Create BaseLivingWorldEvent

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/events/BaseLivingWorldEvent.java.

Requirements:  
\- Immutable class or record implementing LivingWorldEvent.  
\- Fields:  
  \- String eventType  
  \- long simulationTick  
  \- String sourceModuleId  
\- Validate eventType is not blank.  
\- Validate simulationTick is not negative.  
\- sourceModuleId may be "core" for core events but must not be blank.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 9.3 prompt — Create LivingWorldEventListener

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/events/LivingWorldEventListener.java.

Requirements:  
\- Functional interface.  
\- Method:  
  \- void onEvent(LivingWorldEvent event)  
\- No Minecraft imports.

Output:  
\- Full Java interface.

Task 9.4 prompt — Create LivingWorldEventBus

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/events/LivingWorldEventBus.java.

Requirements:  
\- Plain Java class.  
\- Methods:  
  \- void register(String eventType, LivingWorldEventListener listener)  
  \- void publish(LivingWorldEvent event)  
  \- int getPublishedEventCount()  
  \- int getListenerCount(String eventType)  
\- Validate eventType is not blank.  
\- Validate listener is not null.  
\- Event publishing should send the event to listeners registered for that event type.  
\- Unknown event type should not crash.  
\- Prevent obvious recursive event storms with a simple dispatching guard or TODO if not implemented.  
\- No Minecraft imports.

Output:  
\- Full Java file.  
\- Suggested tests.

Milestone 9 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the Living World event foundation.

Files:  
\[PASTE LivingWorldEvent.java, BaseLivingWorldEvent.java, LivingWorldEventListener.java, LivingWorldEventBus.java\]

Check:  
\- Events are plain Java.  
\- EventBus is not overcomplicated.  
\- Unknown events are safe.  
\- Recursion risk is noted or controlled.  
\- Event types can support pollution/soil/vegetation events later.

Output:  
\- Pass/fail.  
\- Fixes.

70\. Milestone 10 AI Prompts — Time Service

Task 10.1 prompt — Create LivingWorldCalendar

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/simulation/LivingWorldCalendar.java.

Requirements:  
\- Plain Java class.  
\- Fields:  
  \- long simulationTick  
  \- int day  
  \- int month  
  \- int year  
\- Default start: day 1, month 1, year 1, simulationTick 0\.  
\- Methods:  
  \- advanceTicks(long ticks)  
  \- copy()  
  \- toDisplayString()  
\- Keep the calendar simple for now.  
\- Use 30 days per month and 12 months per year unless config is added later.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 10.2 prompt — Create TimeService interface

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/services/TimeService.java.

Requirements:  
\- Interface.  
\- Methods:  
  \- long getSimulationTick()  
  \- LivingWorldCalendar getCalendar()  
  \- void advanceSimulationTick()  
  \- void advanceSimulationTicks(long ticks)  
\- No Minecraft imports.

Output:  
\- Full Java interface.

Task 10.3 prompt — Create DefaultTimeService

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/simulation/DefaultTimeService.java.

Requirements:  
\- Implements TimeService.  
\- Owns a LivingWorldCalendar.  
\- advanceSimulationTick advances by 1\.  
\- advanceSimulationTicks validates ticks \>= 0 and advances calendar.  
\- getCalendar returns a copy, not the internal mutable instance.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Milestone 10 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the Living World time system.

Files:  
\[PASTE LivingWorldCalendar.java, TimeService.java, DefaultTimeService.java\]

Check:  
\- Time is independent of Minecraft classes.  
\- Calendar cannot be mutated externally by accident.  
\- Behaviour is deterministic.  
\- Good enough for ecosystem simulation v1.

Output:  
\- Pass/fail.  
\- Fixes.

71\. Milestone 11 AI Prompts — Scheduler and Simulation Manager

Task 11.1 prompt — Create UpdateReason

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/simulation/UpdateReason.java.

Requirements:  
\- Enum values:  
  \- NORMAL\_ROLLING\_UPDATE  
  \- PLAYER\_NEARBY  
  \- HIGH\_POLLUTION  
  \- LOW\_SOIL\_QUALITY  
  \- ACTIVE\_ECOSYSTEM\_EVENT  
  \- FORCED\_DEBUG\_COMMAND  
  \- SAVE\_MIGRATION\_REQUIRED  
\- Do not include settlement, road, faction, or NPC update reasons.  
\- No Minecraft imports.

Output:  
\- Full Java enum.

Task 11.2 prompt — Create RegionUpdateJob

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/simulation/RegionUpdateJob.java.

Requirements:  
\- Immutable class or record.  
\- Fields:  
  \- RegionCoordinate coordinate  
  \- int priority  
  \- long queuedAtSimulationTick  
  \- Set\<String\> requestedModules  
  \- UpdateReason reason  
\- Validate coordinate and reason are not null.  
\- priority must not be negative.  
\- queuedAtSimulationTick must not be negative.  
\- Null requestedModules becomes empty set.  
\- Add comparator for descending priority if clean.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 11.3 prompt — Create RegionPriorityCalculator

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/simulation/RegionPriorityCalculator.java.

Requirements:  
\- Plain Java class.  
\- Method:  
  \- int calculatePriority(Region region)  
\- Initial ecosystem-only scoring:  
  \- base \= 5  
  \- hasPlayerActivity bonus \= 100  
  \- hasActiveEcosystemEvent bonus \= 75  
  \- hasHighPollution bonus \= 50  
  \- hasLowSoilQuality bonus \= 50  
  \- pollution bonus \= pollutionScore / 2  
  \- resource depletion bonus \= resourceDepletion / 3  
  \- recovery pressure bonus \= recoveryPressure / 4  
\- Validate region is not null.  
\- Result should be deterministic.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 11.4 prompt — Create SimulationScheduler

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/simulation/SimulationScheduler.java.

Requirements:  
\- Plain Java class.  
\- Constructor accepts SimulationConfig.  
\- Fields:  
  \- long minecraftTickCounter  
  \- long simulationTickCounter  
  \- PriorityQueue\<RegionUpdateJob\> updateQueue  
\- Methods:  
  \- void onMinecraftTick()  
  \- boolean shouldRunSimulationCycle()  
  \- void queueRegion(RegionUpdateJob job)  
  \- List\<RegionUpdateJob\> pollJobsForCycle()  
  \- long getMinecraftTickCounter()  
  \- long getSimulationTickCounter()  
\- shouldRunSimulationCycle true when minecraftTickCounter reaches the configured interval.  
\- pollJobsForCycle returns at most maxRegionsPerCycle jobs.  
\- Higher priority jobs first.  
\- No Minecraft imports.

Output:  
\- Full Java file.  
\- Suggested scheduler budget tests.

Task 11.5 prompt — Create SimulationManager skeleton

MODEL: Qwen3.6-27B

PROMPT:  
Create the first version of src/main/java/com/livingworld/core/simulation/SimulationManager.java.

This is an architecture-sensitive class. Keep it boring and coordinator-only.

Requirements:  
\- Constructor dependencies:  
  \- SimulationScheduler scheduler  
  \- RegionManager regionManager  
  \- ModuleRegistry moduleRegistry  
  \- LivingWorldEventBus eventBus  
  \- TimeService timeService  
  \- PersistenceService persistenceService  
  \- SimulationProfiler profiler, if available. If not available, make it optional or TODO.  
\- Methods:  
  \- void onMinecraftServerTick()  
  \- void runSimulationCycle()  
  \- void runForcedSimulationTicks(int ticks)  
\- Responsibilities:  
  \- Advance scheduler on Minecraft tick.  
  \- If scheduler says cycle should run, run one cycle.  
  \- Poll region update jobs.  
  \- Resolve regions from RegionManager.  
  \- Run enabled modules in order.  
  \- Publish generated events.  
  \- Mark changed regions dirty.  
  \- Advance TimeService.  
\- Do not implement ecosystem rules here.  
\- Do not import Minecraft or NeoForge classes.  
\- Do not scan chunks.

Output:  
\- Full Java file.  
\- Any missing interface TODOs.  
\- Explanation of control flow.

Milestone 11 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review scheduler and SimulationManager.

Files:  
\[PASTE UpdateReason.java, RegionUpdateJob.java, RegionPriorityCalculator.java, SimulationScheduler.java, SimulationManager.java\]

Check:  
\- No Minecraft imports in scheduler/manager.  
\- Budgeting is respected.  
\- SimulationManager contains no gameplay rules.  
\- Ecosystem-only priority values are correct.  
\- Forced simulation cannot accidentally lock the server forever.  
\- Good enough before persistence and region manager are finished.

Output:  
\- Pass/fail.  
\- Fixes.  
\- Next safest step.

72\. Milestone 12 AI Prompts — Persistence Foundation

Task 12.1 prompt — Create PersistenceWriter

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/data/serialization/PersistenceWriter.java.

Requirements:  
\- Interface.  
\- Methods:  
  \- void writeString(String key, String value)  
  \- void writeInt(String key, int value)  
  \- void writeLong(String key, long value)  
  \- void writeDouble(String key, double value)  
  \- void writeBoolean(String key, boolean value)  
\- No Minecraft imports.

Output:  
\- Full Java interface.

Task 12.2 prompt — Create PersistenceReader

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/data/serialization/PersistenceReader.java.

Requirements:  
\- Interface.  
\- Methods:  
  \- String readString(String key, String defaultValue)  
  \- int readInt(String key, int defaultValue)  
  \- long readLong(String key, long defaultValue)  
  \- double readDouble(String key, double defaultValue)  
  \- boolean readBoolean(String key, boolean defaultValue)  
\- No Minecraft imports.

Output:  
\- Full Java interface.

Task 12.3 prompt — Create SaveMetadata

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/data/saved/SaveMetadata.java.

Requirements:  
\- Immutable class or record.  
\- Fields:  
  \- int schemaVersion  
  \- String modVersion  
  \- long createdAt  
  \- long updatedAt  
\- Validate schemaVersion \> 0\.  
\- Validate modVersion is not blank.  
\- Validate updatedAt \>= createdAt.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 12.4 prompt — Create PersistenceService interface

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/core/services/PersistenceService.java.

Requirements:  
\- Interface.  
\- Methods:  
  \- void markRegionDirty(Region region)  
  \- void saveDirtyRegions()  
  \- Optional\<Region\> loadRegion(RegionCoordinate coordinate)  
  \- void saveRegion(Region region)  
  \- void flushAll()  
\- No Minecraft imports.  
\- Do not implement file storage yet.

Output:  
\- Full Java interface.

Milestone 12 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review persistence foundation.

Files:  
\[PASTE PersistenceWriter.java, PersistenceReader.java, SaveMetadata.java, PersistenceService.java\]

Check:  
\- Persistence interfaces are plain Java.  
\- Region persistence is abstracted.  
\- Save metadata is versioned.  
\- No module writes files directly.  
\- Good enough before JSON/NBT implementation.

Output:  
\- Pass/fail.  
\- Fixes.

73\. Milestone 13 AI Prompts — Region Storage and Manager

Task 13.1 prompt — Create RegionStorage

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionStorage.java.

Requirements:  
\- Plain Java class.  
\- Constructor dependency:  
  \- PersistenceService persistenceService  
\- Methods:  
  \- Optional\<Region\> load(RegionCoordinate coordinate)  
  \- void save(Region region)  
\- load delegates to persistenceService.loadRegion.  
\- save delegates to persistenceService.saveRegion.  
\- Validate dependencies and arguments.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 13.2 prompt — Create RegionCache

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/cache/RegionCache.java.

Requirements:  
\- Plain Java class.  
\- Field:  
  \- Map\<RegionCoordinate, Region\> activeRegions  
\- Methods:  
  \- Optional\<Region\> get(RegionCoordinate coordinate)  
  \- void put(Region region)  
  \- void remove(RegionCoordinate coordinate)  
  \- Collection\<Region\> allActive()  
  \- int size()  
\- Validate inputs.  
\- allActive should return an unmodifiable copy or safe view.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 13.3 prompt — Create RegionQueryEngine

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/regions/query/RegionQueryEngine.java.

Requirements:  
\- Plain Java class.  
\- Constructor dependency:  
  \- RegionCache cache  
\- Methods:  
  \- Optional\<Region\> getRegion(RegionCoordinate coordinate)  
  \- List\<Region\> getRegionsInRadius(RegionCoordinate center, int radius)  
  \- List\<Region\> getRegionsWithActiveEcosystemEvent()  
  \- List\<Region\> getRegionsAbovePollution(double threshold)  
  \- List\<Region\> getRegionsBelowSoilQuality(double threshold)  
\- Do not touch Minecraft chunks.  
\- Radius means region-coordinate radius.  
\- Validate radius \>= 0\.  
\- No settlement, road, faction, or NPC queries.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 13.4 prompt — Create RegionManager

MODEL: Qwen3.6-27B

PROMPT:  
Create src/main/java/com/livingworld/regions/RegionManager.java.

This is a core architecture class. Keep it clean and plain Java.

Dependencies:  
\- RegionFactory regionFactory  
\- RegionStorage regionStorage  
\- RegionCache regionCache  
\- RegionQueryEngine queryEngine  
\- RegionLifecycleController lifecycleController  
\- SimulationConfig simulationConfig

Methods:  
\- Region getOrCreateRegion(RegionCoordinate coordinate)  
\- Optional\<Region\> findRegion(RegionCoordinate coordinate)  
\- Region getOrCreateRegionAtBlock(String dimensionId, int blockX, int blockZ)  
\- Collection\<Region\> getActiveRegions()  
\- void markDirty(Region region)  
\- void unloadRegion(RegionCoordinate coordinate)

Rules:  
\- getOrCreate first checks cache.  
\- If missing, try storage.  
\- If storage missing, use factory.  
\- New or modified regions must be marked dirty.  
\- Do not import Minecraft or NeoForge classes.  
\- Do not scan chunks.  
\- Do not apply visible world effects.

Output:  
\- Full Java file.  
\- Explanation of load/create flow.  
\- Edge cases.

Milestone 13 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review RegionStorage, RegionCache, RegionQueryEngine, and RegionManager.

Files:  
\[PASTE FILES\]

Check:  
\- RegionManager load/create flow is correct.  
\- No duplicate region instances are likely.  
\- No Minecraft imports.  
\- Queries are ecosystem-focused.  
\- Dirty handling is sensible.  
\- Region lifecycle transitions are not abused.

Output:  
\- Pass/fail.  
\- Fixes.  
\- Tests to add.

74\. Milestone 14 AI Prompts — Debug Commands

Task 14.1 prompt — Create command root

MODEL: Qwen3.6-27B

PROMPT:  
Create src/main/java/com/livingworld/commands/LivingWorldCommandRoot.java for a NeoForge Minecraft mod.

This file is allowed to use Minecraft/NeoForge command classes because it is in the commands boundary.

Requirements:  
\- Register /lw command tree.  
\- Initial subcommands:  
  \- /lw status  
  \- /lw region info  
  \- /lw modules list  
  \- /lw simulate \<ticks\>  
\- If exact NeoForge command registration API is uncertain, create a clean skeleton with TODO comments at API-specific points.  
\- Command implementation should delegate to service classes where possible.  
\- Do not place ecosystem simulation rules inside command classes.

Output:  
\- Full Java file.  
\- Notes about API assumptions.

Task 14.2 prompt — Create RegionInfoCommand

MODEL: Qwen3.6-27B

PROMPT:  
Create src/main/java/com/livingworld/commands/RegionInfoCommand.java.

This class may use Minecraft command/source classes if necessary, but region logic must stay in RegionManager.

Output should include:  
\- Region coordinate  
\- Lifecycle state  
\- Dirty state  
\- Ecosystem metrics  
\- Flags  
\- Module IDs present

Requirements:  
\- Use RegionManager to get region data.  
\- Use coordinate mapper or boundary conversion instead of putting Minecraft classes into RegionCoordinate.  
\- Do not reference settlements, factions, NPCs, roads, or economy.

Output:  
\- Full Java file.  
\- API assumptions.

Task 14.3 prompt — Create SimulateCommand

MODEL: Qwen3.6-27B

PROMPT:  
Create src/main/java/com/livingworld/commands/SimulateCommand.java.

Requirements:  
\- Operator-only command.  
\- Accept tick count.  
\- Safe maximum default: 1000 ticks.  
\- Calls SimulationManager.runForcedSimulationTicks(ticks).  
\- Rejects negative or zero ticks.  
\- Prints clear success/failure output.  
\- Does not implement simulation rules itself.

Output:  
\- Full Java file.  
\- Notes on NeoForge/Minecraft command API assumptions.

Milestone 14 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review command implementation.

Files:  
\[PASTE LivingWorldCommandRoot.java, RegionInfoCommand.java, SimulateCommand.java\]

Check:  
\- Minecraft/NeoForge imports are limited to command boundary.  
\- Commands delegate to services.  
\- /lw simulate has safety limits.  
\- Output is useful for debugging ecosystem state.  
\- No gameplay logic hidden in commands.

Output:  
\- Pass/fail.  
\- Fixes.

75\. Milestone 15 AI Prompts — Profiling

Task 15.1 prompt — Create SimulationProfiler

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/debug/SimulationProfiler.java.

Requirements:  
\- Plain Java class.  
\- Tracks:  
  \- cycle start time  
  \- cycle end time  
  \- per-module timings  
  \- per-region timings if simple  
  \- event count  
  \- save count  
  \- budget overruns  
\- Methods:  
  \- beginCycle()  
  \- endCycle()  
  \- beginModule(String moduleId)  
  \- endModule(String moduleId)  
  \- recordEvent()  
  \- recordSave()  
  \- recordBudgetOverrun()  
  \- SimulationProfileSnapshot createSnapshot()  
\- Use System.nanoTime internally for timing.  
\- Do not use System.out.  
\- No Minecraft imports.

Output:  
\- Full Java file.

Task 15.2 prompt — Create SimulationProfileSnapshot

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/debug/SimulationProfileSnapshot.java.

Requirements:  
\- Immutable class or record.  
\- Fields:  
  \- long totalCycleNanos  
  \- Map\<String, Long\> moduleTimings  
  \- int eventsPublished  
  \- int regionsUpdated  
  \- int savesPerformed  
  \- boolean budgetExceeded  
\- Add method toHumanReadableString().  
\- No Minecraft imports.

Output:  
\- Full Java file.

Milestone 15 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review simulation profiling classes.

Files:  
\[PASTE SimulationProfiler.java and SimulationProfileSnapshot.java\]

Check:  
\- Profiler can measure module cost.  
\- Snapshot is immutable or safely copied.  
\- No server-spam logging built in.  
\- Usable by debug commands later.  
\- No Minecraft imports.

Output:  
\- Pass/fail.  
\- Fixes.

76\. Milestone 16 AI Prompts — Tests and Long-Run Validation

Task 16.1 prompt — Create TestSimulationModule

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/testing/TestSimulationModule.java.

Requirements:  
\- Implements SimulationModule.  
\- Module ID: test  
\- Metadata display name: Test Simulation Module  
\- On initialize, set initialized \= true.  
\- On updateRegion, increment an internal update counter.  
\- Every 10 updates, return ModuleUpdateResult.changed().  
\- Otherwise return ModuleUpdateResult.noChange().  
\- No Minecraft imports.  
\- This is for engine testing only, not gameplay.

Output:  
\- Full Java file.

Task 16.2 prompt — Create RegionCoordinateTest

MODEL: Qwen3.5-9B

PROMPT:  
Create src/test/java/com/livingworld/regions/RegionCoordinateTest.java.

Tests:  
\- block 0,0 maps to region 0,0  
\- block 127,127 maps to region 0,0 with region size 8 chunks  
\- block 128,0 maps to region 1,0  
\- block \-1,0 maps to region \-1,0  
\- block \-128,0 maps to region \-1,0  
\- block \-129,0 maps to region \-2,0  
\- stableId remains stable  
\- RegionCoordinate works as HashMap key

Use the project’s test framework. If unknown, assume JUnit 5\.

Output:  
\- Full test file.

Task 16.3 prompt — Create RegionLifecycleControllerTest

MODEL: Qwen3.5-9B

PROMPT:  
Create src/test/java/com/livingworld/regions/RegionLifecycleControllerTest.java.

Tests:  
\- Allowed transitions succeed.  
\- Invalid transitions throw IllegalStateException.  
\- FAILED can transition to LOADING.  
\- ACTIVE cannot transition directly to SAVING.

Use JUnit 5 unless project uses something else.

Output:  
\- Full test file.

Task 16.4 prompt — Create SchedulerBudgetTest

MODEL: Qwen3.5-9B

PROMPT:  
Create src/test/java/com/livingworld/core/simulation/SchedulerBudgetTest.java.

Tests:  
\- Given 500 jobs and maxRegionsPerCycle 50, one cycle returns 50 jobs.  
\- Higher priority jobs are returned first.  
\- Jobs not processed remain queued.  
\- shouldRunSimulationCycle respects simulationIntervalTicks.

Use JUnit 5 unless project uses something else.

Output:  
\- Full test file.

Task 16.5 prompt — Create EventBusTest

MODEL: Qwen3.5-9B

PROMPT:  
Create src/test/java/com/livingworld/events/EventBusTest.java.

Tests:  
\- Listener receives event.  
\- Listener receives event once.  
\- Multiple listeners receive the event.  
\- Unknown event type does not crash.

Use BaseLivingWorldEvent for test events.  
Use JUnit 5 unless project uses something else.

Output:  
\- Full test file.

Task 16.6 prompt — Create LongRunSimulationTest

MODEL: Qwen3.6-27B

PROMPT:  
Create src/test/java/com/livingworld/testing/LongRunSimulationTest.java.

Purpose:  
Prove the foundation can run for a long time without collapsing.

Test setup:  
\- Create 1000 fake regions.  
\- Register TestSimulationModule.  
\- Run 100,000 simulation ticks or a reduced count if local test runtime is too high.  
\- Save dirty regions periodically using a fake/in-memory PersistenceService.

Pass conditions:  
\- No crash.  
\- No unhandled exception.  
\- No invalid lifecycle transition.  
\- Dirty region count does not grow forever.  
\- Profiler reports cycle data.

Requirements:  
\- Keep it plain Java where possible.  
\- Do not require a full Minecraft client.  
\- If full implementation requires missing services, create small in-memory fakes inside the test.

Output:  
\- Full test file.  
\- Explanation of any fake services.

Milestone 16 review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the engine test suite.

Files:  
\[PASTE all test files and TestSimulationModule.java\]

Check:  
\- Tests cover foundation risks.  
\- Tests do not require Minecraft client unless absolutely necessary.  
\- Long-run test is realistic for local hardware.  
\- Tests catch coordinate, lifecycle, scheduler, event, and simulation failures.  
\- No NPC/settlement/faction/wildlife scope creep.

Output:  
\- Pass/fail.  
\- Missing tests.  
\- Recommended final fixes before Volume 2\.

77\. Platform Adapter AI Prompts

Task P1 prompt — Create PlatformAdapter interface

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/platform/PlatformAdapter.java.

Requirements:  
\- Interface.  
\- Methods:  
  \- String getPlatformName()  
  \- String getMinecraftVersion()  
  \- String getLoaderVersion()  
  \- boolean isDedicatedServer()  
  \- Path getWorldSaveDirectory()  
  \- void registerCommands()  
  \- void registerServerTickHook()  
  \- void registerPlayerEventHooks()  
\- Import java.nio.file.Path only.  
\- No NeoForge imports here.

Output:  
\- Full Java interface.

Task P2 prompt — Create NeoForgePlatformAdapter skeleton

MODEL: Qwen3.6-27B

PROMPT:  
Create src/main/java/com/livingworld/platform/neoforge/NeoForgePlatformAdapter.java.

Purpose:  
Implement PlatformAdapter using NeoForge as the active loader.

Rules:  
\- This class may import NeoForge and Minecraft classes.  
\- Core simulation classes must not import NeoForge or Minecraft classes.  
\- If exact NeoForge API names are uncertain for the target version, add clear TODOs at those points instead of inventing unsafe code.  
\- Must log platform name, Minecraft version, and loader version during bootstrap.  
\- Must provide hooks that can forward server ticks to SimulationManager later.

Output:  
\- Full Java file or safe skeleton.  
\- API assumptions.  
\- TODOs requiring verification.

Task P3 prompt — Create MinecraftCoordinateMapper

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/integration/minecraft/MinecraftCoordinateMapper.java.

Requirements:  
\- Boundary class for converting Minecraft coordinates into Living World coordinates.  
\- For now, avoid importing Minecraft classes unless necessary.  
\- Methods:  
  \- RegionCoordinate fromBlockPos(String dimensionId, int blockX, int blockZ, int regionSizeChunks)  
  \- RegionCoordinate fromChunkPos(String dimensionId, int chunkX, int chunkZ, int regionSizeChunks)  
\- Delegate to RegionCoordinate.fromBlock and RegionCoordinate.fromChunk.  
\- No gameplay logic.

Output:  
\- Full Java file.

Platform review prompt

MODEL: Qwen3.6-27B

PROMPT:  
Review the platform adapter layer.

Files:  
\[PASTE PlatformAdapter.java, NeoForgePlatformAdapter.java, MinecraftCoordinateMapper.java\]

Check:  
\- NeoForge imports are isolated to platform/neoforge or command boundary.  
\- Core simulation remains plain Java.  
\- Platform API is not too wide.  
\- Version reporting is possible.  
\- Server tick hook can eventually call SimulationManager.

Output:  
\- Pass/fail.  
\- Fixes.  
\- Any NeoForge API calls that need checking against current docs.

78\. Ecosystem MVP AI Prompts — To Use After Volume 1 Passes

Do not use these until the Volume 1 completion gate passes.

Ecosystem MVP prompt 1 — Create EcosystemRegionData

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/ecosystem/EcosystemRegionData.java.

Requirements:  
\- Plain Java class.  
\- Fields:  
  \- double ecosystemHealth  
  \- double stress  
  \- double resilience  
  \- double recoveryRate  
\- Values clamped 0 to 100\.  
\- Methods:  
  \- defaults()  
  \- normalize()  
  \- copy()  
  \- applyStress(double amount)  
  \- applyRecovery(double amount)  
\- No Minecraft imports.  
\- No wildlife, NPC, village, faction, or economy logic.

Output:  
\- Full Java file.

Ecosystem MVP prompt 2 — Create SoilRegionData

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/soil/SoilRegionData.java.

Requirements:  
\- Plain Java class.  
\- Fields:  
  \- double fertility  
  \- double moisture  
  \- double contamination  
  \- double compaction  
  \- double erosion  
\- Values clamped 0 to 100\.  
\- Methods:  
  \- defaults()  
  \- normalize()  
  \- copy()  
  \- degrade(double amount)  
  \- recover(double amount)  
\- No Minecraft imports.

Output:  
\- Full Java file.

Ecosystem MVP prompt 3 — Create PollutionRegionData

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/pollution/PollutionRegionData.java.

Requirements:  
\- Plain Java class.  
\- Fields:  
  \- double airPollution  
  \- double groundPollution  
  \- double waterPollution  
  \- double decayResistance  
\- Values clamped 0 to 100\.  
\- Methods:  
  \- defaults()  
  \- normalize()  
  \- copy()  
  \- addPollution(double air, double ground, double water)  
  \- decay(double amount)  
\- No Minecraft imports.

Output:  
\- Full Java file.

Ecosystem MVP prompt 4 — Create VegetationRegionData

MODEL: Qwen3.5-9B

PROMPT:  
Create src/main/java/com/livingworld/modules/vegetation/VegetationRegionData.java.

Requirements:  
\- Plain Java class.  
\- Fields:  
  \- double grassPressure  
  \- double flowerPressure  
  \- double shrubPressure  
  \- double treePressure  
  \- double deadVegetation  
\- Values clamped 0 to 100\.  
\- Methods:  
  \- defaults()  
  \- normalize()  
  \- copy()  
  \- reduceFromLogging(double amount)  
  \- recover(double amount)  
\- No Minecraft imports.  
\- Do not simulate animal populations.

Output:  
\- Full Java file.

Ecosystem MVP prompt 5 — Create simple ecosystem update formulas

MODEL: Qwen3.6-27B

PROMPT:  
Design the first simple ecosystem update formulas for the Living World mod.

Scope:  
\- Ecosystem-only.  
\- No animals.  
\- No villagers.  
\- No settlements.  
\- No factions.

Inputs per region:  
\- ecosystemHealth  
\- soil fertility  
\- soil moisture  
\- soil contamination  
\- water quality  
\- air/ground/water pollution  
\- vegetation pressure  
\- resource depletion  
\- recovery pressure

Output required:  
1\. Simple formulas for one simulation tick.  
2\. Pseudocode for update order.  
3\. Edge cases.  
4\. Values that should be configurable.  
5\. Safety caps so values stay between 0 and 100\.  
6\. Explanation simple enough to turn into Java classes.

Do not write Minecraft block-changing code yet.

79\. Daily Local AI Working Method

Use this method every coding session.

Step 1:  
Use Qwen3.6-27B for planning the next 3 to 5 tiny tasks.

Prompt:  
MODEL: Qwen3.6-27B

Given the current Living World project state below, choose the next 3 to 5 safest tasks.

Current state:  
\[PASTE WHAT EXISTS\]

Rules:  
\- Ecosystem-only mod.  
\- No NPCs, factions, settlements, roads, or wildlife simulation.  
\- Core simulation remains plain Java.  
\- Minecraft/NeoForge imports stay in platform, integration, or command packages.  
\- Each task must be completable by Qwen3.5-9B in one file or one test file.

Output:  
For each task give:  
\- task name  
\- target model  
\- file path  
\- exact prompt to give Qwen3.5-9B  
\- tests required  
\- definition of done

Step 2:  
Give one task at a time to Qwen3.5-9B.

Step 3:  
Run build/tests.

Step 4:  
If build fails, give the exact error to Qwen3.5-9B once.

Repair prompt:  
MODEL: Qwen3.5-9B

The previous code failed to compile.

Error:  
\[PASTE ERROR\]

Relevant files:  
\[PASTE FILES\]

Fix only the error.  
Do not rewrite unrelated code.  
Do not add new systems.  
Return the corrected file only.

Step 5:  
If the second 9B attempt fails, escalate to Qwen3.6-27B.

Escalation prompt:  
MODEL: Qwen3.6-27B

Qwen3.5-9B failed twice to fix this issue.

Goal:  
\[PASTE TASK GOAL\]

Error:  
\[PASTE ERROR\]

Files:  
\[PASTE RELEVANT FILES\]

Find the root cause and provide the smallest safe fix.  
Do not redesign the system unless the design is the root cause.  
Do not add unrelated features.

Output:  
\- root cause  
\- corrected code  
\- why the fix works  
\- any follow-up test needed

Step 6:  
After every successful task, ask Qwen3.6-27B to review the milestone when enough files exist.

80\. Prompt Discipline Rules

These rules are mandatory when working with local AI.

Rule 1:  
Never ask a 9B model to build a whole subsystem.

Rule 2:  
Never give vague prompts such as "make the ecosystem" or "fix the mod".

Rule 3:  
Always include the file path.

Rule 4:  
Always include the class name.

Rule 5:  
Always state whether Minecraft or NeoForge imports are allowed.

Rule 6:  
Always state what is out of scope.

Rule 7:  
Always ask for tests when the code is plain Java.

Rule 8:  
Always run tests before moving on.

Rule 9:  
After two failed repair attempts by Qwen3.5-9B, escalate to Qwen3.6-27B.

Rule 10:  
If Qwen3.6-27B says the task is too broad, split it into smaller files.

81\. Local Model Role Summary

Qwen3.5-9B role:  
\- one class  
\- one enum  
\- one record  
\- one interface  
\- one test file  
\- simple bug fix  
\- simple refactor  
\- simple documentation

Qwen3.6-27B role:  
\- architecture review  
\- multi-file debugging  
\- NeoForge uncertainty  
\- save design  
\- scheduler design  
\- module boundary review  
\- version upgrade review  
\- difficult compile errors  
\- planning next batches

Do not swap these roles unless necessary.  