- открытых вопросов не осталось: три решения владельца доведены до берущегося вида, по entity-without-parsed-label принято хранить с NULL-меткой после Read API - unseen-sections-check сжата до остатка — активная проверка появления секции; разбор невиденных секций из неё вынут, вслепую он не пишется - спринт под целью parsing-and-storage: categorical-value-dictionary и unseen-sections-check, обеим написаны критерии приёмки с оракулами
11 KiB
11 KiB
Беклог
Что можно взять. Одна задача = один файл items/<slug>.md
- строка здесь. Целей тут нет — они в PLAN.md: беклог — то, что берут,
план — то, подо что берут. Порядка внутри секции нет: «что делать
дальше» отвечает набор спринта. Ведётся скиллом
tasks.
Секции «блокеры» здесь нет и не заводится: блокер — это состояние (спринт не может продолжаться ни одной задачей), оно живёт до ответа человека, а его следы — вопросами в файлах задач.
ядро
- [idea] Человеческие аннотации поверх выведенных схем — Выведенная схема говорит форму, но не смысл метрики — нужно ли описание сверху, зависит от стабильности формата
- Проверка целостности собранной витрины перед подменой — Подмена файла необратима, а годность выхода подтверждена отпечатком на ещё открытом дескрипторе
- Цена слияния на широкой доставке — 63 МБ на одной координате держат транзакцию 5.15 с при busy_timeout 5 с — соседние доставки уходят в failed
- Сущность с id, но неразобранной меткой — Тренировка с меткой в неизвестном формате пропадает целиком, а после включения ретеншена окно становится необратимым
- Идентичность тренировок при импорте родного экспорта — В export.xml у тренировки нет id — импорт снапшота задвоит тренировки, приехавшие от HAE
- Импорт родного экспорта Apple Health — Слой sample пуст: полная история и точные сэмплы лежат в zip-архиве и никуда не едут
- MCP-сервер поверх Read API — Агент-медик — первый заказчик проекта, а подключить его сейчас нечем
- [idea] Месячный проход по ручным секциям — Симптомы и лекарства заводятся задним числом на недели — недельного глубокого прохода им не хватит
- [idea] NDJSON-поток для больших выборок Read API — Выборка нижнего слоя за месяц не влезает в один JSON-ответ — либо поток, либо пагинация
- OpenAPI-спека и Swagger UI — Потребителей три и один из них агент — контракт должен читаться машиной, а не пересказываться в чате
- Data-миграции не отбирают строки по обрезаемым спискам — Миграция 00007 отбирает по uncovered_sections, который обрезается на 32 — следующая покрытая секция унаследует слепую зону
- [idea] Отказ от heartbeatSeries — 93% объёма HRV ради данных, которых нет ни в одном планируемом запросе
- Пересборка держит весь журнал в памяти — Учёт доставок и список путей архива материализуются целиком: расход растёт вместе с журналом, а у журнала конца нет
- [idea] Пересекающиеся источники одной метрики — Сон пишут и часы, и стороннее приложение — сумма по обоим задвоит ночь
- [idea] Порог sealed: с какого возраста час считается запечатанным — WARN на изменение старого часа уже пишется, но порог не выбран — ставим по факту, когда накопится статистика досчёта
- Порядок журнала при конкурентных приёмах — Доставка, свёрнутая раньше своей предшественницы, уходит в failed навсегда, и живая витрина молча расходится с пересборкой
- Предел на размер и число заголовков доставки — MaxHeaderBytes не задан, в базу заголовки пишутся целиком: дефект спит до деплоя, а просыпается вместе с ним
- Пределы на размер сущности и потоковый расчёт формы — Тело 40 МиБ даёт 768 МиБ пика кучи, 63 МиБ держат блокировку 5.019 с — предела на одну сущность нет вовсе
- [idea] Разворачивание маршрутов тренировок в отдельную таблицу — Маршрут лежит блобом внутри тренировки — понадобится, только если появится клиент, которому мало отдачи одним пакетом
- Read API: точки, выбор слоя, свёртка по сетке — Данные видны только через sqlite на хосте — ни один из трёх потребителей ничего прочитать не может
- Выведенные из данных схемы содержимого — Метрик больше сотни и формы точек разные — клиент вынужден угадывать структуру по выборке
- [idea] Что считать сутками при смене часового пояса — Шаги за день — базовый запрос трекера и игры, но чей это день при перелёте, не решено
- Сверка живой витрины с пересборкой — reindex печатает оба отпечатка, но сравнивать их некому — расхождение с журналом молчит
- Тай-брейк при равной полноте точек — При равной полноте порядок канонических форм берёт меньшее значение в 96% случаев — у накопительных это систематический недосчёт
- Устаревание нижнего слоя после экспорта — Нижний слой растёт на ~100 тысяч координат в сутки, а после экспорта Apple он избыточен
- [idea] Выгрузка в parquet отдельной командой — Дверь для тяжёлой аналитики снаружи: DuckDB читает и parquet, и файл SQLite — спешить некуда, но и закрывать не нужно
- Заголовки доставки в архиве рядом с телом — Заголовки живут только в базе — потеря базы навсегда ломает вывод слоя при пересборке
инфра
- Активный алерт «данных нет N часов» — Пропажу потока сейчас замечает человек, а не сервис
- Деплой на rivendell — Сервис живёт на рабочей машине — телефон достаёт до него только дома
- Счётчики слияния переживают ротацию логов — единственный след несравнимых наборов — строка WARN в docker-логе с ротацией 3×10 МБ: событие может произойти и не оставить ничего
- Остановка и миграция: раздельные бюджеты и следы в логе — Долгий запрос чтения съедает бюджет остановки, и WARN обвиняет воркер свёртки; миграция молчит и не прерывается SIGTERM
- Чем откатывать релиз после наката миграции — Страж версии схемы делает возврат старого бинаря отказом, а понизить схему нечем — аварийный путь пришлось бы изобретать в аварии
- Ретеншен сырого архива — Архив не подчищается вовсе — 14-дневный срок объявлен, но не работает
- Наблюдаемость: /stats — Тихо сломавшаяся автоматизация — главный эксплуатационный риск, а сейчас факт виден только в логах
- Умолчания конфига указывают на прежнюю раскладку — Запуск без конфига заведёт пустую базу в корне рядом с настоящей — тихая ловушка
- Управление токенами и секретами — Проверка токенов выключена, config.docker.toml коммитится — так нельзя выезжать наружу