mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-12 23:43:05 +08:00
Adds comprehensive eval infrastructure: - Tier 1 (free): 13 new static tests — cross-skill path consistency, QA structure validation, greptile format, planted-bug fixture validation - Tier 2 (Agent SDK E2E): /qa quick, /review with pre-built git repo, 3 planted-bug outcome evals (static, SPA, checkout — each with 5 bugs) - Tier 3 (LLM judge): QA workflow quality, health rubric clarity, cross-skill consistency, baseline score pinning New fixtures: 3 HTML pages with 15 total planted bugs, ground truth JSON, review-eval-vuln.rb, eval-baselines.json. Shared llm-judge.ts helper (DRY). Unified EVALS=1 flag replaces SKILL_E2E + ANTHROPIC_API_KEY checks. `bun run test:evals` runs everything that costs money (~$4/run). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
44 lines
1.6 KiB
JSON
44 lines
1.6 KiB
JSON
{
|
|
"fixture": "qa-eval-checkout.html",
|
|
"bugs": [
|
|
{
|
|
"id": "broken-email-regex",
|
|
"category": "functional",
|
|
"severity": "high",
|
|
"description": "Email validation accepts 'user@' as valid — regex pattern [^@]+@[^@] is missing domain requirement",
|
|
"detection_hint": "email|regex|validation|accepts|invalid|user@|pattern"
|
|
},
|
|
{
|
|
"id": "nan-total",
|
|
"category": "functional",
|
|
"severity": "high",
|
|
"description": "Clearing the quantity field shows 'Total: $NaN' — parseInt on empty string returns NaN with no fallback",
|
|
"detection_hint": "NaN|total|quantity|empty|price|calculation|clear"
|
|
},
|
|
{
|
|
"id": "cc-field-overflow",
|
|
"category": "visual",
|
|
"severity": "medium",
|
|
"description": "Credit card input has no maxlength attribute — entering >20 characters causes text to overflow the container",
|
|
"detection_hint": "credit card|maxlength|overflow|cc|input|long|container"
|
|
},
|
|
{
|
|
"id": "missing-required-zip",
|
|
"category": "functional",
|
|
"severity": "medium",
|
|
"description": "Zip code field has no 'required' attribute — form can be submitted without a zip code",
|
|
"detection_hint": "zip|required|missing|form|submit|shipping|postal"
|
|
},
|
|
{
|
|
"id": "stripe-not-defined",
|
|
"category": "console",
|
|
"severity": "high",
|
|
"description": "Form submit triggers 'Uncaught ReferenceError: stripe is not defined' — payment SDK not loaded",
|
|
"detection_hint": "stripe|ReferenceError|not defined|console|error|submit|payment"
|
|
}
|
|
],
|
|
"total_bugs": 5,
|
|
"minimum_detection": 3,
|
|
"max_false_positives": 2
|
|
}
|