- каждая запись каталога задач получила тип вместо тега kind: и префикса заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок секций канонический - поправлены протухшие факты: нереализованные маршруты Read API, MCP и `healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию диффа, периметр перестал дублировать security.md - замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек storage и parsing
6.3 KiB
Роадмап
Что приложение уже умеет и чего ещё не умеет. Цель — возможность приложения,
файл типа goal в items/; её задачи здесь не перечисляются — перечень даёт
tasks.py list --goal <слаг>. Очередь значима только в «Запланировано» и
обосновывается прозой рядом. В «Сопровождении» лежит то, чем держат проект —
выкладка, инструмент, эксплуатация; граница проходит по тому, кто наблюдает:
сообщает ли о состоянии приложение своему пользователю или дежурный смотрит на
сервис снаружи.
Запланировано
Очередь держится на двух зависимостях. healthlog import идёт перед чисткой
нижнего слоя: пока импорт экспорта не написан, помечать что-либо устаревшим не
на основании чего. MCP входит в чтение, а не идёт отдельной целью: адаптер
собственной логики не несёт, он переводит вызовы в те же обработчики, и очередь
осталась порядком задач внутри цели.
- 🎯 Клиенты читают данные через HTTP и MCP — Данные видны только через sqlite на хосте — ни один из трёх потребителей, включая агента-медика, ничего прочитать не может
- 🎯 Клиент узнаёт форму данных из ответа — Метрик больше сотни и формы точек разные — клиент вынужден угадывать структуру по выборке
- 🎯 История из родного экспорта Apple лежит в хранилище — Слой sample пуст: полная история и точные сэмплы лежат в zip-архиве и никуда не едут
- 🎯 Нижний слой чистится после проверенного экспорта — Нижний слой растёт на ~100 тысяч координат в сутки, а после экспорта Apple он избыточен
- 🎯 Приложение сообщает о своём состоянии — Тихо сломавшаяся автоматизация — главный эксплуатационный риск, а сейчас факт виден только в логах
Направления
- 🎯 Исход слияния не зависит от порядка элементов на проводе — Правила слияния держатся на замерах, и каждый новый замер находит зависимость от порядка на проводе
- 🎯 Расхождение витрины с журналом не молчит — Расхождение витрины с журналом сейчас молчит: reindex печатает оба отпечатка, а сравнивать их некому
- 🎯 У каждого входа есть названный предел — Предела на одну сущность нет вовсе: 63 МиБ держат блокировку 5.019 с, соседние доставки уходят в failed
- 🎯 Новая форма от источника не теряется молча — Пять секций HAE поток ещё не приносил, а ручные секции заводятся задним числом — разбор полон ровно до следующей новой формы
Сопровождение
- 🎯 Сервис доступен телефону из любой сети — Сервис живёт на рабочей машине — телефон достаёт до него только дома, и оба контура открыты
Готово
- 2026-08-01
ingest— Сервис принимает доставки HAE и кладёт тела в архив. Приём отвечает200до разбора, свёртку ведёт фоновый воркер: код ответа отражает доставку, а не её понимание. - 2026-08-02
reindex—healthlog reindexпроигрывает журнал в свежую витрину и печатает оба отпечатка. Повторный прогон ничего не меняет. - 2026-08-02
catalog— Клиент видит перечень разрезов с измеренным родом агрегации. Сверка минутного слоя с часовым разложила метрики живого корпуса на накопительные и мгновенные, не сойдясь ни на одной. - 2026-08-04
parsing-and-storage— Метрики, тренировки и записи со своимиidразобраны и лежат в часовых объектах. Ни одна секция живого потока не числится неразобранной, категориальные значения несут стабильный код рядом с переведённой строкой, первая встреча незнакомой секции наблюдаема.
Разведка формата закончена там же и записана в research/apple-health.md: правило вывода слоя, модель идентичности и формы точки проверены на живом потоке. Возможностью приложения она не была, поэтому строки среди достигнутых целей не занимает.