Bump KitsuneCommand to v2.6.3#63
Merged
Merged
Conversation
Marquee additions since v2.6.2: - Graceful Restart feature: scheduled daily restarts with player-friendly in-game countdown warnings. Configurable warning ladder, IANA-timezone schedule (DST-aware), krestart console command, REST endpoints, panel Settings tab. - Backups bug fix: BackupService had a redundant conn.Open() call that silently dropped writes (custom System.Data.SQLite quirk). Reads kept working so the bug wasn't caught until the first hands-on test. - Vote Rewards player-id resolution: dispatch now resolves the voter via LivePlayerManager so points land on the player's real EOS-keyed row instead of orphaning a Steam_-keyed sibling row. - 3 new locales: German, French, Spanish. Polite-form translations throughout. Browser auto-detect now matches de-* / fr-* / es-* visitors to their locale. Plus a tooltip on the language switcher explaining that in-game broadcast strings stay in their saved language. - Favicon refresh: regenerated from the canonical kitsune-command-logo PNG so browser-tab and panel-sidebar branding match. README: - Vote Rewards added to the Economy & Rewards features list (was missing — the feature shipped in v2.6.2 but the README missed it) - Graceful Restart added to Server Management features - Trader Zone Toggle added to Server Management (was missing too) - Localization bumped 5 -> 8 languages, with auto-detect note Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 tasks
AdaInTheLab
added a commit
that referenced
this pull request
May 13, 2026
Rolls up everything since v2.6.2 into a single release tag. v2.6.3 was bumped on main (#63) but never tagged or released — folding it into v2.6.4 keeps the public release history clean. Marquee additions since v2.6.2: - Modpack (#64) — Bundle installed mods into a single zip players can download from the login page. No panel account required. Three-state workflow (draft → published → archived), top-right CTA on the login page, anonymous metadata + download endpoints. Atomic temp-file zip build so public downloaders can't grab a half-written archive. - Graceful Restart (#57, #58) — Scheduled daily restarts with player-friendly in-game countdown warnings. Configurable warning ladder, IANA-timezone schedule (DST-aware), krestart console command, REST endpoints, panel Settings tab. - Backups bug fix (#56) — BackupService had a redundant conn.Open() call that silently dropped writes due to a custom System.Data.SQLite quirk. Reads worked, so the bug went unnoticed until first hands-on test. Six call sites fixed, class doc comment added so future-me doesn't reintroduce it. - German / French / Spanish locales (#59, #61, #62) — Full polite-form translations across ~250 keys / 30 namespaces. Browser auto-detect picks the right one for de-* / fr-* / es-* visitors. Tooltip on the language switcher noting that in-game broadcast messages don't auto-translate. - Favicon (#60) — Regenerated all four favicon variants (svg / 16 / 32 / ico) from kitsune-command-logo-transparent.png so the browser tab matches the panel's sidebar logo. - README updates: features list now reflects all the above. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Version bump for v2.6.3 + README catch-up. Tag the release after this merges.
What's in v2.6.3
Marquee feature: Graceful Restart
Schedule a daily server restart with player-friendly in-game countdown warnings. Configurable warning ladder (default 10/5/1/0 min with escalating colors), IANA-timezone schedule that handles DST automatically, manual `krestart` console command, REST API at `/api/restart/*`, dedicated Settings tab. Replaces the brittle "systemctl restart at 4am with no warning" pattern most admins were stuck with. (#57, #58)
3 new locales: German, French, Spanish
Full polite-form translations alongside the existing English / 简体中文 / 繁體中文 / 日本語 / 한국어. Browser auto-detect now matches `de-` / `fr-` / `es-*` visitors directly to their language. New tooltip on the language switcher flags that in-game broadcast strings (vote thanks, restart warnings) stay in their saved language — they don't auto-translate when the panel UI does. (#59, #61, #62)
Backups: silent write loss fix
`BackupService` had six redundant `conn.Open()` calls inside `using (var conn = _db.CreateConnection())` blocks. The factory already returns an opened connection, so this was opening twice — and the custom-built System.Data.SQLite that ships with the mod has a quirk where this silently drops subsequent INSERT/UPDATE statements without throwing. Result: clicking Create Backup made the ZIP on disk but the audit row never persisted, the schedule scheduler's settings save silently dropped, and the panel reported "No backups yet" forever. Fix: remove the double-Opens. Self-explanatory. (#56)
Vote Rewards: correct player-id resolution
Dispatch was naively returning `Steam_<76digit>` as the player_id, which doesn't match the actual cross-platform id 7D2D V2 uses (`EOS_<32hex>` for everyone, including Steam-platform players). Result: every vote-grant created an orphan `points_info` row keyed by Steam_-form instead of merging with the player's real EOS-keyed row. Fix: resolve via LivePlayerManager when the voter is online; document the offline-fallback edge case in code. (#54)
Favicon refresh
Browser-tab favicon was the original orange cartoon-fox silhouette from v2.6.1. The actual panel logo (sidebar, login) is the green geometric circuit-kitsune in a ring. They didn't read as the same brand. Regenerated all four favicon variants (`favicon.svg` / `favicon-{16,32}x{16,32}.png` / `favicon.ico`) from the canonical `kitsune-command-logo-transparent.png` so the tab matches the panel. `tools/regen-favicons.py` keeps them in lockstep if the logo ever changes. (#60)
README catch-up
The features list missed:
Added all three. Localization bumped from "5 Languages" to "8 Languages" with auto-detect note.
Files
Test plan
🤖 Generated with Claude Code