// A radio order snapshots an inference. It never refreshes the source sighting. class ERR_HQTask { bool ReleaseOnly; bool RoadIntercept; ref ERR_HQTask ReplacesTask; string WatchSourceId; int WatchMessageId; int WatchRequestId; bool Investigation() { return !WatchSourceId.IsEmpty(); } int BeliefId; int BeliefRevision; ERR_HQPursuitRole Role; vector Destination; float QueuedAt; float ExpiresAt; float ArrivedAt = -1; bool SweepQueued; int ApproachBearing = -1; string Name() { if (Investigation()) return "investigate missing patrol"; if (RoadIntercept) return "temporary infantry road interception"; if (Role == ERR_HQPursuitRole.INTERCEPT) return "intercept"; if (Role == ERR_HQPursuitRole.CONTAIN) return "contain"; return "search"; } } // Finite per-track pacing, separate from belief confidence and report freshness. class ERR_HQHuntWindow { string WatchSourceId; int WatchMessageId; int WatchRequestId; bool Investigation() { return !WatchSourceId.IsEmpty(); } int BeliefId; float NextHunt; }