29 KiB
Dead Code Audit (Static)
Generated: 2026-05-10T21:29:09-04:00
A) High-confidence never used files
- server/src/services/overseerControlService/tools/chatSay.js (not registered in tools/index.js, no refs)
- server/prompts/commentary_system_backup_small.txt (no refs)
- server/prompts/commentary_system_backup_pre_lobotomy.txt (no refs)
- webui/src/App.css (not imported)
- webui/src/assets/react.svg (no refs)
- server/assets/test-audio.mp3 (no refs)
- webui/public/vite.svg (no refs from app/server)
- webui/dist/assets/index-APFDmmUd.js (build artifact, not runtime-wired)
- webui/dist/assets/index-DoNH_msu.css (build artifact, not runtime-wired)
- dist/dummy1.yml (no refs)
- dist/dummy2.yml (no refs)
- dist/dummy3.yml (no refs)
B) Unused dependency candidates
- webui/package.json: react-joystick-component (no imports)
C) Commented-out JSX/UI blocks (never rendered while commented)
webui/src/App.jsx:85: {/* /} webui/src/App.jsx:153: {/ {showTelemetry ? : null} /} webui/src/App.jsx:183: {/ /} webui/src/App.jsx:211: {/ /} webui/src/components/QuickstartOverlay/index.jsx:82: {/ webui/src/components/QuickstartOverlay/index.jsx:84: /} webui/src/components/QuickstartOverlay/index.jsx:90: {/ {!isDesktop?
: null} /} webui/src/components/QuickstartOverlay/index.jsx:116: {/ webui/src/components/QuickstartOverlay/index.jsx:118: /} webui/src/components/DriveDockAction/index.jsx:261: {/ {!isMobile && expanded ? ( /} webui/src/components/UserListPanel/index.jsx:263: {/ {isSelf && YOU} /} webui/src/components/AuthPanel/index.jsx:48: {/webui/src/components/ModeGateOverlay/index.jsx:111:
/} webui/src/components/RoomCameraPanel/index.jsx:103: {/ webui/src/components/RoomCameraPanel/index.jsx:106: /} webui/src/components/DriverVideoPanel/index.jsx:145: {/ colored button to visit the spectator page /} webui/src/components/TelemetryPanel/index.jsx:43: {/D) Unused exports reported by knip (server)
Unused exports (66)
CHARGING_STATE src/helpers/sensorDecoder.js:224:3
pickRandomReward src/rewards/index.js:44:3
MAX_REASON_LENGTH src/services/adminReasonService/index.js:97:3
setAudioLevels src/services/audioLevelsService/index.js:153:3
pushLevelsToRover src/services/audioLevelsService/index.js:154:3
isAdmin src/services/authService/index.js:80:3
isLockdownAdmin src/services/authService/index.js:81:3
authenticate src/services/authService/index.js:82:3
isDuplicate src/services/chatService/contentFilters.js:57:3
handleIncoming src/services/chatService/index.js:32:3
buildTypingPayload src/services/chatService/index.js:35:3
rateBuckets src/services/chatService/state.js:44:3
buildRoverStatusSnapshot src/services/discordBotService/batteryEmbeds.js:132:3
eventBus src/services/eventBus/index.js:56:3
subscribeAll src/services/eventBus/index.js:59:3
MAX_GOAL_LENGTH src/services/globalObjectiveService/index.js:107:3
refreshIdleState src/services/idleService/index.js:86:3
DEFAULT_FREQUENCY_MS src/services/llmCommentaryService/constants.js:31:3
MIN_FREQUENCY_MS src/services/llmCommentaryService/constants.js:32:3
normalizeCommentary src/services/llmCommentaryService/formatters.js:175:3
enforceLockdown src/services/lockdownGuard/index.js:29:3
disconnectForLockdown src/services/lockdownGuard/index.js:30:3
parseOverseerOutput src/services/overseerControlService/runtimeHelpers.js:114:3
TOOL_DEFINITIONS src/services/overseerControlService/tools/index.js:87:3
getToolById src/services/overseerControlService/tools/index.js:91:3
getIdForSignature src/services/overseerControlService/tools/index.js:92:3
DM_APPROVE_EMOJI src/services/privateRoverAccessRequestService/index.js:25:3
DM_DENY_EMOJI src/services/privateRoverAccessRequestService/index.js:26:3
createRequest src/services/privateRoverAccessRequestService/index.js:29:3
hasClosedPrivateAccessForSocket src/services/privateRoverAccessRequestService/index.js:30:3
FFMPEG_BIN src/services/replayEngineV2/sources.js:66:3
upsertRover src/services/roverManager/index.js:234:3
removeRover src/services/roverManager/index.js:235:3
setPrivateOpen src/services/roverManager/index.js:237:3
setPrivateSafety src/services/roverManager/index.js:238:3
getRoster src/services/roverManager/index.js:239:3
getRosterForSocket src/services/roverManager/index.js:240:3
broadcastRoster src/services/roverManager/index.js:241:3
setNightVisionState src/services/roverManager/index.js:242:3
handleSensorFrame src/services/roverManager/index.js:243:3
requestControl src/services/roverManager/index.js:244:3
releaseControl src/services/roverManager/index.js:245:3
removeSocket src/services/roverManager/index.js:246:3
isDriver src/services/roverManager/index.js:247:3
canDrive src/services/roverManager/index.js:248:3
enableSpectator src/services/roverManager/index.js:249:3
disableSpectator src/services/roverManager/index.js:250:3
getRoversForSocket src/services/roverManager/index.js:253:3
getPrimaryRoverForSocket src/services/roverManager/index.js:254:3
canSeeRover src/services/roverManager/index.js:255:3
canRequestControl src/services/roverManager/index.js:256:3
applyPrivateDriveSafety src/services/roverManager/index.js:257:3
canReplayRoverId src/services/roverManager/index.js:258:3
computeBatteryDisplayPercent src/services/roverManager/mathUtils.js:136:3
buildSession src/services/sessionService/index.js:340:3
syncSocket src/services/sessionService/index.js:341:3
syncAll src/services/sessionService/index.js:342:3
driverAdded src/services/turnService/index.js:284:3
driverRemoved src/services/turnService/index.js:285:3
cleanupRover src/services/turnService/index.js:286:3
canDrive src/services/turnService/index.js:287:3
createSession src/services/videoSessions/index.js:68:3
getSession src/services/videoSessions/index.js:69:3
revokeSession src/services/videoSessions/index.js:70:3
revokeBySocket src/services/videoSessions/index.js:71:3
revokeWhere src/services/videoSessions/index.js:72:3
E) Unused exports reported by knip (webui)
Unused exports (18)
deriveDriveDockState function src/components/DriveDockAction/index.jsx:9:17
HelpContentView function src/components/HelpContentView/index.jsx:179:17
default function src/components/UserListPanel/index.jsx:50:25
normalizeDriveVector function src/controls/controlMath.js:22:17
useOvercurrentLimiter src/controls/index.js:6:10
cloneProfile function src/controls/inputs/gamepadBindings.js:14:17
getGamepadHubState function src/controls/inputs/gamepadHub.js:109:17
deriveCodeForKey function src/controls/keymapUtils.js:36:17
createKeyToken function src/controls/keymapUtils.js:47:17
createCodeToken function src/controls/keymapUtils.js:52:17
DEFAULT_OVERCURRENT_LIMITS src/controls/overcurrentLimiter.js:12:14
HELP_LAYOUTS src/help/content.js:3:14
HELP_CONTENT src/help/content.js:7:14
default function src/hooks/useFullscreenPrompt.js:169:16
normalizeRoverColor function src/lib/roverColor.js:5:17
roverSwatchStyle function src/lib/roverColor.js:35:17
useSettings src/settings/index.js:3:28
useSettings function src/settings/SettingsProvider.jsx:58:17
Duplicate exports (2)
HelpContentView|default src/components/HelpContentView/index.jsx
useFullscreenPrompt|default src/hooks/useFullscreenPrompt.js
F) Server State-Machine Contradictions (Proof-Based)
F1) lockdown-admin role branches are unreachable in current role producer graph
Why unreachable:
- All server role writes are done through
setRole(socket, role)in auth flows. - Role assignments are only
user,spectator,admin,lockdown. - No assignment path sets
lockdown-admin.
Role producers (source of truth):
server/src/services/authService/index.js(initialRoleuser/spectator, login role admin/lockdown, role:set only user/spectator)server/src/services/roleService/index.js(just stores whatever caller sets; no separate producer)- Searched for any
setRole(..., 'lockdown-admin')/socket.data.role = 'lockdown-admin': none
Dead branches/cases under this graph:
server/src/services/adminLogService/index.jsserver/src/services/llmCommentaryService/runtimeHelpers.jsserver/src/services/overseerControlService/runtimeHelpers.jsserver/src/services/verificationService/identity.jsserver/src/services/discordBotService/integrations/helpers.jsserver/src/services/replayEngineV2/sidebarRenderer.jswebui/src/components/ModeGateOverlay/index.jsxwebui/src/components/UserListPanel/index.jsxwebui/src/components/ChatMessageRow/index.jsxwebui/src/components/RoverQueuesPanel/index.jsxwebui/src/components/RawUserPilePanel/index.jsxwebui/src/components/AdminPanel/AdminPanelContent.jsxwebui/src/controls/overcurrentLimiter.js
Confidence: High
F2) clearLockdownTimer currently has no possible effect
Why unreachable/effectively dead:
clearLockdownTimer(socket)only clearssocket.data.lockdownTimer.- No code ever sets
socket.data.lockdownTimeranywhere in repo. - Therefore the condition is always false and this function is a no-op in current runtime.
Evidence:
server/src/services/lockdownGuard/index.js(only reads/clearslockdownTimer)- global search for
lockdownTimerassignments: none - caller:
server/src/services/authService/index.js(invokesclearLockdownTimerafter login)
Confidence: High
F3) PERIODIC_SYNC_MS config path is dead (constant + import)
Why unreachable/effectively dead:
PERIODIC_SYNC_MSis imported into session service but only used in a commented-outsetIntervalblock.- No runtime path consumes this value.
Evidence:
server/src/services/sessionService/constants.jsexportsPERIODIC_SYNC_MSserver/src/services/sessionService/index.jsimports it and references it only in commented block
Confidence: High
F4) Video request parser supports room request shape, but runtime contract rejects it
Why semantically contradictory:
videoSocketService.normalizeRequest()accepts room request payloads (roomCameraId/{type:'room'}).- The handler then always throws for
target.type === 'room'with “Room cameras now use the snapshot feed”. - So room-video request acceptance code is legacy compatibility surface with guaranteed failure.
Evidence:
server/src/services/videoSocketService/index.js
Note: This is reachable only if a client attempts room video via video:request; it is not a successful runtime feature path.
Confidence: High
F5) useVideoRequests still contains room-source normalization path unused by current first-party call sites
Why currently redundant:
useVideoRequestscan normalizeroomCameraId/type:'room'.- Current call sites pass rover-only entries:
webui/src/components/DriverVideoPanel/index.jsxwebui/src/spectate/SpectatorApp/SpectatorContent.jsxwebui/src/mini/MiniSummaryApp/MiniSummaryContent.jsx
- This aligns with room camera delivery moving to snapshot socket feed.
Evidence:
webui/src/hooks/useVideoRequests.js- call-site inspection above
Confidence: Medium-High (internal app paths only; external/future caller may use room shape)
G) Legacy Compatibility Surface (Single-Program Dead Ends)
G1) Duplicate socket event listeners: only session:* names are used by this client
Observation: webui emits only session:* variants for control-role operations.
WebUI emit calls:
session:setRolesession:requestControlsession:releaseControlsession:lockRoversession:privateSafety:setsession:subscribeAll(seewebui/src/context/SessionContext.jsx)
Server still listens to both old + namespaced aliases:
-
requestControl+session:requestControl -
releaseControl+session:releaseControl -
lockRover+session:lockRover -
privateSafety:set+session:privateSafety:set -
subscribeAll+session:subscribeAll(seeserver/src/services/roverManager/socketHandlers.js) -
role:set+session:setRole(seeserver/src/services/authService/index.js)
Why dead under single-program assumption:
- No first-party client emits old names; old listeners are compatibility-only.
Confidence: High
G2) Server emits protocol events with no first-party subscribers
Server emits:
rovers(on connect and roster updates)auth:rolemodecontrolGrantedlockdown
Evidence of emitters:
server/src/services/roverManager/socketHandlers.js(rovers,controlGranted)server/src/services/roverManager/rosterLifecycle.js(rovers)server/src/services/authService/index.js(auth:role)server/src/services/modeManager/index.js(mode)server/src/services/lockdownGuard/index.js(lockdown)
Client-side consumption check:
- No
socket.on('rovers' | 'auth:role' | 'mode' | 'controlGranted' | 'lockdown')anywhere inwebui/src. - Session-driven UI uses
session:syncinstead.
Why dead under single-program assumption:
- Event emissions exist for older/external clients only.
Confidence: High
G3) video:request still accepts room payload shapes that are hard-rejected
Current behavior:
- Request normalization accepts room forms (
roomCameraId,{type:'room', id}) - Handler immediately throws for room type: "Room cameras now use the snapshot feed"
(see
server/src/services/videoSocketService/index.js)
Why compatibility-only:
- Room WHEP path retained in request parsing despite product contract migrating to snapshot feed.
- First-party room camera path uses
roomCamera:*snapshot sockets.
Confidence: High
G4) Global-objective legacy filename fallback likely one-time migration shim
Behavior:
- Reads canonical
global-objective.json, else attempts legacycommunity-goal.json. (seeserver/src/services/globalObjectiveService/index.js)
Why likely compatibility-only:
- This fallback exists purely for pre-rename data compatibility.
- In a single coordinated deployment, once migrated, legacy read path is dead.
Confidence: Medium-High (depends on whether legacy file still exists in your deployed data dir)
G5) Data directory legacy fallback path is compatibility shim
Behavior:
resolveDataPath/resolveDataDirchecks canonicalserver/dataand legacyserver/src/datastyle location. (seeserver/src/helpers/dataPaths.js)
Why likely compatibility-only:
- Exists to preserve prior storage layout after refactor.
- If deployment has stabilized on canonical path or explicit
SERVER_DATA_DIR, legacy branch never used.
Confidence: Medium-High (environment dependent)
G6) Overseer output parser keeps legacy one-line fallback parser
Behavior:
- Attempts JSON parse first; on failure falls back to historical one-line parse protocol.
(see
server/src/services/overseerControlService/runtimeHelpers.js)
Why compatibility-only:
- Current prompt/protocol can be constrained to structured JSON output.
- Fallback branch preserves old non-JSON output compatibility.
Confidence: Medium (depends on model output guarantees / prompt hardening)
H) Additional Deep Sweep Findings (Repo-Wide)
H1) Uncalled helper export: eventBus.subscribeAll
Evidence:
- Declared/exported in
server/src/services/eventBus/index.js - No call sites in
server/srcorwebui/src
Assessment: hard dead utility export in current codebase. Confidence: High
H2) Uncalled helper export: overseerControl.runtimeHelpers.parseOverseerOutput
Evidence:
- Declared/exported in
server/src/services/overseerControlService/runtimeHelpers.js overseerControl/index.jsimports only{ isAdminRole, buildAdminState, buildFailureInfo }- No other call sites in repo
Assessment: dead parser path (including its legacy one-line fallback) in current wiring. Confidence: High
H3) Uncalled helper export: overseerControl.tools.getIdForSignature
Evidence:
- Declared/exported in
server/src/services/overseerControlService/tools/index.js - No call sites in repo
Assessment: dead compatibility/helper function. Confidence: High
H4) socket.emit('rovers', ...) channel appears fully orphaned
Evidence:
- Emitted by server in rover manager connect/roster paths:
server/src/services/roverManager/socketHandlers.jsserver/src/services/roverManager/rosterLifecycle.js
- No
socket.on('rovers', ...)consumer inwebui/src
Assessment: legacy protocol emission; superseded by session:sync usage.
Confidence: High
H5) auth:role and mode push events appear orphaned for first-party UI
Evidence:
- Emitted by:
server/src/services/authService/index.js(auth:role)server/src/services/modeManager/index.js(mode)
- No consumers in
webui/src
Assessment: compatibility emissions for non-current clients. Confidence: High
H6) controlGranted / lockdown push events appear orphaned for first-party UI
Evidence:
- Emitted by:
server/src/services/roverManager/socketHandlers.js(controlGranted)server/src/services/lockdownGuard/index.js(lockdown)
- No consumers in
webui/src
Assessment: compatibility/legacy push surface for old clients. Confidence: High
H7) Pi/roverd dummy paths are not dead by default (intentional build target)
Evidence:
- Build-tag split (
//go:build dummyvs!dummy) in serial/sensor/nightvision/camera_servo/brc modules Makefilehas explicitdummytarget:go build -tags dummy ...
Assessment: keep; this is an intentional alternate runtime, not dead code. Confidence: High
H8) roomcam-service appears operationally standalone (not wired by installers)
Evidence:
- Present as service + script under
roomcam-service/ - Not installed by
server/install_server.shorpi/install_roverd.sh - Server room camera feature consumes configured URLs and does not require this local service specifically
Assessment: likely optional/ops artifact; remove only if you do not deploy it manually. Confidence: Medium
H9) dist/dummy{1,2,3}.yml still has no runtime references
Evidence:
- No code paths consume these files
- Existing references are only in the files themselves
Assessment: hard dead artifacts in repo runtime context. Confidence: High
H10) buttonbox/src/config example.h is a template, not runtime code
Evidence:
- Firmware includes
<config.h>; template file is namedconfig example.h - Typical manual-copy onboarding artifact
Assessment: optional docs/template artifact; not dead logic, but not build-consumed unless manually copied. Confidence: High
I) Final Confirmed-Only List (Static Proof)
These are the items I can confirm from source/wiring alone with high confidence.
I1) Definitely uncalled functions/exports
server/src/services/eventBus/index.js→subscribeAllserver/src/services/overseerControlService/runtimeHelpers.js→parseOverseerOutputserver/src/services/overseerControlService/tools/index.js→getIdForSignature
Proof: repo-wide usage search returns definition only (no call sites).
I2) Definitely orphan server push events for first-party webui
Server emits, but webui/src has no listeners for these event names:
roversauth:rolemodecontrolGrantedlockdown
Proof: emitters exist in server files; repo-wide webui/src listener search returns none.
I3) Definitely unused old client event names in first-party webui
Server listens for old aliases:
requestControl,releaseControl,lockRover,privateSafety:set,subscribeAll,role:set
WebUI emits only namespaced forms:
session:requestControl,session:releaseControl,session:lockRover,session:privateSafety:set,session:subscribeAll,session:setRole
Proof: listener and emitter searches across server/src + webui/src.
I4) Definitely dead room branch in client video request helper (for first-party app)
webui/src/hooks/useVideoRequests.jssupports room entry shapes (roomCameraId/type:'room').- No first-party call site in
webui/srcconstructs room entries.
Proof: type:'room' and roomCameraId appear only inside useVideoRequests.js.
I5) Definitely dead file candidates (code/non-built artifacts)
server/src/services/overseerControlService/tools/chatSay.js(not registered in tool definitions; no refs)server/prompts/commentary_system_backup_small.txt(no refs)server/prompts/commentary_system_backup_pre_lobotomy.txt(no refs)webui/src/App.css(not imported)webui/src/assets/react.svg(no refs)server/assets/test-audio.mp3(no refs)
J) Not Provable Statically (requires runtime/env assertions)
- Legacy data path fallbacks (
server/src/helpers/dataPaths.js) may be active depending on deployed filesystem andSERVER_DATA_DIR. globalObjectivelegacy filename fallback (community-goal.json) may still be used if old file exists and new file absent.roomcam-service/*may be manually used outside installer-managed workflows.- Pi/roverd
dummybuild-tag code is intentional alternate target; not dead by default.
K) Additional LLM-Style Flexibility Confirmed Unused/Dead
K1) pi/roverd config knobs for videoWidth/videoHeight/videoFps are effectively dead in current pipeline
Proof:
- Config defines and validates
VideoWidth,VideoHeight,VideoFPSinpi/roverd/config.go. UpdatePublisherEnvwritesVIDEO_WIDTH/VIDEO_HEIGHT/VIDEO_FPSto env file inpi/roverd/media_env.go.pi/bin/video-publisher.shdoes not read those env vars; it hardcodes:VIDEO_WIDTH="640"VIDEO_HEIGHT="480"VIDEO_FPS="30"
- Therefore these config values cannot affect runtime behavior as wired.
Assessment: dead configurability / fake knob. Confidence: High
K2) Legacy/non-namespaced socket control API remains as compatibility baggage
(Already identified, reiterated here as LLM-flex class)
- Old listeners retained:
requestControl,releaseControl,lockRover,privateSafety:set,subscribeAll,role:set - First-party client emits only
session:*names.
Assessment: removable compatibility layer for your single-program model. Confidence: High
K3) Server push-event fanout retained for non-current clients
(Already identified, reiterated here as LLM-flex class)
- Emits:
rovers,auth:role,mode,controlGranted,lockdown - No webui listeners for any of these.
Assessment: compatibility broadcast surface with no first-party consumer. Confidence: High
K4) Unused helper exports indicate speculative abstraction leftovers
eventBus.subscribeAlloverseerControl.runtimeHelpers.parseOverseerOutputoverseerControl.tools.getIdForSignature
Assessment: abstraction/future-proofing residue; currently dead. Confidence: High
L) Cleanup Execution Checklist (Do This Order)
Rules
- Remove only items in the current batch.
- Run smoke checks after each batch before moving on.
- If smoke fails, revert that batch only and split it smaller.
Smoke Check (run after each batch)
- Open web UI and connect at least one client.
- Verify role switch (
user/spectator) still works. - Verify request control / release control still works.
- Verify rover lock + private safety toggle still works.
- Verify mode switch still works.
- Verify spectator view still receives expected session state.
Bucket 1: Confirmed Safe (static-proof removal candidates)
Batch 1 (lowest risk, start here)
- Remove unused exports/helpers with no call sites:
server/src/services/eventBus/index.js→subscribeAllserver/src/services/overseerControlService/runtimeHelpers.js→parseOverseerOutputserver/src/services/overseerControlService/tools/index.js→getIdForSignature
- Remove dead file assets/prompts not referenced anywhere:
server/src/services/overseerControlService/tools/chatSay.jsserver/prompts/commentary_system_backup_small.txtserver/prompts/commentary_system_backup_pre_lobotomy.txtwebui/src/App.csswebui/src/assets/react.svgserver/assets/test-audio.mp3
Batch 2
- Remove legacy non-namespaced socket alias listeners, keep namespaced/session contract:
- In rover manager socket handlers, remove:
requestControlreleaseControllockRoverprivateSafety:setsubscribeAll
- In auth service, remove:
role:set
- In rover manager socket handlers, remove:
- Keep:
session:requestControlsession:releaseControlsession:lockRoversession:privateSafety:setsession:subscribeAllsession:setRolesetMode
Batch 3
- Remove orphan server push emissions not consumed by first-party web UI:
roversauth:rolemodecontrolGrantedlockdown
- Keep
session:syncflow intact.
Batch 4
- Remove dead room-shape branch in first-party client helper:
webui/src/hooks/useVideoRequests.jsroom entry normalization paths (roomCameraId/type:'room')
- Keep rover request path only.
Batch 5
- Remove fake video configurability in
pi/roverd(choose exactly one direction):- Option A: remove
videoWidth/videoHeight/videoFpsknobs and env writes entirely. - Option B: wire
pi/bin/video-publisher.shto consumeVIDEO_WIDTH/VIDEO_HEIGHT/VIDEO_FPS.
- Option A: remove
- Preferred for cleanup goal: Option A.
Bucket 2: Needs Runtime Check (env/deploy dependent)
server/src/helpers/dataPaths.jslegacy path fallback branches.server/src/services/globalObjectiveService/index.jslegacycommunity-goal.jsonfallback.roomcam-service/*only if confirmed unused in your deployment.
Gate Before Bucket 2
- Confirm live environment values and on-disk data:
SERVER_DATA_DIRusage status.- Whether any deployment still has only legacy files/paths.
- Whether
roomcam-serviceis started by any external supervisor.
Done Criteria
- All Bucket 1 batches merged with smoke pass after each.
- Bucket 2 either removed with runtime proof, or explicitly kept with rationale.
rgchecks show no stale references to removed symbols/events/files.