Разбор совета — 2026-08-18¶
Второй совет. Пятеро читали репозиторий вслепую, затем прошли перекрёстный допрос с обязательной контрфактической проверкой.
Первый разбор — COUNCIL-2026-08-13.md. Актуальное состояние проекта —
COUNCIL-BRIEF.md.
Главный вывод¶
Проект превращал критику в планирование, а не в код. Удар был доступен всё это время и стоил один вечер.
Замеры (проверены лично, не со слов рецензентов):
| Что | Значение |
|---|---|
| Последний коммит во всех восьми сервисных репозиториях | 13.08 — день первого совета |
| Изменения с тех пор | только platform, 7 коммитов, 100% проза |
| Задачи на доске | 45 открыто, 0 закрыто — ни одна никогда |
| Четыре дефекта контрактов из первого разбора | живы дословно |
Первый совет ударил по посылке. Ответом стали 8 ADR, 17 задач и досье. Ни строки логики.
Что нашли¶
Экран логирования уже был написан. public/app.js + js/timing.js — 234 строки,
таймер покрыт тестами, payload ровно тот, ради которого проект существует. Между
этой страницей и первой реальной записью стояли два TODO: console.warn вместо
отправки и незагруженный список упражнений.
Проект описывал себя как каркас. Он не был каркасом: несущая балка стояла, а крышу
от неё держал console.warn.
Восстановимое против невосстановимого (различение Ада, самое практичное за оба совета). Подходы авторские — их можно пересобрать когда угодно. Провенанс пульса приходит от датчика и потерян навсегда. Значит из всего накопленного завала по-настоящему срочен только #29 плюс смещение часов телефона.
Мусор на доске. Три задачи (#25, #34, #41) описывали один и тот же туннель в двух разных порядках; #31 висела открытой, хотя в доке объявлена закрытой решением.
Что сделано по итогам¶
| Что | Статус |
|---|---|
| Заблокировать #12/#13 до #29/#30/#33 | ✅ окно бесплатной переделки схемы закрыто |
| Закрыть дубли #25, #34 и снятую #31 | ✅ доска: 42 открыто, 3 закрыто |
| Проб-режим: два TODO закрыты | ✅ подходы пишутся в localStorage, выгрузка кнопкой |
| Задача на сбор данных | ✅ #46 — 8–10 реальных тренировок |
Проб-режим запускается с ноутбука в домашней сети, добавляется на экран телефона
и дальше работает офлайн. Ни туннеля, ни TLS, ни бота, ни базы. Запись несёт то, что
нельзя восстановить задним числом: UUID подхода (идемпотентный ре-импорт),
schema_version, локальное смещение UTC и device_clock_offset_ms — часы телефона,
сбитые на несколько секунд, съели бы весь бюджет сигнала.
Ничего не выбрасывается: таймстампы клиентские по ADR-0013, поэтому выгрузка загружается в core-service позже без потерь.
Два бага, которые нашлись только в браузере¶
E2E ни разу не запускались — оба дефекта пережили и юнит-тесты, и линтер:
app.jsимпортировал модули из../src, то есть за пределами отдаваемого каталога. 404 и в дев-сервере, и в nginx-образе — страница не работала нигде. Модули переехали вpublic/js/, каталог стал самодостаточным..entry { display: flex }перебивал атрибутhidden, поэтому форма веса и повторов показывалась до первого подхода.
Что осталось за владельцем¶
- Apex-домен. Задача T-01 (DNS) идёт первой и необратима: если она выполнится на
arvberezin.online, проект и VPN окажутся под одним доменом навсегда. - Класс решения. Одна фраза до первой тренировки: что в тренировке изменится, если данные покажут X. Не ответ — именно класс.
Расхождения, которые остались¶
Мусаси считал, что чинить контракты надо сегодня, потому что окно закрывается на
12. Ада и Сунь-цзы возразили: бесплатное не срочно, срочен сторож — заблокировать¶
12/#13. Торвальдс согласился со вторыми и сам признал, что его первоначальный¶
рецепт (Postgres + IngestSets) был всё той же инфраструктурой впереди ценности. Сработал вариант со сторожем.
Сунь-цзы остался при особом мнении по территории: настоящий противник не цензор, а хостер — одна жалоба гасит VPS вместе с VPN, и общая судьба уже доказана 32 гигабайтами логов, забившими диск до появления mybit.