Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
8d2ac74
feat: complete Phases 1-3 of "Engine First" modernization
westkevin12 May 1, 2026
c3807cd
refactor: reorder and update packet handler methods in AbstractPacket…
westkevin12 May 1, 2026
5d29d20
refactor: reorganize AbstractPacketHandlerBaseMock packet handle meth…
westkevin12 May 1, 2026
4849802
refactor: reorder and expand packet handler methods in AbstractPacket…
westkevin12 May 1, 2026
243906e
refactor: enhance test generation robustness and cleanup generated pr…
westkevin12 May 1, 2026
5cf6303
feat: implement full Warden anger mechanics and modernize registry ac…
westkevin12 May 1, 2026
4d0ef22
spotless apply
westkevin12 May 1, 2026
30bba94
refactor: relocate generated proxy test files to the backup directory…
westkevin12 May 1, 2026
390fea1
refactor: remove generated proxy mock test backup files
westkevin12 May 1, 2026
2aea5cb
feat: implement Folia task tracking, NBT state application, and entit…
westkevin12 May 1, 2026
bfc9b4d
perf: optimize performance through registry, constructor, and entity …
westkevin12 May 1, 2026
8e810aa
feat: generate mock base tests for proxy components and update Player…
westkevin12 May 2, 2026
796a3c1
feat: overhaul MetaMiner generator utilities and update generated pro…
westkevin12 May 2, 2026
6ec9a19
refactor: improve ProGuard mapping logic and add unit test coverage
westkevin12 May 2, 2026
6a69cb0
refactor: replace hardcoded paths and System.out with dynamic binary …
westkevin12 May 2, 2026
b133eb5
refactor: optimize ProGuard regex patterns using possessive quantifie…
westkevin12 May 2, 2026
505107c
refactor: simplify project scope by reducing covered API methods and …
westkevin12 May 2, 2026
424a598
refactor: update auto-generated mock classes and refresh packet handl…
westkevin12 May 2, 2026
1a2827f
refactor: regenerate proxy mock classes and update metaminer logic
westkevin12 May 2, 2026
f7af1a4
refactor: reorder mock test assertions and update suppression annotat…
westkevin12 May 2, 2026
1ed3785
refactor: remove stale generated mock tests and update base mock impl…
westkevin12 May 3, 2026
e714716
feat: add Leashable entity support and implement GenericKeyedMock reg…
westkevin12 May 3, 2026
4859017
refactor: consolidate Brigadier constant usage and extract test gener…
westkevin12 May 3, 2026
a51e4dd
refactor: modularize type accessibility checks in BaseMockGenerator f…
westkevin12 May 3, 2026
2f57b45
test: add tests for BeehiveDataMock face retrieval and cloning behavior
westkevin12 May 3, 2026
ca9e669
refactor: replace System.err calls with java.util.logging.Logger acro…
westkevin12 May 3, 2026
9774e25
refactor: modernize syntax, implement equality methods, and remove un…
westkevin12 May 3, 2026
66a2324
refactor: apply line wrapping to equals and hashCode methods in Trial…
westkevin12 May 3, 2026
2f962bd
refactor: update mock generation cycle, add error resilience to metad…
westkevin12 May 3, 2026
942965e
.
westkevin12 May 3, 2026
a89767b
refactor: add reflection constructors, improve code comments, and ext…
westkevin12 May 3, 2026
48b373e
chore: suppress java:S110 warning in SnifferMock, AnimalsMock, and ex…
westkevin12 May 3, 2026
ef3ad99
refactor: modernize switch expressions, clean up metaminer generators…
westkevin12 May 3, 2026
046325b
refactor: replace unused exception variables with underscores and cle…
westkevin12 May 3, 2026
ab33f0b
refactor: update generated proxy mock tests and base implementations …
westkevin12 May 3, 2026
1b45efc
test: regenerate all proxy base mock tests and update coverage report
westkevin12 May 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/coverage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Coverage check

on:
pull_request:
branches: [ v1.*, master ]
branches: [ v1.*, master, experimental/generator ]
push:
branches: [ v1.*, master ]
branches: [ v1.*, master, experimental/generator ]

jobs:
coverage:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,9 @@ Temporary Items
# Ignore server folder
server/

# Ignore jars cache
jars/cache/

#Kotlin LSP
kls_database.db

Expand Down
66 changes: 18 additions & 48 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,38 +9,21 @@

---

## 🚀 Bootstrap Protocol (Read First)
## 🚀 Bootstrap Protocol

Before modifying any code, an agent must execute this sequence:

1. **Check `jars/`**: Verify the target API JARs (Paper, Folia, Velocity, etc.) are present.
2. **Verify `generated/`**: Check `src/main/java/org/mockmc/mockmc/generated/` to see the current automated surface.
3. **Run Compilation**: Execute `./gradlew compileJava` to establish a baseline and **log any pre-existing warnings**.

---

## 🗺️ Knowledge Index & Access Triggers

| Context Trigger | Document to Read | Description |
| :-------------------------------- | :---------------------------------------------------------------------------------------------------------------- | :------------------------------------------------ |
| **New Implementation Phase** | [`docs/WALKTHROUGH.md`](docs/WALKTHROUGH.md) | History of the 1.21 modernization and stub logic. |
| **Logic/Registration Changes** | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Metaminer engine and reflection-based mapping. |
| **Task Priority Verification** | [`docs/TODO.md`](docs/TODO.md) | Current project phases (e.g., Phase 4 CI/CD). |
| **Missing/Incorrect API** | [`metaminer/.../BaseMockGenerator.java`](metaminer/src/main/java/org.mockmc/metaminer/BaseMockGenerator.java) | The source of truth for the generation engine. |
| **After running `:runGenerator`** | `src/main/java/.../generated/` diff | Review the diff to verify the new API surface. |
1. **Check `jars/`**: Ensure target API JARs (Paper, Folia, Velocity) are present.
2. **Run Compilation**: Execute `./gradlew compileJava` to establish a baseline.

---

## 🛠️ Automated Smart Stub Logic

The generator implements these defaults for any method not manually overridden:
## 🗺️ Knowledge Index

- **Void**: No-op (empty body).
- **Adventure API**: Returns `Component.empty()`.
- **Collections**: Returns `Collections.emptyList()`, `emptySet()`, or `emptyMap()`.
- **Optionals**: Returns `Optional.empty()`.
- **Primitives**: Returns `0`, `0.0`, or `false`.
- **Special Types**: Returns `NamespacedKey.minecraft("mock")`, an empty `ItemStack`, or a `Location(0,0,0)`.
| Context Trigger | Document to Read | Description |
| :----------------------------- | :---------------------------------------------- | :----------------------------------------- |
| **New Implementation** | [`docs/WALKTHROUGH.md`](docs/WALKTHROUGH.md) | 1.21 modernization and stub logic. |
| **Logic/Registration** | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Metaminer engine internals. |
| **Task Priority** | [`TODO.md`](TODO.md) | Current phases (Phase 6 Functional Depth). |
| **Missing/Incorrect API** | `metaminer/.../BaseMockGenerator.java` | Source of truth for generation. |

---

Expand All @@ -51,31 +34,18 @@ The generator implements these defaults for any method not manually overridden:
> [!CAUTION]
> **NEVER** modify files in `org.mockmc.mockmc.generated.*` directly.
> **IF** an API method is missing:
>
> 1. Modify `BaseMockGenerator.java`. If modifying the generator, you **must** check `jars/` to ensure it is parsing the correct backend (e.g., Folia vs. Velocity).
> 1. Modify `BaseMockGenerator.java`.
> 2. Run `./gradlew :metaminer:runGenerator`.

### 2. Dead Code Elimination

Proactively delete any manual method that only contains `throw new UnimplementedOperationException();`. These are redundant as they are handled natively by the generated `*BaseMock` classes.
**CRITICAL**: The presence of `UnimplementedOperationException` in a manual mock is considered a **blocker** for PR approval.
- **Delete** any manual method only containing `throw new UnimplementedOperationException();`.
- **CRITICAL**: Redundant stubs are considered blockers for PR approval.

### 3. Javadoc & Versioning

All manual behavior implementations must use the custom `@mockmc.version` tag.

```java
/**
* Custom behavior implementation.
* @mockmc.version 1.21-1.0.0
*/
```
- Use `@mockmc.version <version>` for all manual behavior implementations.

### 4. Mandatory Tooling Sequence

Before committing, agents **MUST** run:

1. `./gradlew :metaminer:runGenerator` (If logic changed).
2. **Address Warnings**: Resolve any IDE warnings or SonarQube linting issues introduced by your changes.
3. `./gradlew spotlessApply` (Standard Formatting).
4. `./gradlew compileJava` (100% API Verification).
Before committing:
1. `./gradlew :metaminer:runGenerator` (if engine/logic changed).
2. `./gradlew spotlessApply`.
3. `./gradlew compileJava` (100% API Verification).
33 changes: 33 additions & 0 deletions AGENTS_PROTOCOL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# MockMC Agentic Workflow Protocol

Autonomous protocol for scaling functional test coverage.

## 🤖 Agent Roles

### 1. Auditor (Discovery)
- **Goal**: Identify gaps in functional testing.
- **Workflow**:
- Scan `src/main/java/.../` for manual mocks.
- Check `src/test/java/` for corresponding `*MockTest.java`.
- Flag "Mechanical-Only" classes (only `BaseMockTest` present).

### 2. Architect (Contract)
- **Goal**: Define "Functional" state for target API.
- **Workflow**:
- Inspect Paper/Velocity API JARs for stateful methods.
- Produce `TEST_PLAN.md` outlining logic scenarios.

### 3. Coder (Implementation)
- **Goal**: Author test suite and behavior logic.
- **Workflow**:
- Implement JUnit 5 tests based on `TEST_PLAN.md`.
- Author behavior in manual mock if mechanical base is insufficient.
- Verify via `./gradlew test`.

## 🚀 Execution Loop

1. **TRIGGER**: Manual mock updated or class mirrored.
2. **AUDIT**: Confirm missing functional tests.
3. **DESIGN**: Produce `TEST_PLAN.md`.
4. **BUILD**: Implement tests and logic.
5. **VERIFY**: Run `./gradlew test`.
189 changes: 189 additions & 0 deletions COVERAGE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
# MockMC API Coverage Report

Generated on: Tue May 05 14:32:02 CDT 2026

## Overall Coverage: 99.90%

- **Total API Methods**: 6765
- **Mirrored via BaseMocks**: 6758
- **Manual Implementations**: (TBD - Analysis in progress)

## Coverage by Package

| Package | Methods | Status |
| --- | --- | --- |
| co.aikar.timings | 7 | 100% Mirror |
| com.destroystokyo.paper | 11 | 100% Mirror |
| com.destroystokyo.paper.block | 5 | 100% Mirror |
| com.destroystokyo.paper.brigadier | 4 | 100% Mirror |
| com.destroystokyo.paper.entity | 24 | 100% Mirror |
| com.destroystokyo.paper.entity.ai | 21 | 100% Mirror |
| com.destroystokyo.paper.inventory.meta | 10 | 100% Mirror |
| com.destroystokyo.paper.loottable | 15 | 100% Mirror |
| com.destroystokyo.paper.network | 4 | 100% Mirror |
| com.destroystokyo.paper.profile | 26 | 100% Mirror |
| com.destroystokyo.paper.util | 3 | 100% Mirror |
| com.velocitypowered.api.command | 23 | 100% Mirror |
| com.velocitypowered.api.event | 22 | 100% Mirror |
| com.velocitypowered.api.event.annotation | 0 | 100% Mirror |
| com.velocitypowered.api.permission | 5 | 100% Mirror |
| com.velocitypowered.api.plugin | 27 | 100% Mirror |
| com.velocitypowered.api.plugin.annotation | 0 | 100% Mirror |
| com.velocitypowered.api.proxy | 89 | 100% Mirror |
| com.velocitypowered.api.proxy.config | 25 | 100% Mirror |
| com.velocitypowered.api.proxy.crypto | 14 | 100% Mirror |
| com.velocitypowered.api.proxy.messages | 6 | 100% Mirror |
| com.velocitypowered.api.proxy.player | 51 | 100% Mirror |
| com.velocitypowered.api.proxy.server | 4 | 100% Mirror |
| com.velocitypowered.api.scheduler | 6 | 100% Mirror |
| com.velocitypowered.api.util | 5 | 100% Mirror |
| io.papermc.paper | 21 | 100% Mirror |
| io.papermc.paper.advancement | 9 | 100% Mirror |
| io.papermc.paper.annotation | 0 | 100% Mirror |
| io.papermc.paper.ban | 1 | 100% Mirror |
| io.papermc.paper.block | 7 | 100% Mirror |
| io.papermc.paper.block.bed | 5 | 100% Mirror |
| io.papermc.paper.block.fluid | 6 | 100% Mirror |
| io.papermc.paper.block.fluid.type | 1 | 100% Mirror |
| io.papermc.paper.chat | 1 | 100% Mirror |
| io.papermc.paper.command | 6 | 100% Mirror |
| io.papermc.paper.command.brigadier | 21 | 100% Mirror |
| io.papermc.paper.command.brigadier.argument | 7 | 100% Mirror |
| io.papermc.paper.command.brigadier.argument.position | 6 | 100% Mirror |
| io.papermc.paper.command.brigadier.argument.predicate | 2 | 100% Mirror |
| io.papermc.paper.command.brigadier.argument.range | 0 | 100% Mirror |
| io.papermc.paper.command.brigadier.argument.resolvers | 2 | 100% Mirror |
| io.papermc.paper.command.brigadier.argument.resolvers.selector | 0 | 100% Mirror |
| io.papermc.paper.configuration | 2 | 100% Mirror |
| io.papermc.paper.connection | 21 | 100% Mirror |
| io.papermc.paper.datacomponent | 9 | 100% Mirror |
| io.papermc.paper.datacomponent.item | 117 | 100% Mirror |
| io.papermc.paper.datacomponent.item.attribute | 0 | 100% Mirror |
| io.papermc.paper.datacomponent.item.blocksattacks | 8 | 100% Mirror |
| io.papermc.paper.datacomponent.item.consumable | 0 | 100% Mirror |
| io.papermc.paper.datapack | 24 | 100% Mirror |
| io.papermc.paper.dialog | 6 | 100% Mirror |
| io.papermc.paper.entity | 21 | 100% Mirror |
| io.papermc.paper.entity.poi | 4 | 100% Mirror |
| io.papermc.paper.event.player | 28 | 100% Mirror |
| io.papermc.paper.event.world.border | 1 | 100% Mirror |
| io.papermc.paper.inventory.tooltip | 4 | 100% Mirror |
| io.papermc.paper.math | 46 | 100% Mirror |
| io.papermc.paper.persistence | 11 | 100% Mirror |
| io.papermc.paper.plugin | 15 | 100% Mirror |
| io.papermc.paper.plugin.bootstrap | 7 | 100% Mirror |
| io.papermc.paper.plugin.configuration | 18 | 100% Mirror |
| io.papermc.paper.plugin.lifecycle.event | 3 | 100% Mirror |
| io.papermc.paper.plugin.lifecycle.event.handler | 1 | 100% Mirror |
| io.papermc.paper.plugin.lifecycle.event.handler.configuration | 3 | 100% Mirror |
| io.papermc.paper.plugin.lifecycle.event.registrar | 2 | 100% Mirror |
| io.papermc.paper.plugin.lifecycle.event.types | 4 | 100% Mirror |
| io.papermc.paper.plugin.loader | 3 | 100% Mirror |
| io.papermc.paper.plugin.loader.library | 2 | 100% Mirror |
| io.papermc.paper.plugin.provider.classloader | 15 | 100% Mirror |
| io.papermc.paper.plugin.provider.entrypoint | 2 | 100% Mirror |
| io.papermc.paper.raytracing | 10 | 100% Mirror |
| io.papermc.paper.registry | 6 | 100% Mirror |
| io.papermc.paper.registry.data | 55 | 100% Mirror |
| io.papermc.paper.registry.data.client | 2 | 100% Mirror |
| io.papermc.paper.registry.data.dialog | 34 | 100% Mirror |
| io.papermc.paper.registry.data.dialog.action | 1 | 100% Mirror |
| io.papermc.paper.registry.data.dialog.body | 8 | 100% Mirror |
| io.papermc.paper.registry.data.dialog.input | 21 | 100% Mirror |
| io.papermc.paper.registry.data.dialog.type | 13 | 100% Mirror |
| io.papermc.paper.registry.event | 11 | 100% Mirror |
| io.papermc.paper.registry.event.type | 6 | 100% Mirror |
| io.papermc.paper.registry.set | 7 | 100% Mirror |
| io.papermc.paper.registry.tag | 1 | 100% Mirror |
| io.papermc.paper.scoreboard.numbers | 2 | 100% Mirror |
| io.papermc.paper.tag | 34 | 100% Mirror |
| io.papermc.paper.text | 2 | 100% Mirror |
| io.papermc.paper.threadedregions.scheduler | 26 | 100% Mirror |
| io.papermc.paper.world.damagesource | 15 | 100% Mirror |
| io.papermc.paper.world.flag | 3 | 100% Mirror |
| net.md_5.bungee.api | 102 | 100% Mirror |
| net.md_5.bungee.api.chat | 110 | 100% Mirror |
| net.md_5.bungee.api.chat.hover.content | 10 | 100% Mirror |
| net.md_5.bungee.api.chat.objects | 0 | 100% Mirror |
| net.md_5.bungee.api.config | 20 | 100% Mirror |
| net.md_5.bungee.api.connection | 65 | 100% Mirror |
| net.md_5.bungee.api.dialog | 2 | 100% Mirror |
| net.md_5.bungee.api.dialog.action | 0 | 100% Mirror |
| net.md_5.bungee.api.dialog.body | 4 | 100% Mirror |
| net.md_5.bungee.api.event | 5 | 100% Mirror |
| net.md_5.bungee.api.plugin | 14 | 100% Mirror |
| net.md_5.bungee.api.scheduler | 11 | 100% Mirror |
| net.md_5.bungee.command | 1 | 100% Mirror |
| net.md_5.bungee.conf | 34 | 100% Mirror |
| net.md_5.bungee.config | 10 | 100% Mirror |
| net.md_5.bungee.entitymap | 4 | 100% Mirror |
| net.md_5.bungee.event | 2 | 100% Mirror |
| net.md_5.bungee.forge | 4 | 100% Mirror |
| net.md_5.bungee.jni.cipher | 5 | 100% Mirror |
| net.md_5.bungee.jni.zlib | 4 | 100% Mirror |
| net.md_5.bungee.nbt | 3 | 100% Mirror |
| net.md_5.bungee.netty | 7 | 100% Mirror |
| net.md_5.bungee.protocol | 76 | 100% Mirror |
| net.md_5.bungee.protocol.channel | 3 | 100% Mirror |
| net.md_5.bungee.tab | 7 | 100% Mirror |
| org.bukkit | 896 | 100% Mirror |
| org.bukkit.advancement | 26 | 100% Mirror |
| org.bukkit.attribute | 16 | 100% Mirror |
| org.bukkit.ban | 8 | 100% Mirror |
| org.bukkit.block | 401 | 100% Mirror |
| org.bukkit.block.banner | 3 | 100% Mirror |
| org.bukkit.block.data | 81 | 100% Mirror |
| org.bukkit.block.data.type | 184 | 100% Mirror |
| org.bukkit.block.sign | 8 | 100% Mirror |
| org.bukkit.boss | 35 | 100% Mirror |
| org.bukkit.command | 79 | 100% Mirror |
| org.bukkit.command.defaults | 0 | 100% Mirror |
| org.bukkit.configuration | 81 | 100% Mirror |
| org.bukkit.configuration.file | 10 | 100% Mirror |
| org.bukkit.configuration.serialization | 3 | 100% Mirror |
| org.bukkit.conversations | 20 | 100% Mirror |
| org.bukkit.damage | 14 | 100% Mirror |
| org.bukkit.enchantments | 26 | 100% Mirror |
| org.bukkit.entity | 1694 | 100% Mirror |
| org.bukkit.entity.boat | 0 | 100% Mirror |
| org.bukkit.entity.minecart | 21 | 100% Mirror |
| org.bukkit.event | 8 | 100% Mirror |
| org.bukkit.event.block | 5 | 100% Mirror |
| org.bukkit.event.entity | 2 | 100% Mirror |
| org.bukkit.event.hanging | 1 | 100% Mirror |
| org.bukkit.event.inventory | 5 | 100% Mirror |
| org.bukkit.event.player | 12 | 100% Mirror |
| org.bukkit.event.raid | 1 | 100% Mirror |
| org.bukkit.event.server | 2 | 100% Mirror |
| org.bukkit.event.vehicle | 2 | 100% Mirror |
| org.bukkit.event.weather | 1 | 100% Mirror |
| org.bukkit.event.world | 2 | 100% Mirror |
| org.bukkit.generator | 72 | 100% Mirror |
| org.bukkit.generator.structure | 7 | 100% Mirror |
| org.bukkit.help | 13 | 100% Mirror |
| org.bukkit.inventory | 309 | 100% Mirror |
| org.bukkit.inventory.meta | 346 | 100% Mirror |
| org.bukkit.inventory.meta.components | 58 | 100% Mirror |
| org.bukkit.inventory.meta.tags | 11 | 100% Mirror |
| org.bukkit.inventory.meta.trim | 8 | 100% Mirror |
| org.bukkit.inventory.view | 60 | 100% Mirror |
| org.bukkit.inventory.view.builder | 15 | 100% Mirror |
| org.bukkit.loot | 9 | 100% Mirror |
| org.bukkit.map | 33 | 100% Mirror |
| org.bukkit.material | 21 | 100% Mirror |
| org.bukkit.metadata | 35 | 100% Mirror |
| org.bukkit.packs | 5 | 100% Mirror |
| org.bukkit.permissions | 16 | 100% Mirror |
| org.bukkit.persistence | 12 | 100% Mirror |
| org.bukkit.plugin | 79 | 100% Mirror |
| org.bukkit.plugin.java | 32 | 100% Mirror |
| org.bukkit.plugin.messaging | 24 | 100% Mirror |
| org.bukkit.potion | 17 | 100% Mirror |
| org.bukkit.profile | 17 | 100% Mirror |
| org.bukkit.projectiles | 4 | 100% Mirror |
| org.bukkit.scheduler | 52 | 100% Mirror |
| org.bukkit.scoreboard | 117 | 100% Mirror |
| org.bukkit.spawner | 39 | 100% Mirror |
| org.bukkit.structure | 30 | 100% Mirror |
| org.bukkit.util | 15 | 100% Mirror |
| org.bukkit.util.noise | 23 | 100% Mirror |
33 changes: 33 additions & 0 deletions HANDOFF.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Handoff Notes: MetaMiner Refactoring & Technical Debt Cleanup

## 📌 Context

Completed a maintenance cycle on the MetaMiner engine to resolve IDE-reported warnings, reduce cognitive complexity, and fix unnecessary suppressions in generated mock interfaces.

## ✅ Completed in this Session

- **`BaseMockGenerator.java`**:
- Extracted helper methods for quirk processing and suppression logic (Complexity reduced from 18+ to within limits).
- Introduced constants for recurring JSON keys (`METHOD_QUIRKS`, `REPLACEMENT`).
- **Crucial Fix**: Removed redundant `@SuppressWarnings("deprecation")` on method implementations that were only deprecated themselves. Suppression is now surgically applied only if the return/parameter types are deprecated.
- **`BaseTestGenerator.java`**:
- Modularized class scanning and class loading.
- Simplified safe-default check logic.
- Updated logging to follow JUL best practices.
- **`CoverageReportGenerator.java`**:
- Modularized method counting.
- Switched to platform-neutral line separators (`%n`).
- **API Mirroring**: Successfully regenerated 13,733 methods across all platforms (Bukkit, Paper, Velocity, Bungee) with 100% mechanical coverage.
- **Verification**: Verified that `CommandManagerBaseMock.java` (Velocity) and others are now clean of "Unnecessary @SuppressWarnings" warnings. Full compilation build succeeded.

## 🛠 Status of Phase 4

- **DCE (Dead Code Elimination)**: Complete.
- **Generator Polish**: Complete.
- **Next Steps**: Transition to **Functional Depth**. The engine is now "clean" and stable, providing a high-fidelity mechanical mirror. The focus should shift to manual behavior implementation for complex entities (Warden, Bee, etc.) as outlined in `TODO.md`.

## ⚠️ Notes for Next Agent

- **Stale IDE Metadata**: You may occasionally see ghost errors (like syntax errors on comments) in the `current_problems` metadata due to IDE lag during massive file regenerations. Always trust `./gradlew compileJava` as the source of truth.
- **LinkageErrors**: The generators now explicitly catch `LinkageError` during reflection to gracefully skip classes with unresolvable dependencies in the provided JARs. Check logs for warnings if specific classes aren't appearing in the mirror.
- **Spotless**: Always run `./gradlew spotlessApply` after regeneration to ensure consistent formatting (tabs vs. spaces) as the generators output raw JavaPoet code which might differ slightly from the project's formatting rules.
Loading
Loading