You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
add a reusable, process-lifetime fleet-state observation service
publish stable same-fleet state transitions to opt-in subscribers
let subscribers declare states that require bounded fast follow-through polling
share the existing ScreenManager.Update detour through a small callback dispatcher
start fleet scans only after the first subscriber registers
refresh the exposed FleetState values from the current client corpus
Scope boundary
This PR provides only the ability to observe fleet-state transitions. It intentionally contains no concrete watched behavior:
no arrival, destination, mining, depletion, docking, repair, or OPC policy
no system notification or audio delivery
no Fleet Watch TOML settings or localized example changes
no event catalog and no patch-table entry
Each watched condition and its presentation/delivery policy will be introduced in a follow-up PR using this subscription API.
Runtime model
With no subscribers, Fleet Watch performs no scans or IL2CPP work and emits no logs. The shared screen-update dispatcher executes an empty callback list from the existing hotkey detour.
The first subscriber joins that dispatcher. Initial fleet state is stabilized before transitions are published. A staggered manager probe checks one of ten slots every 250 ms, while subscriber-selected transient states receive bounded 250 ms follow-through polling before backing off to five seconds. Fleet Watch introduces no additional game-method detour.
Callbacks run synchronously on the game thread. The supplied FleetPlayerData* is callback-scoped; scalar before/after snapshots are safe to retain. Callback and predicate exceptions are contained, reentrant registration/dispatch is rejected, and observer state is committed before delivery.
active probe installed the subscriber and established a stable baseline for 7 fleet slots with zero mod errors
exact-head live sequence delivered one ordered callback per observed change for one stable slot/fleet: Docked → WarpCharging → Impulsing → IdleInSpace → Impulsing → IdleInSpace
three independent evidence-first review lanes found no confirmed source defect after corrections
Remaining evidence gaps
topology-change suppression was inspected statically but not induced during the exact-head runtime session
the live sequence proves ordered transition delivery, but does not independently timestamp the manager mutation needed to measure the claimed fast-poll latency
This PR seems to combine a few different ideas together in one. We should split out those which can be applied independently so as to avoid the noise. For example, the sound alerts are already part of another PR, etc.
It may be that as the others are applied, this will be smaller once updated.
@netniV Agreed — I rebuilt this PR from dev as the reusable observation foundation only. It is now 7 files instead of the prior 38-file combined change, with no sound, notifications, event catalog, TOML settings, or concrete arrival/mining/OPC/etc. behavior. Those will be separate consumer PRs.
The foundation is also manager-polling-only through the shared ScreenManager.Update owner, so it adds no new game-method detour. Exact-head local release/releasedbg cycles and a live ordered fleet transition sequence pass; macOS arm64/x86_64 and packaging CI are green. The Windows GitHub runner is currently stuck in its configure step (local exact-head Windows release is clean), so I’m leaving that check visible rather than implying it passed.
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
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
ScreenManager.Updatedetour through a small callback dispatcherFleetStatevalues from the current client corpusScope boundary
This PR provides only the ability to observe fleet-state transitions. It intentionally contains no concrete watched behavior:
Each watched condition and its presentation/delivery policy will be introduced in a follow-up PR using this subscription API.
Runtime model
With no subscribers, Fleet Watch performs no scans or IL2CPP work and emits no logs. The shared screen-update dispatcher executes an empty callback list from the existing hotkey detour.
The first subscriber joins that dispatcher. Initial fleet state is stabilized before transitions are published. A staggered manager probe checks one of ten slots every 250 ms, while subscriber-selected transient states receive bounded 250 ms follow-through polling before backing off to five seconds. Fleet Watch introduces no additional game-method detour.
Callbacks run synchronously on the game thread. The supplied
FleetPlayerData*is callback-scoped; scalar before/after snapshots are safe to retain. Callback and predicate exceptions are contained, reentrant registration/dispatch is rejected, and observer state is committed before delivery.Validation
2586be15ad42b2b39500f79ed9772d6cc21f6897f7fbc971871ca86f775579dcbafae2342837ef8f4ccfddddf7c24fa2b6a59f5cgit diff --check52CE6E2DAAC909CE59DDC0B874717ECFB2ED3D62D484EB151446F498468AF549STFC_MOD_FLEET_WATCH_PROBE=1FFB396D14D7619F73AD81CE9E2A99D65F072E92E128E992AC3EAC758B5E966D7Docked → WarpCharging → Impulsing → IdleInSpace → Impulsing → IdleInSpaceRemaining evidence gaps