- беклог и план переехали в 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 получил настройки с числовым значением
38 lines
3.3 KiB
Markdown
38 lines
3.3 KiB
Markdown
# Сущность с 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` и неразобранной меткой. Цена:
|
|
|
|
1. **Хранить с NULL-меткой** — правка схемы (`start_utc`/`ts_utc` становятся
|
|
NULLABLE) плюс правила чтения витрины: выборка «за период» обязана сказать,
|
|
что делает с такими строками, иначе они молча исчезнут из любого ответа.
|
|
Зато содержимое (маршрут!) сохраняется, а метку восстановит пересборка,
|
|
когда разбор научится читать формат.
|
|
2. **Не хранить** — как сейчас. Тело живёт в архиве до ретеншена, доставку
|
|
вернёт `reindex`. После включения ретеншена окно становится необратимым.
|
|
3. **Хранить, подставив метку доставки** — отвергается сразу: это выдуманное
|
|
измерение в колонке, по которой идёт выборка.
|
|
|
|
Рекомендация — (1), но не раньше, чем появится Read API по сущностям: правило
|
|
чтения без читателя проектируется вслепую.
|