openspec: из контекста убрано всё, что устаревает по ходу задач
- числа находок и сценариев заменены общим описанием - перечни линтеров, шагов гейта и конвенций свёрнуты в ссылку на источник: они дописываются, а копия молча отстаёт
This commit is contained in:
+12
-15
@@ -29,36 +29,33 @@ context: |
|
|||||||
- Тривиальная задача — достаточно одного прохода (код).
|
- Тривиальная задача — достаточно одного прохода (код).
|
||||||
|
|
||||||
Конвенции кода (соблюдать при apply):
|
Конвенции кода (соблюдать при apply):
|
||||||
- Механизируемое проверяет `task gate` (.golangci.yml: sloglint, forbidigo,
|
- Механизируемое проверяет `task gate` (линтер, сборка, тесты, race,
|
||||||
errorlint, depguard; плюс сборка, тесты, race, покрытие изменённых строк,
|
покрытие изменённых строк, миграции, образцы конфига, секреты и данные о
|
||||||
миграции, образцы конфига). Пересказывать его здесь не нужно — гейт скажет
|
здоровье в индексе). Состав шагов и правил здесь не пересказываем — он
|
||||||
точнее.
|
растёт, а гейт скажет точнее и всегда актуальнее.
|
||||||
- Прозой остаётся то, что правилом не выражается, и это читаем в источнике:
|
- Прозой остаётся то, что правилом не выражается: docs/conventions.md.
|
||||||
docs/conventions.md — уровень лога по адресату, единственный логирующий
|
Читаем в источнике, а не отсюда — конвенции дописываются по ходу задач.
|
||||||
чекпоинт на доменной границе, трансляция доменной ошибки на внешней
|
|
||||||
границе, самодокументируемый config.example.toml, время в БД в UTC
|
|
||||||
RFC 3339 через store.Now(), ULID через internal/ident.
|
|
||||||
- Безопасность: данные о здоровье чувствительнее токенов. Ни тела запросов,
|
- Безопасность: данные о здоровье чувствительнее токенов. Ни тела запросов,
|
||||||
ни значения точек не попадают в логи выше DEBUG; ничего из ./data не
|
ни значения точек не попадают в логи выше DEBUG; ничего из ./data не
|
||||||
попадает под контроль версий (гейт проверяет шагом no-health-data).
|
попадает под контроль версий — это проверяет гейт.
|
||||||
|
|
||||||
Что это за проект:
|
Что это за проект:
|
||||||
- docs/passport.md — паспорт: цель проекта и её граница (чем он НЕ является),
|
- docs/passport.md — паспорт: цель проекта и её граница (чем он НЕ является),
|
||||||
восемь типовых сценариев работы и референсы. ЧИТАЙ ПЕРЕД ПРЕДЛОЖЕНИЕМ: там
|
типовые сценарии работы, референсы. ЧИТАЙ ПЕРЕД ПРЕДЛОЖЕНИЕМ: там же
|
||||||
же правило «развилка или блокер — сперва prior art». Проект не уникален,
|
правило «развилка или блокер — сперва prior art». Проект не уникален, и
|
||||||
и прежде чем проектировать своё, смотрим готовые решения в перечисленных
|
прежде чем проектировать своё, смотрим готовые решения в перечисленных
|
||||||
проектах; отвергаем — с названной причиной, причина идёт в architecture.md.
|
проектах; отвергаем — с названной причиной, причина идёт в architecture.md.
|
||||||
- healthlog — хранилище данных Apple Health, а не аналитика: принять,
|
- healthlog — хранилище данных Apple Health, а не аналитика: принять,
|
||||||
дедуплицировать, сохранить, отдать. Агрегат считается только в ответе на
|
дедуплицировать, сохранить, отдать. Агрегат считается только в ответе на
|
||||||
запрос и только там, где род метрики измерен сверкой слоёв.
|
запрос и только там, где род метрики измерен сверкой слоёв.
|
||||||
- Источников два: поток Health Auto Export (непрерывный и молчаливый) и
|
- Источников два: поток Health Auto Export (непрерывный и молчаливый) и
|
||||||
родной экспорт Apple раз в 2–3 месяца. Вместе они образуют журнал событий:
|
родной экспорт Apple, снимаемый изредка. Вместе они образуют журнал событий:
|
||||||
состояние = import(снапшот экспорта) + replay(доставки по received_at).
|
состояние = import(снапшот экспорта) + replay(доставки по received_at).
|
||||||
Отсюда требование детерминированной свёртки.
|
Отсюда требование детерминированной свёртки.
|
||||||
- Инварианты целиком — в CLAUDE.md, архитектура — в docs/architecture.md.
|
- Инварианты целиком — в CLAUDE.md, архитектура — в docs/architecture.md.
|
||||||
|
|
||||||
Разведка уже проведена, догадки о формате не нужны:
|
Разведка уже проведена, догадки о формате не нужны:
|
||||||
- docs/local-research.md — 50 находок на живом потоке, половина расходится с
|
- docs/local-research.md — находки на живом потоке, во многом расходящиеся с
|
||||||
документацией Health Auto Export. ПРОВЕРЬ ТАМ, прежде чем строить
|
документацией Health Auto Export. ПРОВЕРЬ ТАМ, прежде чем строить
|
||||||
предположение о формате входа: скорее всего вопрос закрыт измерением.
|
предположение о формате входа: скорее всего вопрос закрыт измерением.
|
||||||
- Тесты на разбор формата держим на реальных пакетах (testdata), а не на
|
- Тесты на разбор формата держим на реальных пакетах (testdata), а не на
|
||||||
|
|||||||
Reference in New Issue
Block a user