Files
houseplan-card/docs/specs/042-backend-engineering-quality.md
T
Matysh 112c260314
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
Release v1.61.0-beta.1
2026-08-09 21:51:33 +03:00

62 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ТЗ #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.