ktx/packages/cli/test/telemetry
Andrey Avtomonov cb6a67c2d7 Make telemetry reliable across interrupts and headless installs
Three reliability gaps surfaced while auditing why PostHog numbers were
untrustworthy:

1. Interrupted commands lost their events. capture() is fire-and-forget and the
   only flush guarantee lived in a finally block, which SIGINT/SIGTERM skip — so
   Ctrl-C'ing a long ingest or an MCP client killing 'ktx mcp stdio' dropped the
   command event and any queued events. Add SIGINT/SIGTERM handlers (real-process
   entry only; never under test/programmatic io) that mark the active command
   span aborted, emit it, drain the emitter, then exit. Idempotent with the
   normal finally path via the single-consume command span.

2. Headless-first installs were invisible. loadTelemetryIdentity refused to mint
   an installId unless stdout was a TTY, so a machine whose first run was an
   IDE-launched MCP server or a script emitted nothing, ever. Mint on first run
   regardless of surface (still honoring CI/DO_NOT_TRACK/KTX_TELEMETRY_DISABLED),
   writing the one-time notice to stderr — safe under the MCP stdio protocol,
   which reserves stdout. Drop the now-unused stdoutIsTTY option.

3. No guard against silent emit regressions (the 0.7.0 scan_completed blackout).
   Add tests: the shared executePublicIngestTarget chokepoint emits exactly one
   ingest_completed on success and on the preflight-failure branch, and a
   database target invokes the scan that emits scan_completed; plus coverage for
   the aborted-flush helper.

Identity is unchanged otherwise: every event still attributes to the installId
in ~/.ktx/telemetry.json. No event/field changes, so Node<->Python schema parity
is untouched. Docs updated to reflect first-run-on-any-surface activation.
2026-06-02 23:19:37 +02:00
..
command-hook.test.ts feat(telemetry): include error details for failures (#254) 2026-06-02 17:23:51 +02:00
demo-detect.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
emitter.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
events.snapshot.test.ts feat: report MCP client telemetry (#242) 2026-05-30 18:00:25 +02:00
events.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
identity.test.ts Make telemetry reliable across interrupts and headless installs 2026-06-02 23:19:37 +02:00
index.test.ts Make telemetry reliable across interrupts and headless installs 2026-06-02 23:19:37 +02:00
project-snapshot.test.ts feat(cli): profile ingest runs and split model vs tool time (#249) 2026-06-01 15:49:17 +02:00
schema-writer.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
scrubber.test.ts feat(telemetry): include error details for failures (#254) 2026-06-02 17:23:51 +02:00