FeaturesPricingFAQBlogStatus Docs
Log in Start monitoring free
← All posts

August 2026: triage on every issue, and SDKs that tell you when they're broken

August 20, 2026 · booboo.dev
announcementschangelogsdk

It’s been a quiet blog and a busy repo. Here’s what changed since May, roughly in the order you’ll notice it.

AI triage on every new issue

Every booboo.dev plan has always said “AI triage included”. Until now that meant the first handful of issues an organisation ever had; after that it was a button.

As of this week every new issue gets triaged automatically, on every plan, within a monthly allowance that is generous for what it is:

PlanAuto-triaged new issues / month
Free25
Starter250
Team1,000

Noise (scanner traffic hitting /wp-admin, bots probing for .env) is pre-classified and skipped, so the allowance goes to errors that are actually yours. The manual Generate triage button stays unlimited. What you get is a written summary, a confidence badge, ranked likely causes, suggested steps, and the evidence from the event that backs them up:

AI triage on an AttributeError: summary, confidence, and three ranked likely causes

SDKs: Python 0.16, JavaScript 0.9

Both SDKs shipped two releases this month. The theme: an error tracker should tell you when it is broken.

  • Delivery failures are logged. A rejected event — wrong DSN (403), quota exhausted (429), payload too large — or an unreachable endpoint used to fail silently. It now logs a warning (logger.warning on the booboo logger in Python, console.warn in the browser) with the server’s reason, rate-limited to once a minute per cause so a misconfigured install doesn’t flood your logs. debug=True / { debug: true } logs every send.
  • Install handshake. init() now sends a tiny ping, so your project shows as connected in the dashboard before the first error ever happens. It isn’t an event: it never counts toward your quota and your before_send hook never sees it. Opt out with BOOBOO_HANDSHAKE=0 or init({ handshake: false }).
  • Flask: HTTP errors stay HTTP errors. The auto-installed handler used to re-raise everything but NotFound, which turned abort(403) and 405s into 500s. Werkzeug HTTPExceptions are now returned as-is (5xx ones are still reported).
  • release tagging on both SDKs — pass a git SHA and issues know which release introduced them; the JS SDK uses it to match uploaded source maps.
pip install -U booboo-sdk      # 0.16.0
npm install @booboo.dev/js@latest   # 0.9.0

Sharper grouping

Fingerprints now hash the innermost stack frames, preferring your own (in_app) frames when the SDK marked them. Previously the outermost five frames were used — which for a Django or Flask app are the WSGI server and framework dispatcher, identical for every error, so unrelated bugs could end up grouped under one issue per exception type. Existing issues regroup as new events arrive; nothing is deleted.

Setup that tells you what’s happening

A handful of Quickstart changes, all aimed at the minute between “I pasted the snippet” and “I see my first issue”:

  • Named rejections. If events arrive but get rejected, the Quickstart says why — unrecognised DSN, origin not allowed, payload too large — instead of a generic “check your configuration”. An unrecognised DSN is now recorded too, even when we can’t tell which project it belongs to.
  • “Event received”. When your first event is in the database but still being grouped, the page says so, rather than “listening”.
  • “SDK connected”. The handshake above, surfaced.
  • “Email me this.” Signed up on your phone? One tap mails you the quickstart link, your DSN and the install snippet for the platform you picked, to finish at a keyboard.
  • Blank exception messages (raise ValueError()) are accepted; the issue is titled by exception type.

Metric checks and the Board

Two larger features landed over the summer and never got a post of their own — they get one now: Metric checks and the Board. The short version: point a monitor at any endpoint that returns a small JSON shape and booboo.dev charts the gauges next to your errors; the Board is a shared per-organisation dashboard built from those and your error data.

Smaller things

  • The status page now probes the public ingest hostname from the outside, the same way your SDK reaches it, instead of trusting in-process checks alone.
  • Lifecycle emails (tips, check-ins) carry a one-click unsubscribe link and come from a person you can reply to. Transactional mail is unchanged.
  • Email addresses are case-insensitive everywhere. If you ever signed up as Tom@ and couldn’t log in as tom@, that’s fixed.
  • The per-IP ingest rate limit no longer lumps every app behind the same Cloudflare edge into one bucket.

As always: the free plan is 5,000 events a month with all of the above, no card required. If something in this list doesn’t behave the way it’s described, reply to any of our emails — a person reads them.