This patch release stops the web terminal from closing on a paste of colored output, makes the server finish its shutdown on SIGTERM, and throttles password reset requests in Cloud and Enterprise.
Pasting colored output keeps the web terminal open
Pasting text full of ANSI color codes into the web terminal closed the session. JSON encodes each ESC character in 6 bytes, and the server sized its read limit for 4 bytes per character, so a large paste was cut mid-message and failed to decode. The read limit now accounts for the escapes. The 4096-character input cap is unchanged (#7954).
The server shuts down cleanly on SIGTERM
On SIGTERM the server exited with status 1 while its shutdown was still running, so pending work was dropped. It now finishes the shutdown and exits with 0. A second signal still kills it at once. Thanks to @jay23606, who found the bug and wrote the first fix (#7947).
The agent had the same problem while waiting for pairing: when the server was unreachable, a stop went unnoticed until Docker or systemd sent SIGKILL. It now stops right away and exits with 0 (#7929).
Password reset requests are throttled (Cloud and Enterprise)
Behavior change:
POST /api/user/recover_passwordnow answers200for an unknown account instead of404, and429when the same identifier asks again within a minute.
Anyone could request a reset for any account in a loop, flooding the inbox and invalidating every earlier link. The endpoint now accepts one request per identifier per minute, and the response no longer reveals whether an account exists (#7953).
Device search and tags combine correctly
The filter API gains a group node, which evaluates its conditions as one bracketed expression, so a filter can say "name or custom field contains web, and the tag is prod". Filters without groups keep their meaning. The console uses it in two places: the device search with tags selected, and the admin user search, which now matches name, username and email within a subset instead of username only (#7937).
Also in this release
Fixes
- Editing a provisioning key can no longer undo a revoke made at the same time (#7951)
- The dashboard waits for the namespaces to load instead of flashing the regular view before the first-run screen (#7932)
- Counts in the console follow the reader's locale (#7955)
Internal
- Device rows are always read and written within a namespace scope, and each typed handler names its caller kind (#7925, #7930, #7952)
- Console cleanup: duplicated and unused code removed (#7955)
- CI and test suite: integration tests sharded across runners, one Postgres per test package, parallel console e2e editions, fewer fixed waits (#7932, #7934, #7935, #7936, #7938, #7939, #7940, #7941, #7948)
- Dependency updates: @redocly/cli, static-web-server (#7931, #7933, #7942)
Full Changelog: v0.30.3...v0.30.4