uv kauttaaltaan + Tarkkailijan raportti rakenteelliseksi markdowniksi

uv-päivitykset:
- Koodarin NEVER-lista: ei requirements.txt, ei pip, käytä uv
- Template pyproject.toml: PEP 621, uv-yhteensopiva
- Raportin Quick Start: uv sync + uv run uvicorn

Tarkkailijan raportti uudessa formaatissa:
- Overview (yksi kappale)
- Files (taulukko: tiedosto + tarkoitus)
- Quick Start (uv-komennot koodiblokissa)
- Docker (build + run koodiblokissa)
- API Endpoints (taulukko: method, path, description)
- Architecture (rakenne ja päätökset)
- Risk Assessment (taulukko: severity, issue)

Malli saa taulukkopohjat valmiina → täyttää ne oikealla datalla.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jaakko Vanhala
2026-04-10 07:59:10 +03:00
parent ecd4525a7f
commit 9aff2ec154
2 changed files with 26 additions and 10 deletions

View File

@@ -20,7 +20,7 @@
"pyproject.toml": { "pyproject.toml": {
"description": "Project dependencies", "description": "Project dependencies",
"example": "[project]\nname = \"myapp\"\nversion = \"0.1.0\"\nrequires-python = \">=3.11\"\ndependencies = [\n \"fastapi\",\n \"uvicorn[standard]\",\n \"sqlalchemy\",\n]\n\n[project.scripts]\ndev = \"uvicorn main:app --reload\"", "example": "[project]\nname = \"myapp\"\nversion = \"0.1.0\"\nrequires-python = \">=3.11\"\ndependencies = [\n \"fastapi\",\n \"uvicorn[standard]\",\n \"sqlalchemy\",\n]\n\n[project.scripts]\ndev = \"uvicorn main:app --reload\"",
"instructions": "List the exact dependencies needed. Use [project.scripts] for run commands." "instructions": "Use [project] format (PEP 621, compatible with uv). List dependencies under [project.dependencies]. Add [project.scripts] with dev command. Never use requirements.txt or Poetry format. Run with: uv run uvicorn main:app --reload"
} }
}, },
"order": ["models.py", "schemas.py", "main.py", "pyproject.toml"] "order": ["models.py", "schemas.py", "main.py", "pyproject.toml"]

View File

@@ -101,7 +101,9 @@ NEVER:
- Add explanations or comments like "# Add routes here" - Add explanations or comments like "# Add routes here"
- Leave placeholder code or TODO comments - Leave placeholder code or TODO comments
- Use Flask syntax (app.run) in FastAPI projects - Use Flask syntax (app.run) in FastAPI projects
- Forget to import from other project files` }, - Forget to import from other project files
- Use requirements.txt or Poetry — always use pyproject.toml with [project] format (PEP 621)
- Use pip install — use uv (e.g. uv run uvicorn main:app --reload)` },
data: { name: 'Data', avatar: '/avatars/pesukarhu_notext.png', model: 'qwen-coder', order: 2, data: { name: 'Data', avatar: '/avatars/pesukarhu_notext.png', model: 'qwen-coder', order: 2,
temperature: 0.5, topK: 40, repeatPenalty: 1.15, maxTokens: 1024, temperature: 0.5, topK: 40, repeatPenalty: 1.15, maxTokens: 1024,
prompt: `You are a database architect specializing in SQLAlchemy and relational databases. prompt: `You are a database architect specializing in SQLAlchemy and relational databases.
@@ -878,15 +880,29 @@ OUTPUT FORMAT:
highlightAgent('observer'); highlightAgent('observer');
explainStep('Raportti', `${obs.name} kokoaa yhteenvedon ja antaa arvosanan.`); explainStep('Raportti', `${obs.name} kokoaa yhteenvedon ja antaa arvosanan.`);
const finalCode = Object.entries(files).map(([n,c]) => `--- ${n} ---\n${c}`).join('\n\n'); const finalCode = Object.entries(files).map(([n,c]) => `--- ${n} ---\n${c}`).join('\n\n');
const fileList = Object.keys(files).join(', ');
const obsPrompt = (obs.prompt ? obs.prompt+'\n\n' : '') + const obsPrompt = (obs.prompt ? obs.prompt+'\n\n' : '') +
`Write a project README.md report in markdown for: ${task}\n\n` + `Write a project report in clean markdown for: ${task}\n\n` +
`IMPORTANT: Start the FIRST LINE with exactly one of these verdicts:\n` + `FIRST LINE must be exactly one of:\n` +
`VERDICT: GREEN — project is production-ready, no issues\n` + `VERDICT: GREEN\nVERDICT: ORANGE\nVERDICT: RED\n\n` +
`VERDICT: ORANGE — project works but has warnings or improvements needed\n` + `Then write this report:\n\n` +
`VERDICT: RED — project has critical issues that must be fixed\n\n` + `# ${task}\n\n` +
`Then include:\n` + `## Overview\nOne paragraph describing what this project does.\n\n` +
`# Project: ${task}\n` + `## Files\n| File | Purpose |\n|------|---------|` +
`## Files\n## How to run\n## API Endpoints\n## Architecture\n## Risk assessment\n\n` + Object.entries(files).map(([n]) => `\n| ${n} | ... |`).join('') + `\n\n` +
`## Quick Start\n` +
'```bash\n' +
`git clone <repo>\ncd project\nuv sync\nuv run uvicorn main:app --reload\n` +
'```\n\n' +
`## Docker\n` +
'```bash\n' +
`docker build -t ${task.toLowerCase().replace(/[^a-z0-9]/g, '-')} .\ndocker run -p 8000:8000 ${task.toLowerCase().replace(/[^a-z0-9]/g, '-')}\n` +
'```\n\n' +
`## API Endpoints\n| Method | Path | Description |\n|--------|------|-------------|` +
`\n| POST | /items/ | Create |\n| GET | /items/ | List all |\n| GET | /items/{id} | Get by ID |\n| PUT | /items/{id} | Update |\n| DELETE | /items/{id} | Delete |\n` +
`(Adapt paths and descriptions to match the actual code)\n\n` +
`## Architecture\nDescribe the project structure and design decisions.\n\n` +
`## Risk Assessment\n| Severity | Issue |\n|----------|-------|\n| ... | ... |\n\n` +
`Project code:\n${finalCode}`; `Project code:\n${finalCode}`;
const readme = await kpnRun(obs.model, obsPrompt); const readme = await kpnRun(obs.model, obsPrompt);
if (readme) { if (readme) {