Repository navigation
[4/10] Update features, settings parsing, and sync delivery - #367
Merged
netniV merged 10 commits intoNov 14, 2026
Merged
Conversation
added 10 commits
October 15, 2026 16:40
Notification cues and native playback move into the feature file that uses them, with one sound API name across the settings reader, the toast hook and the platform code. Toasts format typed parameters in one pass over the template. A value containing another placeholder is no longer read as a placeholder itself, and each cue generates only the requested sound instead of nine buffers.
Haven camera and history hooks move onto game bindings and feature descriptors, and the last callers of the legacy helper layer go away with them. The road depth code merges into the Haven feature and its separate cache header and test are gone. Invalid zoom values fall back to the section default, and Haven settings stay together in the reader.
Pooled artifact widgets can leave and re-enter the live instance set. The inventory activation lifecycle is bound so the tracker follows the widget while it is active instead of keeping a stale entry. The shop keeps its first popup per session and suppresses later ones before they open, not after.
The current client no longer exposes the daily-goals button, so its binding and reader key are removed. The HUD hooks follow the supported mission refresh path and read current mission state. Mission HUD preferences are typed fields named after their TOML keys, read directly instead of through a string map rebuilt per refresh.
Global sent caches and dropping queues become canonical records with an independent cursor per target. Payloads are shared and immutable, and requests are built outside the store lock. Failed uploads retry with backoff, newer values coalesce, and stale session work is rejected. Journals keep 300 recent entries per session so they can replay after login.
Parsing only turns a TOML table into settings now. Writing the vars file, creating a missing file and printing the first load move to the callers that own them. The reader becomes testable: the logic tests parse the English example with the real reader and check that every documented key is read and no documented value is rejected.
Actions, defaults, tiers and aliases come from one definition file instead of repeated tables. Bindings are built as a parsed value before publishing, so a bad chord cannot mutate live state. Each modifier is described once and used for parsing, display names and matching, keeping left and right aliases consistent across all three.
Sync threads held references into settings that a reload replaces. They now own an immutable snapshot, and workers for removed targets are released with their queues. Suppressed log levels no longer copy settings or build request descriptions, and session checks compare a generation number instead of copying credentials on every poll.
Overlapping timers become explicit ship swap, officer swap and officer preset stages. A new screen request replaces the old one, and disabling hotkeys cancels pending work. Held and down results are cached in the frame snapshot, including negative results, so repeated checks in one frame agree. Asking for alliance help runs before its result is combined, where short-circuiting previously skipped it.
Pinning cleared and re-added every ship in the dock list. It now visits a snapshot in pinned and unpinned passes and sets only changed slots, so the list keeps its count. Instance snapshots are taken once per operation instead of rescanning GC handle lists for each tracked object.
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.
Part 4 of 10 · base
refactor/03-runtime-refactor· 10 commitsWith features owning their state, three rough edges remain: settings parsing still touches files and live state, sync progress is kept in global caches that drop work, and a few feature hooks no longer match the current client. This PR makes parsing a pure step, gives sync a per-target record store, and brings those hooks up to date.
What changes
Settings and shortcuts:
Config::Parseonly turns a TOML table into settings now. Writing the vars file, creating a missing file, and printing the first load move to the callers that own them. The logic tests parse the English example with the real reader and check that every documented key is read and no documented value is rejected.Sync:
Features:
Behavior changes
Testing
Built with xmake. Every commit was built on macOS arm64, and this PR's commits also built the test targets. Nothing was run in the game.