Changelog
Keep track of latest features, stability fixes, and visual comparison upgrades built for the RegressionBot SaaS platform.
v2.7.0 — Scheduled Checks at a Set UTC Hour
A schedule used to say only how often. Now it can say when:
scheduleHourUtc. A whole number from0to23that pins adailyorweeklyproject to that UTC hour —3means 03:00 UTC. Without it the slot still anchors to whenever the first sweep picked the project up, which is unchanged behaviour for every existing schedule. The first run waits for the hour too. On the REST API, in project config, and throughupdate_project. See Scheduled Checks.- Hours, and UTC. The sweep that starts scheduled runs is itself hourly, so there is no minute setting rather than one that quietly rounds. RegressionBot has no timezone setting anywhere, so there is no local time to convert from — the hour is UTC and says so in its name.
- Rejected where it would mislead. An hour on an
hourlyschedule is an error, not a silent no-op: accepted quietly it reads as "runs once a day at that hour" to whoever set it. Clearing the schedule clears the hour with it.
One behaviour worth knowing: a pinned hour does not catch up. If a run cannot start at its hour, the project waits for the next one rather than running late — where an unpinned schedule would have been picked up by the following sweep.
v2.6.0 — Scheduled Checks & Alerting
A project can now watch itself, and tell you when it stops being able to:
- Scheduled checks.
schedule(hourly,daily,weekly) withbaselinePolicy: "rolling"runs a project unattended — catching changes no deploy caused, like a third-party script updating itself or an edit in your CMS. Available on the REST API, in project config, and through theupdate_projectMCP tool. See Scheduled Checks. - Alerts when a check cannot check. Owners were already emailed when a scheduled run found changes. They are now also emailed when a run stops outright, finishes without capturing a single page, or never starts at all — the cases where silence and a healthy site look identical.
- Baseline invalidation is scoped to what it should always have been scoped to. Updating a project used to discard every baseline regardless of what changed, so turning on a schedule cost a full re-prime. Only changes that alter what a capture looks like — origin, sitemap, paths, scans, devices, masks,
customCss, gate credentials — invalidate now. Schedule, baseline policy, concurrency and AI options leave baselines intact, and re-sending an identical value is not a change. list_projectsanswers the question people actually ask. It now returns schedule and baseline state per project, includingnextRunComparesAgainstBaseline— whether a run right now would detect regressions or capture baselines.
Also in this release: the dashboard's Review tab became Jobs at /admin/jobs, where any job id from an API response can be opened directly, and alert emails now link to the run rather than to the dashboard root.
v2.5.0 — Sticky Element Handling & Custom CSS
Cleaner full-page screenshots, plus a new escape hatch for dynamic content:
- Automatic sticky/fixed element handling. Before each full-page screenshot, RegressionBot now un-sticks
position: fixedandposition: stickyelements (headers, navs, cookie bars) so they render once at their at-rest position instead of floating over — or repeating down — the page. This is automatic; there is no flag to enable. customCss— inject arbitrary CSS into the page right before capture, e.g.#chat-widget { display: none !important; }to fully remove a dynamic widget (and reflow the layout, unlike masks, which only blank the region). Because it is applied last,customCsscan also override the automatic un-sticking for a specific element. Capped at 4096 characters.
customCss is available on the REST API (POST /run, POST /project/{name}/run), in project configuration (create / update), and via the run_regression_job and update_project MCP tools.
Heads up: one-time re-baseline for existing projects
Because sticky/fixed handling is now automatic, the next run of an existing managed project re-captures elements that were previously recorded “stuck” in your baselines. Pages with sticky headers, navs, or cookie bars may show a one-time wave of diffs — simply approve the affected pages to update your baselines. If a specific element renders wrong under the new handling, use customCss to reposition or hide it. Live-vs-live comparisons are unaffected, since both sides are captured the same way.
v2.1.0 — Summary Status Lifecycles
Introduced formal summaryStatus lifecycles for visual regression results. This update splits the core test completion from the AI summary generation. Teams and AI agents can now download screenshots and view pixel diff metrics immediately upon test completion, and poll summaryStatus === 'COMPLETE' to retrieve visual summaries, eliminating empty or incomplete visual description states in slow AI summarization cycles.
v2.0.0 — AI Summaries & MCP
This release introduced two major customer-facing capabilities for faster review and approval workflows:
AI-Powered Regression Summaries
Every detected regression now includes a plain-English summary (regressionbotSummary) so teams can quickly understand what changed before deciding to approve or investigate.
Remote Streamable HTTP Model Context Protocol (MCP) Server
Connect RegressionBot directly to agentic IDE sessions. Assistants can now run comparisons, check job status, review summaries, and approve baselines directly from the editor or terminal.
v1.2.0 — Better Visual Scoring
Improved scoring to better reflect real visual change severity. The comparison engine now reduces rendering-noise false positives (like antialiasing shifts), making pass/fail review decisions more reliable.
v1.0.0 — Commercial Launch
Official production release of RegressionBot SaaS. Multi-tenant visual regression capture, sitemap-based parallel testing, dashboard baseline management, and API-key authentication are all live.