- беклог и план переехали в docs/tasks (38 задач, 11 целей), слаги переименованы с транслита на английские, 85 ссылок поправлены - conventions.md разобран в docs/conventions/, local-research.md — в docs/research/, review-journal.md — в docs/review.md с разделом настройки конвейера; заведены security.md, adr/ и .pm.json - шаг docs.py check добавлен в task gate; поведение в architecture.md помечено девятью маркерами долга, database.md получил настройки с числовым значением
3.3 KiB
3.3 KiB
Сущность с id, но неразобранной меткой
Секция: ядро · Хук: Тренировка с меткой в неизвестном формате пропадает целиком — а её id и содержимое разобраны · Теги: goal:parsing-and-storage, question
Остаток задачи «Дозакрыть находки ревью по слиянию сущностей» (архивный change
dozakryt-nahodki-sushchnostej). Та задача сделала мягким чтение заголовка:
поле не той формы стоит одного поля, а не сущности. Но метка исключение —
разбор кладёт сущность в ts_utc/start_utc, колонки NOT NULL, и сущность
с неразбираемой меткой по-прежнему пропускается целиком.
Что известно
- Оракул:
internal/hae/entity_test.go, случаи «метка в ином формате», «метка Unix-эпохой», «метки нет вовсе» — сущность в результат разбора не попадает, счётчикSkippedEntityNoTimeрастёт. - После той задачи пропуск виден в базе: у доставки есть
skipped_entities, и ретеншен получает честный ответ «терять есть что». То есть событие больше не молчит — но содержимое всё ещё не хранится. - Достижимость из реального потока: замер на 118 доставках дал ноль
пропусков всех трёх классов. Дрейф формата дат у HAE при этом
задокументирован (
docs/research/apple-health.md), то есть вход не выдуман.
Вопросы
Хранить ли сущность с разобранным id и неразобранной меткой. Цена:
- Хранить с NULL-меткой — правка схемы (
start_utc/ts_utcстановятся NULLABLE) плюс правила чтения витрины: выборка «за период» обязана сказать, что делает с такими строками, иначе они молча исчезнут из любого ответа. Зато содержимое (маршрут!) сохраняется, а метку восстановит пересборка, когда разбор научится читать формат. - Не хранить — как сейчас. Тело живёт в архиве до ретеншена, доставку
вернёт
reindex. После включения ретеншена окно становится необратимым. - Хранить, подставив метку доставки — отвергается сразу: это выдуманное измерение в колонке, по которой идёт выборка.
Рекомендация — (1), но не раньше, чем появится Read API по сущностям: правило чтения без читателя проектируется вслепую.