feat(config): add validated durable Tree Feller state

This commit is contained in:
dmg
2026-08-11 17:14:56 -04:00
parent 39fb3cfc57
commit 12a8e84535
15 changed files with 795 additions and 17 deletions
@@ -2,7 +2,7 @@
type: User Story
title: "US-008: Configure and persist Tree Feller"
description: Provide validated configuration and durable player state for predictable tree-felling behavior.
status: backlog
status: done
---
# US-008: Configure and persist Tree Feller
@@ -11,21 +11,21 @@ As a **server operator**, I want Tree Feller's behavior and player progression s
## Acceptance criteria
- [ ] Configuration defines supported species and their thresholds, each defaulting to 100 qualifying blocks.
- [ ] Configuration defines an animation delay defaulting to two server ticks per felled block.
- [ ] Configuration defines a progress boss-bar timeout defaulting to five seconds and an undo window defaulting to six minutes.
- [ ] Configuration includes bounded tree-search limits, boss-bar presentation, title timing, and all player-facing messages.
- [ ] Numeric settings reject zero, negative, overflowing, or operationally unsafe values using documented bounds.
- [ ] Invalid required configuration prevents partial plugin initialization and produces a clear server log message identifying the setting.
- [ ] Runtime threshold changes made through `/treefelleradmin` are persisted before becoming active and survive restart.
- [ ] A failed runtime configuration write leaves the active threshold unchanged.
- [ ] UUID-keyed player state persists latest known name, enabled preference, administrative lock, per-species progress, and earned unlocks.
- [ ] Player identity resolution safely retains previously known names while UUID remains authoritative.
- [ ] Player state is written atomically where supported so that a failed write does not replace valid state with a partial document.
- [ ] Corrupt or invalid player records are handled defensively and cannot silently grant unlocks or administrative privileges.
- [ ] Progress that exceeds a currently configured threshold is retained, and counters cannot overflow.
- [ ] Unknown forward-compatible configuration and player-state fields are preserved where practical.
- [ ] Undo records are runtime safety records and do not survive a server restart unless a later approved design explicitly adds durable undo.
- [x] Configuration defines supported species and their thresholds, each defaulting to 100 qualifying blocks.
- [x] Configuration defines an animation delay defaulting to two server ticks per felled block.
- [x] Configuration defines a progress boss-bar timeout defaulting to five seconds and an undo window defaulting to six minutes.
- [x] Configuration includes bounded tree-search limits, boss-bar presentation, title timing, and all player-facing messages.
- [x] Numeric settings reject zero, negative, overflowing, or operationally unsafe values using documented bounds.
- [x] Invalid required configuration prevents partial plugin initialization and produces a clear server log message identifying the setting.
- [x] Runtime threshold changes made through `/treefelleradmin` are persisted before becoming active and survive restart.
- [x] A failed runtime configuration write leaves the active threshold unchanged.
- [x] UUID-keyed player state persists latest known name, enabled preference, administrative lock, per-species progress, and earned unlocks.
- [x] Player identity resolution safely retains previously known names while UUID remains authoritative.
- [x] Player state is written atomically where supported so that a failed write does not replace valid state with a partial document.
- [x] Corrupt or invalid player records are handled defensively and cannot silently grant unlocks or administrative privileges.
- [x] Progress that exceeds a currently configured threshold is retained, and counters cannot overflow.
- [x] Unknown forward-compatible configuration and player-state fields are preserved where practical.
- [x] Undo records are runtime safety records and do not survive a server restart unless a later approved design explicitly adds durable undo.
## Related