diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 4a403c7df..71e95baf4 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.19.1" + ".": "0.20.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 08c217dbe..db745d66c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # Changelog +## [0.20.0](https://github.com/fclairamb/solidping/compare/v0.19.1...v0.20.0) (2026-08-29) + + +### Features + +* **onboarding:** a getting-started checklist on the org dashboard, appearing once the first check exists. Every step is derived from real resources rather than a stored per-step flag, so it cannot drift out of sync with what the org has actually configured, and it self-dismisses with an "all set" state instead of squatting on a fully configured dashboard. It replaces the one-shot first-result banner, whose dismissal lived in `localStorage` and so was lost on another device: dismissal now persists server-side per user per org, and can be re-enabled from the account page ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **alerting:** a newly created org is no longer silent by default. It is seeded with an enabled default email integration addressed to its owner — which the existing default-integration auto-attach then wires onto every check the org creates — and an org-wide weekly uptime report. Seeding is best-effort and never fails signup; existing orgs are untouched, and the bootstrap and test orgs are deliberately excluded ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **status pages:** publishing a check now takes one step instead of three. The check detail page offers "Publish on a status page", which opens the create form prefilled with that check; creation accepts an initial set of checks and always lays down a default "Services" section, so a new page is no longer born empty. Page, section and resources are written in a single transaction, so a rejected request leaves nothing behind ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **checks:** JSONPath assertions are editable in the dashboard. The editor existed but had never been wired into the HTTP form, so assertions could only be managed through the API — and, worse, saving the check from the form silently discarded them. Failed assertions now also surface on the check detail page ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **incidents:** unacknowledgement is announced to the same reach as the original alert, and escalation resumes from the rung it was paused at rather than restarting or silently stopping ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **sftp:** keyboard-interactive authentication, so servers that decline plain password auth can still be checked ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **reports:** uptime report emails link straight to the check and SLO they describe ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **api:** per-user UI state endpoints (`/api/v1/me/ui-state/:key`), scoped to the authenticated user with an allowlisted key shape and a size cap, so a per-user preference no longer has to live in browser storage ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) + + +### Bug Fixes + +* **auth:** registering or accepting an invite with a too-short password answers `400 VALIDATION_ERROR` instead of `500 INTERNAL_ERROR`. A user typo was being reported as a server fault, paging Sentry each time. A sweep of the sibling error helpers found three further unmapped sentinels falling through to the same generic 500 ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **checks:** `/checks/validate` no longer answers `valid: true` for a payload that `POST /checks` then rejects. The two endpoints decoded into unrelated structs, so validate never even saw fields the create path refuses — including `internal`, the one field guarding the quota exemption. Request-level validation is now a single shared routine both paths run, with create's status codes, field names and messages unchanged ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **dash0:** uploading an organization logo no longer blocks the settings form. The upload returns a relative storage path, which landed in a `type="url"` input and tripped native validation — so after uploading a logo the owner could not save a name or slug change at all. Uploaded file and external URL are now distinct, explicitly labelled sources ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **dash0:** an in-flight organization name or slug edit is no longer reverted by the profile refresh that follows a save, which had been silently discarding whatever the user typed in the interval ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **dash0:** the command palette finds an entity created moments ago. Its entity search shared a cache key with other screens under the app's default staleness window, so a status page, SLO or escalation policy created in the last minute could stay invisible to search even though it already existed ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **dash0:** the maintenance-window edit form waits for its check associations before mounting. A window's fields and its checks load as two independent queries, and the form seeded its selection once at mount — so if the checks were still in flight the form opened empty and saving dropped the window's attached checks ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **dash0:** the checks, incidents, members, SLOs and integrations tables are usable on a phone, dropping columns by breakpoint and scrolling inside their own container instead of giving the page a horizontal scrollbar ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **dash0:** the incidents list shows the check's name rather than its slug, and the dashboard's issues banner links through to what it is reporting ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **dash0:** the response-time chart marks a failing sample distinctly instead of rendering it as an ordinary point, and the check multi-picker shows names instead of raw UUID chips ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **agents:** a re-enrolling system agent supersedes the row it replaces, so a redeployed worker no longer leaves a stale duplicate behind ([#282](https://github.com/fclairamb/solidping/issues/282)) ([289478e](https://github.com/fclairamb/solidping/commit/289478e7ee97a156a7747591bb6b94cdbac9a4c6)) +* **deps:** update go dependencies (non-major) ([#279](https://github.com/fclairamb/solidping/issues/279)) ([4cbcc29](https://github.com/fclairamb/solidping/commit/4cbcc29206ee201276f15f01b695b43c19bbf381), [#283](https://github.com/fclairamb/solidping/issues/283)) ([9709152](https://github.com/fclairamb/solidping/commit/970915284d9af2b905439e45f8ec5aa8818b03d1)) + ## [0.19.1](https://github.com/fclairamb/solidping/compare/v0.19.0...v0.19.1) (2026-08-28)