Ingest macos-collector frames in signald #1

closed cmc opened this on 2026-09-04 03:56 UTC · milestone v0.4 — one bus

cmc 2026-09-04 03:56 UTC

collectors::system_hw_tick in crates/signald/src/lib.rs is a todo!(). The Swift collector (macos-collector/) writes valid signal-schema frames to stdout or --out, but nothing reads them, so hardware signals never reach the hub, the history store, or any renderer.

Proposed design: signald spawns macos-collector as a child process and reads its stdout with the existing wire::read_frame, publishing each frame into the hub like any other collector. Add a --collector <path> flag (default: look up macos-collector on PATH; skip with a log line when absent so Linux and battery-less machines still run).

Done when:

  • system_hw_tick and its todo!() are gone.
  • A subscriber to the socket sees cpu_load, battery_pct, charging, battery_draw_w, and thermal_state frames on a Mac.
  • The self-attestation in main.rs reports the hardware collector as enabled, not "stub (phase 3)".
  • An integration test feeds canned frames through the ingest path and asserts they appear in a subscriber's snapshot.

closed by commit 42a6dcc60e by cmc: Ingest macos-collector frames in signald

2026-09-04 04:50 UTC