Skip to content

Release 2.6.2: security, correctness, and blueprint fixes#123

Merged
kmich merged 2 commits into
mainfrom
claude/nice-khorana-0210b7
Jul 4, 2026
Merged

Release 2.6.2: security, correctness, and blueprint fixes#123
kmich merged 2 commits into
mainfrom
claude/nice-khorana-0210b7

Conversation

@kmich

@kmich kmich commented Jul 4, 2026

Copy link
Copy Markdown
Owner

Release 2.6.2 - security, correctness, and blueprint fixes

Under-the-hood release. No new user-facing features; all items are bug or
security fixes plus one meteorological correctness change. Ships as a single
patch release.

Security

  • Diagnostics no longer leak credentials. The diagnostics export previously
    included full entry.data/entry.options, exposing forecast and upload-network
    API keys, passwords, and passcodes in a file users are told to attach to bug
    reports. All credential-like and location fields (including nested per-network
    blocks) are now redacted. Users who shared an earlier export should rotate keys.

Fixed

  • User-renamed entities are no longer reverted on restart. Entity ids are set
    once at creation (fresh installs still get sensor.ws_*) and then left to the user.
  • Blueprint cooldowns now work. Inputs used inside Jinja are mapped into
    variables:; the storm and fire-danger alerts gained their missing cooldown
    condition (cooldown_hours previously did nothing).
  • Penman-Monteith ET0 uses the real site latitude instead of a hardcoded 37 N.
  • FWI is correct in the Southern Hemisphere (day-length tables were N-only).
  • Timezone-correct time handling (dt_util.now() in the classifier and weather
    forecast alignment).
  • Docs/badge: validate.yaml -> validate.yml, stale versions, and the false
    "24h windows reset on restart" claim.

Changed

  • Sea-level pressure uses a 12h mean temperature (WMO) instead of the
    instantaneous reading, removing a diurnal wave that also fed the Zambretti
    forecast and rain probability. Falls back to instantaneous until ~1h of history
    exists. MSLP/ET0/FWI values may shift slightly vs earlier versions - a correctness
    improvement, documented in the changelog.

Docs / meta

  • README Data & Privacy egress section, uninstall steps, fire/ET0 guidance;
    documented forecast source-priority/fusion; added root CONTRIBUTING.md and
    SECURITY.md; LICENSE author; integration_type; regenerated entity map;
    bumped to 2.6.2.

Compatibility

No breaking changes: entity ids, unique_ids, config schema, and
device_class/state_class/units are all unchanged; new function params are
optional with defaults. Behavior changes (MSLP/ET0/FWI value shifts, working
blueprint cooldowns, non-reverting entity ids, redacted diagnostics) are intentional
and documented.

Validation

276 tests pass (+8 new regression tests), ruff check + format clean, all dashboards
and all 10 blueprints validate.

🤖 Generated with Claude Code

kmich and others added 2 commits July 4, 2026 11:43
Security:
- diagnostics: redact all credential and location fields (API keys,
  passwords, passcodes) in entry data/options, including nested blocks.
  Previously the full config was exported, leaking upload-network and
  forecast credentials in a file users are told to attach to bug reports.

Fixed:
- sensor: stop reverting user-renamed entity ids on every restart; ids are
  set once at creation via suggested_object_id and then left to the user.
- blueprints: map inputs used in Jinja into variables: so cooldowns actually
  work; add the missing cooldown condition to the storm and fire-danger
  alerts (their cooldown_hours input previously did nothing).
- algorithms: Penman-Monteith ET0 uses the real site latitude instead of a
  hardcoded 37 N; remove dead _phi.
- algorithms: FWI DMC/DC day-length tables are hemisphere-aware (Southern
  Hemisphere seasons were six months out of phase).
- timezone: current-condition classifier and weather forecast alignment use
  dt_util.now() instead of the host clock.
- docs: README build badge (validate.yaml -> validate.yml), stale versions,
  and the false "24h windows reset on restart" claim.

Changed:
- sea-level pressure uses a 12h mean temperature (WMO) instead of the
  instantaneous reading, removing a diurnal wave that also fed Zambretti and
  rain probability; falls back to instantaneous until ~1h of history exists.

Docs/meta:
- add Data & Privacy egress section, uninstall steps, and fire/ET0 guidance
  to the README; document the source-priority/fusion model for forecasts;
  add root CONTRIBUTING.md and SECURITY.md; fill in LICENSE author;
  add integration_type; regenerate the entity map; bump to 2.6.2.

Adds 8 regression tests. Full suite: 276 passed, ruff clean.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
…diagnostics.py

diagnostics.py now reads the integration version from manifest.json at runtime
instead of embedding a literal, so the old grep-for-literal step failed. Check
manifest == pyproject only; the diagnostics runtime behaviour is covered by
tests/test_integration.py::test_diagnostics_version.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@kmich
kmich merged commit e951042 into main Jul 4, 2026
10 checks passed
@kmich
kmich deleted the claude/nice-khorana-0210b7 branch July 9, 2026 06:13
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.

1 participant