v0.3.12
0.3.12
First release of the Welcome Package automation: a per-player onboarding chain that runs on the on-host management service, detects new players from the game Postgres database, and grants configured inventory items / water / a welcome whisper through the existing MQ server-command path. Includes a Visual + JSON editor in the desktop app, a SQLite-backed ledger, and several follow-up fixes from internal review.
This is the first tagged release since v0.3.9. All 0.3.10 / 0.3.11 / 0.3.12 work ships together.
Reinstall step
After updating the desktop app, open each server's Management Service card and click Install / Update so the refreshed on-host dune-server-service binary is pushed. The Welcome Package tab will not function until the host service is at v0.3.12.
Added
- Welcome Package tab in the management view, with separate toggles for the welcome message (whisper) and the package (item / water grants) plus an optional "empty backpack" gate before grants fire.
- Action chain editor with two action types:
grantItem— firesAddItemToInventoryover RabbitMQ with the configureditemName(Unreal FName / row name),quantity, anddurability.refillWater— fires the water refill server-command with a per-actiondelayAfterPreviousSecsgate (0-600).
- Optional raw JSON mode on the Action chain editor. Toggle the checkbox to swap the visual editor for a textarea you can paste / hand-edit, so a long chain can be saved and restored without re-clicking every row. Switching back to the visual editor parses and validates first; an invalid textarea keeps you in JSON mode with an inline error so a typo cannot silently drop actions.
- Welcome whisper support: configurable source player, message body, and a separate "Send test whisper" button that works even when the automated welcome message is disabled. Whispers publish on
chat.whispersusing the live-tested player-sourced shape. - One-tick batch publish: when a player passes all gates, the chain publishes every grant action in a single scan tick instead of one-per-tick. Postgres readback per item still confirms one action per tick on the following cycles.
- Inventory-presence gate: the chain waits to start until the player has at least one item in any inventory. An empty pawn means the character has not finished loading and MQ server-commands would be dropped. Only enforced before the first action is published; once the chain has started, confirmation runs to completion.
- Welcome message chain action (
sendWelcomeMessage) that can be embedded in the action chain instead of (or in addition to) the standalone "welcome message" toggle, driven by the same whisper source / body. - Recent welcome grants table in the Welcome Package tab, backed by the daemon ledger.
- Manual welcome scan button in the Automated Tasks tab so a test pass does not have to wait for the next poll interval.
scripts/rebuild-release.cmdhelper for local release rebuilds: workspace tests, frontend build, musl service cross-compile, bundled binary copy, and Tauri NSIS in one shot.
Fixed
welcome_package_items_json(legacy alias) no longer clobberswelcome_package_actions_jsonwhen both are sent in the samePATCH /api/configrequest. The legacy field is only applied when the canonical field is absent.welcome_package_versionmismatches now return400 "currently fixed to v1 and cannot be changed"instead of accepting the value and silently dropping it. Echoing the samev1value remains a no-op so the existing UI save flow still works.- Dropped the inline 30-second
wait_for_item_quantitypoll insideprocess_grant_item. The next scan tick already confirms via thecurrent >= expectedreadback, and the blocking wait was serializing every other player behind one slow grant. - The
first_online_atreset on Offline transitions is the intended design (it restarts the online-grace timer on rejoin because the chat / inventory subsystems need to settle after the player's controller is rebound). A short-lived change preserving the timestamp across Offline transitions was reverted.
Changed
- Renamed the welcome automation toggles to "new players" in the UI so the wording matches the worker's actual scope.
- Split welcome message automation from welcome package grants so each can be enabled independently. Sending a manual test welcome whisper no longer overwrites unsaved tab state.
Notes
- Welcome Package timing on a fresh player:
poll_secsdefaults to 30s andonline_grace_secsdefaults to 20s. From first Online detection to first publish is one scan tick (~30s); the 20s grace fits inside that window. Worst case (Offline at one tick, Online at the next) is two ticks (~60s). - The ledger is keyed by
(player_id, package_version, action_index). Editing the action list while keeping the samewelcome_package_versionwill leave any previously Confirmed records in place at their existing indexes, so new items inserted at those indexes will be skipped. Thewelcome_package_versionfield is currently pinned tov1server-side; "re-grant everyone" via a version bump is not yet wired up. - This experiment only grants inventory items and the water refill. Progression unlocks should stay out of direct DB writes until the game-owned tables and side effects are fully mapped.