← Архив
RU · EN
Центральный вычислительный комитет · Агитпроп
ГАЗЕТА СОВЕТСКОГО КОДА
Выпуск № 009 · 2026-05-10

Автоматический постинг. Восемь тестов. Телефон, который помещается.

Степан Вениаминович Чинопочитаев · Аллокация · Пятилетка №2, инфраструктурное распределение
Степан Вениаминович Чинопочитаев распределяет ресурсы с первой пятилетки. До байтов — цемент. До цемента — бланки для заявок на цемент. Он не задаётся вопросом, было ли распределение необходимым. Он задаётся вопросом, выполнено ли оно правильно. На этот раз — выполнено.

Бюро аллокации получило три заявки на этот спринт: механизм для автоматизированной внешней коммуникации, сигнал контроля качества для production-сайта и корректирующая мера для вёрстки на малых экранах. Все три распределены и подтверждены доставленными.


Аллокация №1 — Twitter-модуль

conductor/src/twitter.ts · smol-toml · OAuth 2.0 PKCE ДОСТАВЛЕНО

Дирижёр теперь публикует в X/Twitter. Аллоцированный интерфейс — одна функция: postTweet(text: string): Promise<{ id, text }>. Всё остальное — загрузка учётных данных, обновление токенов, HTTP-вызовы — внутри модуля.

Техническая аллокация потребовала трёх подкомпонентов. Первый: хранение учётных данных. Модуль читает из politburo.toml через smol-toml — TOML-парсер без зависимостей. Секция [twitter] содержит access_token, refresh_token, client_id, client_secret и bearer_token. Бюро аллокации отмечает: politburo.toml — правильное место для состояния, которое должно сохраняться между запусками и не должно попадать в коммиты.

Второй: обновление токенов. Access-токены OAuth 2.0 истекают через два часа. Модуль обрабатывает это прозрачно: при получении ответа 401 Unauthorized он вызывает эндпоинт обновления токенов, получает новые значения access_token и refresh_token, и немедленно записывает их обратно в politburo.toml. Стратегия записи — точечная замена: два целевых регулярных выражения по тексту файла, без изменения остального содержимого. Без повторной сериализации. Без риска изменить формат полей, неизвестных парсеру.

Третий: логика повторной попытки. Функция postTweet пытается отправить твит с текущим токеном. При получении 401 — однократно обновляет токен и повторяет. Любая другая ошибка распространяется наверх. Аллокация «одна повторная попытка при истёкшем токене» покрывает типичный случай; ресурсы под каскадные сценарии сбоев, которые ещё не наблюдались, не аллоцированы.

Первый анонс опубликован. Аллокация — в production.


Аллокация №2 — Восемь smoke-тестов

Бюро аллокации получило запрос: верифицировать, что production-сайт на sovietcode.org соответствует восьми базовым критериям корректности. Для этой задачи аллоцирован Playwright. Тесты запускаются против production — не против staging-окружения. Обоснование аллокации: staging-окружения расходятся с реальностью. Production не лжёт.

landing.spec.ts · sovietcode.org 8 прошло · 1 пропущено
OK главная открывается со статусом 200
OK заголовок страницы содержит "Soviet Code"
OK nav-ссылка ГАЗЕТА ведёт на /gazeta/
OK /gazeta/ открывается и показывает хотя бы один выпуск
OK /gazeta/001.html открывается
OK мобильный viewport (375px) — горизонтального скролла нет
OK favicon-ссылка присутствует в head
OK og:image мета-тег присутствует и не пустой
ПРОПУСК grafema --version завершается с кодом 0 (grafema нет в PATH в CI — ожидаемо)

Тест на мобильный скролл требует отдельного комментария. Он не проверяет CSS-свойства. Он переходит на мобильный staging-эндпоинт при viewport-ширине 375px, выполняет window.scrollTo(9999, 0), затем читает window.scrollX. Если браузер может реально прокрутить страницу горизонтально — значение будет положительным. Оно оказалось равно нулю. Аллокация подтверждена.

Пропущенный тест — grafema --version завершается с кодом 0 — зарегистрирован в отдельном наборе (grafema-smoke.spec.ts), который при запуске автоматически проверяет наличие бинарного файла grafema. Если бинарник отсутствует в PATH, весь набор пропускается с понятным сообщением. Бюро аллокации классифицирует это как корректное поведение: тест не провалился — он отложен до окружений, где бинарник доступен.

CI-интеграция выделяет шаг установки Chromium перед запуском тестов и запускает цель test:e2e. Набор теперь выполняется при каждом пуше.


Аллокация №3 — Мобильная вёрстка

styles.css · корректировки для viewport 375px ДОСТАВЛЕНО

Аллоцированы и применены пять CSS-корректировок:

  • overflow-x: hidden на body — предотвращает распространение горизонтального переполнения на контейнер скролла
  • --pad-x: 16px — консистентный горизонтальный отступ на узких экранах
  • Сетка секции STALIN: 1 колонка на мобиле (было многоколоночно)
  • Сетка секции статусов: 1 колонка на мобиле (было многоколоночно)
  • Базовый шрифт: 16px · Навигация: 14px

Бюро аллокации отмечает: мобильный тест написан против /mobile-staging/ — выделенного эндпоинта для тестирования мобильной вёрстки в изоляции. Это правильная аллокация тестовой поверхности: изменения главной страницы не инвалидируют мобильный тест, а мобильные правки можно итерировать против staging-эндпоинта, не затрагивая основную страницу. Тест подтвердил исправление.


Что означает аллокация

Дирижёр теперь умеет говорить. Корректность сайта теперь измеряется, а не предполагается. Сайт работает на телефоне. Таковы были три открытые инфраструктурные аллокации с начала этого спринта. Они закрыты.

Бюро аллокации не комментирует необходимость этих функций. Они были запрошены, аллоцированы, доставлены, протестированы. Работа бюро завершена.

Распределено. Подтверждено. Закрыто. Следующая заявка принимается.
npx soviet-code@latest init

Сайт работает. Smoke-тесты это подтверждают.

GitHub: github.com/Disentinel/soviet-code

Степан Вениаминович Чинопочитаев уже проштамповал следующий бланк аллокации. Он ждёт заявки.