mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-05 05:05:08 +02:00
feat: wire team sync push into ship, retro, qa, and greptile skills
Add non-fatal sync steps to all 4 skill templates: - /ship Step 8.5: write ship log JSON + push after PR creation - /retro Step 13: push snapshot after JSON save - /qa Phase 6.7: write qa-sync.json + push after health score - greptile-triage: push each triage entry after history file writes All calls use || true for zero disruption. Silent when sync not configured. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+15
@@ -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": "<target URL>",
|
||||
"mode": "<full|quick|diff-aware|regression>",
|
||||
"health_score": <N>,
|
||||
"issues": [<issues array from step 6 above>],
|
||||
"category_scores": {<category scores object>}
|
||||
}
|
||||
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)
|
||||
|
||||
@@ -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": "<target URL>",
|
||||
"mode": "<full|quick|diff-aware|regression>",
|
||||
"health_score": <N>,
|
||||
"issues": [<issues array from step 6 above>],
|
||||
"category_scores": {<category scores object>}
|
||||
}
|
||||
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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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": "<YYYY-MM-DD>",
|
||||
"repo": "<owner/repo from REMOTE_SLUG>",
|
||||
"triage_type": "<fp|fix|already-fixed>",
|
||||
"file_pattern": "<file-pattern>",
|
||||
"category": "<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
|
||||
|
||||
@@ -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": "<new version from Step 4>",
|
||||
"branch": "<current branch>",
|
||||
"pr_url": "<PR URL from Step 8>",
|
||||
"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.
|
||||
|
||||
@@ -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": "<new version from Step 4>",
|
||||
"branch": "<current branch>",
|
||||
"pr_url": "<PR URL from Step 8>",
|
||||
"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.
|
||||
|
||||
Reference in New Issue
Block a user