- Point recurrence purity scan at custom_components.nestquest.core.recurrence
(P2.1); the shim only re-exports, so the real model was no longer scanned.
- Make test_const/test_config_flow/test_dao_matrix module scans recursive
(rglob) so custom_components/nestquest/core/ is covered (P2.2, P2.3);
const.py name exclusion retained.
- Add test_core_isolation: AST-scan every core module for homeassistant
imports, relative imports climbing out of core (level > 1), absolute
imports reaching custom_components.nestquest.<not core>, and bare
'import core'/'from core' (P2.4).
- Drop the private re-export of _month_end/_nth_weekday_of_month from the
recurrence shim; those are test-only, so move the two test imports to
custom_components.nestquest.core.recurrence (P2.1/P3.1).
- Fix shim docstrings and core/__init__.py to reference
custom_components.nestquest.core.* instead of the unimportable 'core.*'
paths (P3.2).
- Note the migrations logger namespace move to
custom_components.nestquest.core.migrations in RELEASE_NOTES.md (P3.3).
Review rounds 1-2 (Codex gpt-5.6-terra) found two HIGHs against real HA:
- entry.context is not a durable record — the config flow now persists
the completing HA user into entry data (CONF_ADMIN_USER_IDS) and the
seed precedence becomes: options copy (the current list) first, then
the config flow's entry-data copy, then the context user as a last
resort. Config-flow tests cover the persisted user and the
context-free path; a seed-precedence test covers options > data.
- the hand-rolled closure could not serialize as an HA multi-select.
The harness now mocks homeassistant.helpers.config_validation with a
faithful multi_select, and the flow uses cv.multi_select exactly as
real HA code does. Suite: 904 passed.