mirror of
https://github.com/garrytan/gstack.git
synced 2026-07-10 01:48:38 +02:00
fix: 6 critical fixes + community PR guardrails (v0.13.2.0) (#602)
* fix(security): commit bun.lock to pin dependency versions Remove bun.lock from .gitignore and commit the lockfile. Every bun install now uses exact pinned versions instead of resolving floating ^ ranges from npm fresh. Closes the supply-chain vector from #566. Co-Authored-By: boinger <boinger@users.noreply.github.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: gstack-slug falls back to dirname/unknown when git context is absent Add || true to git commands and fallback defaults so gstack-slug works outside git repos. Prevents unbound variable crash that kills every review skill when no git context exists. Co-Authored-By: collinstraka-clov <collinstraka-clov@users.noreply.github.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: setup auto-selects default after 10s timeout to prevent CI hangs Add -t 10 to the read command in the skill-prefix prompt. In CI, Docker, and Conductor workspaces where a TTY exists but nobody is watching, the prompt now auto-selects short names after 10 seconds instead of blocking forever. Co-Authored-By: stedfn <stedfn@users.noreply.github.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: browse CLI Windows lockfile — use string flag instead of numeric constants Bun compiled binaries on Windows don't handle numeric fs.constants correctly. The string flag 'wx' is semantically identical to O_CREAT | O_EXCL | O_WRONLY per Node docs and works on all platforms. Fixes #599 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: add ~/.gstack/projects/ to plan file search path /office-hours writes design docs to ~/.gstack/projects/$SLUG/ but /ship and /review only searched ~/.claude/plans, ~/.codex/plans, and .gstack/plans. Add the project-scoped directory as the first search location so plan validation finds design docs created by the standard workflow. Fixes #591 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: autoplan dual-voice — sequential foreground execution instead of broken parallel Background subagents don't inherit tool permissions in Claude Code, so the Claude subagent in dual-voice mode was silently failing on every invocation. Every autoplan run was degrading to single-reviewer mode without warning. Change all three phases (CEO, Design, Eng) from "simultaneously" to sequential foreground execution: Claude subagent first (Agent tool, foreground), then Codex (Bash). Both complete before the consensus table. Fixes #497 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: regenerate SKILL.md files from updated templates Regenerated from autoplan/SKILL.md.tmpl (dual-voice fix) and scripts/resolvers/review.ts (plan search path fix). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: add community PR guardrails — protect ETHOS.md and voice Add explicit CLAUDE.md rule requiring AskUserQuestion before accepting any community PR that touches ETHOS.md, removes promotional material, or changes Garry's voice. No exceptions, no auto-merging. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: bump version and changelog (v0.13.2.0) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: gen-skill-docs detects symlink loop, skips codex write that overwrites Claude SKILL.md When .agents/skills/gstack is symlinked to the repo root (vendored dev mode), gen-skill-docs --host codex was writing the Codex-transformed SKILL.md through the symlink, overwriting the Claude version. This caused SKILL.md and agents/openai.yaml to silently revert to Codex paths after every build. Now detects when the codex output path resolves to the same real file as the Claude output and skips the write. Content is still generated for token budget tracking. The openai.yaml write is also skipped for the same symlink case. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: resolve all 7 test failures — version sync, zsh glob guard, symlink-aware codex tests 1. package.json version synced with VERSION file (0.13.3.0) 2. design-shotgun/SKILL.md.tmpl: added setopt +o nomatch guard to bash block with variant-*.png glob 3. Codex generation tests: skip skills where .agents/skills/{name} is a symlink back to repo root (vendored dev mode). These can't have proper codex content since gen-skill-docs skips the write to avoid overwriting the Claude SKILL.md. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: boinger <boinger@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: collinstraka-clov <collinstraka-clov@users.noreply.github.com> Co-authored-by: stedfn <stedfn@users.noreply.github.com>
This commit is contained in:
+12
-10
@@ -647,7 +647,9 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
Duplicates → reject (P4). Borderline (3-5 files) → mark TASTE DECISION.
|
||||
- All 10 review sections: run fully, auto-decide each issue, log every decision.
|
||||
- Dual voices: always run BOTH Claude subagent AND Codex if available (P6).
|
||||
Run them simultaneously (Agent tool for subagent, Bash for Codex).
|
||||
Run them sequentially in foreground. First the Claude subagent (Agent tool,
|
||||
foreground — do NOT use run_in_background), then Codex (Bash). Both must
|
||||
complete before building the consensus table.
|
||||
|
||||
**Codex CEO voice** (via Bash):
|
||||
```bash
|
||||
@@ -674,7 +676,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
5. What's the competitive risk — could someone else solve this first/better?
|
||||
For each finding: what's wrong, severity (critical/high/medium), and the fix."
|
||||
|
||||
**Error handling:** All non-blocking. Codex auth/timeout/empty → proceed with
|
||||
**Error handling:** Both calls block in foreground. Codex auth/timeout/empty → proceed with
|
||||
Claude subagent only, tagged `[single-model]`. If Claude subagent also fails →
|
||||
"Outside voices unavailable — continuing with primary review."
|
||||
|
||||
@@ -696,10 +698,10 @@ Step 0 (0A-0F) — run each sub-step and produce:
|
||||
- 0E: Temporal interrogation (HOUR 1 → HOUR 6+)
|
||||
- 0F: Mode selection confirmation
|
||||
|
||||
Step 0.5 (Dual Voices): Run Claude subagent AND Codex simultaneously. Present
|
||||
Codex output under CODEX SAYS (CEO — strategy challenge) header. Present subagent
|
||||
output under CLAUDE SUBAGENT (CEO — strategic independence) header. Produce CEO
|
||||
consensus table:
|
||||
Step 0.5 (Dual Voices): Run Claude subagent (foreground Agent tool) first, then
|
||||
Codex (Bash). Present Codex output under CODEX SAYS (CEO — strategy challenge)
|
||||
header. Present subagent output under CLAUDE SUBAGENT (CEO — strategic independence)
|
||||
header. Produce CEO consensus table:
|
||||
|
||||
```
|
||||
CEO DUAL VOICES — CONSENSUS TABLE:
|
||||
@@ -792,7 +794,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
For each finding: what's wrong, severity (critical/high/medium), and the fix."
|
||||
NO prior-phase context — subagent must be truly independent.
|
||||
|
||||
Error handling: same as Phase 1 (non-blocking, degradation matrix applies).
|
||||
Error handling: same as Phase 1 (both foreground/blocking, degradation matrix applies).
|
||||
|
||||
- Design choices: if codex disagrees with a design decision with valid UX reasoning
|
||||
→ TASTE DECISION. Scope changes both models agree on → USER CHALLENGE.
|
||||
@@ -801,7 +803,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
|
||||
1. Step 0 (Design Scope): Rate completeness 0-10. Check DESIGN.md. Map existing patterns.
|
||||
|
||||
2. Step 0.5 (Dual Voices): Run Claude subagent AND Codex simultaneously. Present under
|
||||
2. Step 0.5 (Dual Voices): Run Claude subagent (foreground) first, then Codex. Present under
|
||||
CODEX SAYS (design — UX challenge) and CLAUDE SUBAGENT (design — independent review)
|
||||
headers. Produce design litmus scorecard (consensus table). Use the litmus scorecard
|
||||
format from plan-design-review. Include CEO phase findings in Codex prompt ONLY
|
||||
@@ -862,7 +864,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
For each finding: what's wrong, severity, and the fix."
|
||||
NO prior-phase context — subagent must be truly independent.
|
||||
|
||||
Error handling: same as Phase 1 (non-blocking, degradation matrix applies).
|
||||
Error handling: same as Phase 1 (both foreground/blocking, degradation matrix applies).
|
||||
|
||||
- Architecture choices: explicit over clever (P5). If codex disagrees with valid reason → TASTE DECISION. Scope changes both models agree on → USER CHALLENGE.
|
||||
- Evals: always include all relevant suites (P1)
|
||||
@@ -874,7 +876,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
1. Step 0 (Scope Challenge): Read actual code referenced by the plan. Map each
|
||||
sub-problem to existing code. Run the complexity check. Produce concrete findings.
|
||||
|
||||
2. Step 0.5 (Dual Voices): Run Claude subagent AND Codex simultaneously. Present
|
||||
2. Step 0.5 (Dual Voices): Run Claude subagent (foreground) first, then Codex. Present
|
||||
Codex output under CODEX SAYS (eng — architecture challenge) header. Present subagent
|
||||
output under CLAUDE SUBAGENT (eng — independent review) header. Produce eng consensus
|
||||
table:
|
||||
|
||||
+12
-10
@@ -235,7 +235,9 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
Duplicates → reject (P4). Borderline (3-5 files) → mark TASTE DECISION.
|
||||
- All 10 review sections: run fully, auto-decide each issue, log every decision.
|
||||
- Dual voices: always run BOTH Claude subagent AND Codex if available (P6).
|
||||
Run them simultaneously (Agent tool for subagent, Bash for Codex).
|
||||
Run them sequentially in foreground. First the Claude subagent (Agent tool,
|
||||
foreground — do NOT use run_in_background), then Codex (Bash). Both must
|
||||
complete before building the consensus table.
|
||||
|
||||
**Codex CEO voice** (via Bash):
|
||||
```bash
|
||||
@@ -262,7 +264,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
5. What's the competitive risk — could someone else solve this first/better?
|
||||
For each finding: what's wrong, severity (critical/high/medium), and the fix."
|
||||
|
||||
**Error handling:** All non-blocking. Codex auth/timeout/empty → proceed with
|
||||
**Error handling:** Both calls block in foreground. Codex auth/timeout/empty → proceed with
|
||||
Claude subagent only, tagged `[single-model]`. If Claude subagent also fails →
|
||||
"Outside voices unavailable — continuing with primary review."
|
||||
|
||||
@@ -284,10 +286,10 @@ Step 0 (0A-0F) — run each sub-step and produce:
|
||||
- 0E: Temporal interrogation (HOUR 1 → HOUR 6+)
|
||||
- 0F: Mode selection confirmation
|
||||
|
||||
Step 0.5 (Dual Voices): Run Claude subagent AND Codex simultaneously. Present
|
||||
Codex output under CODEX SAYS (CEO — strategy challenge) header. Present subagent
|
||||
output under CLAUDE SUBAGENT (CEO — strategic independence) header. Produce CEO
|
||||
consensus table:
|
||||
Step 0.5 (Dual Voices): Run Claude subagent (foreground Agent tool) first, then
|
||||
Codex (Bash). Present Codex output under CODEX SAYS (CEO — strategy challenge)
|
||||
header. Present subagent output under CLAUDE SUBAGENT (CEO — strategic independence)
|
||||
header. Produce CEO consensus table:
|
||||
|
||||
```
|
||||
CEO DUAL VOICES — CONSENSUS TABLE:
|
||||
@@ -380,7 +382,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
For each finding: what's wrong, severity (critical/high/medium), and the fix."
|
||||
NO prior-phase context — subagent must be truly independent.
|
||||
|
||||
Error handling: same as Phase 1 (non-blocking, degradation matrix applies).
|
||||
Error handling: same as Phase 1 (both foreground/blocking, degradation matrix applies).
|
||||
|
||||
- Design choices: if codex disagrees with a design decision with valid UX reasoning
|
||||
→ TASTE DECISION. Scope changes both models agree on → USER CHALLENGE.
|
||||
@@ -389,7 +391,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
|
||||
1. Step 0 (Design Scope): Rate completeness 0-10. Check DESIGN.md. Map existing patterns.
|
||||
|
||||
2. Step 0.5 (Dual Voices): Run Claude subagent AND Codex simultaneously. Present under
|
||||
2. Step 0.5 (Dual Voices): Run Claude subagent (foreground) first, then Codex. Present under
|
||||
CODEX SAYS (design — UX challenge) and CLAUDE SUBAGENT (design — independent review)
|
||||
headers. Produce design litmus scorecard (consensus table). Use the litmus scorecard
|
||||
format from plan-design-review. Include CEO phase findings in Codex prompt ONLY
|
||||
@@ -450,7 +452,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
For each finding: what's wrong, severity, and the fix."
|
||||
NO prior-phase context — subagent must be truly independent.
|
||||
|
||||
Error handling: same as Phase 1 (non-blocking, degradation matrix applies).
|
||||
Error handling: same as Phase 1 (both foreground/blocking, degradation matrix applies).
|
||||
|
||||
- Architecture choices: explicit over clever (P5). If codex disagrees with valid reason → TASTE DECISION. Scope changes both models agree on → USER CHALLENGE.
|
||||
- Evals: always include all relevant suites (P1)
|
||||
@@ -462,7 +464,7 @@ Override: every AskUserQuestion → auto-decide using the 6 principles.
|
||||
1. Step 0 (Scope Challenge): Read actual code referenced by the plan. Map each
|
||||
sub-problem to existing code. Run the complexity check. Produce concrete findings.
|
||||
|
||||
2. Step 0.5 (Dual Voices): Run Claude subagent AND Codex simultaneously. Present
|
||||
2. Step 0.5 (Dual Voices): Run Claude subagent (foreground) first, then Codex. Present
|
||||
Codex output under CODEX SAYS (eng — architecture challenge) header. Present subagent
|
||||
output under CLAUDE SUBAGENT (eng — independent review) header. Produce eng consensus
|
||||
table:
|
||||
|
||||
Reference in New Issue
Block a user