diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 0043b220..2b114496 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.26.1"
+ ".": "0.27.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c59ad50..d5cf5fcd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,61 @@
> Entries from 0.9.0 onward are generated by [release-please](https://github.com/googleapis/release-please). Earlier entries were backfilled from the [GitHub release notes](https://github.com/PiwiTests/platform/releases) when the project adopted it.
+## [0.27.0](https://github.com/PiwiTests/platform/compare/v0.26.1...v0.27.0) (2026-09-03)
+
+
+### Features
+
+* add companion tools card and improve streaming error messaging ([47e07e4](https://github.com/PiwiTests/platform/commit/47e07e4d71375b455e27b0f691de3ddb2fc62f41))
+* **ai:** feed clues to diagnosis and spend the auto-diagnose budget on the unclued ([b402cd1](https://github.com/PiwiTests/platform/commit/b402cd1693131b41f162ae4bcade6541a228ed56))
+* **app:** add a deterministic cluster title helper ([3ae8690](https://github.com/PiwiTests/platform/commit/3ae86903d454541e2bd325862c7a4a111563c1f1))
+* **app:** add the deterministic failure-clue engine ([d78ebfa](https://github.com/PiwiTests/platform/commit/d78ebfa08b89b18ca102897c43fafc81bd1fa3a7))
+* **app:** attribute each timeline action to the method it came from ([3816cd8](https://github.com/PiwiTests/platform/commit/3816cd82b7649ed135c8de83d61d9b24c4126ff3))
+* **app:** explain a failure in one line before the raw error ([8d1ca43](https://github.com/PiwiTests/platform/commit/8d1ca432ce68415db50a53c772c055d5b1baaf49))
+* **app:** explain a failure in one line before the raw error ([a7a6a60](https://github.com/PiwiTests/platform/commit/a7a6a60f9782f469bf32d8e9306785657ac4947d))
+* **app:** let a partial run verify a fix when it covers the whole cluster ([ed06fdf](https://github.com/PiwiTests/platform/commit/ed06fdf30268152c1a933308d9ee9755f0ac45b3))
+* **app:** load and serve deterministic clues per execution ([902d5b3](https://github.com/PiwiTests/platform/commit/902d5b3293a261e64c402c90557c4e41d3dfb9e5))
+* **app:** parse playwright errors into a structured record and a one-line headline ([3dfb5dd](https://github.com/PiwiTests/platform/commit/3dfb5dd9fc999483692d75db27a6366baa19eeac))
+* **app:** put a failing execution's evidence on one timeline ([775c503](https://github.com/PiwiTests/platform/commit/775c503b2be47c339046c5012a6ff07a84d9fad3))
+* **app:** put a failing execution's evidence on one timeline ([a3d56ca](https://github.com/PiwiTests/platform/commit/a3d56caf45545fe82ad3c4cc7651c1a872a1a7db))
+* **app:** re-run a cluster's affected tests in CI from its page ([4ae80a0](https://github.com/PiwiTests/platform/commit/4ae80a02e817da32f8d7c140c99d3283b21469ac))
+* **app:** report backend-log evidence on the setup ladder ([c141a44](https://github.com/PiwiTests/platform/commit/c141a44b2d349cee7f65f800114cb93388f78319))
+* **app:** resolve a run's execution from its file, title and retry ([cff8dfb](https://github.com/PiwiTests/platform/commit/cff8dfb4f188676d316d1cae902e64d0f913efa4))
+* **app:** screenshot any route and seed the dev DB in one command ([b123511](https://github.com/PiwiTests/platform/commit/b123511b62ac5b1f11996b4692eff990f20f1c12))
+* **app:** screenshot any route and seed the dev DB in one command ([65e8771](https://github.com/PiwiTests/platform/commit/65e8771f221e57d1ee3a82ea97e3f060076fc26f))
+* **app:** surface deterministic clues for every failure ([72a10a3](https://github.com/PiwiTests/platform/commit/72a10a3cb662c6dc82466a093d3235effc47116e))
+* **app:** verify fixes from partial runs, notify the fixer and re-run from the dashboard ([48a02f8](https://github.com/PiwiTests/platform/commit/48a02f8a9b83e3f31f24144c38adbaaca593e2dd))
+* **db:** keep network request start times ([4ea3ff3](https://github.com/PiwiTests/platform/commit/4ea3ff3d9f812b6b00ba8d79f58c075ca75474f9))
+* **notifications:** close the loop on fix verification ([5033f7e](https://github.com/PiwiTests/platform/commit/5033f7e8d7b94db21dbc2c9202d135ae8c9926aa))
+* **notifications:** tell the person who fixed a cluster ([846b314](https://github.com/PiwiTests/platform/commit/846b31420819cc1c9ab01620ccd9a5f8cb02144a))
+* **reporter:** print a dashboard link per failed test ([d6d1826](https://github.com/PiwiTests/platform/commit/d6d1826c0bfbd034139b9f594bb957023ca05e0a))
+* **reporter:** print a dashboard link per failed test ([83e2207](https://github.com/PiwiTests/platform/commit/83e22079ce9a1e3d087ae42ac327fb90160dbe44))
+* **reporter:** upload attachments that carry a body instead of a path ([8460daa](https://github.com/PiwiTests/platform/commit/8460daa066c4da168137b0fa95deb3a0f911ae05))
+* **ui:** link attempt chips to their sibling executions ([01f696d](https://github.com/PiwiTests/platform/commit/01f696dd18c43dd8b371cfcdc99335d4ea607db1))
+* **ui:** name clusters deterministically wherever the signature was the name ([b4b0b57](https://github.com/PiwiTests/platform/commit/b4b0b57602761b4e5c251d1eeb899a5527049446))
+* **ui:** point the app at companion tools where their job comes up ([f8514cb](https://github.com/PiwiTests/platform/commit/f8514cb8eae78d8dabf0e422033641e6f51630db))
+* **ui:** show the error line and cluster badge on failing tree-view rows ([e59297e](https://github.com/PiwiTests/platform/commit/e59297e6904c998140bcfe100a2cb9c5d263b2a5))
+* **ui:** surface deterministic clues on the diagnosis tab ([d80c4c2](https://github.com/PiwiTests/platform/commit/d80c4c217916344e65393f8a2f27afc9aa475d88))
+
+
+### Bug Fixes
+
+* **app:** gate healing on resolution failures and prefer same-environment baselines ([1f33ee7](https://github.com/PiwiTests/platform/commit/1f33ee7ebd66b6fcc472f0850f2f2cbb17c6e533))
+* **app:** gate locator healing on a resolution failure ([4aa928a](https://github.com/PiwiTests/platform/commit/4aa928a61c5a66ff299d829f153e41537fe2e712))
+* **app:** let a test timeout's pending action outrank the step title ([fcd43c5](https://github.com/PiwiTests/platform/commit/fcd43c52a462d7075d05be2e0c77a86ad694d2fe))
+* **app:** prefer same-environment, then same-branch baselines for the diffs ([4c68883](https://github.com/PiwiTests/platform/commit/4c68883af277d1277f661aba2d72214f341f96c1))
+* **notifications:** link alerts to the execution and quote the error head ([392a0d5](https://github.com/PiwiTests/platform/commit/392a0d5f2c3c637145f2988e8b574e393d8b12e5))
+* **reporter:** keep unsubmitted runs recoverable and surface delivery failures ([a1eba73](https://github.com/PiwiTests/platform/commit/a1eba73a7d2735a083e86576f5ce2a7767aa3b29))
+* **ui:** align the diagnosis rail breakpoint and gate jump chips on rendered sections ([cbc6558](https://github.com/PiwiTests/platform/commit/cbc65581641f4a108523657f38e08fe0e501bc11))
+* **ui:** fix the AI card copy, the missing-cluster state and the demo Share button ([67b37c4](https://github.com/PiwiTests/platform/commit/67b37c4c3f5aa2a12179e024dc226ede7be104d7))
+* **ui:** keep the detail tab strip a flex row so the tab help hint sits beside it ([c3b54b6](https://github.com/PiwiTests/platform/commit/c3b54b69d20246248cfb47a5da4fa807df556dfa))
+* **ui:** move the blocked-tests list off the pinned summary into the Diagnosis tab ([2e4430b](https://github.com/PiwiTests/platform/commit/2e4430baf7bdbbb6429fec0a611623d2773d853e))
+* **ui:** render error text with its ANSI colors instead of raw escape codes ([697dc41](https://github.com/PiwiTests/platform/commit/697dc418d8ca68cdb8ccad0e54abf90b4866e111))
+* **ui:** render the failing locator as code and label the environment diff sides ([0158b95](https://github.com/PiwiTests/platform/commit/0158b950b3d0553030dbf2ab958e43616689c742))
+* **ui:** stop the navbar repeating the breadcrumb and keep the trail readable ([753beaf](https://github.com/PiwiTests/platform/commit/753beafe1dd4af164d8e015921389793cdc6a3a8))
+* **ui:** surface failure evidence first on the execution page ([5703c39](https://github.com/PiwiTests/platform/commit/5703c3990cdc42670c916a93fac174be840f1516))
+* **ui:** surface failure evidence first on the execution page ([4a53bbd](https://github.com/PiwiTests/platform/commit/4a53bbd1fb1fc1851778c9d5de59f97f99141bdb))
+
## [0.26.1](https://github.com/PiwiTests/platform/compare/v0.26.0...v0.26.1) (2026-08-29)
diff --git a/apps/application/package.json b/apps/application/package.json
index 5f09431b..12e092c8 100644
--- a/apps/application/package.json
+++ b/apps/application/package.json
@@ -1,6 +1,6 @@
{
"name": "@piwitests/dashboard",
- "version": "0.26.1",
+ "version": "0.27.0",
"private": true,
"type": "module",
"imports": {
diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index 3df6c00b..24f902d5 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -1,6 +1,6 @@
{
"name": "@piwitests/desktop",
- "version": "0.26.1",
+ "version": "0.27.0",
"private": true,
"description": "Piwi Dashboard desktop application (Tauri) — bundles the server and runs it locally.",
"type": "module",
diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml
index ea076443..3c1a5fb7 100644
--- a/apps/desktop/src-tauri/Cargo.toml
+++ b/apps/desktop/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "piwi-desktop"
-version = "0.26.1" # x-release-please-version
+version = "0.27.0" # x-release-please-version
description = "Piwi Dashboard desktop app"
authors = ["piwitests"]
license = "MIT"
diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json
index c31dffa7..18bee44e 100644
--- a/apps/desktop/src-tauri/tauri.conf.json
+++ b/apps/desktop/src-tauri/tauri.conf.json
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Piwi Dashboard",
- "version": "0.26.1",
+ "version": "0.27.0",
"identifier": "io.piwitests.dashboard",
"build": {
"frontendDist": "../src"
diff --git a/apps/extension/manifest.json b/apps/extension/manifest.json
index 865025e0..cebfa25e 100644
--- a/apps/extension/manifest.json
+++ b/apps/extension/manifest.json
@@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "Piwi Picker",
"short_name": "Piwi Picker",
- "version": "0.26.1",
+ "version": "0.27.0",
"description": "Ranked, stable Playwright locators for any element on the page — scored the same way Piwi's dashboard scores them.",
"browser_specific_settings": {
"gecko": {
diff --git a/apps/extension/package.json b/apps/extension/package.json
index 0d76772e..26c81b14 100644
--- a/apps/extension/package.json
+++ b/apps/extension/package.json
@@ -1,6 +1,6 @@
{
"name": "@piwitests/extension",
- "version": "0.26.1",
+ "version": "0.27.0",
"description": "Piwi Picker — a browser extension for ranked, stable Playwright locators, picked from the live page",
"private": true,
"type": "module",
diff --git a/examples/playwright-fixtures/package.json b/examples/playwright-fixtures/package.json
index 4d1b0f95..1190ec46 100644
--- a/examples/playwright-fixtures/package.json
+++ b/examples/playwright-fixtures/package.json
@@ -11,8 +11,8 @@
"typecheck": "tsc --noEmit"
},
"devDependencies": {
- "@piwitests/instrumentation-nitro": "0.26.1",
- "@piwitests/reporter": "0.26.1",
+ "@piwitests/instrumentation-nitro": "0.27.0",
+ "@piwitests/reporter": "0.27.0",
"@playwright/test": "^1.56.1",
"consola": "^3.4.2",
"h3": "^1.15.11",
diff --git a/integrations/aspnetcore/PiwiTests.Instrumentation.AspNetCore/PiwiTests.Instrumentation.AspNetCore.csproj b/integrations/aspnetcore/PiwiTests.Instrumentation.AspNetCore/PiwiTests.Instrumentation.AspNetCore.csproj
index 8f09cc14..3983eb75 100644
--- a/integrations/aspnetcore/PiwiTests.Instrumentation.AspNetCore/PiwiTests.Instrumentation.AspNetCore.csproj
+++ b/integrations/aspnetcore/PiwiTests.Instrumentation.AspNetCore/PiwiTests.Instrumentation.AspNetCore.csproj
@@ -4,7 +4,7 @@
enable
12
PiwiTests.Instrumentation.AspNetCore
- 0.26.1
+ 0.27.0
ASP.NET Core integration for Piwi Dashboard — captures backend logs per HTTP request for Playwright test visibility
piwitests
https://github.com/PiwiTests/platform
diff --git a/integrations/nitro/package.json b/integrations/nitro/package.json
index 6f75201f..95e46408 100644
--- a/integrations/nitro/package.json
+++ b/integrations/nitro/package.json
@@ -1,6 +1,6 @@
{
"name": "@piwitests/instrumentation-nitro",
- "version": "0.26.1",
+ "version": "0.27.0",
"description": "Nitro/Nuxt server plugin for sending backend logs to Piwi Dashboard via the X-Piwi-Logs response header",
"homepage": "https://piwitests.dev",
"repository": {
diff --git a/package-lock.json b/package-lock.json
index 2d4d2bf9..b312d39f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,11 +1,11 @@
{
"name": "platform",
- "version": "0.26.1",
+ "version": "0.27.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "version": "0.26.1",
+ "version": "0.27.0",
"workspaces": [
"packages/core",
"packages/picker-dom",
diff --git a/package.json b/package.json
index ec5161b0..6f618c4c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"private": true,
- "version": "0.26.1",
+ "version": "0.27.0",
"type": "module",
"workspaces": [
"packages/core",
diff --git a/packages/core/package.json b/packages/core/package.json
index e085cf6c..2ca93650 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@piwitests/core",
- "version": "0.26.1",
+ "version": "0.27.0",
"description": "Pure cross-cutting logic and wire shapes shared by the Piwi Dashboard app and the Playwright reporter",
"private": true,
"type": "module",
diff --git a/packages/picker-dom/package.json b/packages/picker-dom/package.json
index a231af46..d9354313 100644
--- a/packages/picker-dom/package.json
+++ b/packages/picker-dom/package.json
@@ -1,6 +1,6 @@
{
"name": "@piwitests/picker-dom",
- "version": "0.26.1",
+ "version": "0.27.0",
"description": "Shared DOM element-picker overlay — probing, hover/highlight, anchor scoping and locator syntax highlighting shared by the reporter's live picker and the dashboard's snapshot picker",
"private": true,
"type": "module",
diff --git a/packages/reporter/package.json b/packages/reporter/package.json
index f4d8a6b9..91bb0d46 100644
--- a/packages/reporter/package.json
+++ b/packages/reporter/package.json
@@ -1,6 +1,6 @@
{
"name": "@piwitests/reporter",
- "version": "0.26.1",
+ "version": "0.27.0",
"description": "Playwright reporter that streams results, traces and HTML reports to a Piwi Dashboard instance",
"url": "https://github.com/PiwiTests/platform",
"homepage": "https://piwitests.dev",
diff --git a/packages/server/package.json b/packages/server/package.json
index 88153cbe..61b0f01b 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -1,6 +1,6 @@
{
"name": "@piwitests/server",
- "version": "0.26.1",
+ "version": "0.27.0",
"description": "Self-hosted dashboard that keeps and explains your Playwright test results — run with npx @piwitests/server",
"type": "module",
"bin": {