Telemetry

February 18, 2026 · View on GitHub

Decision Guardian includes an opt-out telemetry system to help us understand usage patterns and improve the tool.

Data policy, opt-out instructions, and the full list of blocked fields are in PRIVACY.md.
This document covers the technical architecture only.

Architecture

Client (Action/CLI)           Cloudflare Worker           KV Store
┌─────────────────┐          ┌──────────────────┐         ┌────────┐
│ buildPayload()  │──POST──▶│ POST /collect     │──put──▶│ Daily  │
│ validatePrivacy │          │ aggregate per-day │        │ Agg.   │
│ sendTelemetry() │          │                  │         │ 90-day │
└─────────────────┘          │ GET /stats        │◀──get─│  TTL    │
                             └──────────────────┘         └────────┘
  • Fire-and-forget: Telemetry never blocks or slows down the main tool.
  • 5-second timeout: If the endpoint is unreachable, the request silently fails.
  • 90-day retention: Aggregated data expires after 90 days.
  • Privacy validation: Every payload is validated against a blocklist before sending. If any blocked field is detected, the payload is rejected and never sent. See src/telemetry/privacy.ts.

Source Modules

ModuleResponsibility
src/telemetry/payload.tsType-safe payload builder
src/telemetry/privacy.tsBlocklist validation
src/telemetry/sender.tsFire-and-forget HTTP sender
workers/telemetry/Cloudflare Worker backend (collect + aggregate)

Telemetry Control

Telemetry is enabled by default (opt-out). To disable:

GitHub Action:

- uses: DecispherHQ/decision-guardian@v1
  env:
    DG_TELEMETRY: '0'  # Disable telemetry
  with:
    token: ${{ secrets.GITHUB_TOKEN }}

CLI:

# Disable for a single run
DG_TELEMETRY=0 decision-guardian check .decispher/decisions.md

# Disable permanently
export DG_TELEMETRY=0

For full data policy details, see PRIVACY.md.