Skip to content

v0.3.12

Choose a tag to compare

@github-actions github-actions released this 28 May 21:10
· 21 commits to main since this release

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 — fires AddItemToInventory over RabbitMQ with the configured itemName (Unreal FName / row name), quantity, and durability.
    • refillWater — fires the water refill server-command with a per-action delayAfterPreviousSecs gate (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.whispers using 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.cmd helper 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 clobbers welcome_package_actions_json when both are sent in the same PATCH /api/config request. The legacy field is only applied when the canonical field is absent.
  • welcome_package_version mismatches now return 400 "currently fixed to v1 and cannot be changed" instead of accepting the value and silently dropping it. Echoing the same v1 value remains a no-op so the existing UI save flow still works.
  • Dropped the inline 30-second wait_for_item_quantity poll inside process_grant_item. The next scan tick already confirms via the current >= expected readback, and the blocking wait was serializing every other player behind one slow grant.
  • The first_online_at reset 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_secs defaults to 30s and online_grace_secs defaults 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 same welcome_package_version will leave any previously Confirmed records in place at their existing indexes, so new items inserted at those indexes will be skipped. The welcome_package_version field is currently pinned to v1 server-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.