Skip to content

chore(deps): pin OWNd==2.0.0b13 and close the OWNd#139 / #142 / #147 transition windows - #848

Merged
GreenGrassBlueOcean merged 3 commits into
OpenWebNet-HA:v2-phase1-architecturefrom
gdluck:chore/pin-ownd-2.0.0b13
Nov 3, 2026
Merged

GreenGrassBlueOcean merged 3 commits into
OpenWebNet-HA:v2-phase1-architecturefrom
gdluck:chore/pin-ownd-2.0.0b13

Conversation

@gdluck

@gdluck gdluck commented Nov 3, 2026

Copy link
Copy Markdown

Requested by A

What is the problem

manifest.json pins OWNd==2.0.0b11. OWNd 2.0.0b13 (OpenWebNet-HA/OWNd#154, after #152) carries the changes MyHOME has been waiting for behind transition windows: the F461 / MyHomeServer1 profiles without WHO 16 (OWNd#142), the WHO 13 dimension 27 model-name decoder (OWNd#139), the #-prefixed dimension 14 setpoint (OWNd#138), the H4684 aliases and the firmware-derived WHO 22 (OWNd#147), the narrowed dimension 22 guard (OWNd#151) and the MyHOME#839 companion (OWNd#153). Offered on OWNd#139 / #153; the maintainer asked to finish the pin bump together with the release.

CI cannot be green until OWNd 2.0.0b13 is on PyPI (OpenWebNet-HA/OWNd#154 is open; 2.0.0b12 was never published): every job that installs the manifest pin (the conftest fallback install, the HA container smoke, hassfest, the OWNd smoke --target pinned gate) fails on the missing package. The OWNd-from-git coverage job is the one to watch meanwhile; locally the whole suite is green with OWNd master on PYTHONPATH (that is what 2.0.0b13 will be). Draft until the package exists.


What is the solution

  1. custom_components/myhome/manifest.json: OWNd==2.0.0b13.
  2. Discovery rows follow the pinned profiles (scripts/update_gateway_profiles.py): F461 and MyHomeServer1 pinned_whos [1, 2, 4, 18], sweep_omits [*#4*0##]; the transition helpers of chore(profiles): derive the discovery rows from the OWNd profile (prep for OWNd #142) #808 / chore(scripts): align discovery doc check across OWNd==2.0.0b11 WHO 16 transition #831 (PRE_WHO16_OWND_PIN, manifest_pins_pre_who16) go; docs/getting-started/hardware-compatibility.md and docs/architecture/anti-drift-safeguards.md regenerated with scripts/sync_documentation.py --update. verify_profiles_against_oracle keeps zero WHO 16 tolerance and the Generic-row rejection (tests renamed to the post-bump contract).
  3. tests/test_trace_oracle_validation.py: pending_decoder_rx (the two WHO 13 dimension 27 frames *#13**27*70#52#54#49## and the MyHomeServer1 one) and PRE_MODEL_NAME_OWND_PIN removed; replaced by a test that the pinned OWNd decodes them (model_name F461 / MyHomeServer1).
  4. OWNd#147 shims removed (gateway.py _MODEL_SPELLINGS / _profile_for_model fallback and the _firmware_at_least WHO 22 shim in _profile_supports_who, topology.py WHO 22 shim; the TODO(OWNd>2.0.0b11) markers): the pinned OWNd aliases HL4684 / H/L4684 / HC4684 to H4684Profile and derives WHO 22 from firmware >= 6.0.0 inside the profile, so those branches were unreachable; the brand-prefixed "BTicino H/L4684" spelling (no OWNd profile) keeps its one substring key in supports_zone_status with a corrected comment; tests/test_issue_466_hl4684_trace.py now asserts the pinned OWNd's own aliasing. No runtime behaviour changes with the pinned OWNd.
  5. .github/release-notes/2.0.0b17.md: "on OWNd 2.0.0b13".

Not changed on purpose: pyproject.toml [test] floor OWNd>=2.0.0b11 (CI force-installs OWNd from git after it), historical "on OWNd 2.0.0b11" lines in the roadmap and the trace fixtures' ownd_version fields.


State Diagram

N/A — dependency pin, generated docs, transition-window test cleanup, dead-shim removal.


Hardware Verification

N/A (no protocol change). The underlying evidence is on the OWNd PRs listed above.


How is it tested

  • Full suite with OWNd master (fb0acd7, the 2.0.0b13 tree) on PYTHONPATH: 5188 passed (5 snapshots passed).
  • tests/test_gateway_profiles.py, tests/test_sync_documentation.py, tests/test_trace_oracle_validation.py: 119 passed; shim-affected modules after the removal: 453 passed.
  • ruff check ., mypy custom_components/myhome (76 files), scripts/verify_ha_standards.py, scripts/sync_documentation.py --check: all pass.
  • Against the installed 2.0.0b11 (no PYTHONPATH) the same branch fails by design: the docs oracle / discovery checks (RULE_DOCS_ANTI_DRIFT), test_gateway_profiles / test_sync_documentation (7 tests) and the OWNd smoke Gate 1 metadata check.

Where are the traces

N/A. The dimension 27 frames in the replaced test are the live F461 2.0.11 / MyHomeServer1 3.87.13 captures of #799.


What does the Firmware Oracle / Encyclopedia say

  1. OpenWebNet Encyclopedia: N/A.
  2. Firmware Oracle: the F461 020011 and MyHomeServer1 028206 WHO 16 refusals behind OWNd#142 (findings/ of own-firmware-oracle) are what the regenerated discovery rows encode.

Checklist

  • PR Description: Follows the structured sections above.
  • Trace-Backed (if protocol/device change): N/A.
  • V2 Architecture: N/A, no entity change.
  • Tests & Linters: pytest, ruff, mypy and scripts/verify_ha_standards.py pass with OWNd master on PYTHONPATH; CI waits for the PyPI package.

🤖 Generated with Claude Code

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@gdluck

gdluck commented Nov 3, 2026

Copy link
Copy Markdown
Author

Added cc493cb (normal push): topology.gateway_supported_whos no longer swallows an ImportError from the profile lookup. A parallel merge of this PR with the others had left a stale _firmware_at_least import behind, and the except Exception turned it into an empty WHO set for every gateway, which surfaced as eighteen unrelated topology / multi-gateway / config-flow failures. A profile lookup error still degrades to "no WHOs" (now logged at debug, the existing test_gateway_supported_whos_profile_exception keeps passing); an ImportError propagates, with a test. Full suite with OWNd master on PYTHONPATH: 5189 passed, 1 deselected (the pin-bump signal). The mypy-ratchet job stays red until OWNd==2.0.0b13 is on PyPI.

@GreenGrassBlueOcean
GreenGrassBlueOcean marked this pull request as ready for review November 3, 2026 19:50
gdluck and others added 3 commits November 3, 2026 21:01
…A#142 transition windows

manifest.json requires OWNd==2.0.0b13 (OpenWebNet-HA/OWNd#154, the release of
OWNd master fb0acd7: OpenWebNet-HA#139 WHO 13 dimension 27 model name, OpenWebNet-HA#142 no WHO 16 on the
F461 / MyHomeServer1 profiles, OpenWebNet-HA#138 "#"-setpoint and clock echoes, OpenWebNet-HA#153 WHO
1004 / WHO 16 steps / WHO 22 seek). The release is not on PyPI yet: the jobs
that install the pin cannot pass until it is published.

- scripts/update_gateway_profiles.py: F461 and MyHomeServer1 rows pin
  pinned_whos [1, 2, 4, 18] and sweep_omits [*michnovka#4*0##] (OWNd#142: every WHO 16
  frame refused by firmware 020011 / 028206, confirmed live on 2.0.11 and
  3.87.13), so the no-OWNd docs jobs generate the same table as the pinned OWNd.
- docs/architecture/anti-drift-safeguards.md, docs/getting-started/
  hardware-compatibility.md: regenerated with `sync_documentation.py --update`
  against OWNd master (the Gateway Discovery rows of the F461 / MyHomeServer1
  now read "WHO 1, 2, 4, 18" and "Sound is WHO 22 only").
- tests/test_trace_oracle_validation.py: the pending_decoder_rx transition for
  the two WHO 13 dimension 27 captures (*OpenWebNet-HA#13**27*70#52#54#49## of the F461,
  the MyHomeServer1 one) is removed; the frames are checked like every other
  rx frame, plus a test that they decode to OWNGatewayEvent.model_name.
- tests/test_gateway_profiles.py, tests/test_sync_documentation.py: the
  WHO 16 window tests now assert the closed window (a stale pre-OpenWebNet-HA#142 OWNd is
  flagged against the bumped manifest, tolerated only by an OWNd==2.0.0b11
  manifest).
- .github/release-notes/2.0.0b17.md: "on OWNd 2.0.0b13".

Verified with OWNd master (fb0acd7, what 2.0.0b13 packages) on PYTHONPATH:
pytest tests: 5189 passed; ruff clean; mypy custom_components/myhome: 76
files, no issues; scripts/sync_documentation.py --check and
scripts/verify_ha_standards.py: pass. Against the installed OWNd 2.0.0b11 the
oracle / discovery checks and 7 tests of test_gateway_profiles.py /
test_sync_documentation.py fail as designed (stale profile vs the pin), and
scripts/run_ownd_smoke.py --target pinned needs the package on PyPI.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… (pin-bump decision, D36 / D38 row)

The pin bump closes the `TODO(OWNd>2.0.0b11)` windows: OWNd 2.0.0b13 (OWNd#147)
aliases the SSDP spellings `H/L4684`, `HL4684`, `HC4684` to `H4684Profile` and
derives the H4684's WHO 22 from firmware 6.0.0 inside the profile, so the
`_MODEL_SPELLINGS` fallback in `_profile_for_model` / `_resolved_model` /
`_model_key`, the `_firmware_at_least` WHO 22 shim in `_profile_supports_who`
and the same shim in `topology.gateway_supported_whos` are dead code with the
pinned release and are removed rather than kept. The `"HL4684"` key of
`supports_zone_status` stays: it covers the brand-prefixed `BTicino H/L4684`,
which no OWNd alias resolves and whose alphanumeric form does not contain
`H4684`.

`tests/test_issue_466_hl4684_trace.py` no longer simulates a pre-OpenWebNet-HA#147 OWNd
lookup; it asserts the pinned OWNd resolves the three spellings and the
WHO 22 firmware gate itself. No runtime behaviour changes with the pinned
OWNd (453 tests of the touched modules and the full suite with OWNd master
on PYTHONPATH pass).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The profile lookup sits in a try/except Exception that turned a missing
OWNd or gateway symbol into an empty WHO set for every gateway, which
showed up as eighteen unrelated topology, multi-gateway and config-flow
failures in a local merge (lab audit 2026-11-03). A profile lookup error
still degrades to "no WHOs" (logged at debug); an ImportError propagates.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@GreenGrassBlueOcean
GreenGrassBlueOcean merged commit 0b805bd into OpenWebNet-HA:v2-phase1-architecture Nov 3, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants