v0.4.0
Breaking
- Existing issue-tracker configuration stops working. A tracker no longer stores an owner/repo (or a GitLab project id) of its own; which repository it files into now comes from the project's repositories, under Project settings → Repositories. Old targets and per-project tracker overrides are not migrated and are no longer read, so issue filing stops until each project has a repository whose URL matches the tracker's forge and host. Set the repository once and it serves both source links and issue filing.
- The SQLite migration rebuilds the
integrationstable, which every install has. It brings SQLite in line with PostgreSQL (UNIQUE(org_id, name)plus the missing organisation foreign key) and adds the org-wide routing flag. Back up your database before upgrading. - Slack, webhook and issue-tracker integrations now require a commercial license. Existing installs without one keep their configuration and credentials, but delivery through those channels stops on upgrade; each refusal is logged rather than dropped silently. Email alerting — new issues, regressions, thresholds and digests — stays free and is unaffected. A lapsed license keeps delivering for a 30-day grace window and only blocks adding, editing, enabling or testing an integration. Nothing is ever deleted, and everything resumes on renewal. See
docs/commercial/integrations.md.
Taken together, a free install upgrading through this release loses Slack, webhook and tracker integrations and has to reconfigure any tracker it was using.
Added
- Integrations can deliver to every project in the organisation, with a per-project exclusion list
- Each integration has a page showing where it delivers, where it is customised and where it is excluded
- Email integrations carry a default recipient, used where a project has not set its own
- Failed notifications are queued and retried for 24 hours, then wait on Settings → Delivery queue to be replayed or discarded
- Trackers file into any of the project's repositories, and ask when more than one matches
- Repositories take a forge-type override, for self-hosted instances the hostname can't identify
- Filed issue links survive deleting their integration, and can be unlinked individually
- Issue stream: filter by environment (also in the JSON API and MCP)
- Transaction summary: span breakdown, related issues, and a percentile trend with regression markers
- Replay list: duration, URL, user, browser/OS and error count
- Traces table now pages past its first 25 rows
- Stack traces: runs of library frames collapse behind one control, plus an in-app-only filter, order toggle and per-frame copy
- Breadcrumbs: bounded scroll area and a category filter
Changed
- A repository can carry a stack-path prefix, so a multi-repo project links each frame to the right repository. Once any repository in a project has a prefix, only prefix matching applies and repositories without one stop producing source links.
- Self-hosted GitHub, Gitea and Forgejo hostnames are detected, repairing source links that were silently missing
- Durations read
1.59sand484msinstead of raw milliseconds - Every list page offers the same eight time ranges
- Sidebar, heading and breadcrumb agree on each page's name; the core sections show on every project
- Sortable columns now look sortable, and the active one is marked
Delete all Nrequires an explicit "select all N matching this filter" stepxhrandfetchbreadcrumbs readGET https://… [200]instead of showing an empty message
Fixed
- A multi-byte character in an event, trace or span id crashed the page it appeared on; ids are now validated at ingest
- The "All events" and "All releases" pages were empty for users whose active organisation owns no projects
- Trace waterfall drew the root span full-width regardless of its duration, and the header undercounted spans
- Issue-stream chart labelled its most recent bucket with the previous day
/web/projects/{id}/issues/returned 404 instead of opening the issue stream- Long tag values ran underneath their count badge
- Issues sharing an exception type were indistinguishable in the list
Container images: ghcr.io/franzos/stackpit:0.4.0 (SQLite), ghcr.io/franzos/stackpit:0.4.0-postgres (PostgreSQL)
Verify a download:
sha256sum -c stackpit-x86_64-unknown-linux-gnu.tar.gz.sha256Install steps: README
Changes since v0.3.27: compare