The duration_reasonable CHECK constraint fails on existing rows with
56-year durations from the shell var bug. Move the prerequisite
UPDATE into the migration itself so it's self-contained.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add source field (live/test/dev) to telemetry pipeline: --source flag in
gstack-telemetry-log, GSTACK_TELEMETRY_SOURCE env fallback, pass-through
in telemetry-sync, source=eq.live filter on all dashboard queries
- Replace SHA-256 installation_id with UUID install_fingerprint for all tiers
(not just community). Expand-contract migration: ADD new column + trigger
to copy installation_id, preserving backward compat with old clients
- Fix duration bug: persist _TEL_START to file via $PPID (stable across bash
blocks), cap durations at 86400s, reject negative values
- Ungate update-check pings from telemetry=off — sends only version + OS +
random UUID. Generate .install-id in update-check for telemetry=off users
- Migration 003: source columns, install_fingerprint, duration CHECK
constraint, indexes, recreated views with source filter, growth funnel
(first-seen based), materialized views for daily installs + version adoption
- E2E test isolation: session-runner sets GSTACK_TELEMETRY_SOURCE=test
- 8 new telemetry tests (source field, duration caps, fingerprint persistence)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>