fix: replace multi-line eval+mkdir+echo blocks with atomic helpers

- Review log writes now use `gstack-review-log` (single command)
- Review dashboard reads now use `gstack-review-read` (single command)
- Remaining eval+mkdir blocks use && chaining for variable persistence
- Regenerated all 15 SKILL.md files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-03-17 20:56:33 -07:00
parent 4ddb4b9303
commit 62563fedcd
18 changed files with 34 additions and 87 deletions
+1 -2
View File
@@ -153,8 +153,7 @@ ls src/ app/ pages/ components/ 2>/dev/null | head -30
Look for brainstorm output: Look for brainstorm output:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && ls ~/.gstack/projects/$SLUG/*brainstorm* 2>/dev/null | head -5
ls ~/.gstack/projects/$SLUG/*brainstorm* 2>/dev/null | head -5
ls .context/*brainstorm* .context/attachments/*brainstorm* 2>/dev/null | head -5 ls .context/*brainstorm* .context/attachments/*brainstorm* 2>/dev/null | head -5
``` ```
+1 -2
View File
@@ -49,8 +49,7 @@ ls src/ app/ pages/ components/ 2>/dev/null | head -30
Look for brainstorm output: Look for brainstorm output:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && ls ~/.gstack/projects/$SLUG/*brainstorm* 2>/dev/null | head -5
ls ~/.gstack/projects/$SLUG/*brainstorm* 2>/dev/null | head -5
ls .context/*brainstorm* .context/attachments/*brainstorm* 2>/dev/null | head -5 ls .context/*brainstorm* .context/attachments/*brainstorm* 2>/dev/null | head -5
``` ```
+1 -2
View File
@@ -810,8 +810,7 @@ Write the report to both local and project-scoped locations:
**Project-scoped:** **Project-scoped:**
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG
mkdir -p ~/.gstack/projects/$SLUG
``` ```
Write to `~/.gstack/projects/{slug}/{user}-{branch}-design-audit-{datetime}.md` Write to `~/.gstack/projects/{slug}/{user}-{branch}-design-audit-{datetime}.md`
+1 -2
View File
@@ -208,8 +208,7 @@ Write the report to both local and project-scoped locations:
**Project-scoped:** **Project-scoped:**
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG
mkdir -p ~/.gstack/projects/$SLUG
``` ```
Write to `~/.gstack/projects/{slug}/{user}-{branch}-design-audit-{datetime}.md` Write to `~/.gstack/projects/{slug}/{user}-{branch}-design-audit-{datetime}.md`
+3 -9
View File
@@ -284,8 +284,7 @@ Describe the ideal end state of this system 12 months from now. Does this plan m
After the opt-in/cherry-pick ceremony, write the plan to disk so the vision and decisions survive beyond this conversation. Only run this step for EXPANSION and SELECTIVE EXPANSION modes. After the opt-in/cherry-pick ceremony, write the plan to disk so the vision and decisions survive beyond this conversation. Only run this step for EXPANSION and SELECTIVE EXPANSION modes.
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG/ceo-plans
mkdir -p ~/.gstack/projects/$SLUG/ceo-plans
``` ```
Before writing, check for existing CEO plans in the ceo-plans/ directory. If any are >30 days old or their branch has been merged/deleted, offer to archive them: Before writing, check for existing CEO plans in the ceo-plans/ directory. If any are >30 days old or their branch has been merged/deleted, offer to archive them:
@@ -712,9 +711,7 @@ If any AskUserQuestion goes unanswered, note it here. Never silently default.
After producing the Completion Summary above, persist the review result: After producing the Completion Summary above, persist the review result:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE"}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE"}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Before running this command, substitute the placeholder values from the Completion Summary you just produced: Before running this command, substitute the placeholder values from the Completion Summary you just produced:
@@ -729,10 +726,7 @@ Before running this command, substitute the placeholder values from the Completi
After completing the review, read the review log and config to display the dashboard. After completing the review, read the review log and config to display the dashboard.
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-read
cat ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl 2>/dev/null || echo "NO_REVIEWS"
echo "---CONFIG---"
~/.claude/skills/gstack/bin/gstack-config get skip_eng_review 2>/dev/null || echo "false"
``` ```
Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display: Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display:
+2 -5
View File
@@ -163,8 +163,7 @@ Describe the ideal end state of this system 12 months from now. Does this plan m
After the opt-in/cherry-pick ceremony, write the plan to disk so the vision and decisions survive beyond this conversation. Only run this step for EXPANSION and SELECTIVE EXPANSION modes. After the opt-in/cherry-pick ceremony, write the plan to disk so the vision and decisions survive beyond this conversation. Only run this step for EXPANSION and SELECTIVE EXPANSION modes.
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG/ceo-plans
mkdir -p ~/.gstack/projects/$SLUG/ceo-plans
``` ```
Before writing, check for existing CEO plans in the ceo-plans/ directory. If any are >30 days old or their branch has been merged/deleted, offer to archive them: Before writing, check for existing CEO plans in the ceo-plans/ directory. If any are >30 days old or their branch has been merged/deleted, offer to archive them:
@@ -591,9 +590,7 @@ If any AskUserQuestion goes unanswered, note it here. Never silently default.
After producing the Completion Summary above, persist the review result: After producing the Completion Summary above, persist the review result:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE"}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"plan-ceo-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE"}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Before running this command, substitute the placeholder values from the Completion Summary you just produced: Before running this command, substitute the placeholder values from the Completion Summary you just produced:
+2 -7
View File
@@ -387,9 +387,7 @@ If any AskUserQuestion goes unanswered, note it here. Never silently default to
After producing the Completion Summary above, persist the review result: After producing the Completion Summary above, persist the review result:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","overall_score":N,"unresolved":N,"decisions_made":N}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","overall_score":N,"unresolved":N,"decisions_made":N}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Substitute values from the Completion Summary: Substitute values from the Completion Summary:
@@ -404,10 +402,7 @@ Substitute values from the Completion Summary:
After completing the review, read the review log and config to display the dashboard. After completing the review, read the review log and config to display the dashboard.
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-read
cat ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl 2>/dev/null || echo "NO_REVIEWS"
echo "---CONFIG---"
~/.claude/skills/gstack/bin/gstack-config get skip_eng_review 2>/dev/null || echo "false"
``` ```
Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display: Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display:
+1 -3
View File
@@ -266,9 +266,7 @@ If any AskUserQuestion goes unanswered, note it here. Never silently default to
After producing the Completion Summary above, persist the review result: After producing the Completion Summary above, persist the review result:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","overall_score":N,"unresolved":N,"decisions_made":N}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"plan-design-review","timestamp":"TIMESTAMP","status":"STATUS","overall_score":N,"unresolved":N,"decisions_made":N}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Substitute values from the Completion Summary: Substitute values from the Completion Summary:
+3 -9
View File
@@ -216,10 +216,9 @@ For LLM/prompt changes: check the "Prompt/LLM changes" file patterns listed in C
After producing the test diagram, write a test plan artifact to the project directory so `/qa` and `/qa-only` can consume it as primary test input (replacing the lossy git-diff heuristic): After producing the test diagram, write a test plan artifact to the project directory so `/qa` and `/qa-only` can consume it as primary test input (replacing the lossy git-diff heuristic):
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG
USER=$(whoami) USER=$(whoami)
DATETIME=$(date +%Y%m%d-%H%M%S) DATETIME=$(date +%Y%m%d-%H%M%S)
mkdir -p ~/.gstack/projects/$SLUG
``` ```
Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-plan-{datetime}.md`: Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-plan-{datetime}.md`:
@@ -325,9 +324,7 @@ Check the git log for this branch. If there are prior commits suggesting a previ
After producing the Completion Summary above, persist the review result: After producing the Completion Summary above, persist the review result:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE"}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE"}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Substitute values from the Completion Summary: Substitute values from the Completion Summary:
@@ -342,10 +339,7 @@ Substitute values from the Completion Summary:
After completing the review, read the review log and config to display the dashboard. After completing the review, read the review log and config to display the dashboard.
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-read
cat ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl 2>/dev/null || echo "NO_REVIEWS"
echo "---CONFIG---"
~/.claude/skills/gstack/bin/gstack-config get skip_eng_review 2>/dev/null || echo "false"
``` ```
Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display: Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display:
+2 -5
View File
@@ -112,10 +112,9 @@ For LLM/prompt changes: check the "Prompt/LLM changes" file patterns listed in C
After producing the test diagram, write a test plan artifact to the project directory so `/qa` and `/qa-only` can consume it as primary test input (replacing the lossy git-diff heuristic): After producing the test diagram, write a test plan artifact to the project directory so `/qa` and `/qa-only` can consume it as primary test input (replacing the lossy git-diff heuristic):
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG
USER=$(whoami) USER=$(whoami)
DATETIME=$(date +%Y%m%d-%H%M%S) DATETIME=$(date +%Y%m%d-%H%M%S)
mkdir -p ~/.gstack/projects/$SLUG
``` ```
Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-plan-{datetime}.md`: Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-plan-{datetime}.md`:
@@ -221,9 +220,7 @@ Check the git log for this branch. If there are prior commits suggesting a previ
After producing the Completion Summary above, persist the review result: After producing the Completion Summary above, persist the review result:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE"}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"plan-eng-review","timestamp":"TIMESTAMP","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"MODE"}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Substitute values from the Completion Summary: Substitute values from the Completion Summary:
+2 -4
View File
@@ -173,8 +173,7 @@ Before falling back to git diff heuristics, check for richer test plan sources:
1. **Project-scoped test plans:** Check `~/.gstack/projects/` for recent `*-test-plan-*.md` files for this repo 1. **Project-scoped test plans:** Check `~/.gstack/projects/` for recent `*-test-plan-*.md` files for this repo
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && ls -t ~/.gstack/projects/$SLUG/*-test-plan-*.md 2>/dev/null | head -1
ls -t ~/.gstack/projects/$SLUG/*-test-plan-*.md 2>/dev/null | head -1
``` ```
2. **Conversation context:** Check if a prior `/plan-eng-review` or `/plan-ceo-review` produced test plan output in this conversation 2. **Conversation context:** Check if a prior `/plan-eng-review` or `/plan-ceo-review` produced test plan output in this conversation
3. **Use whichever source is richer.** Fall back to git diff analysis only if neither is available. 3. **Use whichever source is richer.** Fall back to git diff analysis only if neither is available.
@@ -466,8 +465,7 @@ Write the report to both local and project-scoped locations:
**Project-scoped:** Write test outcome artifact for cross-session context: **Project-scoped:** Write test outcome artifact for cross-session context:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG
mkdir -p ~/.gstack/projects/$SLUG
``` ```
Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-outcome-{datetime}.md` Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-outcome-{datetime}.md`
+2 -4
View File
@@ -52,8 +52,7 @@ Before falling back to git diff heuristics, check for richer test plan sources:
1. **Project-scoped test plans:** Check `~/.gstack/projects/` for recent `*-test-plan-*.md` files for this repo 1. **Project-scoped test plans:** Check `~/.gstack/projects/` for recent `*-test-plan-*.md` files for this repo
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && ls -t ~/.gstack/projects/$SLUG/*-test-plan-*.md 2>/dev/null | head -1
ls -t ~/.gstack/projects/$SLUG/*-test-plan-*.md 2>/dev/null | head -1
``` ```
2. **Conversation context:** Check if a prior `/plan-eng-review` or `/plan-ceo-review` produced test plan output in this conversation 2. **Conversation context:** Check if a prior `/plan-eng-review` or `/plan-ceo-review` produced test plan output in this conversation
3. **Use whichever source is richer.** Fall back to git diff analysis only if neither is available. 3. **Use whichever source is richer.** Fall back to git diff analysis only if neither is available.
@@ -72,8 +71,7 @@ Write the report to both local and project-scoped locations:
**Project-scoped:** Write test outcome artifact for cross-session context: **Project-scoped:** Write test outcome artifact for cross-session context:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG
mkdir -p ~/.gstack/projects/$SLUG
``` ```
Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-outcome-{datetime}.md` Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-outcome-{datetime}.md`
+2 -4
View File
@@ -366,8 +366,7 @@ Before falling back to git diff heuristics, check for richer test plan sources:
1. **Project-scoped test plans:** Check `~/.gstack/projects/` for recent `*-test-plan-*.md` files for this repo 1. **Project-scoped test plans:** Check `~/.gstack/projects/` for recent `*-test-plan-*.md` files for this repo
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && ls -t ~/.gstack/projects/$SLUG/*-test-plan-*.md 2>/dev/null | head -1
ls -t ~/.gstack/projects/$SLUG/*-test-plan-*.md 2>/dev/null | head -1
``` ```
2. **Conversation context:** Check if a prior `/plan-eng-review` or `/plan-ceo-review` produced test plan output in this conversation 2. **Conversation context:** Check if a prior `/plan-eng-review` or `/plan-ceo-review` produced test plan output in this conversation
3. **Use whichever source is richer.** Fall back to git diff analysis only if neither is available. 3. **Use whichever source is richer.** Fall back to git diff analysis only if neither is available.
@@ -827,8 +826,7 @@ Write the report to both local and project-scoped locations:
**Project-scoped:** Write test outcome artifact for cross-session context: **Project-scoped:** Write test outcome artifact for cross-session context:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG
mkdir -p ~/.gstack/projects/$SLUG
``` ```
Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-outcome-{datetime}.md` Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-outcome-{datetime}.md`
+2 -4
View File
@@ -77,8 +77,7 @@ Before falling back to git diff heuristics, check for richer test plan sources:
1. **Project-scoped test plans:** Check `~/.gstack/projects/` for recent `*-test-plan-*.md` files for this repo 1. **Project-scoped test plans:** Check `~/.gstack/projects/` for recent `*-test-plan-*.md` files for this repo
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && ls -t ~/.gstack/projects/$SLUG/*-test-plan-*.md 2>/dev/null | head -1
ls -t ~/.gstack/projects/$SLUG/*-test-plan-*.md 2>/dev/null | head -1
``` ```
2. **Conversation context:** Check if a prior `/plan-eng-review` or `/plan-ceo-review` produced test plan output in this conversation 2. **Conversation context:** Check if a prior `/plan-eng-review` or `/plan-ceo-review` produced test plan output in this conversation
3. **Use whichever source is richer.** Fall back to git diff analysis only if neither is available. 3. **Use whichever source is richer.** Fall back to git diff analysis only if neither is available.
@@ -265,8 +264,7 @@ Write the report to both local and project-scoped locations:
**Project-scoped:** Write test outcome artifact for cross-session context: **Project-scoped:** Write test outcome artifact for cross-session context:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) && mkdir -p ~/.gstack/projects/$SLUG
mkdir -p ~/.gstack/projects/$SLUG
``` ```
Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-outcome-{datetime}.md` Write to `~/.gstack/projects/{slug}/{user}-{branch}-test-outcome-{datetime}.md`
+1 -3
View File
@@ -226,9 +226,7 @@ eval $(~/.claude/skills/gstack/bin/gstack-diff-scope <base> 2>/dev/null)
6. **Log the result** for the Review Readiness Dashboard: 6. **Log the result** for the Review Readiness Dashboard:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"design-review-lite","timestamp":"TIMESTAMP","status":"STATUS","findings":N,"auto_fixed":M}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"design-review-lite","timestamp":"TIMESTAMP","status":"STATUS","findings":N,"auto_fixed":M}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Substitute: TIMESTAMP = ISO 8601 datetime, STATUS = "clean" if 0 findings or "issues_found", N = total findings, M = auto-fixed count. Substitute: TIMESTAMP = ISO 8601 datetime, STATUS = "clean" if 0 findings or "issues_found", N = total findings, M = auto-fixed count.
+2 -7
View File
@@ -548,9 +548,7 @@ eval $(~/.claude/skills/gstack/bin/gstack-diff-scope <base> 2>/dev/null)
6. **Log the result** for the Review Readiness Dashboard: 6. **Log the result** for the Review Readiness Dashboard:
\`\`\`bash \`\`\`bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"design-review-lite","timestamp":"TIMESTAMP","status":"STATUS","findings":N,"auto_fixed":M}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"design-review-lite","timestamp":"TIMESTAMP","status":"STATUS","findings":N,"auto_fixed":M}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
\`\`\` \`\`\`
Substitute: TIMESTAMP = ISO 8601 datetime, STATUS = "clean" if 0 findings or "issues_found", N = total findings, M = auto-fixed count.`; Substitute: TIMESTAMP = ISO 8601 datetime, STATUS = "clean" if 0 findings or "issues_found", N = total findings, M = auto-fixed count.`;
@@ -898,10 +896,7 @@ function generateReviewDashboard(): string {
After completing the review, read the review log and config to display the dashboard. After completing the review, read the review log and config to display the dashboard.
\`\`\`bash \`\`\`bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-read
cat ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl 2>/dev/null || echo "NO_REVIEWS"
echo "---CONFIG---"
~/.claude/skills/gstack/bin/gstack-config get skip_eng_review 2>/dev/null || echo "false"
\`\`\` \`\`\`
Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between \`plan-design-review\` (full visual audit) and \`design-review-lite\` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display: Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between \`plan-design-review\` (full visual audit) and \`design-review-lite\` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display:
+4 -11
View File
@@ -180,10 +180,7 @@ You are running the `/ship` workflow. This is a **non-interactive, fully automat
After completing the review, read the review log and config to display the dashboard. After completing the review, read the review log and config to display the dashboard.
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-read
cat ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl 2>/dev/null || echo "NO_REVIEWS"
echo "---CONFIG---"
~/.claude/skills/gstack/bin/gstack-config get skip_eng_review 2>/dev/null || echo "false"
``` ```
Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display: Parse the output. Find the most recent entry for each skill (plan-ceo-review, plan-eng-review, plan-design-review, design-review-lite). Ignore entries with timestamps older than 7 days. For Design Review, show whichever is more recent between `plan-design-review` (full visual audit) and `design-review-lite` (code-level check). Append "(FULL)" or "(LITE)" to the status to distinguish. Display:
@@ -217,8 +214,7 @@ If the Eng Review is NOT "CLEAR":
1. **Check for a prior override on this branch:** 1. **Check for a prior override on this branch:**
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-read | grep '"skill":"ship-review-override"' || echo "NO_OVERRIDE"
grep '"skill":"ship-review-override"' ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl 2>/dev/null || echo "NO_OVERRIDE"
``` ```
If an override exists, display the dashboard and note "Review gate previously accepted — continuing." Do NOT ask again. If an override exists, display the dashboard and note "Review gate previously accepted — continuing." Do NOT ask again.
@@ -231,8 +227,7 @@ If the Eng Review is NOT "CLEAR":
3. **If the user chooses A or C,** persist the decision so future `/ship` runs on this branch skip the gate: 3. **If the user chooses A or C,** persist the decision so future `/ship` runs on this branch skip the gate:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"ship-review-override","timestamp":"'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'","decision":"USER_CHOICE"}'
echo '{"skill":"ship-review-override","timestamp":"'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'","decision":"USER_CHOICE"}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Substitute USER_CHOICE with "ship_anyway" or "not_relevant". Substitute USER_CHOICE with "ship_anyway" or "not_relevant".
@@ -671,9 +666,7 @@ eval $(~/.claude/skills/gstack/bin/gstack-diff-scope <base> 2>/dev/null)
6. **Log the result** for the Review Readiness Dashboard: 6. **Log the result** for the Review Readiness Dashboard:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"design-review-lite","timestamp":"TIMESTAMP","status":"STATUS","findings":N,"auto_fixed":M}'
mkdir -p ~/.gstack/projects/$SLUG
echo '{"skill":"design-review-lite","timestamp":"TIMESTAMP","status":"STATUS","findings":N,"auto_fixed":M}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Substitute: TIMESTAMP = ISO 8601 datetime, STATUS = "clean" if 0 findings or "issues_found", N = total findings, M = auto-fixed count. Substitute: TIMESTAMP = ISO 8601 datetime, STATUS = "clean" if 0 findings or "issues_found", N = total findings, M = auto-fixed count.
+2 -4
View File
@@ -60,8 +60,7 @@ If the Eng Review is NOT "CLEAR":
1. **Check for a prior override on this branch:** 1. **Check for a prior override on this branch:**
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-read | grep '"skill":"ship-review-override"' || echo "NO_OVERRIDE"
grep '"skill":"ship-review-override"' ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl 2>/dev/null || echo "NO_OVERRIDE"
``` ```
If an override exists, display the dashboard and note "Review gate previously accepted — continuing." Do NOT ask again. If an override exists, display the dashboard and note "Review gate previously accepted — continuing." Do NOT ask again.
@@ -74,8 +73,7 @@ If the Eng Review is NOT "CLEAR":
3. **If the user chooses A or C,** persist the decision so future `/ship` runs on this branch skip the gate: 3. **If the user chooses A or C,** persist the decision so future `/ship` runs on this branch skip the gate:
```bash ```bash
eval $(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null) ~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"ship-review-override","timestamp":"'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'","decision":"USER_CHOICE"}'
echo '{"skill":"ship-review-override","timestamp":"'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'","decision":"USER_CHOICE"}' >> ~/.gstack/projects/$SLUG/$BRANCH-reviews.jsonl
``` ```
Substitute USER_CHOICE with "ship_anyway" or "not_relevant". Substitute USER_CHOICE with "ship_anyway" or "not_relevant".