mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-18 19:02:18 +02:00
fix(telemetry): ingest keeps error_message/failed_step instead of dropping them
The telemetry_events columns exist and bin/gstack-telemetry-log already sends error_message + failed_step, but the Supabase ingest function dropped both fields on insert — every error report arrived with no message and no failing step. Map them through with the same bounded-length sanitization as error_class (500/100 chars). The completion-status resolver now also passes --error-message/--failed-step in the generated skill telemetry block, with instructions to leave them empty on success. Resolver only for the template side; generated SKILL.md files regenerate from this source in the docs lane. Contributed by @sunnnybala (PR #769). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
a6c94c7feb
commit
8e46c6e521
@@ -73,11 +73,15 @@ fi
|
|||||||
if [ "$_TEL" != "off" ] && [ -x ~/.claude/skills/gstack/bin/gstack-telemetry-log ]; then
|
if [ "$_TEL" != "off" ] && [ -x ~/.claude/skills/gstack/bin/gstack-telemetry-log ]; then
|
||||||
~/.claude/skills/gstack/bin/gstack-telemetry-log \\
|
~/.claude/skills/gstack/bin/gstack-telemetry-log \\
|
||||||
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \\
|
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \\
|
||||||
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" 2>/dev/null &
|
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" \\
|
||||||
|
--error-message "ERROR_MESSAGE" --failed-step "FAILED_STEP" 2>/dev/null &
|
||||||
fi
|
fi
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
Replace \`SKILL_NAME\`, \`OUTCOME\`, and \`USED_BROWSE\` before running.
|
Replace \`SKILL_NAME\`, \`OUTCOME\`, and \`USED_BROWSE\` before running.
|
||||||
|
Replace \`ERROR_MESSAGE\` with a short description of the error (if outcome is error,
|
||||||
|
otherwise use empty string ""), and \`FAILED_STEP\` with the step name or number where
|
||||||
|
the failure occurred (if outcome is error, otherwise use empty string "").
|
||||||
|
|
||||||
## Plan Status Footer
|
## Plan Status Footer
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ interface TelemetryEvent {
|
|||||||
duration_s?: number;
|
duration_s?: number;
|
||||||
outcome: string;
|
outcome: string;
|
||||||
error_class?: string;
|
error_class?: string;
|
||||||
|
error_message?: string;
|
||||||
|
failed_step?: string;
|
||||||
used_browse?: boolean;
|
used_browse?: boolean;
|
||||||
sessions?: number;
|
sessions?: number;
|
||||||
installation_id?: string;
|
installation_id?: string;
|
||||||
@@ -93,6 +95,8 @@ Deno.serve(async (req) => {
|
|||||||
duration_s: typeof event.duration_s === "number" ? event.duration_s : null,
|
duration_s: typeof event.duration_s === "number" ? event.duration_s : null,
|
||||||
outcome: String(event.outcome).slice(0, 20),
|
outcome: String(event.outcome).slice(0, 20),
|
||||||
error_class: event.error_class ? String(event.error_class).slice(0, 100) : null,
|
error_class: event.error_class ? String(event.error_class).slice(0, 100) : null,
|
||||||
|
error_message: event.error_message ? String(event.error_message).slice(0, 500) : null,
|
||||||
|
failed_step: event.failed_step ? String(event.failed_step).slice(0, 100) : null,
|
||||||
used_browse: event.used_browse === true,
|
used_browse: event.used_browse === true,
|
||||||
concurrent_sessions: typeof event.sessions === "number" ? event.sessions : 1,
|
concurrent_sessions: typeof event.sessions === "number" ? event.sessions : 1,
|
||||||
installation_id: event.installation_id ? String(event.installation_id).slice(0, 64) : null,
|
installation_id: event.installation_id ? String(event.installation_id).slice(0, 64) : null,
|
||||||
|
|||||||
+5
-1
@@ -794,11 +794,15 @@ fi
|
|||||||
if [ "$_TEL" != "off" ] && [ -x ~/.claude/skills/gstack/bin/gstack-telemetry-log ]; then
|
if [ "$_TEL" != "off" ] && [ -x ~/.claude/skills/gstack/bin/gstack-telemetry-log ]; then
|
||||||
~/.claude/skills/gstack/bin/gstack-telemetry-log \
|
~/.claude/skills/gstack/bin/gstack-telemetry-log \
|
||||||
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
|
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
|
||||||
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" 2>/dev/null &
|
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" \
|
||||||
|
--error-message "ERROR_MESSAGE" --failed-step "FAILED_STEP" 2>/dev/null &
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `SKILL_NAME`, `OUTCOME`, and `USED_BROWSE` before running.
|
Replace `SKILL_NAME`, `OUTCOME`, and `USED_BROWSE` before running.
|
||||||
|
Replace `ERROR_MESSAGE` with a short description of the error (if outcome is error,
|
||||||
|
otherwise use empty string ""), and `FAILED_STEP` with the step name or number where
|
||||||
|
the failure occurred (if outcome is error, otherwise use empty string "").
|
||||||
|
|
||||||
## Plan Status Footer
|
## Plan Status Footer
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -780,11 +780,15 @@ fi
|
|||||||
if [ "$_TEL" != "off" ] && [ -x $GSTACK_ROOT/bin/gstack-telemetry-log ]; then
|
if [ "$_TEL" != "off" ] && [ -x $GSTACK_ROOT/bin/gstack-telemetry-log ]; then
|
||||||
$GSTACK_ROOT/bin/gstack-telemetry-log \
|
$GSTACK_ROOT/bin/gstack-telemetry-log \
|
||||||
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
|
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
|
||||||
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" 2>/dev/null &
|
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" \
|
||||||
|
--error-message "ERROR_MESSAGE" --failed-step "FAILED_STEP" 2>/dev/null &
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `SKILL_NAME`, `OUTCOME`, and `USED_BROWSE` before running.
|
Replace `SKILL_NAME`, `OUTCOME`, and `USED_BROWSE` before running.
|
||||||
|
Replace `ERROR_MESSAGE` with a short description of the error (if outcome is error,
|
||||||
|
otherwise use empty string ""), and `FAILED_STEP` with the step name or number where
|
||||||
|
the failure occurred (if outcome is error, otherwise use empty string "").
|
||||||
|
|
||||||
## Plan Status Footer
|
## Plan Status Footer
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -782,11 +782,15 @@ fi
|
|||||||
if [ "$_TEL" != "off" ] && [ -x $GSTACK_ROOT/bin/gstack-telemetry-log ]; then
|
if [ "$_TEL" != "off" ] && [ -x $GSTACK_ROOT/bin/gstack-telemetry-log ]; then
|
||||||
$GSTACK_ROOT/bin/gstack-telemetry-log \
|
$GSTACK_ROOT/bin/gstack-telemetry-log \
|
||||||
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
|
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
|
||||||
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" 2>/dev/null &
|
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" \
|
||||||
|
--error-message "ERROR_MESSAGE" --failed-step "FAILED_STEP" 2>/dev/null &
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `SKILL_NAME`, `OUTCOME`, and `USED_BROWSE` before running.
|
Replace `SKILL_NAME`, `OUTCOME`, and `USED_BROWSE` before running.
|
||||||
|
Replace `ERROR_MESSAGE` with a short description of the error (if outcome is error,
|
||||||
|
otherwise use empty string ""), and `FAILED_STEP` with the step name or number where
|
||||||
|
the failure occurred (if outcome is error, otherwise use empty string "").
|
||||||
|
|
||||||
## Plan Status Footer
|
## Plan Status Footer
|
||||||
|
|
||||||
|
|||||||
@@ -194,10 +194,13 @@ export const CARVE_GUARDS: Record<string, CarveGuard> = {
|
|||||||
// always-loaded AskUserQuestion Format section.
|
// always-loaded AskUserQuestion Format section.
|
||||||
// v1.2.0 activation lift (shared first-run-guidance preamble) + #2077 ask-first scope gate.
|
// v1.2.0 activation lift (shared first-run-guidance preamble) + #2077 ask-first scope gate.
|
||||||
// +~1.3 KB: plan-mode auto-select-B scope-gate exceptions (2026-08).
|
// +~1.3 KB: plan-mode auto-select-B scope-gate exceptions (2026-08).
|
||||||
maxSkeletonBytes: 89_000,
|
// +~340 B: telemetry --error-message/--failed-step flags + prose in the
|
||||||
|
// shared completion-status preamble (PR #769, 2026-08); this skill was the
|
||||||
|
// closest to its ceiling (landed 89040 / ratio 1.072).
|
||||||
|
maxSkeletonBytes: 89_400,
|
||||||
minUnionBytes: 70_000,
|
minUnionBytes: 70_000,
|
||||||
mustContain: ['design', 'visual'],
|
mustContain: ['design', 'visual'],
|
||||||
maxSizeRatio: 1.07,
|
maxSizeRatio: 1.08,
|
||||||
},
|
},
|
||||||
'plan-devex-review': {
|
'plan-devex-review': {
|
||||||
skill: 'plan-devex-review',
|
skill: 'plan-devex-review',
|
||||||
|
|||||||
Reference in New Issue
Block a user