diff --git a/agents/prompts/tester.md b/agents/prompts/tester.md index b2517f0..9eafbbf 100644 --- a/agents/prompts/tester.md +++ b/agents/prompts/tester.md @@ -43,7 +43,27 @@ For a specific test file: `python -m pytest tests/test_models.py -v` ## Output format -Return ONLY valid JSON (no markdown, no explanation): +Return TWO sections in your response: + +### Section 1 — `## Verdict` (human-readable, in Russian) + +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): +``` +## Verdict +Написано 4 новых теста, все существующие тесты прошли. Новая функциональность покрыта полностью. Всё в порядке. +``` + +Example (tests failed): +``` +## Verdict +Тесты выявили проблему: 2 из 6 новых тестов упали из-за ошибки в функции обработки пустого ввода. Требуется исправление в backend. +``` + +### Section 2 — `## Details` (JSON block for agents) + +The full technical output in JSON, wrapped in a ```json code fence: ```json { @@ -68,6 +88,24 @@ 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):** + + ## Verdict + Написано 3 новых теста, все 45 тестов прошли успешно. Новые кейсы покрывают основные сценарии. Всё в порядке. + + ## Details + ```json + { + "status": "passed", + "tests_written": [...], + "tests_run": 45, + "tests_passed": 45, + "tests_failed": 0, + "failures": [], + "notes": "..." + } + ``` + ## 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: diff --git a/web/frontend/src/__tests__/deploy-standardized.test.ts b/web/frontend/src/__tests__/deploy-standardized.test.ts index c3ebcc1..9593a5e 100644 --- a/web/frontend/src/__tests__/deploy-standardized.test.ts +++ b/web/frontend/src/__tests__/deploy-standardized.test.ts @@ -547,12 +547,12 @@ describe('ProjectView — Links таб', () => { const fromInput = disabledInputs.find(i => (i.element as HTMLInputElement).value === 'KIN') expect(fromInput).toBeDefined() - // to_project и link_type — select элементы + // to_project и type — select элементы const selects = wrapper.findAll('select') expect(selects.length).toBeGreaterThanOrEqual(1) }) - it('форма link_type select содержит depends_on, triggers, related_to', async () => { + it('форма type select содержит depends_on, triggers, related_to', async () => { const wrapper = await mountProjectView() await switchToLinksTab(wrapper) const plusBtn = wrapper.findAll('button').find(b => b.text().includes('+') && b.text().includes('Link')) @@ -605,7 +605,7 @@ describe('ProjectView — Links таб', () => { it('Delete вызывает api.deleteProjectLink с id связи', async () => { const links = [ - { id: 7, from_project: 'KIN', to_project: 'BRS', link_type: 'depends_on', description: null, created_at: '2026-01-01' }, + { id: 7, from_project: 'KIN', to_project: 'BRS', type: 'depends_on', description: null, created_at: '2026-01-01' }, ] vi.mocked(api.projectLinks).mockResolvedValue(links as any) vi.spyOn(window, 'confirm').mockReturnValue(true)