• v0.4.0 27f9269a37

    v0.4.0 Stable

    franz released this 2026-09-05 06:43:11 +00:00 | 20 commits to master since this release

    Signed by franz
    GPG key ID: 1B3418BA53820C4C

    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 integrations table, 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.59s and 484ms instead 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 N requires an explicit "select all N matching this filter" step
    • xhr and fetch breadcrumbs read GET 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

    Builds, checksums and packages: https://github.com/franzos/stackpit/releases/tag/v0.4.0

    Downloads