saffron-ai 0.9.8 → 0.9.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,68 @@ the VS Code extension (`ChathurangaJayasinghe.saffron-vscode`) and the
5
5
  JetBrains plugin (`ai.saffron.jetbrains`). Dates are publish dates. Each
6
6
  release heading names its main feature: `## <version>: <title>`.
7
7
 
8
+ ## 0.9.9: A browser matrix in one run
9
+
10
+ Released 2026-10-06.
11
+
12
+ Runner
13
+
14
+ - **A browser matrix in one run.** `saffron run --browser
15
+ chromium,firefox,webkit` (or a list in `browser`) runs the suite in each
16
+ browser, one after another, into one report: a row per scenario per
17
+ browser, in the terminal, the report, the history and the dashboard.
18
+ Chromium-family browsers go first, so Firefox and WebKit replay what
19
+ they recorded. Every browser starts before anything runs. Screenshots
20
+ and traces are kept per browser, and `saffron trace` names them
21
+ `feature:scenario@browser`. The dashboard stands a scenario at its
22
+ worst browser and never calls a difference between browsers flaky.
23
+ Refused with `--shard`. Every result now names its browser, so running
24
+ one browser again replaces that browser's rows and keeps the others'.
25
+ `saffron status --json` (and the MCP `project_status` tool) names the
26
+ browser of each row that needs attention.
27
+ - **Device and viewport profiles.** `--device "iPhone 15"` (config
28
+ `device`) runs every scenario under a Playwright device profile,
29
+ recordings and heals included; `--viewport 1280x720` (config `viewport`)
30
+ sets the size alone. An unknown device names the closest ones, and a
31
+ mobile profile in Firefox stops the run up front.
32
+ - **Parallel recording and healing.** `--agent-workers N` (config
33
+ `agentWorkers`, default 1) lets up to N agent sessions run at once,
34
+ each in a browser of its own. An outline's rows stay together on one
35
+ worker. Each session is paid for: raise it deliberately.
36
+ - **Shards know their browser.** A shard records the browser it ran in;
37
+ `saffron report --merge` refuses shards of different browsers, a
38
+ re-run attempt replaces only its own browser's shard, and each
39
+ browser's merge keeps its own history line.
40
+ - **A bad storage state stops the run first.** A `storageState` file that
41
+ is missing, unreadable or not JSON now stops the run at startup, exit 2,
42
+ before `--rerecord` deletes any recording.
43
+ - **No second replay without an agent.** With `--workers` and
44
+ `--no-agent`, or in Firefox and WebKit, a scenario that went red in the
45
+ parallel phase is no longer run again afterwards: nothing could change
46
+ its result.
47
+ - **Per-worker timing.** The report has a timing panel (each worker's
48
+ runs, busy time and share, and the five slowest scenarios), and the
49
+ terminal prints each worker's share and the three slowest scenarios.
50
+ Merged shards list each machine's workers.
51
+ - **Saffron's own data in the replay.** Each step shows the tabs it
52
+ opened or switched to and the response each network check matched,
53
+ and the Saffron pane shows what the agent cost for the scenario. The
54
+ report's steps carry `tabs` and `responses` for tools.
55
+ - **Browsers in the editors' contracts.** `saffron status --json` and
56
+ `saffron report --run <id> --json` give each row its `browser`, and the
57
+ run's `browsers` when its rows span several.
58
+
59
+ VS Code extension 0.6.2
60
+
61
+ - After a browser-matrix run, Last Run and a CI run's results label each
62
+ row with its browser, and Open Replay and Open Trace open that
63
+ browser's execution alone (`feature:scenario@browser`).
64
+
65
+ JetBrains plugin 0.6.2
66
+
67
+ - The same in the Last Run and CI Runs tabs: rows say their browser, and
68
+ the replay opens that browser's execution alone.
69
+
8
70
  ## 0.9.8: Run one scenario, from the editor too
9
71
 
10
72
  Released 2026-10-06.
package/README.md CHANGED
@@ -73,7 +73,7 @@ node dist/cli/index.js -p examples accept --all
73
73
 
74
74
  | Command | What it does |
75
75
  |---|---|
76
- | `saffron run [paths] [--headed] [--filter expr] [--rerecord] [--no-agent] [--strict] [--browser b] [--no-hooks] [--workers n] [--heal-model m] [--no-verify] [--no-reuse] [--model m] [--storage-state f] [--trace mode]` | Run features. Cached replays are deterministic; misses/failures escalate to the agent (unless `--no-agent`). A path with a line or a name, `features/login.saffron:12` or `"features/login.saffron:Successful login"`, runs that one scenario. Replay cross-browser with `--browser firefox\|webkit`, parallelize with `--workers N`, heal on a cheaper model with `--heal-model`, keep an execution trace with `--trace retain-on-failure`. Exit 1 on red (and on yellow with `--strict`). |
76
+ | `saffron run [paths] [--headed] [--filter expr] [--rerecord] [--no-agent] [--strict] [--browser b[,b...]] [--device name] [--viewport WxH] [--no-hooks] [--workers n] [--agent-workers n] [--heal-model m] [--no-verify] [--no-reuse] [--model m] [--storage-state f] [--trace mode]` | Run features. Cached replays are deterministic; misses/failures escalate to the agent (unless `--no-agent`). A path with a line or a name, `features/login.saffron:12` or `"features/login.saffron:Successful login"`, runs that one scenario. Replay cross-browser with `--browser firefox\|webkit`, parallelize with `--workers N`, heal on a cheaper model with `--heal-model`, keep an execution trace with `--trace retain-on-failure`. Exit 1 on red (and on yellow with `--strict`). |
77
77
  | `saffron accept [files... \| --all] [--include-unverified] [--include-imported] [--with-feature-edit] [--propagate]` | Promote cache proposals to committed caches (`--all` skips UNVERIFIED ones unless `--include-unverified`, and ones imported from a CI run unless `--include-imported`); `--with-feature-edit` also rewrites the adapted steps in the `.feature` file (and keeps the cache in sync); `--propagate` applies the heal's locator fixes to every other cache using the same locator. One heal repairs N scenarios before they ever fail. No args: list pending proposals. |
78
78
  | `saffron reject [files... \| --all]` | Discard proposals; the agent will try again next run. |
79
79
  | `saffron export [-o file] [--branch name]` / `saffron runs` / `saffron import <bundles...> \| --run <id>` | Carry a CI heal to your machine: export packs the run's proposals, report, screenshots and traces into one bundle for CI to upload; `runs` lists the branch's CI runs (GitHub Actions or Azure Pipelines); import (of a file, or of a run with `--run`) checks the bundle against your checkout (repository, each proposal's binding) and files it there, ready for `saffron diff` and `saffron accept`. `--branch` also has CI commit the proposals to a new branch and open a draft pull request with their diffs. |
@@ -155,7 +155,7 @@ milestones, statuses and decision gates, and everything shipped so far in
155
155
  its "Where we are" table.
156
156
  Headlines ahead: API testing (reusable REST operations, fixtures and schema
157
157
  validation), scenarios with two users in two browsers, a configurable
158
- features folder, parallel recording and a browser matrix in one run, failure video,
158
+ features folder, failure video,
159
159
  agent-blind secrets, LLM-less MCP replay, the Level-2 shared step library
160
160
  (gated on Level-1 divergence data), and the long-term open-core SaaS layer.
161
161