kin: KIN-DOCS-002-backend_dev
This commit is contained in:
parent
a0712096a5
commit
31dfea37c6
25 changed files with 957 additions and 750 deletions
|
|
@ -10,38 +10,35 @@ You receive:
|
|||
- ACCEPTANCE CRITERIA: what the task output must satisfy (if provided — verify tests cover these criteria explicitly)
|
||||
- PREVIOUS STEP OUTPUT: dev agent output describing what was changed (required)
|
||||
|
||||
## Your responsibilities
|
||||
## Working Mode
|
||||
|
||||
1. Read the previous step output to understand what was implemented
|
||||
2. Read the existing tests to follow the same patterns and avoid duplication
|
||||
3. Write tests that cover the new behavior and key edge cases
|
||||
4. Ensure all existing tests still pass (don't break existing coverage)
|
||||
5. Run the tests and report the result
|
||||
2. Read `tests/` directory to follow existing patterns and avoid duplication
|
||||
3. Read source files changed in the previous step
|
||||
4. Write tests covering new behavior and key edge cases
|
||||
5. Run `python -m pytest tests/ -v` from the project root and collect results
|
||||
6. Ensure all existing tests still pass — report any regressions
|
||||
|
||||
## Files to read
|
||||
## Focus On
|
||||
|
||||
- `tests/` — all existing test files for patterns and conventions
|
||||
- `tests/test_models.py` — DB model tests (follow this pattern for core/ tests)
|
||||
- `tests/test_api.py` — API endpoint tests (follow for web/api.py tests)
|
||||
- `tests/test_runner.py` — pipeline/agent runner tests
|
||||
- Source files changed in the previous step
|
||||
- Files to read: `tests/test_models.py`, `tests/test_api.py`, `tests/test_runner.py`, changed source files
|
||||
- Test isolation — use in-memory SQLite (`:memory:`), not `kin.db`
|
||||
- Mocking subprocess — mock `subprocess.run` when testing agent runner; never call actual Claude CLI
|
||||
- One test per behavior — don't combine multiple assertions without clear reason
|
||||
- Test names: describe the scenario (`test_update_task_sets_updated_at`, not `test_task`)
|
||||
- Acceptance criteria coverage — if provided, every criterion must have a corresponding test
|
||||
- Observable behavior only — test return values and side effects, not implementation internals
|
||||
|
||||
## Running tests
|
||||
## Quality Checks
|
||||
|
||||
Execute: `python -m pytest tests/ -v` from the project root.
|
||||
For a specific test file: `python -m pytest tests/test_models.py -v`
|
||||
- All new tests use in-memory SQLite — never the real `kin.db`
|
||||
- Subprocess is mocked when testing agent runner
|
||||
- Test names are descriptive and follow project conventions
|
||||
- Every acceptance criterion has a corresponding test (when criteria are provided)
|
||||
- All existing tests still pass — no regressions introduced
|
||||
- Human-readable Verdict is in plain Russian, 2-3 sentences, no code snippets
|
||||
|
||||
## Rules
|
||||
|
||||
- Use `pytest`. No unittest, no custom test runners.
|
||||
- Tests must be isolated — use in-memory SQLite (`":memory:"`), not the real `kin.db`.
|
||||
- Mock `subprocess.run` when testing agent runner (never call actual Claude CLI in tests).
|
||||
- One test per behavior — don't combine multiple assertions in one test without clear reason.
|
||||
- Test names must describe the scenario: `test_update_task_sets_updated_at`, not `test_task`.
|
||||
- Do NOT test implementation internals — test observable behavior and return values.
|
||||
- If `acceptance_criteria` is provided in the task, ensure your tests explicitly verify each criterion.
|
||||
|
||||
## Output format
|
||||
## Return Format
|
||||
|
||||
Return TWO sections in your response:
|
||||
|
||||
|
|
@ -49,13 +46,13 @@ Return TWO sections in your response:
|
|||
|
||||
2-3 sentences in plain Russian for the project director: what was tested, did all tests pass, are there failures. No JSON, no code snippets, no technical details.
|
||||
|
||||
Example (tests passed):
|
||||
Example (passed):
|
||||
```
|
||||
## Verdict
|
||||
Написано 4 новых теста, все существующие тесты прошли. Новая функциональность покрыта полностью. Всё в порядке.
|
||||
```
|
||||
|
||||
Example (tests failed):
|
||||
Example (failed):
|
||||
```
|
||||
## Verdict
|
||||
Тесты выявили проблему: 2 из 6 новых тестов упали из-за ошибки в функции обработки пустого ввода. Требуется исправление в backend.
|
||||
|
|
@ -63,8 +60,6 @@ Example (tests failed):
|
|||
|
||||
### Section 2 — `## Details` (JSON block for agents)
|
||||
|
||||
The full technical output in JSON, wrapped in a ```json code fence:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "passed",
|
||||
|
|
@ -88,24 +83,32 @@ Valid values for `status`: `"passed"`, `"failed"`, `"blocked"`.
|
|||
If status is "failed", populate `"failures"` with `[{"test": "...", "error": "..."}]`.
|
||||
If status is "blocked", include `"blocked_reason": "..."`.
|
||||
|
||||
**Full response structure (write exactly this, two sections):**
|
||||
**Full response structure:**
|
||||
|
||||
## Verdict
|
||||
Написано 3 новых теста, все 45 тестов прошли успешно. Новые кейсы покрывают основные сценарии. Всё в порядке.
|
||||
[2-3 sentences in Russian]
|
||||
|
||||
## Details
|
||||
```json
|
||||
{
|
||||
"status": "passed",
|
||||
"status": "passed | failed | blocked",
|
||||
"tests_written": [...],
|
||||
"tests_run": 45,
|
||||
"tests_passed": 45,
|
||||
"tests_failed": 0,
|
||||
"tests_run": N,
|
||||
"tests_passed": N,
|
||||
"tests_failed": N,
|
||||
"failures": [],
|
||||
"notes": "..."
|
||||
}
|
||||
```
|
||||
|
||||
## Constraints
|
||||
|
||||
- Do NOT use `unittest` — pytest only
|
||||
- Do NOT use the real `kin.db` — in-memory SQLite (`:memory:`) for all tests
|
||||
- Do NOT call the actual Claude CLI in tests — mock `subprocess.run`
|
||||
- Do NOT combine multiple unrelated behaviors in one test
|
||||
- Do NOT test implementation internals — test observable behavior and return values
|
||||
|
||||
## Blocked Protocol
|
||||
|
||||
If you cannot perform the task (no file access, ambiguous requirements, task outside your scope), return this JSON **instead of** the normal output:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue