fix: allow beta gateway refresh for same release config

This commit is contained in:
Peter Steinberger
2026-05-02 23:52:08 +01:00
parent e857c795a8
commit 550d6f5c43
4 changed files with 24 additions and 4 deletions

View File

@@ -14,6 +14,7 @@ Docs: https://docs.openclaw.ai
### Fixes
- Gateway: keep directly requested plugin tools invokable under restrictive tool profiles while preserving explicit deny lists and the HTTP safety deny list, preventing catalog/invoke mismatches that surface as "Tool not available". Thanks @BunsDev.
- Gateway/update: allow beta binaries to refresh gateway services when the config was last written by the matching stable release version, avoiding false newer-config downgrade blocks during beta channel updates.
- Channels: keep Matrix and Mattermost bundled in the core package instead of advertising external npm installs before those channels are cut over. Thanks @vincentkoc.
- Bonjour: disable LAN mDNS advertising after a repeated stuck-announcing recovery instead of repeatedly restarting ciao and saturating the Gateway event loop.
- CLI/plugins: stop treating the non-plugin `auth` command root as a bundled plugin id, so restrictive `plugins.allow` configs no longer tell users to add stale `auth` plugin entries.

View File

@@ -51,6 +51,17 @@ describe("resolveFutureConfigActionBlock", () => {
).toBeNull();
});
it("allows beta binaries to refresh services written by the same stable release", () => {
expect(
resolveFutureConfigActionBlock({
action: "install or rewrite the gateway service",
currentVersion: "2026.5.2-beta.3",
snapshot: snapshotWithTouchedVersion("2026.5.2"),
env: {},
}),
).toBeNull();
});
it("allows intentional downgrade override through env", () => {
expect(
resolveFutureConfigActionBlock({

View File

@@ -77,12 +77,19 @@ describe("shouldWarnOnTouchedVersion", () => {
expect(shouldWarnOnTouchedVersion("2026.3.23-beta.1", "2026.3.23-1")).toBe(false);
});
it("skips same-base stable configs when current is a beta", () => {
expect(shouldWarnOnTouchedVersion("2026.5.2-beta.3", "2026.5.2")).toBe(false);
});
it("skips same-base prerelease configs when current is newer", () => {
expect(shouldWarnOnTouchedVersion("2026.3.23", "2026.3.23-beta.1")).toBe(false);
});
it("still warns when the touched prerelease is newer", () => {
expect(shouldWarnOnTouchedVersion("2026.5.2-beta.2", "2026.5.2-beta.3")).toBe(true);
});
it("warns when the touched config is newer", () => {
expect(shouldWarnOnTouchedVersion("2026.3.23-beta.1", "2026.3.23")).toBe(true);
expect(shouldWarnOnTouchedVersion("2026.3.23", "2026.3.24")).toBe(true);
expect(shouldWarnOnTouchedVersion("2026.3.23", "2027.1.1")).toBe(true);
});

View File

@@ -111,10 +111,11 @@ export function shouldWarnOnTouchedVersion(
parsedTouched &&
parsedCurrent.major === parsedTouched.major &&
parsedCurrent.minor === parsedTouched.minor &&
parsedCurrent.patch === parsedTouched.patch &&
parsedTouched.revision != null
parsedCurrent.patch === parsedTouched.patch
) {
return false;
if (!parsedTouched.prerelease?.length) {
return false;
}
}
if (isSameOpenClawStableFamily(current, touched)) {
return false;