diff --git a/qa/SKILL.md b/qa/SKILL.md index dd4b888d..618157d5 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -259,6 +259,21 @@ $B snapshot -i -a -o "$REPORT_DIR/screenshots/issue-002.png" } ``` +7. **Sync to team** (non-fatal, silent if not configured): + ```bash + cat > .gstack/qa-reports/qa-sync.json << 'QAEOF' + { + "url": "", + "mode": "", + "health_score": , + "issues": [], + "category_scores": {} + } + QAEOF + ~/.claude/skills/gstack/bin/gstack-sync push-qa .gstack/qa-reports/qa-sync.json 2>/dev/null && echo "Synced to team ✓" || true + ``` + Substitute actual values. Uses snake_case keys matching the Supabase schema. + **Regression mode:** After writing the report, load the baseline file. Compare: - Health score delta - Issues fixed (in baseline but not current) diff --git a/qa/SKILL.md.tmpl b/qa/SKILL.md.tmpl index 6afadcc7..8ca52f9f 100644 --- a/qa/SKILL.md.tmpl +++ b/qa/SKILL.md.tmpl @@ -233,6 +233,21 @@ $B snapshot -i -a -o "$REPORT_DIR/screenshots/issue-002.png" } ``` +7. **Sync to team** (non-fatal, silent if not configured): + ```bash + cat > .gstack/qa-reports/qa-sync.json << 'QAEOF' + { + "url": "", + "mode": "", + "health_score": , + "issues": [], + "category_scores": {} + } + QAEOF + ~/.claude/skills/gstack/bin/gstack-sync push-qa .gstack/qa-reports/qa-sync.json 2>/dev/null && echo "Synced to team ✓" || true + ``` + Substitute actual values. Uses snake_case keys matching the Supabase schema. + **Regression mode:** After writing the report, load the baseline file. Compare: - Health score delta - Issues fixed (in baseline but not current) diff --git a/retro/SKILL.md b/retro/SKILL.md index f1e92c20..37acba7b 100644 --- a/retro/SKILL.md +++ b/retro/SKILL.md @@ -355,6 +355,11 @@ Include backlog data in the JSON when TODOS.md exists: } ``` +After writing the JSON snapshot, sync to the team store (non-fatal, silent if not configured): +```bash +~/.claude/skills/gstack/bin/gstack-sync push-retro ".context/retros/${today}-${next}.json" 2>/dev/null && echo "Synced to team ✓" || true +``` + ### Step 14: Write the Narrative Structure the output as: diff --git a/retro/SKILL.md.tmpl b/retro/SKILL.md.tmpl index 2de8d5c6..07a4e328 100644 --- a/retro/SKILL.md.tmpl +++ b/retro/SKILL.md.tmpl @@ -346,6 +346,11 @@ Include backlog data in the JSON when TODOS.md exists: } ``` +After writing the JSON snapshot, sync to the team store (non-fatal, silent if not configured): +```bash +~/.claude/skills/gstack/bin/gstack-sync push-retro ".context/retros/${today}-${next}.json" 2>/dev/null && echo "Synced to team ✓" || true +``` + ### Step 14: Write the Narrative Structure the output as: diff --git a/review/greptile-triage.md b/review/greptile-triage.md index 3cb6e8d5..407fe768 100644 --- a/review/greptile-triage.md +++ b/review/greptile-triage.md @@ -204,6 +204,25 @@ Example entries: 2026-03-13 | garrytan/myapp | already-fixed | lib/payments.rb | error-handling ``` +## Team Sync (non-fatal) + +After appending to both history files, sync each triage entry to the team store. For each triaged comment, write a JSON entry and push: + +```bash +cat > /tmp/gstack-greptile-entry.json << 'GEOF' +{ + "date": "", + "repo": "", + "triage_type": "", + "file_pattern": "", + "category": "" +} +GEOF +~/.claude/skills/gstack/bin/gstack-sync push-greptile /tmp/gstack-greptile-entry.json 2>/dev/null || true +``` + +If multiple comments were triaged, push each one individually (overwrite the temp file each time). Non-fatal — failures are queued for retry. Silent if sync is not configured. + --- ## Output Format diff --git a/ship/SKILL.md b/ship/SKILL.md index 386299b9..1acb99cb 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -408,6 +408,33 @@ EOF --- +## Step 8.5: Sync to Team (non-fatal) + +After the PR is created, write a ship log and sync to the team store. This step is entirely silent if sync is not configured. + +1. Write ship metadata to a temp file: +```bash +cat > /tmp/gstack-ship-log.json << 'SHIPEOF' +{ + "version": "", + "branch": "", + "pr_url": "", + "review_findings": { "critical": 0, "informational": 0 }, + "greptile_stats": { "total": 0, "valid": 0, "fixed": 0, "fp": 0 }, + "todos_completed": [], + "test_results": { "pass": true, "test_count": 0 } +} +SHIPEOF +``` +Substitute actual values from the preceding steps. Use `0` for Greptile fields if no Greptile comments were found. + +2. Push (non-fatal): +```bash +~/.claude/skills/gstack/bin/gstack-sync push-ship /tmp/gstack-ship-log.json 2>/dev/null && echo "Synced to team ✓" || true +``` + +--- + ## Important Rules - **Never skip tests.** If tests fail, stop. diff --git a/ship/SKILL.md.tmpl b/ship/SKILL.md.tmpl index 81bd7e3c..32883263 100644 --- a/ship/SKILL.md.tmpl +++ b/ship/SKILL.md.tmpl @@ -399,6 +399,33 @@ EOF --- +## Step 8.5: Sync to Team (non-fatal) + +After the PR is created, write a ship log and sync to the team store. This step is entirely silent if sync is not configured. + +1. Write ship metadata to a temp file: +```bash +cat > /tmp/gstack-ship-log.json << 'SHIPEOF' +{ + "version": "", + "branch": "", + "pr_url": "", + "review_findings": { "critical": 0, "informational": 0 }, + "greptile_stats": { "total": 0, "valid": 0, "fixed": 0, "fp": 0 }, + "todos_completed": [], + "test_results": { "pass": true, "test_count": 0 } +} +SHIPEOF +``` +Substitute actual values from the preceding steps. Use `0` for Greptile fields if no Greptile comments were found. + +2. Push (non-fatal): +```bash +~/.claude/skills/gstack/bin/gstack-sync push-ship /tmp/gstack-ship-log.json 2>/dev/null && echo "Synced to team ✓" || true +``` + +--- + ## Important Rules - **Never skip tests.** If tests fail, stop.