Restructurare Ralph QC loop pe smart gate dispatcher tag-driven (în loc de 5 faze fixe), DAG dependsOn cu propagare blocked, retry guard 3-strike, rate limit detection, plus dashboard live cu polling 5s. Changes: - tools/ralph_prd_generator.py: parametru optional final_plan_path; când e furnizat, invocă Claude Opus pe final-plan.md pentru extragere user stories cu schema extinsă (tags, dependsOn, acceptanceCriteria 3-5). Backward compat păstrat — fără final_plan_path, fallback la heuristic-ul vechi. - tools/ralph/prd-template.json: schema W3 (tags[], dependsOn[], retries, failed, blocked, failureReason, requiresDesignReview). - tools/ralph/prompt.md: 4 faze (impl, base quality, smart gates, commit) + dispatcher pe story.tags. Tags vide → run-all-gates fallback (safe default). - tools/ralph_dag.py (nou): tag validation heuristic anti-silent-regression (force ui dacă diff atinge .vue/.tsx/.html/.css/.scss; force db pentru migrations sau .sql; force vercel dacă există vercel.json) + topological sort cu blocked propagation + atomic prd.json updates. - tools/ralph/ralph.sh: --max-turns 30, DAG-aware story selection, retry counter cu auto-fail la 3, rate limit detection (sleep 30min + 1 retry), CLI subcommands prin tools/ralph_dag.py helper. - dashboard/handlers/ralph.py (nou): /api/ralph/status + /<slug>/log + /prd + /stop. Defensive vs corrupt prd.json. Sandbox-ed PID kill. - dashboard/ralph.html (nou): live cards 3/2/1 col responsive, polling 5s, drawer pentru log/PRD viewer, status colors (--status-running/blocked/ failed/complete declarate inline), Lucide icons cu aria-labels. - dashboard/api.py: mount /api/ralph/* (GET status/log/prd, POST stop). - tests/: 72 teste noi (smart gates, DAG, retry, dashboard endpoint). Note arhitecturale: - Polling 5s ales peste SSE/WebSocket (suficient pentru iter Ralph 8-15min) - Tag validation rulează POST-iter pe diff git pentru anti-silent-regression - Rate limit retry: 1 dată per rulare, apoi mark failed=rate_limited Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
902 B
JSON
39 lines
902 B
JSON
{
|
|
"projectName": "feature-name",
|
|
"branchName": "ralph/feature-name",
|
|
"description": "Descriere scurtă a feature-ului",
|
|
"techStack": {
|
|
"type": "python",
|
|
"commands": {
|
|
"start": "python main.py",
|
|
"build": "",
|
|
"lint": "ruff check .",
|
|
"typecheck": "mypy .",
|
|
"test": "pytest"
|
|
},
|
|
"port": 8000
|
|
},
|
|
"userStories": [
|
|
{
|
|
"id": "US-001",
|
|
"title": "Titlu story",
|
|
"description": "As a [user type], I want [feature] so that [benefit]",
|
|
"priority": 1,
|
|
"acceptanceCriteria": [
|
|
"Criteriu specific și verificabil",
|
|
"npm run typecheck passes"
|
|
],
|
|
"tags": [],
|
|
"dependsOn": [],
|
|
"requiresBrowserCheck": false,
|
|
"requiresDesignReview": false,
|
|
"passes": false,
|
|
"failed": false,
|
|
"blocked": false,
|
|
"retries": 0,
|
|
"failureReason": "",
|
|
"notes": ""
|
|
}
|
|
]
|
|
}
|