Skip to content

Commit 820f6e1

Browse files
authored
Release 3.10.5
## [3.10.5] - 2026-08-14 ### Development news - [closure]: Closure device is released for production and fully Matter 1.6.0 compliant (all chip tests pass). So far fully supported by SmartThings and partially by Matter Server dashboard. ### Added - [closureControl]: Refactor `MoveTo` target-state fallbacks and set the main state to `Stopped` when the closure is already at the requested target, or `Moving` otherwise. - [closureControl]: Add the conformance to specs for `MoveTo`: reject the command with `INVALID_COMMAND` when none of `Position`, `Latch`, or `Speed` are present. - [closureControl]: Add `Closure.setState()`, `Closure.setFullyClosed()`, `Closure.setFullOpened()` and `Closure.setPartiallyOpened()` helpers. - [closureControl]: Add `Closure.triggerOperationalError()`, `Closure.triggerMovementCompleted()` and `Closure.triggerSecureStateChanged()` helpers to emit the `OperationalError`, `MovementCompleted` and `SecureStateChanged` ClosureControl events. - [closureControl]: Add `identifyTime`, `identifyType`, and `powerSourceType` constructor options to `Closure`. - [closureDimension]: Use the Matter `Auto` fallback when `SetTarget` omits speed. - [closureDimension]: Add the conformance to specs for `Step`: reject the command with `CONSTRAINT_ERROR` when `Direction`, `NumberOfSteps`, or `Speed` are out of range. - [thermostat]: Add `Thermostat.Feature.MatterScheduleConfiguration` support with schedule attributes and `SetActiveScheduleRequest` handling. Thanks Ludovic BOUÉ. - [thermostat]: Add `Thermostat.Feature.ThermostatSuggestions` support with suggestion attributes and `AddThermostatSuggestion`/`RemoveThermostatSuggestion` handling. Thanks Ludovic BOUÉ. ### Changed - [frontend]: Bump `frontend` version to v.3.5.7. - [frontend]: Remove bun version from Header. - [thermostat]: Align `numberOfPresets` with the configured preset capacity and the Matter specification minimum. Thanks Ludovic BOUÉ. ### Fixed - [irrigationSystem]: Remove the non-functional `singleZone` option; single-zone systems must now use `addZone` like any other zone. - [microwaveOven]: Use the `PowerAsNumber` and `PowerNumberLimits` features instead of `PowerInWatts` for the `MicrowaveOvenControl` cluster, and handle the `PowerSetting` field in `SetCookingParameters` accordingly. - [closureDimension]: `ClosurePanel` and `Closure.addPanel()` now require a `dimensionType` (`'lift'`, `'tilt'` or `'modulation'`) and enable the matching Translation/Rotation/Modulation feature, as required by the `[PS].b` conformance rule when Positioning is supported. - [thermostat]: Remove the workaround that stripped the `AtomicRequest`/`AtomicResponse` commands from `acceptedCommandList`/`generatedCommandList` on `MatterbridgeThermostatServer`; matter.js now handles the atomic-write commands correctly. - [data-model]: Fix missed namspaces. <a href="https://www.buymeacoffee.com/luligugithub"><img src="https://matterbridge.io/assets/bmc-button.svg" alt="Buy me a coffee" width="80"></a>
1 parent df197c9 commit 820f6e1

40 files changed

Lines changed: 2630 additions & 971 deletions

.codex/config.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
# Codex config v.1.0.2
1+
# Codex config v.1.0.3
22

33
approval_policy = "on-request"
44
approvals_reviewer = "user"
55

66
web_search = "live"
77

8-
default_permissions = "matterbridge_safe"
8+
default_permissions = ":workspace"
99

1010
[shell_environment_policy]
1111
inherit = "core"

.codex/rules/default.rules

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
# Codex rules v.1.0.2
1+
# Codex rules v.1.0.3
22

33
# Git mutations
4-
prefix_rule(pattern = ["git", "pull"], decision = "forbidden", justification = "Do not change local refs without explicit manual control.")
5-
prefix_rule(pattern = ["git", "merge"], decision = "forbidden", justification = "Do not merge automatically.")
6-
prefix_rule(pattern = ["git", "push"], decision = "forbidden", justification = "Do not push automatically.")
7-
prefix_rule(pattern = ["git", "rebase"], decision = "forbidden", justification = "Do not rewrite branch history automatically.")
8-
prefix_rule(pattern = ["git", "commit"], decision = "forbidden", justification = "Do not create commits automatically.")
9-
prefix_rule(pattern = ["git", "commit", "--amend"], decision = "forbidden", justification = "Do not amend commits automatically.")
10-
prefix_rule(pattern = ["git", "reset", "--hard"], decision = "forbidden", justification = "Destructive reset is blocked.")
11-
prefix_rule(pattern = ["git", "filter-branch"], decision = "forbidden", justification = "History rewriting is blocked.")
12-
prefix_rule(pattern = ["git", "branch", "-D"], decision = "forbidden", justification = "Branch deletion is blocked.")
13-
prefix_rule(pattern = ["git", "branch", "-d"], decision = "forbidden", justification = "Branch deletion is blocked.")
14-
prefix_rule(pattern = ["git", "tag", "-d"], decision = "forbidden", justification = "Tag deletion is blocked.")
15-
prefix_rule(pattern = ["git", "reflog", "expire"], decision = "forbidden", justification = "Reflog mutation is blocked.")
16-
prefix_rule(pattern = ["git", "reflog", "delete"], decision = "forbidden", justification = "Reflog mutation is blocked.")
4+
prefix_rule(pattern = ["git", "pull"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
5+
prefix_rule(pattern = ["git", "merge"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
6+
prefix_rule(pattern = ["git", "push"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
7+
prefix_rule(pattern = ["git", "rebase"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
8+
prefix_rule(pattern = ["git", "commit"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
9+
prefix_rule(pattern = ["git", "reset"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
10+
prefix_rule(pattern = ["git", "filter-branch"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
11+
prefix_rule(pattern = ["git", "branch", "-D"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
12+
prefix_rule(pattern = ["git", "branch", "-d"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
13+
prefix_rule(pattern = ["git", "tag", "-d"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
14+
prefix_rule(pattern = ["git", "reflog", "expire"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
15+
prefix_rule(pattern = ["git", "reflog", "delete"], decision = "forbidden", justification = "This command must be run manually outside Codex.")
1716

1817
# Dependency installs
1918
prefix_rule(pattern = ["npm", "install"], decision = "prompt", justification = "Ask before installing dependencies.")
@@ -26,7 +25,6 @@ prefix_rule(pattern = ["bun", "add"], decision = "prompt", justification = "Ask
2625
prefix_rule(pattern = ["bun", "remove"], decision = "prompt", justification = "Ask before uninstalling dependencies.")
2726

2827
# Validation scripts
29-
prefix_rule(pattern = ["npm", "run"], decision = "allow")
3028
prefix_rule(pattern = ["npm", "run", "typecheck"], decision = "allow")
3129
prefix_rule(pattern = ["npm", "run", "build"], decision = "allow")
3230
prefix_rule(pattern = ["npm", "run", "test"], decision = "allow")

.dockerbuild.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "3.10.4",
2+
"version": "3.10.5",
33
"sha": "local",
44
"sha7": "local",
55
"event": "local_script",

.github/prompts/verify-version-alignment.prompt.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ Checks:
2121
- Verify all `@matterbridge/*` entries in the root [package.json](../../package.json) `dependencies` block are pinned to the root package version.
2222
- Verify all `--build-arg CACHE_VERSION=x.y.z` values in the root [package.json](../../package.json) `scripts` block match the root package version.
2323
- Verify [..\.dockerbuild.json](../../.dockerbuild.json) has a `version` field equal to the root package version.
24-
- Verify [packages/jest-utils/src/jestMatterTest.ts](../../packages/jest-utils/src/jestMatterTest.ts) sets `getPlatformMatterbridge().matterbridgeVersion`, `getPlatformMatterbridge().matterbridgeLatestVersion`, `getPlatformMatterbridge().matterbridgeDevVersion` and `getPlatformMatterbridge().frontendVersion` to the root package version.
25-
- Verify [packages/vitest-utils/src/vitestMatterTest.ts](../../packages/vitest-utils/src/vitestMatterTest.ts) sets `getPlatformMatterbridge().matterbridgeVersion`, `getPlatformMatterbridge().matterbridgeLatestVersion`, `getPlatformMatterbridge().matterbridgeDevVersion` and `getPlatformMatterbridge().frontendVersion` to the root package version.
24+
- Verify [packages/jest-utils/src/jestMatterTest.ts](../../packages/jest-utils/src/jestMatterTest.ts) sets `getPlatformMatterbridge().matterbridgeVersion`, `getPlatformMatterbridge().matterbridgeLatestVersion` and `getPlatformMatterbridge().matterbridgeDevVersion` to the root package version, and sets `getPlatformMatterbridge().frontendVersion` to the [apps/frontend/package.json](../../apps/frontend/package.json) version.
25+
- Verify [packages/vitest-utils/src/vitestMatterTest.ts](../../packages/vitest-utils/src/vitestMatterTest.ts) sets `getPlatformMatterbridge().matterbridgeVersion`, `getPlatformMatterbridge().matterbridgeLatestVersion` and `getPlatformMatterbridge().matterbridgeDevVersion` to the root package version, and sets `getPlatformMatterbridge().frontendVersion` to the [apps/frontend/package.json](../../apps/frontend/package.json) version.
2626
- Verify [docs/main_update.json](../../docs/main_update.json) and [docs/dev_update.json](../../docs/dev_update.json) have `latest` equal to the root package version.
2727
- Verify [docs/main_update.json](../../docs/main_update.json) and [docs/dev_update.json](../../docs/dev_update.json) have a `dev` value whose version prefix matches the root package version, preserving the existing `-dev-...` suffix format.
2828
- Verify the `engines.node` field in every real workspace package under [packages](../../packages) is identical to the `engines.node` field in the root [package.json](../../package.json).

.github/workflows/docker-buildx-s6-rc-legacy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
-f docker/Dockerfile.s6-rc-legacy \
7878
-t luligu/matterbridge:s6-rc-legacy \
7979
-t luligu/matterbridge:s6-rc-legacy-${{ steps.meta.outputs.VERSION }} \
80-
-t luligu/matterbridge:2026.8.1-legacy \
80+
-t luligu/matterbridge:2026.8.2-legacy \
8181
--build-arg VERSION=${{ steps.meta.outputs.VERSION }} \
8282
--build-arg VCS_REF=${{ steps.meta.outputs.VCS_REF }} \
8383
--build-arg BUILD_DATE=${{ steps.meta.outputs.BUILD_DATE }} \

.github/workflows/docker-buildx-s6-rc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
-f docker/Dockerfile.s6-rc \
7878
-t luligu/matterbridge:s6-rc \
7979
-t luligu/matterbridge:s6-rc-${{ steps.meta.outputs.VERSION }} \
80-
-t luligu/matterbridge:2026.8.1 \
80+
-t luligu/matterbridge:2026.8.2 \
8181
--build-arg VERSION=${{ steps.meta.outputs.VERSION }} \
8282
--build-arg VCS_REF=${{ steps.meta.outputs.VCS_REF }} \
8383
--build-arg BUILD_DATE=${{ steps.meta.outputs.BUILD_DATE }} \

.vscode/settings.json

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// VS Code settings native v.1.0.9
1+
// VS Code settings native v.1.0.10
22
{
33
"eslint.enable": false,
44
"prettier.enable": false,
@@ -55,14 +55,10 @@
5555
"npm run test:coverage": true,
5656
"npm run update-htmls": true,
5757
"git status": true,
58-
"git diff": true,
59-
"git diff --check": true,
60-
"git diff --stat": true,
58+
"/^git (?:--no-pager )?diff(?: --(?:check|stat))?$/": true,
6159
"git log": true,
6260
"git show": true,
6361
"git branch -vv": true,
64-
"git ls-files": true,
65-
"git --no-pager diff --stat": true,
66-
"git --no-pager diff --check": true
62+
"git ls-files": true
6763
}
6864
}

CHANGELOG.md

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,46 @@
2525

2626
All notable changes to this project will be documented in this file.
2727

28+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
29+
2830
If you like this project and find it useful, please consider giving it a star on [GitHub](https://github.com/Luligu/matterbridge) and sponsoring it.
2931

3032
<a href="https://www.buymeacoffee.com/luligugithub"><img src="https://matterbridge.io/assets/bmc-button.svg" alt="Buy me a coffee" width="120"></a>
3133

34+
## [3.10.5] - 2026-08-14
35+
36+
### Development news
37+
38+
- [closure]: Closure device is released for production and fully Matter 1.6.0 compliant (all chip tests pass). So far fully supported by SmartThings and partially by Matter Server dashboard.
39+
40+
### Added
41+
42+
- [closureControl]: Refactor `MoveTo` target-state fallbacks and set the main state to `Stopped` when the closure is already at the requested target, or `Moving` otherwise.
43+
- [closureControl]: Add the conformance to specs for `MoveTo`: reject the command with `INVALID_COMMAND` when none of `Position`, `Latch`, or `Speed` are present.
44+
- [closureControl]: Add `Closure.setState()`, `Closure.setFullyClosed()`, `Closure.setFullOpened()` and `Closure.setPartiallyOpened()` helpers.
45+
- [closureControl]: Add `Closure.triggerOperationalError()`, `Closure.triggerMovementCompleted()` and `Closure.triggerSecureStateChanged()` helpers to emit the `OperationalError`, `MovementCompleted` and `SecureStateChanged` ClosureControl events.
46+
- [closureControl]: Add `identifyTime`, `identifyType`, and `powerSourceType` constructor options to `Closure`.
47+
- [closureDimension]: Use the Matter `Auto` fallback when `SetTarget` omits speed.
48+
- [closureDimension]: Add the conformance to specs for `Step`: reject the command with `CONSTRAINT_ERROR` when `Direction`, `NumberOfSteps`, or `Speed` are out of range.
49+
- [thermostat]: Add `Thermostat.Feature.MatterScheduleConfiguration` support with schedule attributes and `SetActiveScheduleRequest` handling. Thanks Ludovic BOUÉ.
50+
- [thermostat]: Add `Thermostat.Feature.ThermostatSuggestions` support with suggestion attributes and `AddThermostatSuggestion`/`RemoveThermostatSuggestion` handling. Thanks Ludovic BOUÉ.
51+
52+
### Changed
53+
54+
- [frontend]: Bump `frontend` version to v.3.5.7.
55+
- [frontend]: Remove bun version from Header.
56+
- [thermostat]: Align `numberOfPresets` with the configured preset capacity and the Matter specification minimum. Thanks Ludovic BOUÉ.
57+
58+
### Fixed
59+
60+
- [irrigationSystem]: Remove the non-functional `singleZone` option; single-zone systems must now use `addZone` like any other zone.
61+
- [microwaveOven]: Use the `PowerAsNumber` and `PowerNumberLimits` features instead of `PowerInWatts` for the `MicrowaveOvenControl` cluster, and handle the `PowerSetting` field in `SetCookingParameters` accordingly.
62+
- [closureDimension]: `ClosurePanel` and `Closure.addPanel()` now require a `dimensionType` (`'lift'`, `'tilt'` or `'modulation'`) and enable the matching Translation/Rotation/Modulation feature, as required by the `[PS].b` conformance rule when Positioning is supported.
63+
- [thermostat]: Remove the workaround that stripped the `AtomicRequest`/`AtomicResponse` commands from `acceptedCommandList`/`generatedCommandList` on `MatterbridgeThermostatServer`; matter.js now handles the atomic-write commands correctly.
64+
- [data-model]: Fix missed namspaces.
65+
66+
<a href="https://www.buymeacoffee.com/luligugithub"><img src="https://matterbridge.io/assets/bmc-button.svg" alt="Buy me a coffee" width="80"></a>
67+
3268
## [3.10.4] - 2026-08-07
3369

3470
### Development changes
@@ -3996,34 +4032,3 @@ A special thank to Tamer Salah (https://github.com/tammeryousef1006) for his hel
39964032
### Removed
39974033

39984034
- [event]: Removed all event code.
3999-
4000-
<!-- Commented out section
4001-
## [1.1.2] - 2024-03-08
4002-
4003-
### Added
4004-
4005-
- [Feature 1]: Description of the feature.
4006-
- [Feature 2]: Description of the feature.
4007-
4008-
### Changed
4009-
4010-
- [Feature 3]: Description of the change.
4011-
- [Feature 4]: Description of the change.
4012-
4013-
### Deprecated
4014-
4015-
- [Feature 5]: Description of the deprecation.
4016-
4017-
### Removed
4018-
4019-
- [Feature 6]: Description of the removal.
4020-
4021-
### Fixed
4022-
4023-
- [Bug 1]: Description of the bug fix.
4024-
- [Bug 2]: Description of the bug fix.
4025-
4026-
### Security
4027-
4028-
- [Security 1]: Description of the security improvement.
4029-
-->

apps/frontend/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@matterbridge/frontend",
3-
"version": "3.5.6",
3+
"version": "3.5.7",
44
"description": "Matterbridge frontend application",
55
"author": "https://github.com/Luligu",
66
"license": "Apache-2.0",

0 commit comments

Comments
 (0)