James Mackay
|
c20146b08b
|
fix(init,config_flow): F4 — seed blocks and the import prefill honor the block's shape: ADB only when the block carries an adb host, protocol-only blocks keep adb_enabled off; TestSeedBlockShapeF4 pins all three paths (t32)
|
2026-10-09 08:04:41 +01:00 |
|
James Mackay
|
6087566336
|
fix(config_flow): F2 — MAC-less zeroconf discovery calls the audited _async_handle_discovery_without_unique_id helper and guards against a same-host duplicate prefill, so re-discovery can't stack entries; the import guard reads entries via the base _async_current_entries helper; TestMacLessDiscoveryF2 pins helper call + one-entry outcome (t32)
|
2026-10-09 08:04:05 +01:00 |
|
James Mackay
|
8f40b6435c
|
fix(poller): F1 — the poller factory re-reads entry.options at call time (audit-sanctioned option), so the next built poller targets the NEW address after a zeroconf IP change; the stale live-read comment in config_flow points at the actual mechanism; TestIpChangeSelfHealF1 drives an IP change and pins the next poller host (t32)
|
2026-10-09 08:03:28 +01:00 |
|
James Mackay
|
c1a82a2fa5
|
fix(diagnostics): hosts join the explicit TO_REDACT list per the audit's G14 citation (t30 G14)
|
2026-10-09 07:47:12 +01:00 |
|
James Mackay
|
782d749b4a
|
docs(readme): sensor names follow the translation_key entity naming (t30 G7)
|
2026-10-09 07:47:02 +01:00 |
|
James Mackay
|
d004e73d99
|
fix(tests): drop the speculative config-entries install guard — the scoped-stub teardowns already isolate per file; full suite green both variants (completes t30 G6)
|
2026-10-09 07:46:53 +01:00 |
|
James Mackay
|
e77bc12d81
|
test: cross-file stub-scoping repairs — hub ConfigFlow base carries the full plumbing, standalone rebuilds when its holder is gone, test_init scoped hygiene mirrors scoped_stubs (completes t30 G6)
|
2026-10-09 07:38:24 +01:00 |
|
James Mackay
|
80ddff313a
|
test(init): tests/test_init.py lands — domain async_setup units + YAML seed parsing/normalization, flow-init seeding records, hostless drop, duplicate guards (UI host + virtual unique_id) and single-visit interactive routing; scoped stub hygiene mirrors scoped_stubs (t30 G6/U1)
|
2026-10-09 07:34:57 +01:00 |
|
James Mackay
|
297f8a21a7
|
docs(readme,strings): YAML seed-only semantics documented — interactive flow, duplicate guards, no implicit entry changes on block removal (t30 U1)
|
2026-10-09 07:24:52 +01:00 |
|
James Mackay
|
a6eeae86e9
|
feat:init,config_flow: YAML seed-only setup — an optional nvidia_shield block starts interactive SOURCE_IMPORT flows (parsed in async_setup), the import step guards duplicates by host/MAC-virtual unique_id and never re-seeds UI-configured hosts, protocol fields are prefill hints only (t30 U1)
|
2026-10-09 07:24:39 +01:00 |
|
James Mackay
|
2e70587871
|
feat: standards polish — G7 sensor translation_key naming + entity strings, G10 protocol-push device identity on the registry card, G12 unrecorded poll-driven attributes (media player DAG internals + sensors), G14 async_redact_data with an explicit redaction list behind the marker scan (t30)
|
2026-10-09 07:22:23 +01:00 |
|
James Mackay
|
194a97ce34
|
feat(button,media_player): Pair ADB carries entity_category CONFIG (t30 G11) + BrowseMediaSource domain parameter at root and children (t30 G18, 2026-05-20 blog contract); stubs/tests pin both
|
2026-10-09 07:17:14 +01:00 |
|
James Mackay
|
7c12d96070
|
feat(icon): HACS-required 256x256 icon.png placeholder, generated (t30 G15)
|
2026-10-09 07:15:42 +01:00 |
|
James Mackay
|
a5254b4740
|
feat(manifest): integration_type device + domain loggers adb_shell/androidtvremote2 (t30 G1)
|
2026-10-09 07:15:42 +01:00 |
|
James Mackay
|
383ec5ada5
|
feat(config_flow): commit the G2 + stub wiring lost in the amend cycle — device-MAC unique_id derivation in the flow, device-registry stubs across the flow suites
|
2026-10-09 07:11:11 +01:00 |
|
James Mackay
|
e1a0fc3039
|
feat(config_flow): the G2 unique_id fix lands — the androidtv entity_id is never a unique_id; MAC derived from the device registry mac connection (empty placeholders skipped), else no unique_id; rename-stability + absence pinned by test (t29 G2)
|
2026-10-09 07:11:03 +01:00 |
|
James Mackay
|
086c089cc1
|
fix: commit G3a wiring lost in the amend cycle — listener removal, update-only host path, reauth via the current API (stub surface includes async_update_reload_and_abort)
|
2026-10-09 07:03:33 +01:00 |
|
James Mackay
|
bcb8b962e7
|
fix: the deprecated listener+reload combo is gone — reauth uses async_update_reload_and_abort(_get_reauth_entry()), zeroconf host update is update-only, the __init__ options-reload listener is removed (grep-pinned); host-change tests assert update-without-reload (t29 G3a)
|
2026-10-09 07:02:21 +01:00 |
|
James Mackay
|
3e0208789a
|
feat: adb_command is a conforming action — always registered in async_setup (option gates USE), services.yaml with required command/entity, strings services+exceptions, ServiceValidationError on empty/unknown-target/ADB-down; participant registry stays (t29 G8)
|
2026-10-09 06:59:44 +01:00 |
|
James Mackay
|
e51545262e
|
fix(connection,adb_client): commit the F-NEW1..3 wiring lost in the amend cycle — no-idle-timeout transport budget with in-code rationale, config accessor consumption, wrapped-line buffer
|
2026-10-09 06:20:46 +01:00 |
|
James Mackay
|
9b3142874f
|
fix(connection,adb_client): the logcat stream survives quiet windows — transport_timeout_s=None (bulk_read blocks quiet gaps; the ladder + async_stop remain recovery/cleanup), 3-line parse buffer for wrapped cmp records, public poller config accessor replaces the private reach-ins (t27 F-NEW1..3)
|
2026-10-09 06:20:38 +01:00 |
|
James Mackay
|
27715f6932
|
test(media_player): MAC-collision pre-check migration branches — occupied MAC falls back to the entry id, free MAC taken (t26 F4)
|
2026-10-09 06:13:06 +01:00 |
|
James Mackay
|
6c925c5241
|
chore(config_flow): replace the stranded self-answering comment in the options editor with a plain statement (t26 F5)
|
2026-10-09 06:11:58 +01:00 |
|
James Mackay
|
3587747c72
|
fix(media_player): unique_id migration pre-checks for an existing entry holding the target MAC — falls back to the config-entry id on collision (t26 F4)
|
2026-10-09 06:11:36 +01:00 |
|
James Mackay
|
2e63135745
|
test(media_player): spied sleep proves a non-default digit delay (0.3 s) reaches the channel sequence — option consumed per digit (t26 F3)
|
2026-10-09 06:11:28 +01:00 |
|
James Mackay
|
67174b8536
|
test(connection): drain beats before label-fetch asserts; label-less negative cache costs one pm dump ever + shlex-quote shape pinned (t26 F1,F2)
|
2026-10-09 06:10:27 +01:00 |
|
James Mackay
|
b442440ccf
|
fix(connection,app_labels): negative-cache label-less packages (same 24h TTL, no re-enqueue — kills the per-heartbeat pm dump tax) + shlex.quote the pm dump package argument (t26 F1,F2)
|
2026-10-09 06:08:33 +01:00 |
|
James Mackay
|
697e3ba307
|
feat(connection,const,strings): complete the P5-3 logcat consumer wiring lost in an earlier amend — dedicated stream, instant stamp, ladder + auto-disable, default-off toggle strings
|
2026-10-09 06:06:34 +01:00 |
|
James Mackay
|
f863496ce5
|
test(media_session,connection): logcat START parsing (cmp=, wrapped records, null/non-START ignored, u-prefixes), instant stamp + notify, duplicate START suppression, 5-in-10-min auto-disable, OFF = no stream task, stream never touches the poller socket (P5-3)
|
2026-10-09 06:06:10 +01:00 |
|
James Mackay
|
07cb73fbb7
|
feat(config_flow,strings): CONF_LOGCAT_EVENTS options toggle (default off, stability-report wording) (P5-3)
|
2026-10-09 06:03:28 +01:00 |
|
James Mackay
|
0ecee66953
|
test(entity_stublib): ConfigFlow stub accepts the domain= __init_subclass__ kwarg and load_entity_modules drops config_flow (per-file loader ownership preserved) (completes P5-2 test scaffolding)
|
2026-10-09 06:00:20 +01:00 |
|
James Mackay
|
a3b397920e
|
test(config_flow,media_player,remote): digit-delay/send-enter options (store + window/error validation), IME-first text entry with ADB fallback tier, icon column parse/prefill/store (P5-2)
|
2026-10-09 06:00:17 +01:00 |
|
James Mackay
|
3d026ae60e
|
feat(config_flow): digit-delay (0.05–1.0 s, invalid input error) + optional send-enter options UI consumed by the §7 channel path; strings/README updated (P5-2.1)
|
2026-10-09 05:55:07 +01:00 |
|
James Mackay
|
4661e52041
|
fix(ha_adb_common): application-label regex accepts double-quoted labels too (completes the P5-1 parser tolerance)
|
2026-10-09 05:52:21 +01:00 |
|
James Mackay
|
c57a2e2ff2
|
test(ha_adb_common,connection): application-label tolerance (dual quotes, empty multi-label blocks, null, absent) + label cache reuse across cycles — no duplicate pm dump (P5-1)
|
2026-10-09 05:52:02 +01:00 |
|
James Mackay
|
2e6dfd8981
|
test(media_player): entity tier serves below map/manifest per the P5-1 resolution ruling (was map-beats-entity contradiction)
|
2026-10-09 05:49:18 +01:00 |
|
James Mackay
|
cd0e634a76
|
feat(connection,media_player): on-demand manifest-label cache (≥24h TTL, one pm dump per watchdog cycle via the task pool) + app_name order map > label > entity > raw package (P5-1)
|
2026-10-09 05:48:39 +01:00 |
|
James Mackay
|
80e9a691bc
|
feat(ha_adb_common): application-label parser — default-locale from pm dump, localized variants skipped, tolerant of empty/multi-label blocks (P5-1)
|
2026-10-09 05:47:30 +01:00 |
|
James Mackay
|
17648f43c9
|
fix(media_player): store the computed adb_command participant key on the entity — completes the F4 add/remove key symmetry in the lifecycle hooks
|
2026-10-08 11:22:23 +01:00 |
|
James Mackay
|
f03ef1f531
|
fix(config_flow): per-host zeroconf updates — blank auto-detect hosts self-heal from the discovery address, a deliberately-different ADB host is never clobbered, same-IP with both hosts current is a no-op (F2)
|
2026-10-08 11:22:04 +01:00 |
|
James Mackay
|
b37a14b920
|
fix(media_player): the adb_command participant registry key is computed once at registration and stored on the entity — add/remove always match (F4)
|
2026-10-08 11:21:09 +01:00 |
|
James Mackay
|
c44c2c2170
|
feat(const,strings,readme): adb_command consts/service name, options toggle strings, curated DEFAULT_APP_DIRECTORY and README service notes (completes P4-2 unit 1)
|
2026-10-08 11:13:09 +01:00 |
|
James Mackay
|
326f02cb59
|
feat(media_player): BrowseMedia app directory — root lists the options apps map (curated TiviMate/Wholphin/Netflix/YouTube fallback), selection launches via play_media(app) (P4-2c)
|
2026-10-08 11:12:37 +01:00 |
|
James Mackay
|
034cb5c83d
|
feat(media_player): option-gated adb_command service (default off; registered at setup, unregistered at last unload, ADB-down rejection) + redacted entry diagnostics (P4-2a,b)
|
2026-10-08 11:08:57 +01:00 |
|
James Mackay
|
4222027602
|
feat(const,config_flow): option-gated adb_command service switch (default off) + curated app directory consts + README service/security notes (P4-2)
|
2026-10-08 11:07:28 +01:00 |
|
James Mackay
|
f4d750ff92
|
test(config_flow): zeroconf discovery (pre-fill, no-host abort, IP-change host update, same-IP skip) + apps map editor (store/parse/clear/prefill) + app_name map resolution tiers (P4-1)
|
2026-10-08 11:03:28 +01:00 |
|
James Mackay
|
61c7ac99a3
|
feat(config_flow,media_player): apps name/icon map editor in the options flow (package=name per line, invalid input error) + app_name resolves through CONF_APP_NAME_MAP after the entity/push tiers (P4-1b)
|
2026-10-08 10:58:04 +01:00 |
|
James Mackay
|
1dbb695cec
|
feat(config_flow): zeroconf discovery step — pre-filled user step from the discovery address, duplicate-MAC abort, IP-change host update + reload for known entries (P4-1a)
|
2026-10-08 10:57:31 +01:00 |
|
James Mackay
|
8b4fea9a5c
|
feat(const,manifest): zeroconf service type + CONF_APP_NAME_MAP; manifest declares the _androidtvremote2._tcp discovery dependency (P4-1)
|
2026-10-08 10:57:08 +01:00 |
|
James Mackay
|
ce90f59f8e
|
fix(config_flow): no_state_source fires only when none of the three sources is present — ADB-only standalone is valid; strings/docs name all three (F2)
|
2026-10-08 10:52:44 +01:00 |
|