Проведён полный аудит безопасности
Июльский аудит безопасности прошёл по всему контуру: оформлена модель угроз, усилены Docker/nginx/MinIO, CI image checks и production checklist, а также PASETO/OpenAPI и XSS-чувствительные frontend-пути.
Журнал изменений
Крупные изменения сайта и базы знаний, сгруппированные по месяцам: публичный контент, админка, качество, безопасность и инфраструктура.
Июльский аудит безопасности прошёл по всему контуру: оформлена модель угроз, усилены Docker/nginx/MinIO, CI image checks и production checklist, а также PASETO/OpenAPI и XSS-чувствительные frontend-пути.
Админская авторизация получила скользящие серверные сессии: активный refresh продлевает idle lifetime только до absolute lifetime cap, а истёкшие сессии ежедневно удаляются фоновой задачей. В деталке участника теперь видно активные сессии с безопасными device-метками и можно отзывать текущую, одну, все или другие сессии.
Сайт получил страницу обновлений с полной историей сайта, сжатой до крупных вех: публичный контент, админка, качество, безопасность и инфраструктура.
Очередь получила общий RU/EN Markdown-form со sticky actions, сценарии «создать/отклонить и далее» и «пропустить», а импорт из txt/csv/xlsx теперь показывает предпросмотр, ошибки валидации и точные дубли до подтверждения. Общая форма также получила независимый от провайдера RU→EN workspace: связанные пары полей, проверку готовности и совпадений, EN-предпросмотр и версионный JSON для безопасного copy/import с сохранением Markdown, code, URL и typed wiki links. Для AI-агентов отдельная machine-граница теперь остаётся на edge: семь REST operations смонтированы в основном Litestar app и используют общие settings, DI и DB session вместо отдельного процесса и UDS. WireGuard-bound nginx mTLS-listener пропускает только точный allowlist, а public listener возвращает 404 для внутреннего пути и удаляет поддельный certificate header. MCP остался локальным stdio-мостом к пяти Draft-only операциям. Раздельные сертификаты, scopes и privacy-safe аудит сохраняются; упрощение осознанно оставляет общими с backend процесс, роль БД, секреты и контур доступности.
Владельцы и администраторы могут вести изолированные по автору карточки людей: контакты и дни рождения, теги, типизированные связи, Markdown-заметки, фото и вложения. Памятные ежегодные даты получили календарную сортировку, связи с людьми, теги, заметки и приватные вложения; в карточках людей видны обратные ссылки. Приватные файлы хранятся отдельно от публичного media bucket, читаются только через проверяющий автора backend stream, а публичный S3 edge отвечает 404.
CI/CD quality, smoke и deploy jobs разделены понятнее, релиз снова требует ручного подтверждения, а файлы, статистика, мобильные сценарии, локализованные даты и защита несохранённых изменений во всех формах админки получили июльскую полировку.
Владельцы и администраторы теперь видят состояние кэша по доменам, могут отдельно очистить его или запустить наблюдаемый прогрев, а также проверить и удалить протухшие сессии.
Статьи, вопросы матрицы и RU→EN workspace перешли с Toast UI на общий CodeMirror-редактор: отдельные режимы редактора с псевдорендерами, чистого исходника и безопасного превью, независимые от раскладки горячие клавиши, smart lists/fences, поиск и вставка нескольких изображений. Markdown-таблицы стали интерактивными, но сохранили обычный переносимый исходник: ячейки выделяются прямоугольным диапазоном, Delete и Cut адаптивно очищают ячейки или удаляют полностью выбранные строки, столбцы и таблицу, добавление доступно через плюсики на нижней и правой гранях, а строки и столбцы переставляются за крайние drag handles с заметными маркерами захвата и места вставки. Сетка выглядит частью редактора без отдельной карточки и фантомных столбцов: адаптивные колонки и плюсики остаются в ширине редактора, пустые ячейки открываются без скачка страницы, а строки до и после таблицы не перекрываются. Активная ячейка показывает каретку на позиции ввода даже без текста, удерживает повторный ввод в той же ячейке в Chrome и Firefox и не прокручивает страницу при печати. Markdown-разделитель не занимает визуальную строку, а защищённая пустая строка после таблицы не даёт следующему тексту стать её новой строкой в редакторе или превью; сам текст совпадает со своим номером в gutter. Пустые строки сохраняют высоту, а стрелки не перескакивают через обычный текст рядом с таблицей. Контекстное меню объединяет структурные операции, сортировку и выравнивание, а TSV/CSV можно копировать и вставлять. Wiki-ссылки получили синтаксическую подсветку и двухшаговое автодополнение домена и цели: черновики и опубликованные материалы видны в одном списке, а вставка с клавиатуры оставляет место для необязательной подписи. Редактор растёт вместе с текстом без внутренней вертикальной прокрутки, а sticky-панели режимов, компактных иконок всех команд и справки по горячим клавишам остаются доступны в длинных документах. Доступный полноэкранный режим сохраняет текущий текст, выделения и историю отмены, удерживает фокус внутри редактора и возвращает пользователя к прежнему месту формы после выхода.
Статьи, вопросы матрицы и engineering case-study получили Angular SSR, metadata, Open Graph, JSON-LD, sitemap и robots.txt для стабильной публичной выдачи.
Модераторы, очередь вопросов, импорт из txt/csv/xlsx, редактор структуры матрицы, валидация статей и resume workspace перешли в защищённую админку.
Появились query-plan checks, Lighthouse gates, Trivy, pip-audit, Hadolint, Dockle, TaskIQ cache warm и hotswap-деплой с readiness health checks.
Публичная база знаний переехала на Angular: матрица, статьи, интерфейсная локализация RU/EN, фильтры, аналитика просмотров и первые performance checks.
Frontend получил Angular-структуру, окружения, typed API client, routing, базовый shell и первые компоненты матрицы.
Логин, logout, draft/publish действия, CRUD для вопросов матрицы, nginx subdomains и HTTPS стали частью рабочей версии проекта.
Контентный редактор получил presigned uploads через S3-compatible storage, генерацию имён файлов и табличное представление матрицы.
ADRs, доменная документация, coverage badges, Valkey cache, Argon2 hashing, разделение auth-слоя и русская локализация админки задали базовые правила проекта.
Стартовали blog posts, GitHub Actions quality checks, coverage badges, deployment workflow и подготовка контейнеров для публикации.
Litestar UI получил страницы матрицы, поиск, about page, светлую/тёмную тему, sitemap.xml, HTML sitemap, robots.txt, базовую SEO-разметку и Sentry.
FastAPI был заменён на Litestar, публичный UI временно пошёл через шаблоны и HTMX, а админский и публичный контуры начали расходиться.
Проект получил backend/frontend split, первые frontend связи с API, Docker Compose, auth tests, MinIO helpers и README для новой структуры.
Админка, import/export и endpoints для листов, подразделов, фильтрации и деталей вопросов стали первыми рабочими контурами матрицы.
Появилась первая версия проекта и базовый security pipeline; с этого началась история сайта как отдельной базы знаний.