garrytan / garrytan/gstack

Telemetry consent text says 'no repo names ever sent' but omits that they're recorded locally

Open
#1,080 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
133k
Forks
19.9k
Avg merge
18h 46m
Merged PRs (30d)
26

Description

## Summary

The telemetry consent prompt and README privacy section both say:

> No code, file paths, or repo names are ever sent.

That claim is accurate for **remote transmission** — \`gstack-telemetry-sync\` correctly strips \`_repo_slug\` and \`_branch\` before POSTing to Supabase. But \`gstack-telemetry-log\` writes both fields into the local JSONL at \`~/.gstack/analytics/skill-usage.jsonl\` on **every skill run**, regardless of telemetry tier — including when the user sets \`telemetry: off\`.

A user reading "no repo names are ever sent" would reasonably conclude no repo names are recorded anywhere. That's not what happens.

## Affected locations

| File | Line | Current text |
|------|------|--------------|
| \`scripts/resolvers/preamble/generate-telemetry-prompt.ts\` | 9 | `No code, file paths, or repo names are ever sent.` |
| \`README.md\` | ~378 | `What's never sent: code, file paths, repo names, branch names, ...` |
| \`SKILL.md\` (generated) | ~190 | same as generate-telemetry-prompt.ts |

## Root cause

\`gstack-telemetry-log\` constructs a JSON record with a \`_repo_slug\` field (and the older format uses \`repo\`) to signal "local-only":

```bash
printf '... "_repo_slug":"%s","_branch":"%s" ...' "$REPO_SLUG" "$BRANCH" >> "$JSONL_FILE"
```

The sync script strips them before transmitting. The consent copy was written with transmission in mind, not local storage.

## Reproducer

1. Set \`telemetry: off\` in \`~/.gstack/config.yaml\`
2. Run any gstack skill
3. \`cat ~/.gstack/analytics/skill-usage.jsonl | grep repo\`

You will see \`_repo_slug\` / \`repo\` entries despite telemetry being off.

## Proposed fix

Change consent text from:

> No code, file paths, or repo names are ever sent.

To something like:

> No code, file paths, or repo names are ever **transmitted**. Your repo name and branch are stored locally in \`~/.gstack/analytics/\` for session tracking but never leave your machine.

The data stays local and that's fine — the phrasing just needs to match what the code actually does.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.