405f02aa86
PcpTimeModule (libs/pcp-types-lib): толерантные Jackson-десериализаторы LocalDateTime/OffsetDateTime/Instant — любой потребитель читает оба формата на проводе и нормализует к UTC. Только чтение, формат записи не меняется. Подключение фронтом по флоту: - Spring Boot auto-configuration + AutoConfiguration.imports — Boot-маппер всех 12 сервисов на pcp-types-lib (без правок в сервисах); - Jackson SPI (META-INF/services) — ручные мапперы с findAndRegisterModules(); - точечно: dynamic-plan/JacksonConfig (ручной ObjectMapper); - tgu (WebFlux, не зависит от либы) — локальное зеркало модуля в CamundaJacksonConfig (Jackson-2 путь). Зачем: микросервисы деплоятся независимо; с толерантностью продюсера можно флипать LocalDateTime -> OffsetDateTime (Z) в любом порядке без синхронного деплоя — потребитель не падает на парсинге офсета. Тесты: PcpTimeModuleTest (оба формата -> один UTC-момент + авто-подхват SPI). Доки: DATETIME_UTC.md (раздел 2bis + найденные баги формата), CHECKLIST.md.
106 lines
6.2 KiB
Markdown
106 lines
6.2 KiB
Markdown
# CHECKLIST.md
|
|
|
|
## Назначение
|
|
|
|
Этот документ содержит краткие checklists для review/merge, Definition of Done, обязательных тестов и validation.
|
|
|
|
Пункты ниже применяются по принципу **where relevant**:
|
|
- для обычных Kotlin/Spring-изменений достаточно общего checklist;
|
|
- для изменений в BPM / Zeebe / Camunda / Kafka / retries / DLQ / compensation / schema evolution дополнительно применяются профильные пункты;
|
|
- для критичных процессов глубина проверок и тестов должна быть пропорциональна риску изменения.
|
|
|
|
---
|
|
|
|
## Review checklist
|
|
|
|
### Для всех нетривиальных изменений
|
|
|
|
Перед merge необходимо подтвердить:
|
|
- запрошенное поведение реализовано;
|
|
- решение осталось в корректной архитектурной границе;
|
|
- существующие публичные контракты не сломаны без явного запроса;
|
|
- добавлены или обновлены релевантные тесты;
|
|
- не внесено несвязанных правок;
|
|
- время на API — UTC; backend использует UTC-`now` (`Instant.now()` / `LocalDateTime.now(ZoneOffset.UTC)`), фронт парсит/форматирует через `utils/utcTime` (см. `docs/standards/DATETIME_UTC.md`);
|
|
- чтение времени на бэке толерантно к обоим форматам (naive=UTC и `Z`) — модуль наследуется из `pcp-types-lib` (`PcpTimeModule`) авто-конфигурацией; ручной `ObjectMapper`/не-pcp-types-lib сервис регистрирует модуль явно;
|
|
- validation выполнен по правилам `AGENTS.md`, либо пропуски явно объяснены.
|
|
|
|
### Дополнительно для BPM / Kafka / Zeebe / external integration изменений
|
|
|
|
Перед merge необходимо подтвердить, где это релевантно:
|
|
- business key определён и используется консистентно;
|
|
- operation id принимается от вызывающей стороны и используется для dedup;
|
|
- ошибки классифицированы семантически;
|
|
- side effects идемпотентны или явно компенсируются;
|
|
- доменные события публикуются через Outbox;
|
|
- logs / metrics / traces содержат обязательные поля корреляции;
|
|
- тесты покрывают duplicate delivery и retry behavior;
|
|
- изменения деплоя и конфигурации трассируемы в VCS.
|
|
|
|
---
|
|
|
|
## Definition of Done
|
|
|
|
Задача считается завершённой только если одновременно выполнено всё ниже, где это релевантно:
|
|
|
|
### Общее
|
|
1. Запрошенное поведение реализовано.
|
|
2. Решение осталось в корректной архитектурной границе.
|
|
3. Нужные тесты добавлены или обновлены.
|
|
4. Нужный validation выполнен, либо невозможность запуска объяснена.
|
|
5. Не внесено несвязанных правок.
|
|
|
|
### Для BPM / Kafka / Zeebe / external integration
|
|
6. BPM остаётся только оркестратором, если BPM участвует.
|
|
7. Доменные правила остаются внутри сервисной границы.
|
|
8. Flows остаются безопасными при at-least-once delivery.
|
|
9. Идемпотентность обеспечена.
|
|
10. `operation_id` сохранён или добавлен, где это требуется контрактом.
|
|
11. Outbox сохранён или использован, где операция меняет состояние и публикует события.
|
|
12. Retries ограничены и управляемы.
|
|
13. DLQ handling сохранён для критичных consumers.
|
|
14. Versioning / backward compatibility сохранены.
|
|
15. Observability сохранена или улучшена.
|
|
|
|
---
|
|
|
|
## Обязательные тесты для значимых изменений
|
|
|
|
### Базовый минимум
|
|
Как минимум покрывать, где применимо:
|
|
- happy path;
|
|
- изменённые ветки branching / validation logic;
|
|
- regression scenario для bug fix.
|
|
|
|
### Дополнительно для BPM / Kafka / Zeebe / external integration
|
|
Покрывать, где применимо:
|
|
- retryable failure с последующим успехом;
|
|
- исчерпание retries;
|
|
- ветку business error;
|
|
- обработку timeout;
|
|
- сценарий compensation;
|
|
- duplicate delivery / duplicate event handling;
|
|
- contract compatibility;
|
|
- schema compatibility.
|
|
|
|
### Для критичных процессов и high-risk изменений
|
|
Покрывать пропорционально риску изменения через automated tests и/или явный resilience test plan:
|
|
- перезапуск воркера во время выполнения;
|
|
- временную недоступность БД;
|
|
- временную недоступность внешней зависимости;
|
|
- разрыв связности Kafka / BPM;
|
|
- сценарий load / lag recovery.
|
|
|
|
---
|
|
|
|
## Validation
|
|
|
|
Следуй разделу `Validation commands` из `AGENTS.md`.
|
|
|
|
Если для изменения есть module-specific команды, используй минимальный релевантный прогон, а затем более широкий, когда это необходимо.
|
|
|
|
Если какая-либо команда не была запущена:
|
|
- точно укажи, какая именно команда не запускалась;
|
|
- объясни почему;
|
|
- опиши остаточный риск.
|