From 7f8e0e22381aaf2384e12a3fa89b0b5b131b746e Mon Sep 17 00:00:00 2001 From: Gros Frumos Date: Mon, 16 Mar 2026 10:14:24 +0200 Subject: [PATCH] =?UTF-8?q?kin:=20KIN-FIX-002=20=D0=A3=D0=BD=D0=B8=D1=84?= =?UTF-8?q?=D0=B8=D1=86=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20localS?= =?UTF-8?q?torage=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20exe?= =?UTF-8?q?cution=5Fmode=20=D1=81=20'auto=5Fcomplete'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Заменены все вхождения '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 --- .../src/__tests__/filter-persistence.test.ts | 12 ++++++------ web/frontend/src/views/ProjectView.vue | 12 ++++++------ web/frontend/src/views/TaskDetail.vue | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/web/frontend/src/__tests__/filter-persistence.test.ts b/web/frontend/src/__tests__/filter-persistence.test.ts index 85aa031..486b925 100644 --- a/web/frontend/src/__tests__/filter-persistence.test.ts +++ b/web/frontend/src/__tests__/filter-persistence.test.ts @@ -374,7 +374,7 @@ describe('KIN-011: TaskDetail — возврат с сохранением URL', // ───────────────────────────────────────────────────────────── describe('KIN-047: TaskDetail — Approve/Reject в статусе review', () => { - function makeTaskWith(status: string, executionMode: 'auto' | 'review' | null = null) { + function makeTaskWith(status: string, executionMode: 'auto_complete' | 'review' | null = null) { return { id: 'KIN-047', project_id: 'KIN', @@ -412,7 +412,7 @@ describe('KIN-047: TaskDetail — Approve/Reject в статусе review', () = }) it('Approve и Reject скрыты при autoMode в статусе review', async () => { - vi.mocked(api.taskFull).mockResolvedValue(makeTaskWith('review', 'auto') as any) + vi.mocked(api.taskFull).mockResolvedValue(makeTaskWith('review', 'auto_complete') as any) const router = makeRouter() await router.push('/task/KIN-047') @@ -430,7 +430,7 @@ describe('KIN-047: TaskDetail — Approve/Reject в статусе review', () = }) it('Тоггл Auto/Review виден в статусе review при autoMode (позволяет выйти из автопилота)', async () => { - vi.mocked(api.taskFull).mockResolvedValue(makeTaskWith('review', 'auto') as any) + vi.mocked(api.taskFull).mockResolvedValue(makeTaskWith('review', 'auto_complete') as any) const router = makeRouter() await router.push('/task/KIN-047') @@ -446,7 +446,7 @@ describe('KIN-047: TaskDetail — Approve/Reject в статусе review', () = }) it('После клика тоггла в review+autoMode появляются Approve и Reject', async () => { - const task = makeTaskWith('review', 'auto') + const task = makeTaskWith('review', 'auto_complete') vi.mocked(api.taskFull).mockResolvedValue(task as any) vi.mocked(api.patchTask).mockResolvedValue({ execution_mode: 'review' } as any) @@ -475,8 +475,8 @@ describe('KIN-047: TaskDetail — Approve/Reject в статусе review', () = it('KIN-051: Approve и Reject видны при статусе review и execution_mode=null (фикс баги)', async () => { // Воспроизводит баг: задача в review без явного execution_mode зависала - // без кнопок, потому что localStorage мог содержать 'auto' - localStorageMock.setItem('kin-mode-KIN', 'auto') // имитируем "плохой" localStorage + // без кнопок, потому что localStorage мог содержать 'auto_complete' + localStorageMock.setItem('kin-mode-KIN', 'auto_complete') // имитируем "плохой" localStorage vi.mocked(api.taskFull).mockResolvedValue(makeTaskWith('review', null) as any) const router = makeRouter() await router.push('/task/KIN-047') diff --git a/web/frontend/src/views/ProjectView.vue b/web/frontend/src/views/ProjectView.vue index 0c7bef4..6b6b414 100644 --- a/web/frontend/src/views/ProjectView.vue +++ b/web/frontend/src/views/ProjectView.vue @@ -168,18 +168,18 @@ const autoMode = ref(false) function loadMode() { if (project.value?.execution_mode) { - autoMode.value = project.value.execution_mode === 'auto' + autoMode.value = project.value.execution_mode === 'auto_complete' } else { - autoMode.value = localStorage.getItem(`kin-mode-${props.id}`) === 'auto' + autoMode.value = localStorage.getItem(`kin-mode-${props.id}`) === 'auto_complete' } } async function toggleMode() { autoMode.value = !autoMode.value - localStorage.setItem(`kin-mode-${props.id}`, autoMode.value ? 'auto' : 'review') + localStorage.setItem(`kin-mode-${props.id}`, autoMode.value ? 'auto_complete' : 'review') try { - await api.patchProject(props.id, { execution_mode: autoMode.value ? 'auto' : 'review' }) - if (project.value) project.value = { ...project.value, execution_mode: autoMode.value ? 'auto' : 'review' } + await api.patchProject(props.id, { execution_mode: autoMode.value ? 'auto_complete' : 'review' }) + if (project.value) project.value = { ...project.value, execution_mode: autoMode.value ? 'auto_complete' : 'review' } } catch (e: any) { error.value = e.message } @@ -640,7 +640,7 @@ async function addDecision() { {{ t.title }} - 🔓 from {{ t.parent_task_id }} diff --git a/web/frontend/src/views/TaskDetail.vue b/web/frontend/src/views/TaskDetail.vue index 6ce3259..7a0ab02 100644 --- a/web/frontend/src/views/TaskDetail.vue +++ b/web/frontend/src/views/TaskDetail.vue @@ -43,14 +43,14 @@ function loadMode(t: typeof task.value) { // Task is in review — always show Approve/Reject regardless of localStorage autoMode.value = false } else { - autoMode.value = localStorage.getItem(`kin-mode-${t.project_id}`) === 'auto' + autoMode.value = localStorage.getItem(`kin-mode-${t.project_id}`) === 'auto_complete' } } async function toggleMode() { if (!task.value) return autoMode.value = !autoMode.value - localStorage.setItem(`kin-mode-${task.value.project_id}`, autoMode.value ? 'auto' : 'review') + localStorage.setItem(`kin-mode-${task.value.project_id}`, autoMode.value ? 'auto_complete' : 'review') try { const updated = await api.patchTask(props.id, { execution_mode: autoMode.value ? 'auto_complete' : 'review' }) task.value = { ...task.value, ...updated }