Передача проекта «Маршрут»
«Маршрут» прошёл путь от публичной фикстуры до локального кабинета с серверной сессией. Каталог использует устойчивые идентификаторы, формы передают явное намерение, сервер выбирает владельца из контекста запроса, а интерфейс различает успех и ожидаемый отказ. Завершим серию договором передачи, чтобы исходники можно было продолжить без скрытых допущений.
Результат этой главы — понятный комплект проекта и список решений перед внешним использованием. Здесь не выполнялись установка зависимостей, сборка, вход, SQL, тесты или размещение. Все уроки и архив имеют состояние example_execution: not_run. Описанные экраны являются ожидаемыми, а не доказательством работающего сервиса.
Состав конечного состояния
Архив исходников «Маршрута» содержит конечный проект, README и договор HANDOFF.md. Это одно целостное финальное состояние, а не четырнадцать самостоятельно собранных версий. Ранние уроки показывают постепенные изменения, поэтому фрагменты нужно применять в их контексте; для знакомства с законченным деревом возьмите архив целиком.
Публичный каталог содержит три вымышленных учебных материала. Страницы уроков показывают карточку и короткое описание, не копируют содержание сайта. Поиск сохраняет строку в URL. Кабинет показывает весь каталог, закладки и завершение. Профиль позволяет изменить отображаемое имя, а компактность относится только к текущему браузеру.
src/lib/catalog.ts публичные уроки
src/lib/components/ карточка и предпочтение вида
src/lib/server/repository.ts учебные данные в памяти
src/lib/server/session.ts локальные токены сессий
src/hooks.server.ts личность текущего запроса
src/routes/login/ вход учебного читателя
src/routes/account/ загрузка и POST-действия
src/routes/logout/ завершение сессии
Эта схема помогает искать ответственность, но не заменяет чтение файлов. Например, название server запрещает клиентский импорт через механизм SvelteKit, однако методы репозитория всё равно должны выбирать правильного владельца. Форма с красивым текстом тоже не доказывает, что её действие проверяет сессию; проверка должна присутствовать непосредственно в серверном пути.
Зависимости и воспроизводимость
В проекте выбраны семейства Svelte 5 и SvelteKit 2. Метаданные пакетов не следует принимать за подтверждённый результат разрешения зависимостей: менеджер пакетов здесь не запускался и lock-файл не создавался. Перед дальнейшей работой владелец проекта должен выбрать конкретные совместимые версии и зафиксировать их в своей среде.
Схема конфигурации использует обычный адаптер Node для серверных действий и серверную среду Node.js. Статический хостинг без сервера не сможет исполнить вход и запись кабинета. Публичные уроки допускают prerender, личная страница его запрещает. Такой смешанный режим нужно сохранить при выборе размещения и не заменять весь проект выгрузкой статических файлов.
Не добавляйте измеренные показатели производительности в описание проекта до фактического запуска. Длительность из каталога — плановая длительность учебного материала, а не время ответа приложения. Скорость SSR, размер клиентского пакета и задержка записи зависят от установленной версии, адаптера, сети и источников.
Что происходит после перезапуска
Репозиторий и сессии хранятся в памяти одного процесса. Перезапуск стирает историю и входы. Несколько процессов получат независимые состояния. Это полезно для локального изучения, однако не соответствует ожиданию постоянной истории читателя. До внешнего использования понадобится общая база и устойчивое хранилище сессий.
Контракт базы должен сохранить уникальность пары читатель–урок, проверку владельца и операции установки значения. Замена Map на SQL не должна внезапно позволить действия с readerId из браузера. Желательны транзакционные правила изменения версии и индексы для чтения истории одного человека. При переносе нужно решить судьбу уже сохранённых данных, а не молча очистить их.
Учебный вход не содержит регистрацию и восстановление доступа. Пароли задаются локальными серверными настройками и используются только для вымышленных пользователей. Для продукта требуется полноценный провайдер личности или продуманная собственная система с защищённым хранением паролей, ограничением попыток и отзывом сессий. Нельзя назвать готовыми функции, отсутствующие в архиве.
Границы приватности и наблюдения
Публичный каталог одинаков для всех, а личная проекция содержит только нужное экрану имя и отметки. Пароль и токен не попадают в load, HTML и URL. Однако будущая диагностика тоже должна соблюдать эту границу: журналировать весь request или cookie ради удобства было бы неверным продолжением проекта.
Для диагностики достаточно типа операции, безопасного идентификатора запроса, статуса и длительности. Учебный прогресс является пользовательскими данными; время хранения, удаление профиля и доступ сотрудников требуют отдельного решения продукта. Эта серия не даёт правового заключения и не устанавливает универсальный срок хранения — она обозначает технические места, где решение должно применяться.
Аналитические события можно добавить отдельно, но они не заменяют репозиторий прогресса. Событие завершения говорит, что произошла команда; текущая отметка отвечает, в каком состоянии находится урок сейчас. Повторные события, доставка с задержкой и отказ аналитики не должны ломать сохранение основного действия. Серия ClickHouse рассматривает такой аналитический слой как отдельную систему.
Проверяемые ожидания для следующего владельца
В HANDOFF.md перечислены будущие сценарии: прямой адрес урока, поиск по URL, вход двух учебных читателей, независимые закладки, повтор команды, ошибка имени, истечение сессии и работа POST без клиентского улучшения. Каждый сценарий имеет ожидаемый результат. Статус остаётся not_run, пока следующий владелец действительно не выполнит проверку и не запишет её условия.
Отдельно требуется проверка клавиатуры, текста статусов и поведения при отказе хранилища. Визуально похожий успешный экран не подтверждает все эти свойства. При смене адаптера нужно проверить cookie, HTTPS, кэширование личного ответа и доступность серверных маршрутов. Ни одна из этих операций в рамках подготовки материалов не выполнялась.
Отдельный результат редакционной подготовки
Материалы серии сохранены как черновики с собственным оглавлением и подготовленной последовательностью. Это локальное состояние контента, отличное от состояния работающего приложения. Объединение курса, сборка сайта и публикация требуют отдельного решения владельца проекта.
Общий маршрут прикладных продуктовых серий поможет связать кабинет с последующей аналитикой, однако личная история остаётся независимой от отчётов. Перед передачей полезно прочитать README вместе с последней главой: они описывают один и тот же конечный комплект и не должны обещать разные способы хранения.
У вас остаётся последовательная модель: состояние внутри компонента удобно для временного выбора, URL подходит отправляемому фильтру, серверный репозиторий хранит историю владельца, действие меняет её после проверки, а enhance улучшает уже определённый путь. Такой договор позволяет продолжать «Маршрут» по конкретной потребности, сохраняя причины принятых решений и честно обозначенные ограничения.