Introduces a new script to detect the current module (PHP or Go) based on the presence of composer.json or go.mod files, git remote URL, or the current directory name. This context is loaded once per session and used to dynamically adjust commands, starting with the QA command. Refactors the QA command and verification scripts to use the new module context, removing redundant project-type detection.
3.1 KiB
3.1 KiB
| name | description | hooks | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| qa | Run QA checks and fix all issues iteratively |
|
QA Fix Loop
Run the full QA pipeline and fix all issues.
Workspace: {{env.CLAUDE_CURRENT_MODULE}} ({{env.CLAUDE_MODULE_TYPE}})
Process
- Run QA: Execute
core {{env.CLAUDE_MODULE_TYPE}} qa - Parse issues: Extract failures from output (see format below)
- Fix each issue: Address one at a time, simplest first
- Re-verify: After fixes, re-run QA
- Repeat: Until all checks pass
- Report: Summary of what was fixed
Issue Priority
Fix in this order (fastest feedback first):
- fmt - formatting issues (auto-fix with
core go fmt) - lint - static analysis (usually quick fixes)
- test - failing tests (may need more investigation)
- build - compilation errors (fix before tests can run)
Output Parsing
Go QA Output
=== FMT ===
FAIL: pkg/api/handler.go needs formatting
=== LINT ===
pkg/api/handler.go:42:15: undefined: ErrNotFound (typecheck)
pkg/api/handler.go:87:2: ineffectual assignment to err (ineffassign)
=== TEST ===
--- FAIL: TestCreateUser (0.02s)
handler_test.go:45: expected 200, got 500
FAIL
=== RESULT ===
fmt: FAIL
lint: FAIL (2 issues)
test: FAIL (1 failed)
PHP QA Output
=== PINT ===
FAIL: 2 files need formatting
=== STAN ===
src/Http/Controller.php:42 - Undefined variable $user
=== TEST ===
✗ CreateUserTest::testSuccess
Expected status 200, got 500
=== RESULT ===
pint: FAIL
stan: FAIL (1 error)
test: FAIL (1 failed)
Fixing Strategy
Formatting (fmt/pint):
- Just run
core go fmtorcore php fmt - No code reading needed
Lint errors:
- Read the specific file:line
- Understand the error type
- Make minimal fix
Test failures:
- Read the test file to understand expectation
- Read the implementation
- Fix the root cause (not just the symptom)
Build errors:
- Usually missing imports or typos
- Fix before attempting other checks
Stop Condition
Only stop when:
- All QA checks pass, OR
- User explicitly cancels, OR
- Same error repeats 3 times (stuck - ask for help)
Example Session
Detecting project type... Found go.mod → Go project
Running: core go qa
## QA Issues
pkg/api/handler.go:42:15: undefined: ErrNotFound
--- FAIL: TestCreateUser (0.02s)
**Summary:** lint: FAIL (1) | test: FAIL (1)
---
Fixing lint issue: undefined ErrNotFound
Reading pkg/api/handler.go...
Adding error variable definition.
Running: core go qa
## QA Issues
--- FAIL: TestCreateUser (0.02s)
expected 200, got 404
**Summary:** lint: PASS | test: FAIL (1)
---
Fixing test issue: expected 200, got 404
Reading test setup...
Correcting test data.
Running: core go qa
✓ All checks passed!
**Summary:**
- Fixed: undefined ErrNotFound (added error variable)
- Fixed: TestCreateUser (corrected test setup)
- 2 issues resolved, all checks passing