feat(admin): add Tree Feller administration

This commit is contained in:
dmg
2026-08-11 17:37:56 -04:00
parent 2664f7c68b
commit 206096efc2
14 changed files with 710 additions and 21 deletions
+9
View File
@@ -2,6 +2,15 @@
## 2026-08-11
### US-007 administration completed
- Added the dedicated permission-gated `/treefelleradmin` tree for player status, species grants and resets, global player felling locks, and persistent per-species thresholds.
- Added exact live-name, durable-alias, and UUID target resolution with ambiguity rejection and UUID authority.
- Added positional, permission-aware completion for roots, known players, properties, species identifiers, actions, and boolean values.
- Administrative mutations are idempotent, persist before reporting success, preserve unrelated state, and notify online targets without using earned-achievement titles.
- Administratively locked players continue manual progress, receive a configurable explanation when felling is suppressed, and retain their preference and unlocks.
- Verified grants, resets, locks, thresholds, identity safety, online messaging, autocomplete, authorization, and the complete build with `./gradlew clean check jar`.
### US-006 unlock announcement checkpoint
- Added configurable, placeholder-aware titles, subtitles, timing, and chat guidance for newly earned species.
@@ -2,7 +2,7 @@
type: User Story
title: "US-007: Administer Tree Feller"
description: Give administrators separate, structured commands for player access, progress, and species thresholds.
status: backlog
status: done
---
# US-007: Administer Tree Feller
@@ -11,22 +11,22 @@ As a **server administrator**, I want a dedicated administrative command tree so
## Acceptance criteria
- [ ] All administrative operations are rooted at `/treefelleradmin` rather than `/treefeller`.
- [ ] Administrative commands require `treefeller.admin`, which server operators receive by default and ordinary player permissions never imply.
- [ ] `/treefelleradmin player <name|uuid> status` reports identity, saved enabled preference, administrative lock, and each species' progress, threshold, and unlock state.
- [ ] `/treefelleradmin player <name|uuid> tree <type> grant` grants that species permanently without altering unrelated species.
- [ ] `/treefelleradmin player <name|uuid> tree <type> reset` removes that species' unlock and resets its progress to zero without altering unrelated species.
- [ ] A reset player can earn the species again and receive its normal earned-unlock announcement.
- [ ] `/treefelleradmin player <name|uuid> locked <on|off>` controls an override that prevents all automatic felling for the player without changing their preference, progress, or unlocks.
- [ ] An administratively locked player may continue accruing qualifying manual progress and receives a clear explanation when automatic felling is suppressed.
- [ ] `/treefelleradmin threshold <type> <blocks>` validates and persistently changes the named species' unlock threshold.
- [ ] Lowering a threshold does not scan or immediately mutate all player records; each affected player unlocks on their next qualifying block of that species.
- [ ] Raising a threshold never revokes existing unlocks.
- [ ] Player targets resolve exact online names, previously known names, and UUIDs without confusing players who have used the same name.
- [ ] Tree-type arguments use stable documented identifiers covering every supported species.
- [ ] Autocomplete is permission-aware and suggests valid subcommands, known player targets, properties, tree types, actions, and values for the current argument position.
- [ ] Every successful mutation reports exactly what changed to the administrator and, when online, the affected player.
- [ ] Invalid or unauthorized requests make no partial state or configuration changes.
- [x] All administrative operations are rooted at `/treefelleradmin` rather than `/treefeller`.
- [x] Administrative commands require `treefeller.admin`, which server operators receive by default and ordinary player permissions never imply.
- [x] `/treefelleradmin player <name|uuid> status` reports identity, saved enabled preference, administrative lock, and each species' progress, threshold, and unlock state.
- [x] `/treefelleradmin player <name|uuid> tree <type> grant` grants that species permanently without altering unrelated species.
- [x] `/treefelleradmin player <name|uuid> tree <type> reset` removes that species' unlock and resets its progress to zero without altering unrelated species.
- [x] A reset player can earn the species again and receive its normal earned-unlock announcement.
- [x] `/treefelleradmin player <name|uuid> locked <on|off>` controls an override that prevents all automatic felling for the player without changing their preference, progress, or unlocks.
- [x] An administratively locked player may continue accruing qualifying manual progress and receives a clear explanation when automatic felling is suppressed.
- [x] `/treefelleradmin threshold <type> <blocks>` validates and persistently changes the named species' unlock threshold.
- [x] Lowering a threshold does not scan or immediately mutate all player records; each affected player unlocks on their next qualifying block of that species.
- [x] Raising a threshold never revokes existing unlocks.
- [x] Player targets resolve exact online names, previously known names, and UUIDs without confusing players who have used the same name.
- [x] Tree-type arguments use stable documented identifiers covering every supported species.
- [x] Autocomplete is permission-aware and suggests valid subcommands, known player targets, properties, tree types, actions, and values for the current argument position.
- [x] Every successful mutation reports exactly what changed to the administrator and, when online, the affected player.
- [x] Invalid or unauthorized requests make no partial state or configuration changes.
## Related