mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-01 12:18:51 +00:00
Validate / hacs (push) Failing after 12s
Validate / hassfest (push) Failing after 13s
Validate / frontend (push) Successful in 3m2s
Validate / golden (push) Failing after 51s
Validate / backend (push) Failing after 6m50s
Validate / smoke (push) Failing after 13m44s
Validate / performance (push) Failing after 24m13s
62 lines
2.9 KiB
Markdown
62 lines
2.9 KiB
Markdown
# ТЗ #42 — Измеряемое инженерное качество backend
|
||
|
||
- Issue: https://github.com/Matysh/houseplan-card/issues/42
|
||
- Приоритет: P2
|
||
- Статус ТЗ: ready for implementation by incremental gates
|
||
- Тип: infra/tests, без изменения успешных пользовательских сценариев
|
||
|
||
## Цель
|
||
|
||
Зафиксировать честное покрытие, строгую типизацию и стабильный error contract
|
||
backend integration без массового formatting rewrite.
|
||
|
||
## Coverage
|
||
|
||
- Добавить pinned `pytest-cov`; CI запускает Python 3.13 HA harness и pure tests
|
||
одним coverage combine workflow.
|
||
- Baseline публикуется по каждому `custom_components/houseplan/*.py` с branch
|
||
coverage. Первое включение не скрывает skipped HA tests.
|
||
- Gate вводится ступенями: не ниже baseline → 90% → минимум 95% executable
|
||
lines и согласованный branch threshold. Generated/frontend bundle исключён.
|
||
- `coverage.xml` artifact и human summary; новые/изменённые строки требуют 100%
|
||
либо documented pragma для unreachable defensive branch.
|
||
|
||
## Typing
|
||
|
||
Pyright/mypy strict включается per-module allowlist:
|
||
|
||
1. `validation.py`, `store.py`, auth/const;
|
||
2. websocket request/result boundaries;
|
||
3. repairs/diagnostics/system_health;
|
||
4. trails/runtime.
|
||
|
||
HA dynamic APIs изолируются typed Protocol/adapter, а не `Any` по всему модулю.
|
||
Allowlist только уменьшается.
|
||
|
||
## Lint/format
|
||
|
||
Ruff (или один выбранный tool) с narrow rule set: errors/imports/bugbear и
|
||
format-check только для новых/затронутых Python файлов. Отдельный mechanical
|
||
PR может нормализовать остальное; feature diff не содержит repo-wide rewrite.
|
||
|
||
## WebSocket error contract
|
||
|
||
Все user-facing failures имеют stable code enum, safe developer message и
|
||
optional structured details без персональных данных. Frontend mapping ru/en
|
||
не сравнивает английские message strings. Unknown code получает общий fallback.
|
||
|
||
## Quality Scale docs
|
||
|
||
Добавить troubleshooting, examples и проверить manifest/quality_scale claims.
|
||
Нельзя отмечать rule выполненным только наличием файла — acceptance следует HA
|
||
rule text и CI evidence.
|
||
|
||
## Приёмка
|
||
|
||
- CI нельзя пройти с silently skipped HA harness;
|
||
- coverage ≥95% executable lines после staged rollout;
|
||
- strict module allowlist и lint gates зелёные;
|
||
- WS tests проверяют code + frontend localization;
|
||
- docs examples исполняемы/проверяемы;
|
||
- изменения tooling не меняют stored data/runtime result.
|