# Rules Mod Changelog

## [1.0.5] - 2026-04-13

### Fixed
- **Console path never fetched from Discord** — `/rules` from server console hit early return that only read from cache/fallback, never triggered `DiscordFetcher`. Console now fetches async like the player path.
- **DIAG logs placed after early exit** — moved `[DIAG]` logging before the player/console branch so it fires on every invocation regardless of source

### Added
- `[DIAG]` INFO-level logging on every `/rules` invocation: isPlayer, token length, channel, messageId, isValid
- INSTALL.md note about testing from console vs in-game

### Applies To
- All 6 builds at 1.0.5 (3 firefrostrules + 3 discordrules)

---

## [1.0.4] - 2026-04-13 *(diagnostic build — 1.20.1 only)*

### Added
- INFO-level `[DIAG]` logging in RulesCommand: token length, channel ID, message ID, isValid result on every `/rules` invocation
- INFO-level `[DIAG]` logging in DiscordFetcher: fetch attempt start, raw messageId on validation failure, HTTP target URL
- Purpose: trace exactly where the config-to-fetch pipeline breaks on Otherworld

### Note
- Only `firefrostrules-1.0.4-1.20.1-forge.jar` was built. Other versions remain at 1.0.3.

---

## [1.0.3] - 2026-04-13

### Fixed
- **1.20.1: Config events on wrong bus** — `ModConfigEvent.Loading` and `Reloading` fire on the mod event bus, not `MinecraftForge.EVENT_BUS`. Moved to `FMLJavaModLoadingContext.getModEventBus().addListener()`
- **Config file section headers** — values placed outside `[discord]` section are invisible to the spec. Added prominent warning comments to generated config file

### Added
- Debug logging in RulesCommand (1.20.1) prints token length + channel ID at command time
- Config file header comment: "Do not remove [section] headers when editing"
- INSTALL.md updated with section header preservation warning

### Applies To
- All 6 builds bumped to 1.0.3

---

## [1.0.2] - 2026-04-13

### Fixed
- **Config reset on restart** — switched from `ModConfig.Type.SERVER` to `ModConfig.Type.COMMON`
- SERVER configs live in `world/serverconfig/` and are tied to world load/unload lifecycle, causing Forge to overwrite edited values on every restart
- COMMON configs live in `config/` and load once at startup — values persist reliably

### Changed
- Config location: `world/serverconfig/firefrostrules-server.toml` → `config/firefrostrules-common.toml`
- Config location (generic): `world/serverconfig/discordrules-server.toml` → `config/discordrules-common.toml`
- Updated `INSTALL.md` with new config path

### Breaking
- Old config file at `world/serverconfig/` will be ignored — must re-enter values in new `config/` location

### Applies To
- `firefrostrules` 1.0.2 (FFG branded, all 3 MC versions)
- `discordrules` 1.0.2 (generic/CurseForge fork, all 3 MC versions)

---

## [1.0.1] - 2026-04-13

### Fixed
- Config values no longer reset to defaults on server restart (Forge config spec timing issue)
- Added `ModConfigEvent.Loading` handler with clear warnings when default config is detected

### Added
- Install procedure documentation in `INSTALL.md`
- `Loading` event handler logs channel ID on successful config read

### Applies To
- `firefrostrules` 1.0.1 (FFG branded, all 3 MC versions)
- `discordrules` 1.0.1 (generic/CurseForge fork, all 3 MC versions)

---

## [1.0.0] - 2026-04-12

### Added
- Initial release
- `/rules` command fetches rules from a Discord message via bot token
- 30-minute cache with fallback to defaults
- 60-second per-player cooldown
- Configurable via `world/serverconfig/firefrostrules-server.toml`
- `discordrules` generic fork for CurseForge distribution (no FFG branding, configurable colors)
