feat(tamer): limit custody to one mob
Release / release (push) Successful in 2m42s
CI / build (push) Successful in 1m11s

This commit is contained in:
dmg
2026-08-21 21:47:42 -04:00
parent 34f32cd32d
commit 80810b3ba1
11 changed files with 182 additions and 8 deletions
@@ -28,10 +28,16 @@ As the **Tamer**, I want to capture a mob and release it elsewhere so that I can
- [x] If the former Tamer is offline or no safe release location is available, release is deferred without losing the captured mob.
- [x] A deferred release is retried when the former Tamer next logs in or reaches a safe location.
- [x] Tyrant death, class reassignment, opt-out, administration, and other Tamer-removal paths use the same release behavior.
- [x] A Tamer can hold custody of at most one captured mob at a time.
- [x] Attempting to capture another mob while one is held is rejected before changing either mob.
- [x] The Tamer is told to release the currently captured mob before capturing another.
- [x] Releasing or dropping the held mob immediately allows another capture.
- [x] The one-mob limit survives logout, restart, item recovery, and repeated or concurrent interaction.
- [x] If legacy state contains multiple captured mobs, extras are safely released when possible; custody is retained until release succeeds so no mob is lost.
## Validation
Automated tests verify that only former Tamers are processed, offline custody remains deferred, successful releases remove only their corresponding custody records, and failed releases remain available for retry. The complete `./gradlew clean check jar` lifecycle passes.
Automated tests verify that only former Tamers are processed, offline custody remains deferred, successful releases remove only their corresponding custody records, and failed releases remain available for retry. Additional tests verify pre-mutation rejection of a second capture, clear player guidance, and safe reduction of legacy excess custody. The complete `./gradlew clean check jar` lifecycle passes.
## Related