- Open 「用户轨迹」 straight on the live map instead of a drawer, carrying the
server, the focused user and a start/end window through the plugin page hash.
- Default that window to one hour before the user's last seen time and keep the
plugin page query available to bundles through the host context.
- Replace the time range preset gate with always visible start/end datetime
fields plus a quick-range select, so the user list rebuilds from the window.
- Drop the bulky trajectory list and draw one compact colour legend under the
map, keeping a stable colour per identity and restricting vehicle tracks to
the vehicles the selected users actually rode.
Run pushes typed SCUM facts through POST /api/v1/run/scum/facts, but the
production router rejected that path before the signature middleware because
runServiceRequest listed individual Run channel prefixes, and MySQL kept SCUM
rows inside the whole metadata snapshot instead of platform tables.
- /api/v1/run/ is now the signed machine channel space while
/api/v1/run/endpoints keeps normal bearer/admin authorization.
- MySQL gets real scum_user, scum_user_trajectory, scum_vehicle,
scum_vehicle_trajectory and scum_vehicle_lock tables with parameterized
per-row repositories instead of full snapshot rewrites. Snapshot-shaped
tables from the unreleased interim build are replaced, and SCUM rows still
inside a metadata snapshot are migrated once.
- Facts ingest verifies the target server plugin type and converges stale
online users to offline after SCUMUserOfflineAfter.
- The plugin page and browser read one bounded /scum/surface response instead
of five list calls per refresh.
Call-count budget for one server: per 5s facts batch, one SELECT plus one
INSERT/UPDATE per reported user and vehicle, one INSERT per moved trajectory
sample or new lock row, one bounded stale-user SELECT, and a trajectory
retention DELETE at most once per hour. One browser refresh issues one surface
request every 15s instead of five list requests.