Skip to content

feat: multi-stack portability for Node.js, TypeScript, and Python projects (v0.5.1)#126

Open
brahmasky wants to merge 2 commits intogarrytan:mainfrom
brahmasky:feat/multi-stack-portability
Open

feat: multi-stack portability for Node.js, TypeScript, and Python projects (v0.5.1)#126
brahmasky wants to merge 2 commits intogarrytan:mainfrom
brahmasky:feat/multi-stack-portability

Conversation

@brahmasky
Copy link

Summary

gstack's core workflow skills (/ship, /plan-ceo-review, /retro, /qa) had several hardcoded assumptions tied to the Rails stack. This PR makes them work correctly on Node.js, TypeScript, and Python projects without any configuration.

  • /ship auto-detects the test runner — vitest, jest, pytest, make, or bin/test-lane. Supports parallel runs for multi-language monorepos. Falls back gracefully if none found.
  • /ship handles both 3-digit semver and 4-digit VERSION formats — standard 1.2.3 projects no longer get confused by the extended format. No VERSION file = silently skip.
  • Eval suites in /ship are now explicitly Rails-only — gated on EVAL_SUITE=yes (detected via test/evals/ + Gemfile). TS/Python projects skip with a one-liner instead of failing.
  • /plan-ceo-review system audit works on any stack — grep covers .py/.ts/.tsx/.go/.rs alongside .rb. Lock file anchor auto-detected (pnpm-lock → poetry.lock → go.sum → package.json).
  • /retro shows local time instead of hardcoded Pacific — timezone auto-detected from system on macOS + Linux.
  • /qa offers git stash instead of hard-failing on dirty working tree — stash/restore is handled automatically around the QA session.
  • Diff-aware mode uses the correct base branch{{QA_METHODOLOGY}} and {{DESIGN_METHODOLOGY}} were hardcoded to main; now use the <base> detected by {{BASE_BRANCH_DETECT}}.

Implementation

Added a new {{PROJECT_DETECT}} resolver to gen-skill-docs.ts — a stack detection block that prints TEST_CMD, VERSION format, LANGUAGES, and EVAL_SUITE to stdout. Follows the existing {{QA_METHODOLOGY}} / {{DESIGN_METHODOLOGY}} pattern. All SKILL.md files are regenerated and fresh.

Test plan

  • bun scripts/gen-skill-docs.ts --dry-run → all 15 files FRESH
  • 170 skill validation tests pass (1 pre-existing PATH failure in gen-skill-docs test, unrelated to these changes)
  • No new failures introduced

🤖 Generated with Claude Code

Paco Luo and others added 2 commits March 18, 2026 08:53
…jects

- Add {{PROJECT_DETECT}} resolver: auto-detects test runner (vitest/jest/pytest/
  make/bin/test-lane), VERSION format (3 vs 4-digit semver), project languages,
  and eval suite availability. Replaces all Rails-hardcoded assumptions in /ship.

- /ship Step 3: generic test runner — detects and runs vitest, jest, pytest, or
  make test instead of hardcoding bin/test-lane + npm run test. Supports parallel
  runs when multiple test suites coexist (e.g. Node.js + Python monorepo).

- /ship Step 3.25: eval suites are now explicitly Rails-only (gated on EVAL_SUITE=yes).
  Non-Rails projects skip this step entirely with a clear message instead of failing.

- /ship Step 4: VERSION bump handles both 3-digit semver (MAJOR.MINOR.PATCH) and
  4-digit extended format. No-VERSION-file projects skip the step gracefully.

- /plan-ceo-review: system audit grep now covers .rb/.py/.ts/.tsx/.js/.jsx/.go/.rs.
  Recently-touched-files detection uses lock file anchor auto-detected per stack
  (Gemfile.lock → pnpm-lock.yaml → poetry.lock → pyproject.toml → go.sum → package.json).

- /retro: replace hardcoded TZ=America/Los_Angeles with local timezone auto-detection
  (macOS + Linux compatible). Retro output now displays in the committer's local time.

- /qa: dirty working tree is now a recoverable condition. Instead of hard-erroring,
  Claude offers to git stash and restore automatically after Phase 10 completes.

- {{QA_METHODOLOGY}} and {{DESIGN_METHODOLOGY}}: replace hardcoded `main` in
  diff-aware mode with <base> (uses base branch detected by {{BASE_BRANCH_DETECT}}).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant