--- type: Log title: Spigot Quest Board Knowledge Log description: Chronological record of material decisions affecting Spigot Quest Board. --- # Spigot Quest Board Knowledge Log ## 2026-09-05 — Initial quest-board design - Administrators create physical quest boards, and every board exposes the same global quests and claims. - Players create quests by selecting a requested block material and quantity and escrowing reward items from their inventory. - Completing players deliver the requested block items at a board and immediately receive the escrowed reward. - Delivered blocks remain held by the quest system until the issuer claims them at a board. - Cancelled and seven-day-expired quests return escrowed rewards through the same claim system rather than direct inventory delivery. - Inventory overflow from rewards or claims is dropped at the receiving player's feet. - Player `/quests` commands are disabled by default so administrators can require physical-board interaction. - The board interface follows Spigot Base by using Purpur's supported native dialog API. ## 2026-09-05 — Foundation started - Approved work begins with an OKF knowledge bundle, Java 25/Purpur 26.2 Gradle foundation, automated verification, and a public Gitea repository. ## 2026-09-05 — Foundation completed - Published the project to the public `dmg/spigot-quest-board` Gitea repository. - Added strict Java 25/Purpur 26.2 Gradle builds, plugin metadata, a metadata regression test, and CI/release workflows modeled on Spigot Base. - Verified the plugin foundation and JAR with `./gradlew clean check jar`. ## 2026-09-05 — Shared physical quest boards - Added durable world-UUID and block-coordinate board registration through `/questadmin createboard`. - Registered main-hand interactions open one shared native Purpur dialog while unregistered blocks remain untouched. - Persistence publishes a board only after an atomic YAML save succeeds and rejects duplicate locations. - Verified 11 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Quest creation and reward escrow - Added board-dialog and `/quests create ` creation using a valid block material, positive quantity, and the exact held reward stack. - Escrow preserves full Bukkit item metadata in durable Base64-backed YAML and rolls inventory removal back if persistence fails. - Quests receive UUID identifiers and UTC creation and seven-day expiration timestamps. - Verified 26 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Shared quest browsing - Added globally shared active-quest listings to every board and to `/quests` and `/quests list`. - Listings include requested blocks, exact reward summaries, issuer names, and boundary-safe remaining durations. - Added persisted lifecycle status with backward-compatible active defaults and filtered stale quest IDs from contextual completion and cancellation suggestions. - Verified 37 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Block delivery and quest completion - Added board actions and `/quests complete ` for exact requested-material delivery from player inventories. - Completion serializes state transitions, holds delivered blocks in durable issuer claims, and grants exact escrowed rewards with owner-protected overflow drops. - Added durable online and next-login issuer notifications and rollback before persistence succeeds. - Verified 49 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Issuer quest cancellation - Added issuer-only board actions and `/quests cancel ` with ownership-filtered autocomplete. - Cancellation atomically moves exact reward escrow into an issuer claim without directly changing inventory. - Serialized cancellation against completion and retained active state when persistence fails. - Verified 58 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Quest expiration and held-item claims - Added boundary-safe scheduled expiration that moves exact rewards into durable issuer claims. - Added claim collection at every board and through `/quests claim`, distinguishing delivered blocks from cancelled or expired reward returns. - Inventory overflow drops at the claimant's feet with ownership protection, and failed claim acknowledgement rolls inventory and drops back before retry. - Added persisted online and next-login expiry notifications. - Verified 73 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Administrative player-command control - Disabled all player `/quests` command forms and autocomplete by default while preserving equivalent physical-board actions. - Added persistent `/questadmin commands enable|disable` control with permission-aware autocomplete and failure-safe updates. - Kept administrative board creation available independently of the player-command setting. - Verified 82 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Screen-fitting quest-board dialogs - Replaced the clipped 800-pixel combined board screen with a compact 420-pixel dashboard. - Split browsing, creation, and claims into dedicated native dialog screens with Back navigation. - Presented active quests as individual detail dialogs while retaining completion and issuer cancellation actions. - Verified 88 tests, including a 250-quest navigation case, and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Generated physical quest boards - Added `/questadmin createboard physical` to generate a five-wide, four-tall board above the targeted ground anchor facing the administrator. - Used oak-log pillars, an oak-plank face, and three oak wall signs with obfuscated decorative text. - Registered all visible planks and signs in one durable operation and added obstruction checks plus block rollback when construction or persistence fails. - Preserved existing single-block board creation and persisted board compatibility. - Verified 103 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Readable physical-board signage - Added centered `Quest Board` and right-click instruction signs on the two layers above each generated board's three decorative signs. - Registered all five signs and the plank face as shared-board interaction locations. - Added exact legacy-structure detection and failure-safe startup upgrades for previously generated three-sign boards without touching custom or altered structures. - Verified 111 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Glowing readable board signs - Enabled glowing front-side text on generated title and instruction signs while retaining non-glowing decorative signs. - Added exact full-structure detection to refresh existing generated boards once without modifying custom or altered signs. - Added two-sign snapshot rollback when a refresh cannot complete safely. - Verified 116 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Nearby command-based quest creation - Allowed `/quests create ` and its material and quantity autocomplete within five blocks of any registered board location even while global player commands are disabled. - Kept listing, completion, cancellation, and claiming commands disabled under that setting while preserving global command behavior when enabled. - Enforced same-world Euclidean proximity with an inclusive five-block boundary for custom and generated boards. - Verified 121 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-05 — Named reward identification - Displayed custom reward names together with their material type in shared board details and command listings, such as `1 × Shopping List (PAPER)`. - Stored safe plain-text custom names alongside unchanged exact item metadata and inferred names from valid historical escrow data when possible. - Kept malformed or unavailable metadata from blocking quest browsing by falling back to material descriptions. - Verified 128 tests and the plugin JAR with `./gradlew clean check jar`. ## 2026-09-07T01:31:27Z — Login quest guidance and recurring claim reminders - Extended [US-004](user-stories/us-004-browse-available-quests.md) with a private active, unexpired quest count on every login and guidance to visit the quest board to accept or create a quest. - Extended [US-007](user-stories/us-007-expire-quests-and-claim-held-items.md) with reminders on every login while actual pending claims remain, independently of notification acknowledgement and across reloads. - Preserved existing real-time and durable notifications without changing claim storage or collection. - Confirmed new behavior tests failed before implementation, then verified all 130 tests and the plugin JAR with `./gradlew clean check jar`.