Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.19.1"
".": "0.20.0"
}
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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)


Expand Down