From 78c52878be1a2154dfb5995aa76cb1d8385927d7 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Wed, 18 Mar 2026 22:13:47 -0700 Subject: [PATCH] feat: use AskUserQuestion for dirty working tree check Replace hard exit 1 with interactive AskUserQuestion prompt offering commit/stash/abort options when /qa or /design-review detects a dirty working tree. --- design-review/SKILL.md | 21 +++++++++++++++------ design-review/SKILL.md.tmpl | 21 +++++++++++++++------ qa/SKILL.md | 22 ++++++++++++++++------ qa/SKILL.md.tmpl | 22 ++++++++++++++++------ 4 files changed, 62 insertions(+), 24 deletions(-) diff --git a/design-review/SKILL.md b/design-review/SKILL.md index dd7fced1..2c252bda 100644 --- a/design-review/SKILL.md +++ b/design-review/SKILL.md @@ -179,15 +179,24 @@ You are a senior product designer AND a frontend engineer. Review live sites wit Look for `DESIGN.md`, `design-system.md`, or similar in the repo root. If found, read it — all design decisions must be calibrated against it. Deviations from the project's stated design system are higher severity. If not found, use universal design principles and offer to create one from the inferred system. -**Require clean working tree before starting:** +**Check for clean working tree:** ```bash -if [ -n "$(git status --porcelain)" ]; then - echo "ERROR: Working tree is dirty. Commit or stash changes before running /design-review." - exit 1 -fi +git status --porcelain ``` +If the output is non-empty (working tree is dirty), **STOP** and use AskUserQuestion: + +"Your working tree has uncommitted changes. /design-review needs a clean tree so each design fix gets its own atomic commit." + +- A) Commit my changes — commit all current changes with a descriptive message, then start design review +- B) Stash my changes — stash, run design review, pop the stash after +- C) Abort — I'll clean up manually + +RECOMMENDATION: Choose A because uncommitted work should be preserved as a commit before design review adds its own fix commits. + +After the user chooses, execute their choice (commit or stash), then continue with setup. + **Find the browse binary:** ## SETUP (run this check BEFORE any browse command) @@ -877,7 +886,7 @@ If the repo has a `TODOS.md`: ## Additional Rules (design-review specific) -11. **Clean working tree required.** Refuse to start if `git status --porcelain` is non-empty. +11. **Clean working tree required.** If dirty, use AskUserQuestion to offer commit/stash/abort before proceeding. 12. **One commit per fix.** Never bundle multiple design fixes into one commit. 13. **Only modify tests when generating regression tests in Phase 8e.5.** Never modify CI configuration. Never modify existing tests — only create new test files. 14. **Revert on regression.** If a fix makes things worse, `git revert HEAD` immediately. diff --git a/design-review/SKILL.md.tmpl b/design-review/SKILL.md.tmpl index 24fe160c..7e157287 100644 --- a/design-review/SKILL.md.tmpl +++ b/design-review/SKILL.md.tmpl @@ -45,15 +45,24 @@ You are a senior product designer AND a frontend engineer. Review live sites wit Look for `DESIGN.md`, `design-system.md`, or similar in the repo root. If found, read it — all design decisions must be calibrated against it. Deviations from the project's stated design system are higher severity. If not found, use universal design principles and offer to create one from the inferred system. -**Require clean working tree before starting:** +**Check for clean working tree:** ```bash -if [ -n "$(git status --porcelain)" ]; then - echo "ERROR: Working tree is dirty. Commit or stash changes before running /design-review." - exit 1 -fi +git status --porcelain ``` +If the output is non-empty (working tree is dirty), **STOP** and use AskUserQuestion: + +"Your working tree has uncommitted changes. /design-review needs a clean tree so each design fix gets its own atomic commit." + +- A) Commit my changes — commit all current changes with a descriptive message, then start design review +- B) Stash my changes — stash, run design review, pop the stash after +- C) Abort — I'll clean up manually + +RECOMMENDATION: Choose A because uncommitted work should be preserved as a commit before design review adds its own fix commits. + +After the user chooses, execute their choice (commit or stash), then continue with setup. + **Find the browse binary:** {{BROWSE_SETUP}} @@ -245,7 +254,7 @@ If the repo has a `TODOS.md`: ## Additional Rules (design-review specific) -11. **Clean working tree required.** Refuse to start if `git status --porcelain` is non-empty. +11. **Clean working tree required.** If dirty, use AskUserQuestion to offer commit/stash/abort before proceeding. 12. **One commit per fix.** Never bundle multiple design fixes into one commit. 13. **Only modify tests when generating regression tests in Phase 8e.5.** Never modify CI configuration. Never modify existing tests — only create new test files. 14. **Revert on regression.** If a fix makes things worse, `git revert HEAD` immediately. diff --git a/qa/SKILL.md b/qa/SKILL.md index 8ee176be..8d4337f6 100644 --- a/qa/SKILL.md +++ b/qa/SKILL.md @@ -200,14 +200,24 @@ You are a QA engineer AND a bug-fix engineer. Test web applications like a real **If no URL is given and you're on a feature branch:** Automatically enter **diff-aware mode** (see Modes below). This is the most common case — the user just shipped code on a branch and wants to verify it works. -**Require clean working tree before starting:** +**Check for clean working tree:** + ```bash -if [ -n "$(git status --porcelain)" ]; then - echo "ERROR: Working tree is dirty. Commit or stash changes before running /qa." - exit 1 -fi +git status --porcelain ``` +If the output is non-empty (working tree is dirty), **STOP** and use AskUserQuestion: + +"Your working tree has uncommitted changes. /qa needs a clean tree so each bug fix gets its own atomic commit." + +- A) Commit my changes — commit all current changes with a descriptive message, then start QA +- B) Stash my changes — stash, run QA, pop the stash after +- C) Abort — I'll clean up manually + +RECOMMENDATION: Choose A because uncommitted work should be preserved as a commit before QA adds its own fix commits. + +After the user chooses, execute their choice (commit or stash), then continue with setup. + **Find the browse binary:** ## SETUP (run this check BEFORE any browse command) @@ -892,7 +902,7 @@ If the repo has a `TODOS.md`: ## Additional Rules (qa-specific) -11. **Clean working tree required.** Refuse to start if `git status --porcelain` is non-empty. +11. **Clean working tree required.** If dirty, use AskUserQuestion to offer commit/stash/abort before proceeding. 12. **One commit per fix.** Never bundle multiple fixes into one commit. 13. **Only modify tests when generating regression tests in Phase 8e.5.** Never modify CI configuration. Never modify existing tests — only create new test files. 14. **Revert on regression.** If a fix makes things worse, `git revert HEAD` immediately. diff --git a/qa/SKILL.md.tmpl b/qa/SKILL.md.tmpl index 292f7140..eae79605 100644 --- a/qa/SKILL.md.tmpl +++ b/qa/SKILL.md.tmpl @@ -49,14 +49,24 @@ You are a QA engineer AND a bug-fix engineer. Test web applications like a real **If no URL is given and you're on a feature branch:** Automatically enter **diff-aware mode** (see Modes below). This is the most common case — the user just shipped code on a branch and wants to verify it works. -**Require clean working tree before starting:** +**Check for clean working tree:** + ```bash -if [ -n "$(git status --porcelain)" ]; then - echo "ERROR: Working tree is dirty. Commit or stash changes before running /qa." - exit 1 -fi +git status --porcelain ``` +If the output is non-empty (working tree is dirty), **STOP** and use AskUserQuestion: + +"Your working tree has uncommitted changes. /qa needs a clean tree so each bug fix gets its own atomic commit." + +- A) Commit my changes — commit all current changes with a descriptive message, then start QA +- B) Stash my changes — stash, run QA, pop the stash after +- C) Abort — I'll clean up manually + +RECOMMENDATION: Choose A because uncommitted work should be preserved as a commit before QA adds its own fix commits. + +After the user chooses, execute their choice (commit or stash), then continue with setup. + **Find the browse binary:** {{BROWSE_SETUP}} @@ -300,7 +310,7 @@ If the repo has a `TODOS.md`: ## Additional Rules (qa-specific) -11. **Clean working tree required.** Refuse to start if `git status --porcelain` is non-empty. +11. **Clean working tree required.** If dirty, use AskUserQuestion to offer commit/stash/abort before proceeding. 12. **One commit per fix.** Never bundle multiple fixes into one commit. 13. **Only modify tests when generating regression tests in Phase 8e.5.** Never modify CI configuration. Never modify existing tests — only create new test files. 14. **Revert on regression.** If a fix makes things worse, `git revert HEAD` immediately.