Skip to content

Merge beta into main#565

Draft
raman325 wants to merge 66 commits intomainfrom
beta
Draft

Merge beta into main#565
raman325 wants to merge 66 commits intomainfrom
beta

Conversation

@raman325
Copy link
Collaborator

@raman325 raman325 commented Feb 25, 2026

Proposed change

Merges beta into main. Releases have been coming from beta since mid 2025 at least so I think this is safe.

Type of change

  • Dependency upgrade
  • Bugfix (non-breaking change which fixes an issue)
  • New feature (which adds functionality)
  • Breaking change (fix/feature causing existing functionality to break)
  • Code quality improvements to existing code or addition of tests

Additional information

  • This PR fixes or closes issue: fixes #
  • This PR is related to issue:

Snuffy2 and others added 30 commits November 24, 2024 09:30
…product (#394)

* Move coordinator to separate file

* Move services from init to services

* Update typing

* Add KeymasterEntity

* Add Text Entities

* Update KeymasterLock data model

* Change to one Coordinator for entire integration

* Update for new data model

* Add property to link entity to coordinator data

* Connect to Z-Wave and move to config_entry_id as key

Rename KeymasterLock entities from lock to kmlock
Rename KeymasterLock parent to parent_name

* Add additional Code Slot Active Binary Sensors

* Fix via_device

* Remove use of keymaster_device_id

* Write PIN changes to lock and sync children
* Add Number entities

* Add Switch Entities

* Remove converted helpers, scripts, automations

* Fix enabled switch

* Add datetime and time entities

* Store kmlocks in JSON file

* Build Code Slot is active logic

* Add limit by time of day switch

* Use zwave_js_server for usercode updates

* Refine active/enabled logic

* Code cleanup

* Update Listeners

* Sync Lock and Door Statuses

* Auto Lock Timer

* Rename door/lock status to state

* Fix circular imports with type annotations

Redo json import code

* Complete Auto Lock Timer

* Add notifications

* Update config and options flow

* Delete unused code slot entities on update

* Code Cleanup
* Fix ValueError when clearing PIN

* Keep entities available when slot not enabled

* Add Code Slot Sync Status Sensor

* Code Cleanup

* Refresh in 15 seconds after PIN changes
… if door sensor set (#403)

* Only add Door Notifications and Retry Lock if door sensor set

* Add Icons

* Add Override Parent Logging
* Further logic refinement

* Lovelace refinements
* Delete Lovelace on Lock Delete

* Delete config file on coordinator delete
* Add Notify Script to config flow

* Filter out already used locks and Config flow cleanup
* Remove unused config fields

* Remove unused yaml

* Update ConfigEntry to Version 3

* Remove unused functions

* Update Z-Wave JS Client

* Combine all config into pyproject.toml

* Update conftest.py

* Limit test files for now

* Change to ruff

* Linting cleanup

* Update pytest.yaml

* Update test_config_flow.py

* init and config_flow changes to pass pytest
* Linting Cleanup

* More complicated linting cleanup

* Update pyproject.toml

* Update .gitignore
* Fix config_flow

* Remove assertions

* Initialize code_slot and dow to None

* Update ruff for Py3.13 and Fix/Format
* Show Code Slot Name in Unlock Notifications

* Only trigger changes when state actually changes

* Use activity map to standardize event name
* Add none option for notification scripts

* Change to none for all options

* Add additional typing

* Linting

* Variable naming cleanup

* Fix Entity Naming

* Clarify datetime entities vs import

* Handle dictionary changed size during iteration errors

* Check usercode after clearing code slot

* Keep pin when reconfiguring
Line 834 added. The initial message string was missing, causing an exception that killed the notification. This effectively disabled all code-specific notifications and required the use of global notifications.
* fix: switch to reconfigure flow, fix tests

* linting and formatting

* remove commented lines

* update more tests

* more test updates
* Cleans up _most_ of the issues that pre-commit hooks found.
* Adds in a .pre-commit-config.yaml file that can be used in conjuction
  with pre-commit (see pre-commit.com) and the pre-commit GitHub Action
  integration (see pre-commit.ci)
* Many of the pre-commit hooks were disabled as they were going to require
  significant changes to the codebase.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>
* Feat: Add new schema for advanced features

Add the schema and migration for being able to disable the advanced
features of date range and day of week. As the features have
historically been enabled by default, this migration will set the
default values to True for existing installations.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>

* Feat: Teach config flow about advanced options

Teaches the config flow about the advanced options for date range and
day of week.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>

* Feat: Teach how to skip Advanced options

Teach Keymaster how to skip configuration of the entities for the
Advanced Date Range and Advanced Day of Week options.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>

* Feat: Teach dashboard generator advanced toggles

Teach the dashboard generator about the advanced toggles for date range
and day of week. When a customer configures keymaster with these options
the related entities will be appropriately added to generated dashboard
output.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>

---------

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>
jshessen and others added 24 commits November 12, 2025 15:34
…led (#520) (#521)

* Fix: Child locks stuck in 'Deleting' when parent slot disabled

- Treat disabled/inactive parent slots as having no PIN for comparison
- Prevents infinite sync loop when parent slot disabled but retains PIN value
- Fixes issue #520

When a parent slot is disabled, the PIN text field may still contain
a value. The sync logic was comparing this stale PIN against cleared
child slots, causing false mismatch detection and endless clear loops.

Now uses parent_pin_for_comparison which is None when parent slot is
disabled or inactive, allowing proper sync status for child locks.

This is a follow-up to PR #515 which fixed Schlage masked response issues.

* Add unit tests for disabled slot sync fix (#520)

- Test disabled parent slot with PIN doesn't cause mismatch
- Test inactive parent slot with PIN doesn't cause mismatch
- Test enabled+active parent continues normal sync
- Test matching parent/child PINs show no mismatch
- Test masked child responses are ignored (PR #515)
- Adds 6 test cases covering new parent_pin_for_comparison logic
- Should improve code coverage for coordinator.py
* Fix KeyError in _rebuild_lock_relationships

When removing orphaned children from parent's child_config_entry_ids set,
the code incorrectly used 'child_config_entry_id' as the dictionary key
instead of 'keymaster_config_entry_id' (the parent).

This caused KeyError when the orphaned child was not present in the
self.kmlocks dictionary, even though the intent was to remove it from
the parent lock's child list.

Line 477: Changed self.kmlocks[child_config_entry_id] to
self.kmlocks[keymaster_config_entry_id]

* Fix RuntimeError: Set changed size during iteration

The code was modifying child_config_entry_ids set while iterating over it,
causing 'RuntimeError: Set changed size during iteration'.

Fixed by iterating over a list copy: list(kmlock.child_config_entry_ids)
This allows the set to be safely modified during iteration.

Line 469: Changed 'for child_config_entry_id in kmlock.child_config_entry_ids'
to 'for child_config_entry_id in list(kmlock.child_config_entry_ids)'

* Add comprehensive tests for _rebuild_lock_relationships

Added 3 test cases to validate the KeyError and RuntimeError fixes:

1. test_rebuild_with_orphaned_child_not_in_kmlocks:
   - Tests that orphaned children (not in kmlocks dict) don't cause KeyError
   - Verifies orphaned children are removed from parent's child list

2. test_rebuild_with_valid_parent_child_relationship:
   - Tests that valid parent-child relationships are preserved
   - Ensures correct references remain intact

3. test_rebuild_with_mismatched_parent:
   - Tests that children pointing to different parents are cleaned up
   - Verifies removal from old parent's child list

All tests pass with the fixes applied.

* Add comprehensive edge case tests for _rebuild_lock_relationships

Added 7 additional tests covering edge cases:

1. test_rebuild_with_multiple_orphaned_children:
   - Tests cleanup of multiple orphaned children at once

2. test_rebuild_with_mixed_valid_and_orphaned_children:
   - Verifies correct handling when parent has both valid and orphaned children

3. test_rebuild_with_empty_child_list:
   - Ensures empty child lists don't cause errors

4. test_rebuild_with_circular_reference_prevention:
   - Tests that circular parent-child references don't cause crashes

5. test_rebuild_preserves_parent_name_relationships:
   - Validates parent_name matching creates correct relationships

6. test_rebuild_with_child_list_as_list_not_set:
   - Confirms list type handling (actual type from lock.py)

7. test_rebuild_idempotency:
   - Verifies running rebuild multiple times produces identical results

All 10 relationship tests now pass (32 tests total in suite).
Coverage improved to 60.36%.

* Add comprehensive parent-child sync tests

Added 10 functional tests for _update_child_code_slots covering:

1. Parent disabled slot clears child
2. Parent inactive slot (time restriction) clears child
3. Parent enabled+active syncs PIN to child
4. Masked child PIN responses ignored (Schlage workaround)
5. Child override_parent flag prevents sync
6. Missing child slots handled gracefully
7. Multiple slots synced simultaneously
8. None parent PIN handled correctly
9. Empty parent code_slots doesn't crash
10. All slot attributes propagated (name, accesslimit, etc)

These tests validate the PR #520 fix and ensure parent-child
synchronization works correctly in all scenarios.

Total test count: 42 tests
Coverage: 61.34%

* Add multi-lock and boundary condition tests

Added 7 more functional tests covering:

Multi-Lock Scenarios:
1. Multiple children syncing from same parent
2. Race condition: parent changes during sync
3. Parent with multiple children - cascading updates
4. Orphaned children from deleted parent

Code Slot Boundaries:
5. Slot number 0 (edge case)
6. Slot number 250 (maximum)
7. Sparse/non-contiguous slot numbers

These tests cover scenarios that could cause production issues:
- Concurrent child updates from shared parent
- Edge cases in slot numbering
- Orphaned lock cleanup
- Race conditions in sync operations

* Add comprehensive child lock behavior tests (Category 3)

Tests child-side behavior patterns with override flags and attribute inheritance:
- Child with override_parent=True maintains independence across syncs
- Child without override respects all parent state changes
- Child inherits all access limit attributes (count, date range, day of week enabled)
- Child effectively disabled when parent is disabled (PIN cleared)
- Child behavior when switching override_parent flag on/off
- Child behavior when parent slot is missing
- Child inherits parent name changes

Coverage: 7 new tests validate child lock behavior patterns.

* Add system invariant validation and stress tests

Implements comprehensive validation tests that would have caught the KeyError and RuntimeError bugs:

1. **Invariant validator helper** - Checks 5 critical system invariants:
   - No orphaned child references in parent lists
   - No invalid parent references from children
   - Bidirectional relationship consistency
   - No duplicate children in parent lists
   - Parent-child pointer symmetry

2. **Invariant hold tests** - Validates invariants after rebuild operations:
   - Simple orphaned child scenario
   - Complex multi-parent/multi-child hierarchies
   - Bidirectional consistency restoration

3. **Stress test** - Randomly adds 20 locks then removes 10, verifying no crashes
* test: comprehensive test coverage improvements (52.5% → 65%)

Major test coverage expansion adding 198 passing tests across multiple modules:

**New Test Files:**
- test_button.py: 100% coverage of button entity platform (7 tests)
- test_datetime.py: 100% coverage of datetime entity platform (9 tests)
- test_entity.py: 99% coverage of base entity class (24 tests)
- test_number.py: 100% coverage of number entity platform (12 tests)
- test_sensor.py: 100% coverage of sensor entity platform (6 tests)
- test_switch.py: 73% coverage of switch entity platform (11 tests)
- test_text.py: 100% coverage of text entity platform (12 tests)
- test_time.py: 100% coverage of time entity platform (13 tests)

**Enhanced Test Files:**
- test_coordinator.py: Added 48+ tests for event handling, sync, utilities
- test_helpers.py: Added Throttle class and notification helper tests
- test_services.py: Added coordinator failure path test
- test_config_flow.py: Fixed 6 pre-existing test failures
- test_init.py: Enhanced initialization tests

**Bug Fixes:**
- Fixed KeymasterTimer comparison operators (< and > were swapped)
- Fixed service helper tests to use actual service registration
- Removed unreachable code from time.py (redundant validation)

**Code Quality:**
- All tests follow pytest best practices with proper fixtures
- Comprehensive edge case coverage (error paths, None values, missing data)
- Proper mocking and async test patterns throughout
- Added .gitignore entry for local ha-core development directory

**Coverage Milestones:**
- Overall: 52.5% → 65% (+12.5 percentage points)
- 10 files at 100% coverage: button, const, datetime, lock, number,
  sensor, services, text, time (+ entity at 99%)
- 198 passing tests (up from ~160), 3 skipping
- All pre-existing failures resolved

**Files with 100% Coverage:**
- custom_components/keymaster/button.py (41 lines)
- custom_components/keymaster/const.py (73 lines)
- custom_components/keymaster/datetime.py (52 lines)
- custom_components/keymaster/lock.py (66 lines)
- custom_components/keymaster/number.py (57 lines)
- custom_components/keymaster/sensor.py (40 lines)
- custom_components/keymaster/services.py (22 lines)
- custom_components/keymaster/text.py (55 lines)
- custom_components/keymaster/time.py (73 lines)

* Update tests/test_init.py

* Update tests/test_init.py

* Update tests/test_init.py

* Update tests/test_init.py

* Update tests/test_init.py

* fix: move imports to top level in test_button.py

* fix: move imports to top level in test_datetime.py

- Moved all component imports to top of file
- Removed lazy imports from inside test functions
- Changed datetime import from alias 'dt' to direct 'datetime' for consistency
- Fixed PLC0415 linting violations (16 violations resolved)

* fix: move imports to top level in test_entity.py

- Moved KeymasterLock and KeymasterCodeSlot imports to top of file
- Removed all lazy imports from inside test functions (24 occurrences)
- Fixed PLC0415 linting violations (24 violations resolved)

* fix: move imports to top level in test files (batch 2)

- test_number.py: Moved number component and lock imports (20 violations)
- test_sensor.py: Moved sensor component and lock imports, plus Mock imports (12 violations)
- test_switch.py: Moved switch component and lock imports (21 violations)
- test_text.py: Moved text component and lock imports (20 violations)
- test_time.py: Moved time component and lock imports (23 violations)
- Fixed PLC0415 linting violations (96 total violations resolved in this batch)

* fix: move imports to top level in test files (batch 3 - final)

- test_coordinator.py: Moved LockState and STATE_* imports from nested fixtures (21 violations)
- test_services.py: Moved ConfigEntryNotReady and other imports from test functions (4 violations)
- Fixed PLC0415 linting violations (25 total violations resolved in this batch)

All import violations now resolved across all 10 test files (161 total fixes)

* fix: add missing KeymasterCodeSlotDayOfWeek import

- Added KeymasterCodeSlotDayOfWeek to imports in test_time.py and test_entity.py
- These were accidentally removed by the automated import cleanup script
- Fixes NameError in tests using nested code slot day of week properties

* refactor: optimize linter configuration

- Add per-file-ignores in pyproject.toml for test files (SLF001)
- Remove manual-list-comprehension and pytest-fixture-param-without-value from global ignores
- Allow PT019 and PERF401 to show as informational warnings
- Improve configuration organization and maintainability

* fix: improve type annotations in core components

- Use walrus operator for via_device type narrowing in __init__.py
- Change via_device type from tuple[str, Any] to tuple[str, str]
- Remove unused Any import
- Fix type safety without suppressions

* fix: standardize mock entity callbacks in test files

- Apply consistent AddEntitiesCallback mock pattern across test files
- Use 'del update_before_add' to handle unused required parameter
- Fix function signatures to match HomeAssistant API expectations
- Improves test reliability and removes linter warnings

* refactor: improve type safety in test files

- Replace string literals with Synced enum values in test_sensor.py
- Add isinstance assertions for type narrowing in test_entity.py and test_time.py
- Use proper getattr patterns with targeted noqa comments in tests/common.py
- Eliminate unnecessary type:ignore comments through proper type handling

* style: apply code quality improvements to test files

- Use @pytest.mark.usefixtures decorator for cleaner test organization
- Convert manual loops to list.extend() with comprehensions for better performance
- Improve import organization and code clarity
- Remove redundant module-level pylint disables (handled in pyproject.toml)

* fix: correct parametrize parameter name in test_reconfiguration_form

- Change _title to title to match parametrize decorator
- Add explicit del statement to indicate intentional unused parameter
- Fixes pytest collection error

* fix: correct pytest fixture references

- Fix enable_custom_integrations fixture name (was _enable_custom_integrations)
- Remove underscore prefix from fixture names in test_config_flow.py
- Fixtures are defined with name= parameter, use without underscore
- Fixes pytest collection and setup errors

* fix: correct pytest fixture parameter names and enum comparison

- Fix mock function signature: hass, domain (not _hass, _domain) in side_effect_get_entities
- Fix integration_fixture parameter: platforms (not platforms_list)
- Fix keymaster_integration fixture parameters: hass, client (not _hass, _client)
- Fix mock_async_call_later signature parameters
- Fix coordinator fixture dependencies: button_config_entry, datetime_config_entry, entity_config_entry
- Fix test_sensor enum comparison: Synced.SYNCED instead of 'synced'

Resolves fixture 'not found' errors and enum assertion failures.
Test results: 195 passed, 3 failed (sensor count issue), 3 skipped

* fix: reduce pytest log level from DEBUG to INFO for cleaner test output

DEBUG level was flooding test output with hundreds of state_changed events from Home Assistant core, making it difficult to read test results. INFO level provides a good balance between seeing important messages and avoiding spam.

* fix init tests

* fix broken tests and sort imports

---------

Co-authored-by: Chris <1105672+firstof9@users.noreply.github.com>
Co-authored-by: firstof9@gmail.com <firstof9@gmail.com>
* fix: migration fix based on new tests

* formatting

* linting

* more linting
…eration (#536)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…gy (#543)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Fixes #547
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…rs (#553)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…ort (#538)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Fixes error reported by tykeal in PR #538.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
#559)

* address copilot comments

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* address copilot comments

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: clarify masked response comment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Update custom_components/keymaster/providers/zwave_js.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
YAML-mode Lovelace resources don't have an 'id' field, only 'url' and
'type'. When users manually added the keymaster resource (as instructed
by the warning message), the generator expression crashed on
data['id'] before the StopIteration handler could run.

Restructured async_register_strategy_resource to check resource
existence by URL first (works for both YAML and storage modes),
then branch on the result.

Fixes #560

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings February 25, 2026 01:10
@raman325 raman325 marked this pull request as draft February 25, 2026 01:10
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR merges the beta branch into main, consolidating significant development work that has occurred on beta since mid-2025. The changes represent a major architectural overhaul of the keymaster integration, including a complete rewrite of the lock provider system, migration to native Home Assistant entities, implementation of Lovelace dashboard strategies, and comprehensive test coverage improvements.

Changes:

  • Introduced provider abstraction layer for lock platforms with Z-Wave JS implementation
  • Migrated from YAML-based input helpers to native HA entity platforms (Text, Number, Switch, DateTime, Time, Button, Sensor, Binary Sensor)
  • Implemented Lovelace dashboard/view/section strategies with TypeScript frontend
  • Refactored coordinator for event-driven architecture with real-time lock event handling
  • Enhanced testing infrastructure with new test files and updated CI/CD workflows

Reviewed changes

Copilot reviewed 94 out of 129 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tests/test_coordinator_events.py New tests for coordinator event handling with lock/unlock events and access limit decrementing
tests/test_button.py New tests for button entity creation and press actions
tests/test_binary_sensor.py Updated Z-Wave JS network sensor tests with improved connection handling
tests/providers/init.py New provider tests package initialization
tests/json/zwave_js/lock_schlage_be469_state.json Updated lock state JSON with corrected field names and expanded command class data
tests/json/zwave_js/controller_state.json Updated controller state with reformatted arrays and new status fields
tests/json/zwave_js/controller_node_state.json New controller node state fixture for testing
tests/const.py Refactored test constants to use integration constants and updated config data structure
tests/common.py Modernized imports and updated time manipulation for test utilities
tests/init.py Updated docstring formatting
setup.cfg Removed deprecated configuration file
scripts/compare_lovelace_output.py New utility script for comparing Lovelace output between branches
rollup.config.js New Rollup configuration for TypeScript compilation
requirements_test.txt Reorganized test dependencies with clear categorization
requirements_lint.txt New lint-specific dependencies file
requirements_dev.txt Simplified to reference test and lint requirements
pylintrc Removed deprecated pylint configuration
package.json New package.json for TypeScript/JavaScript tooling
lovelace_strategy/view-strategy.ts New TypeScript view strategy implementation
lovelace_strategy/view-strategy.test.ts Comprehensive tests for view strategy
lovelace_strategy/types.ts TypeScript type definitions for strategies
lovelace_strategy/strategy-utils.ts Utility functions for strategy error handling
lovelace_strategy/slugify.ts URL slug generation utility
lovelace_strategy/section-strategy.ts New section strategy for code slot cards
lovelace_strategy/main.ts Strategy registration entry point
lovelace_strategy/ha_type_stubs.ts Home Assistant type definitions
lovelace_strategy/dashboard-strategy.ts Dashboard-level strategy implementation
lovelace_strategy/dashboard-strategy.test.ts Tests for dashboard strategy
lovelace_strategy/const.ts Strategy constants
info.md Formatted documentation with line breaks
hacs.json Updated minimum HA version and added persistent directory
custom_components/keymaster/websocket.py New WebSocket API for dashboard strategies
custom_components/keymaster/translations/nb.json Updated Norwegian translations for new config flow
custom_components/keymaster/translations/en.json Updated English translations for simplified config
custom_components/keymaster/time.py New Time entity platform
custom_components/keymaster/text.py New Text entity platform for names and PINs
custom_components/keymaster/system_health.py Removed deprecated system health module
custom_components/keymaster/switch.py New Switch entity platform
custom_components/keymaster/strings.json Updated config flow strings
custom_components/keymaster/services.yaml Updated service definitions
custom_components/keymaster/services.py Refactored services to use coordinator
custom_components/keymaster/sensor.py Migrated to native entity platform
custom_components/keymaster/resources.py New Lovelace resource registration helpers
custom_components/keymaster/providers/const.py Provider system constants
custom_components/keymaster/providers/_base.py Base lock provider abstraction
custom_components/keymaster/providers/init.py Provider factory and registration
custom_components/keymaster/providers/PROVIDERS.md Provider development documentation
custom_components/keymaster/number.py New Number entity platform
custom_components/keymaster/manifest.json Added http dependency
custom_components/keymaster/lovelace_child.head Removed deprecated template
custom_components/keymaster/lovelace_child.code Removed deprecated template
custom_components/keymaster/lovelace.head Removed deprecated template
custom_components/keymaster/lovelace.code Removed deprecated template
custom_components/keymaster/lock.py Expanded lock dataclass with code slots and provider
custom_components/keymaster/keymaster_common.yaml Removed deprecated YAML package
custom_components/keymaster/keymaster.yaml Removed deprecated YAML package
custom_components/keymaster/exceptions.py Updated exception classes for provider system
custom_components/keymaster/entity.py New base entity class for all platforms
custom_components/keymaster/datetime.py New DateTime entity platform
custom_components/keymaster/const.py Expanded constants for new architecture
custom_components/keymaster/button.py New Button entity platform
custom_components/keymaster/binary_sensor.py Migrated to entity platform with connection status
codecov.yml New Codecov configuration for Python and TypeScript
autolock/autolock_definitions.yml Formatting improvements
autolock/Autolock.md Documentation formatting
assets/additional_yaml/ozw.yaml Added yamllint disable comments
README.md Enhanced documentation with Lovelace strategy information
Dockerfile.test New Docker test environment
.pre-commit-config.yaml New pre-commit hooks configuration
.github/workflows/yarn.yaml New workflow for TypeScript linting and building
.github/workflows/vitest.yaml New workflow for TypeScript tests
.github/workflows/release.yaml Updated release workflow
.github/workflows/pytest.yaml Enhanced Python CI with lint and type checking
.github/workflows/combined.yaml Removed trailing whitespace
.github/release-drafter.yml Fixed typo in "Enhancements"
.github/PULL_REQUEST_TEMPLATE.md Formatting improvements
.github/ISSUE_TEMPLATE/feature_request.md Line length formatting
.gitattributes Mark generated JavaScript as linguist-generated
.eslintrc.cjs New ESLint configuration
.coveragerc Removed deprecated coverage configuration

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Collaborator

@tykeal tykeal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm just going to personally say yes to this. I think it's time especially since I think releasing off of a branch named beta isn't a really good practice!

Copy link
Collaborator

@firstof9 firstof9 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was good while testing was underway before dropping non-prerelease versions tho

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.

10 participants