From bc4c0e82cd9cec19baf16ac9b6b42a79e2990f40 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Fri, 17 Apr 2026 05:54:12 +0800 Subject: [PATCH] fix: extend tilde-in-assignment fix to design resolver + 4 skill templates PR #993 fixed the Claude Code permission prompt for `scripts/resolvers/browse.ts` and `gstack-upgrade/SKILL.md.tmpl`. Same bug lives in three more places that weren't on the contributor's branch: - `scripts/resolvers/design.ts` (3 spots: D=, B=, and _DESIGN_DIR=) - `design-shotgun/SKILL.md.tmpl` (_DESIGN_DIR=) - `plan-design-review/SKILL.md.tmpl` (_DESIGN_DIR=) - `design-consultation/SKILL.md.tmpl` (_DESIGN_DIR=) - `design-review/SKILL.md.tmpl` (REPORT_DIR=) Replaces bare `~/` with quoted `"$HOME/..."` in the source-of-truth files, then regenerates. `grep -rEn '^[A-Za-z_]+=~/' --include="SKILL.md" .` now returns zero hits across all hosts (claude, codex, cursor, gbrain, hermes). Co-Authored-By: Claude Opus 4.7 (1M context) --- design-consultation/SKILL.md | 6 +++--- design-consultation/SKILL.md.tmpl | 2 +- design-html/SKILL.md | 4 ++-- design-review/SKILL.md | 6 +++--- design-review/SKILL.md.tmpl | 2 +- design-shotgun/SKILL.md | 6 +++--- design-shotgun/SKILL.md.tmpl | 2 +- office-hours/SKILL.md | 4 ++-- plan-design-review/SKILL.md | 6 +++--- plan-design-review/SKILL.md.tmpl | 2 +- scripts/resolvers/design.ts | 8 ++++---- 11 files changed, 24 insertions(+), 24 deletions(-) diff --git a/design-consultation/SKILL.md b/design-consultation/SKILL.md index 36d89123..baa0f00b 100644 --- a/design-consultation/SKILL.md +++ b/design-consultation/SKILL.md @@ -662,7 +662,7 @@ If browse is not available, that's fine — visual research is optional. The ski _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) D="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/design/dist/design" ] && D="$_ROOT/.claude/skills/gstack/design/dist/design" -[ -z "$D" ] && D=~/.claude/skills/gstack/design/dist/design +[ -z "$D" ] && D="$HOME/.claude/skills/gstack/design/dist/design" if [ -x "$D" ]; then echo "DESIGN_READY: $D" else @@ -670,7 +670,7 @@ else fi B="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse" -[ -z "$B" ] && B=~/.claude/skills/gstack/browse/dist/browse +[ -z "$B" ] && B="$HOME/.claude/skills/gstack/browse/dist/browse" if [ -x "$B" ]; then echo "BROWSE_READY: $B" else @@ -985,7 +985,7 @@ Generate AI-rendered mockups showing the proposed design system applied to reali ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -_DESIGN_DIR=~/.gstack/projects/$SLUG/designs/design-system-$(date +%Y%m%d) +_DESIGN_DIR="$HOME/.gstack/projects/$SLUG/designs/design-system-$(date +%Y%m%d)" mkdir -p "$_DESIGN_DIR" echo "DESIGN_DIR: $_DESIGN_DIR" ``` diff --git a/design-consultation/SKILL.md.tmpl b/design-consultation/SKILL.md.tmpl index d80c7fb2..fe26c1fe 100644 --- a/design-consultation/SKILL.md.tmpl +++ b/design-consultation/SKILL.md.tmpl @@ -263,7 +263,7 @@ Generate AI-rendered mockups showing the proposed design system applied to reali ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -_DESIGN_DIR=~/.gstack/projects/$SLUG/designs/design-system-$(date +%Y%m%d) +_DESIGN_DIR="$HOME/.gstack/projects/$SLUG/designs/design-system-$(date +%Y%m%d)" mkdir -p "$_DESIGN_DIR" echo "DESIGN_DIR: $_DESIGN_DIR" ``` diff --git a/design-html/SKILL.md b/design-html/SKILL.md index ea73c852..d36c1d1c 100644 --- a/design-html/SKILL.md +++ b/design-html/SKILL.md @@ -571,7 +571,7 @@ around obstacles. _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) D="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/design/dist/design" ] && D="$_ROOT/.claude/skills/gstack/design/dist/design" -[ -z "$D" ] && D=~/.claude/skills/gstack/design/dist/design +[ -z "$D" ] && D="$HOME/.claude/skills/gstack/design/dist/design" if [ -x "$D" ]; then echo "DESIGN_READY: $D" else @@ -579,7 +579,7 @@ else fi B="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse" -[ -z "$B" ] && B=~/.claude/skills/gstack/browse/dist/browse +[ -z "$B" ] && B="$HOME/.claude/skills/gstack/browse/dist/browse" if [ -x "$B" ]; then echo "BROWSE_READY: $B" else diff --git a/design-review/SKILL.md b/design-review/SKILL.md index f2c136f9..aebe2d9d 100644 --- a/design-review/SKILL.md +++ b/design-review/SKILL.md @@ -825,7 +825,7 @@ Only commit if there are changes. Stage all bootstrap files (config, test direct _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) D="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/design/dist/design" ] && D="$_ROOT/.claude/skills/gstack/design/dist/design" -[ -z "$D" ] && D=~/.claude/skills/gstack/design/dist/design +[ -z "$D" ] && D="$HOME/.claude/skills/gstack/design/dist/design" if [ -x "$D" ]; then echo "DESIGN_READY: $D" else @@ -833,7 +833,7 @@ else fi B="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse" -[ -z "$B" ] && B=~/.claude/skills/gstack/browse/dist/browse +[ -z "$B" ] && B="$HOME/.claude/skills/gstack/browse/dist/browse" if [ -x "$B" ]; then echo "BROWSE_READY: $B" else @@ -870,7 +870,7 @@ If `DESIGN_NOT_AVAILABLE`: skip mockup generation — the fix loop works without ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -REPORT_DIR=~/.gstack/projects/$SLUG/designs/design-audit-$(date +%Y%m%d) +REPORT_DIR="$HOME/.gstack/projects/$SLUG/designs/design-audit-$(date +%Y%m%d)" mkdir -p "$REPORT_DIR/screenshots" echo "REPORT_DIR: $REPORT_DIR" ``` diff --git a/design-review/SKILL.md.tmpl b/design-review/SKILL.md.tmpl index fab9bb39..bdcda48e 100644 --- a/design-review/SKILL.md.tmpl +++ b/design-review/SKILL.md.tmpl @@ -96,7 +96,7 @@ If `DESIGN_NOT_AVAILABLE`: skip mockup generation — the fix loop works without ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -REPORT_DIR=~/.gstack/projects/$SLUG/designs/design-audit-$(date +%Y%m%d) +REPORT_DIR="$HOME/.gstack/projects/$SLUG/designs/design-audit-$(date +%Y%m%d)" mkdir -p "$REPORT_DIR/screenshots" echo "REPORT_DIR: $REPORT_DIR" ``` diff --git a/design-shotgun/SKILL.md b/design-shotgun/SKILL.md index 861ee06d..c61b15f8 100644 --- a/design-shotgun/SKILL.md +++ b/design-shotgun/SKILL.md @@ -565,7 +565,7 @@ visual brainstorming, not a review process. _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) D="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/design/dist/design" ] && D="$_ROOT/.claude/skills/gstack/design/dist/design" -[ -z "$D" ] && D=~/.claude/skills/gstack/design/dist/design +[ -z "$D" ] && D="$HOME/.claude/skills/gstack/design/dist/design" if [ -x "$D" ]; then echo "DESIGN_READY: $D" else @@ -573,7 +573,7 @@ else fi B="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse" -[ -z "$B" ] && B=~/.claude/skills/gstack/browse/dist/browse +[ -z "$B" ] && B="$HOME/.claude/skills/gstack/browse/dist/browse" if [ -x "$B" ]; then echo "BROWSE_READY: $B" else @@ -797,7 +797,7 @@ Set up the output directory: ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -_DESIGN_DIR=~/.gstack/projects/$SLUG/designs/-$(date +%Y%m%d) +_DESIGN_DIR="$HOME/.gstack/projects/$SLUG/designs/-$(date +%Y%m%d)" mkdir -p "$_DESIGN_DIR" echo "DESIGN_DIR: $_DESIGN_DIR" ``` diff --git a/design-shotgun/SKILL.md.tmpl b/design-shotgun/SKILL.md.tmpl index 4842409d..ab22c312 100644 --- a/design-shotgun/SKILL.md.tmpl +++ b/design-shotgun/SKILL.md.tmpl @@ -144,7 +144,7 @@ Set up the output directory: ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -_DESIGN_DIR=~/.gstack/projects/$SLUG/designs/-$(date +%Y%m%d) +_DESIGN_DIR="$HOME/.gstack/projects/$SLUG/designs/-$(date +%Y%m%d)" mkdir -p "$_DESIGN_DIR" echo "DESIGN_DIR: $_DESIGN_DIR" ``` diff --git a/office-hours/SKILL.md b/office-hours/SKILL.md index 0c31095f..699e4a58 100644 --- a/office-hours/SKILL.md +++ b/office-hours/SKILL.md @@ -1124,7 +1124,7 @@ Present via AskUserQuestion. Do NOT proceed without user approval of the approac _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) D="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/design/dist/design" ] && D="$_ROOT/.claude/skills/gstack/design/dist/design" -[ -z "$D" ] && D=~/.claude/skills/gstack/design/dist/design +[ -z "$D" ] && D="$HOME/.claude/skills/gstack/design/dist/design" [ -x "$D" ] && echo "DESIGN_READY" || echo "DESIGN_NOT_AVAILABLE" ``` @@ -1139,7 +1139,7 @@ Generating visual mockups of the proposed design... (say "skip" if you don't nee ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -_DESIGN_DIR=~/.gstack/projects/$SLUG/designs/mockup-$(date +%Y%m%d) +_DESIGN_DIR="$HOME/.gstack/projects/$SLUG/designs/mockup-$(date +%Y%m%d)" mkdir -p "$_DESIGN_DIR" echo "DESIGN_DIR: $_DESIGN_DIR" ``` diff --git a/plan-design-review/SKILL.md b/plan-design-review/SKILL.md index 9a3ce36e..e8bde0ec 100644 --- a/plan-design-review/SKILL.md +++ b/plan-design-review/SKILL.md @@ -808,7 +808,7 @@ Report findings before proceeding to Step 0. _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) D="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/design/dist/design" ] && D="$_ROOT/.claude/skills/gstack/design/dist/design" -[ -z "$D" ] && D=~/.claude/skills/gstack/design/dist/design +[ -z "$D" ] && D="$HOME/.claude/skills/gstack/design/dist/design" if [ -x "$D" ]; then echo "DESIGN_READY: $D" else @@ -816,7 +816,7 @@ else fi B="" [ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse" -[ -z "$B" ] && B=~/.claude/skills/gstack/browse/dist/browse +[ -z "$B" ] && B="$HOME/.claude/skills/gstack/browse/dist/browse" if [ -x "$B" ]; then echo "BROWSE_READY: $B" else @@ -896,7 +896,7 @@ First, set up the output directory. Name it after the screen/feature being desig ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -_DESIGN_DIR=~/.gstack/projects/$SLUG/designs/-$(date +%Y%m%d) +_DESIGN_DIR="$HOME/.gstack/projects/$SLUG/designs/-$(date +%Y%m%d)" mkdir -p "$_DESIGN_DIR" echo "DESIGN_DIR: $_DESIGN_DIR" ``` diff --git a/plan-design-review/SKILL.md.tmpl b/plan-design-review/SKILL.md.tmpl index b9c42d82..a4b40d2c 100644 --- a/plan-design-review/SKILL.md.tmpl +++ b/plan-design-review/SKILL.md.tmpl @@ -188,7 +188,7 @@ First, set up the output directory. Name it after the screen/feature being desig ```bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -_DESIGN_DIR=~/.gstack/projects/$SLUG/designs/-$(date +%Y%m%d) +_DESIGN_DIR="$HOME/.gstack/projects/$SLUG/designs/-$(date +%Y%m%d)" mkdir -p "$_DESIGN_DIR" echo "DESIGN_DIR: $_DESIGN_DIR" ``` diff --git a/scripts/resolvers/design.ts b/scripts/resolvers/design.ts index 926e3484..191a1b10 100644 --- a/scripts/resolvers/design.ts +++ b/scripts/resolvers/design.ts @@ -792,7 +792,7 @@ export function generateDesignSetup(ctx: TemplateContext): string { _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) D="" [ -n "$_ROOT" ] && [ -x "$_ROOT/${ctx.paths.localSkillRoot}/design/dist/design" ] && D="$_ROOT/${ctx.paths.localSkillRoot}/design/dist/design" -[ -z "$D" ] && D=${ctx.paths.designDir}/design +[ -z "$D" ] && D="$HOME${ctx.paths.designDir.replace(/^~/, '')}/design" if [ -x "$D" ]; then echo "DESIGN_READY: $D" else @@ -800,7 +800,7 @@ else fi B="" [ -n "$_ROOT" ] && [ -x "$_ROOT/${ctx.paths.localSkillRoot}/browse/dist/browse" ] && B="$_ROOT/${ctx.paths.localSkillRoot}/browse/dist/browse" -[ -z "$B" ] && B=${ctx.paths.browseDir}/browse +[ -z "$B" ] && B="$HOME${ctx.paths.browseDir.replace(/^~/, '')}/browse" if [ -x "$B" ]; then echo "BROWSE_READY: $B" else @@ -837,7 +837,7 @@ export function generateDesignMockup(ctx: TemplateContext): string { _ROOT=$(git rev-parse --show-toplevel 2>/dev/null) D="" [ -n "$_ROOT" ] && [ -x "$_ROOT/${ctx.paths.localSkillRoot}/design/dist/design" ] && D="$_ROOT/${ctx.paths.localSkillRoot}/design/dist/design" -[ -z "$D" ] && D=${ctx.paths.designDir}/design +[ -z "$D" ] && D="$HOME${ctx.paths.designDir.replace(/^~/, '')}/design" [ -x "$D" ] && echo "DESIGN_READY" || echo "DESIGN_NOT_AVAILABLE" \`\`\` @@ -852,7 +852,7 @@ Generating visual mockups of the proposed design... (say "skip" if you don't nee \`\`\`bash eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" -_DESIGN_DIR=~/.gstack/projects/$SLUG/designs/mockup-$(date +%Y%m%d) +_DESIGN_DIR="$HOME/.gstack/projects/$SLUG/designs/mockup-$(date +%Y%m%d)" mkdir -p "$_DESIGN_DIR" echo "DESIGN_DIR: $_DESIGN_DIR" \`\`\`