pingdotgg / pingdotgg/t3code

t3-resource-monitor samples every process on the machine every 5 s with no live subscriber and cannot be turned off

Open
#11,222 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

accepted bug via-triage
Dominant language
TypeScript
Stars
23k
Forks
5.9k
Avg merge
11h 14m
Merged PRs (30d)
357

Description

What happened

With the diagnostics panel closed and no client connected, the bundled t3-resource-monitor keeps enumerating every process on the machine every 5 s, holds ~280–290 process handles permanently, and uses ~1.3% of a core around the clock. There is no setting, flag, or environment variable that turns it off.

Diagnosis
  • resolveNativeSampleIntervalMs (apps/server/src/resourceTelemetry/NativeTelemetryClient.ts) returns 5 s when there is no live subscriber (UNKNOWN_BACKGROUND_SAMPLE_INTERVAL_MS, also on battery), and 15 s only when the host is locked, in low-power mode, or thermally constrained. It never returns "off". docs/internals/resource-telemetry.md says the server "requests continuous snapshots only while diagnostics has live subscribers"; the code does not match that.
  • Each sample calls refresh_processes_specifics(ProcessesToUpdate::All, ...) (native/resource-monitor/src/main.rs:419) and walks every process on the machine (~440 here) to find the T3 subtree. On Windows sysinfo opens a handle per process and, on discovery, reads its command line out of the remote process, so the monitor reads processes it does not report on, including a running game. Only the T3 tree is sent to the server.
  • The only related config is resourceMonitorPath, which is internal. Nothing in Settings, t3 serve --help, or T3CODE_* disables the collector.
Steps to reproduce
  1. Start the desktop app on Windows, close the diagnostics panel or disconnect all clients.
  2. Watch t3-resource-monitor.exe in Process Explorer: handle count, CPU, and OpenProcess / ReadProcessMemory activity every 5 s.
  3. Lock the screen: the interval becomes 15 s; nothing stops it.

Expected: no sampling without a live subscriber (as documented), or a setting to disable native telemetry; enumeration limited to the T3 process tree.
Actual: whole-system sampling every 5 s for the life of the server.

Version

0.0.41-nightly.20260908.1414 (desktop); code unchanged on main @ 211618fd9f.

Environment

Windows 11 Pro 26200, desktop app hosting the server.

Evidence

Process Explorer over several hours: ~281–293 handles held by t3-resource-monitor.exe, ~1.34% CPU steady, a sample every 5 s (15 s while locked).

Related issues

#4182 / #2679 replaced the process-diagnostics polling on the server side; this is the native collector that remained. #9661 item S16 covers a separate one-second process-table poll for idle terminal prompts. #7736 and #9837 are about the collector not starting on Linux.

Fix applied or workaround

None found. Deleting the binary would stop it, but the server then logs a failed collector on every start.

Filed by

Claude Code (Claude Fable 5.1), following the t3 triage playbook from a checkout of main.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with resolveNativeSampleIntervalMs in apps/server/src/resourceTelemetry/NativeTelemetryClient.ts and compare its behavior with docs/internals/resource-telemetry.md. Then inspect refresh_processes_specifics in native/resource-monitor/src/main.rs, including the Windows process enumeration path. Done means idle collectors no longer sample unexpectedly, or an explicit disable setting exists, and sampling is limited to the T3 process tree.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust, typescript
Domain
desktop, devtools, observability, performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.