- Add .claude-plugin/plugin.json manifest for auto-updates
- Move claude/ contents to root level (commands/, hooks/, scripts/, skills/)
- Update hooks.json to use ${CLAUDE_PLUGIN_ROOT} for portability
- Add .gitignore for IDE files
- Update CLAUDE.md with new structure and installation instructions
Plugin can now be installed via:
claude plugin add host-uk/core-agent
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.2 KiB
3.2 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.
Detection
First, detect the project type:
- If
go.modexists → Go project →core go qa - If
composer.jsonexists → PHP project →core php qa - If both exist → ask user or check current directory
Process
- Run QA: Execute
core go qaorcore php 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