Skip to content

fix: use jq instead of sed for JSON field stripping in gstack-telemetry-sync#749

Open
Gonzih wants to merge 1 commit intogarrytan:mainfrom
Gonzih:fix/telemetry-sync-json-via-jq
Open

fix: use jq instead of sed for JSON field stripping in gstack-telemetry-sync#749
Gonzih wants to merge 1 commit intogarrytan:mainfrom
Gonzih:fix/telemetry-sync-json-via-jq

Conversation

@Gonzih
Copy link
Copy Markdown

@Gonzih Gonzih commented Apr 1, 2026

The Bug

`gstack-telemetry-sync` strips local-only fields before sending events to Supabase using sed:

```bash
CLEAN="$(echo "$LINE" | sed
-e 's/,"_repo_slug":"[^"]"//g'
-e 's/,"_branch":"[^"]
"//g'
-e 's/,"repo":"[^"]*"//g')"
```

The `[^"]*` pattern breaks on JSON string values containing escaped quotes (`\"`) or regex metacharacters. This produces corrupt JSON. The Supabase edge function returns a non-2xx response (or 0 inserted), the cursor doesn't advance, and the same events get retried on next sync.

Issue #710.

Fix

Use `jq del()` for proper JSON-aware field removal. The sed code is kept as a fallback for older installs without `jq`. `jq` is already a required dependency (installed in `Dockerfile.ci` and used elsewhere in the codebase).


sent from mStack

The sed pattern [^"]*  fails on JSON field values containing escaped
quotes (\"...\") or other characters that break the regex match.
This produces silently corrupt JSON that the Supabase edge function
rejects without error — events are lost and the cursor doesn't advance.

Fix: use jq del() for proper JSON-aware field removal. Fall back to
the existing sed approach when jq is unavailable (older installs without
the dev toolchain). jq is already a required dependency (the Dockerfile
installs it, and gstack already uses it in other scripts).

Closes garrytan#710
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant