feat(P2): role-aware feedback completeness — catch a value command with no value status

'Does the function have *a* status' missed a dimmer with on/off status but no
brightness status (demo planted error #3), silently inflating coverage/Matter.
detect_role_completeness flags a brightness/position command (5.001) whose device
has no matching value status (missing_value_status), with a device-identity match
so it doesn't borrow a sibling's status. Demo recall 4/5 -> 5/5. Raised by the
external expert review. Test + demo ground-truth updated. Full suite green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Nikolay1
2026-07-15 09:23:02 +02:00
co-authored by Claude Opus 4.8
parent c53f388dcb
commit 5036a19b4b
4 changed files with 124 additions and 5 deletions
+6 -5
View File
@@ -30,14 +30,15 @@ flagged in `generated/project_report.md`:
|---|---|---|
| 1 | A group address with **no DPT** (`Living room CO2`, 4/2/1) | ✅ `check_dpt` 🔴 |
| 2 | Two GAs with the **same name, different DPT** (`Kitchen temperature`) | ✅ `check_dpt` |
| 3 | A dimmer with an on/off status but **no brightness status** (`Kitchen worktop LED`) | ⚠️ not flagged* |
| 3 | A dimmer with an on/off status but **no brightness status** (`Kitchen worktop LED`) | ✅ `check_missing_status` (`missing_value_status`)* |
| 4 | A switch with **no status** at all (`Guest WC ceiling`) | ✅ `check_missing_status` |
| 5 | A GA with an **empty name** (`2/5/2`) | ✅ `check_naming` 🔴 |
\* **Honest limitation surfaced by this very demo:** the missing-status check currently asks
"does this control have *a* status?", not "does it have *each expected* status type?". The Kitchen
dimmer has an on/off status, so it isn't flagged for its missing brightness status. Tracked for a
future release.
\* **Now fixed (role-aware feedback completeness).** This demo originally surfaced an honest
limitation — the missing-status check asked "does this control have *a* status?", so the Kitchen
dimmer's on/off status masked its missing brightness status. `detect_role_completeness` now flags a
brightness/position **command** (5.001) that has no matching value **status** (`missing_value_status`),
without borrowing a sibling device's status. Recall on this demo is now 5/5.
Inventory: 239 GAs · 47 Functions · 0 errors that block parsing. The HA generator produced
**19 switches, 13 lights (incl. RGBW / RGB / CCT colour), 6 covers, 6 climate zones, 13 binary