Заменены все вхождения 'auto' на 'auto_complete' как значение execution_mode в localStorage-операциях:
web/frontend/src/views/TaskDetail.vue:
- Line 46: localStorage.getItem сравнение
- Line 53: localStorage.setItem значение
- Line 55: API patch значение (уже было 'auto_complete', добавлено для полноты)
web/frontend/src/views/ProjectView.vue:
- Line 171: execution_mode === 'auto' → 'auto_complete'
- Line 173: localStorage.getItem сравнение
- Line 179: localStorage.setItem значение
- Line 181: API patch значение
- Line 182: state update значение
- Line 643: template v-if condition
web/frontend/src/__tests__/filter-persistence.test.ts:
- Line 377: Type definition обновлена
- Lines 415, 433, 449: makeTaskWith параметры обновлены
- Line 479: localStorage mock значение
- Line 478: Комментарий обновлён
Все 37 тестов в filter-persistence.test.ts пройдены.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- obsidian_sync.py: заменить проверку is_dir() на mkdir(parents=True, exist_ok=True)
вместо ошибки при отсутствующей директории — автоматически создаём её
- test_obsidian_sync.py: обновить тест #9 под новое поведение (директория создаётся)
- БД fix: исправлен obsidian_vault_path (убраны лишние кавычки и /kin суффикс),
теперь путь указывает на vault root, а не на подпапку проекта
Результат: Exported: 79 decisions, errors: []
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- obsidian_sync.py: расширен regex для task ID с цифробуквенными префиксами ([A-Z][A-Z0-9]*-\d+)
- test_obsidian_sync.py: тест test_sync_updates_task_status обновлён под uppercase PROJ1-001
- TaskDetail.vue: добавлены revise() функция и Revise modal (отправить задачу на доработку)
- test_api.py: добавлены test_revise_task и test_revise_not_found
473/473 тестов проходят.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add explicit prose note before JSON example to clearly indicate that
diff_hint field in fixes array can be omitted if not needed.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- reviewer.md: Added structure documentation for security_issues and conventions_violations array elements with example showing severity, file, issue, and suggestion fields
- backend_dev.md: Removed agents/prompts/ from Files to read section (prompts are not reference data for backend implementation)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- TaskDetail: hide Approve/Reject buttons in auto mode, show "Автопилот активен" badge
- TaskDetail: execution_mode persisted per-task via PATCH /api/tasks/{id}
- TaskDetail: loadMode reads DB value, falls back to localStorage per project
- TaskDetail: back navigation preserves status filter via ?back_status query param
- ProjectView: toggleMode now persists to DB via PATCH /api/projects/{id}
- ProjectView: loadMode reads project.execution_mode from DB first
- ProjectView: task list shows 🔓 badge for auto-mode tasks
- ProjectView: status filter synced to URL query param ?status=
- api.ts: add patchProject(), execution_mode field on Project interface
- core/db.py, core/models.py: execution_mode columns + migration for projects & tasks
- web/api.py: PATCH /api/projects/{id} and PATCH /api/tasks/{id} support execution_mode
- tests: 256 tests pass, new test_auto_mode.py with 60+ auto mode tests
- frontend: vitest config added for component tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Auto mode now calls generate_followups() after task_auto_approved hook.
Permission-blocked followup items are auto-resolved: rerun first, fallback
to manual_task on failure. Recursion guard skips followup-sourced tasks.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- scripts/rebuild-frontend.sh: builds Vue 3 frontend and restarts uvicorn API
- cli/main.py: hook group with add/list/remove/logs/setup commands;
`hook setup` idempotently registers rebuild-frontend for a project
- agents/runner.py: call run_hooks(event="pipeline_completed") after
successful pipeline; wrap in try/except so hook errors never block results
- tests: 3 tests for hook_setup CLI + 3 tests for pipeline→hooks integration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Expand test_task_update_status to test all 7 valid statuses including
'cancelled' via CLI. Each status now has its own test case through
pytest parametrization.
Test suite now: 208 → 214 tests (all passing ✓)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
test_interactive_uses_600s_timeout: 600 → 300
test_interactive_no_stdin_override: None → subprocess.DEVNULL
When KIN_NONINTERACTIVE=1 is set in environment, runner always uses
300s timeout and DEVNULL stdin regardless of noninteractive parameter.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>