Эта страница изначально написана на английском. Переводы сделаны с помощью ИИ и всё ещё дорабатываются —сообщите намесли что-то звучит неправильно.
Ни Одно из Этих Исправлений Не Сработало После Обновления Страницы
tech

Ни Одно из Этих Исправлений Не Сработало После Обновления Страницы

April 17, 2026 Автор: The Salty Korean 3 мин чтения

Маршруты были исправлены. State-эндпоинт был переписан. Формат данных был исправлен. Каждое изменение подтверждено в репозитории, видно в файле, ровно как задумывалось.

Обновил браузер. Ничего не изменилось.

Та же сломанная таблица. Тот же пустой canvas.

Что На Самом Деле Происходило

Платформа работает локально в Docker — набор контейнеров, в каждом запущен свой сервис, соединённые через общую конфигурацию. Front-end веб-приложение смонтировано через volume: исходные файлы на диске мапятся напрямую в контейнер. Vite, инструмент сборки, отслеживает изменения файлов и автоматически перезагружает браузер.

Кроме того, что он не отслеживал.

На Windows с Docker, работающим поверх WSL2 — слоя совместимости с Linux, который Windows использует для контейнеров — уведомления о событиях файловой системы, на которые Vite полагается для обнаружения изменений, не распространяются корректно через границу виртуализации. Система уведомлений Linux сообщает об изменении. Windows не пересылает его. Vite никогда не видит обновления файла. Браузер продолжает выдавать тот код, который был там раньше.

Исправление — одна строка в конфигурации Vite: usePolling: true. Вместо того, чтобы ждать уведомления об изменениях, Vite проверяет их каждые 300 миллисекунд. Чуть менее эффективно. Работает.

Table engine — backend-сервис, управляющий реальным состоянием игры — имел свою версию той же проблемы. Backend-сервисы в этом стеке не запускаются в watch-режиме. Изменения кода требуют ручного перезапуска контейнера. Стандартное поведение для production-сервиса. Просто нужно знать, что надо перезапускать.

Другая Вещь, Которая Была Не Так

После решения проблем с окружением всплыл третий баг: маршрут таблицы имел auth guard, который всегда отправлял браузер на страницу входа.

Не потому что пользователь не был авторизован. Был. Guard проверял значение контекста TanStack Router, которое никогда не заполнялось — router был сконфигурирован без context provider, так что context.auth всегда был undefined. Guard читал "не авторизован", редиректил на login. Login видел авторизованную сессию, редиректил обратно в lobby. Браузер уходил в цикл.

Изменена одна строка. Guard был обновлён, чтобы читать напрямую из authentication store — тот же паттерн, что использует каждый другой маршрут в приложении. Исправлено.

Что Это Требует от Человека За Клавиатурой

Исправления были корректными. Система их не подхватывала. Это наблюдение — что корректный код и работающий код — это две разные вещи — потребовало знать среду разработки достаточно хорошо, чтобы задать правильный вопрос.

Агент может написать исправление. Может проследить баг, как только ты его опишешь. Он не может заметить, что браузер выдаёт закэшированную версию кода до изменения конфигурации. Это наблюдение — человеческое.

Знать систему достаточно хорошо, чтобы диагностировать, почему корректное исправление не вступает в силу — это та часть, которая не автоматизируется.

После настройки polling, после перезапусков контейнеров, после исправления auth guard: таблица загрузилась. Места появились. Диалог buy-in отрендерился. Cards в lobby были правильной высоты. Всё заработало.

Следующий пост охватывает, как выглядел integration testing, когда у нас была работающая система, против которой можно тестировать — и почему эта фаза выглядит одинаково независимо от того, AI или люди писали код.

За взглядом основателя на навигацию через такого рода процесс отладки — что роль human-in-the-loop реально требует, когда AI написал большую часть кодовой базы — это на The Salty Korean.

Stay salty.

Теги: docker debugging platform development dev-environment
Поделиться:

The Salty Korean

Основатель Salty Poker Network. Пишет о техасском покере, создании платформ и будущем онлайн-покера. Подробнее на The Salty Korean.