saffron-ai 0.9.3 → 0.9.4
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 +44 -0
- package/README.md +2 -1
- package/dist-pkg/cli.js +312 -200
- package/package.json +1 -1
- package/skills/saffron/SKILL.md +3 -1
- package/skills/saffron/references/config.md +33 -3
- package/skills/saffron/references/syntax.md +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,50 @@ 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.4: The suite's quality at a glance
|
|
9
|
+
|
|
10
|
+
Released 2026-10-04.
|
|
11
|
+
|
|
12
|
+
Runner
|
|
13
|
+
|
|
14
|
+
- **The agent skill knows the new features.** It shows tag expressions
|
|
15
|
+
in `--filter`, `saffron trace`, and a CI job that exports its heals as
|
|
16
|
+
a bundle (or a draft pull request) for `saffron runs` and `saffron
|
|
17
|
+
import --run`. The AGENTS.md / CLAUDE.md block `saffron init` writes
|
|
18
|
+
says how a CI heal arrives, and the `project_status` MCP tool says
|
|
19
|
+
which run an imported proposal came from. Run `npx saffron init` again
|
|
20
|
+
to update a project's copy.
|
|
21
|
+
- **`saffron dashboard`: the suite's quality at a glance.** A page in
|
|
22
|
+
the run report's design, read from `.saffron/history.jsonl`: tests,
|
|
23
|
+
the share passing (each scenario's latest result), failing scenarios
|
|
24
|
+
and for how many runs in a row, flaky ones (passed and failed by turns
|
|
25
|
+
over the last 20 runs), ones the agent healed again and again, never
|
|
26
|
+
run and left out of the last run, the slowest, pass rate and execution
|
|
27
|
+
time per run, and results per tag. It writes
|
|
28
|
+
`.saffron/reports/dashboard.html` and opens it; `--stdout` prints the
|
|
29
|
+
page for the IDE panels. The same numbers are in `saffron status
|
|
30
|
+
--json` as `quality`.
|
|
31
|
+
|
|
32
|
+
VS Code extension 0.5.0
|
|
33
|
+
|
|
34
|
+
- **The dashboard is the suite's quality page**, the one `saffron
|
|
35
|
+
dashboard` renders, instead of the run report. Click a scenario's
|
|
36
|
+
name to open it. Needs saffron-ai 0.9.4 or later.
|
|
37
|
+
- **Last run: Open Replay and Open Report in the title bar.** Open
|
|
38
|
+
Replay opens every scenario the run traced, so it works when
|
|
39
|
+
everything passed and no row is listed; Open Report opens the HTML
|
|
40
|
+
report in the browser.
|
|
41
|
+
|
|
42
|
+
JetBrains plugin 0.5.0
|
|
43
|
+
|
|
44
|
+
- **The Dashboard is the suite's quality page**, the same one as in VS
|
|
45
|
+
Code, instead of the embedded run report. Click a scenario's name to
|
|
46
|
+
open it. Needs saffron-ai 0.9.4 or later.
|
|
47
|
+
- **Last Run: Open Report** opens the run's HTML report in the browser.
|
|
48
|
+
- **Last Run: Open Replay works when everything passed.** With no row to
|
|
49
|
+
select it did nothing; it now opens every scenario the run traced, or
|
|
50
|
+
says how to keep traces when the run kept none.
|
|
51
|
+
|
|
8
52
|
## 0.9.3: Review CI heals on your machine
|
|
9
53
|
|
|
10
54
|
Released 2026-10-04.
|
package/README.md
CHANGED
|
@@ -77,13 +77,14 @@ node dist/cli/index.js -p examples accept --all
|
|
|
77
77
|
| `saffron accept [files... \| --all] [--include-unverified] [--with-feature-edit] [--propagate]` | Promote cache proposals to committed caches (`--all` skips UNVERIFIED ones unless `--include-unverified`); `--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. |
|
|
80
|
-
| `saffron status [--json]` | Project overview for people, IDE panels and dashboards: feature files and scenarios with cache state, tags, pending proposals, last run, history, vocabulary health (divergent steps, duplicate wordings proven by identical recordings), effective config. |
|
|
80
|
+
| `saffron status [--json]` | Project overview for people, IDE panels and dashboards: feature files and scenarios with cache state, tags, pending proposals, last run, history, vocabulary health (divergent steps, duplicate wordings proven by identical recordings), effective config, and suite quality from the run history (failing, flaky, never run, slowest, trends, per tag). |
|
|
81
81
|
| `saffron steps [search] [--json] [--snippets]` | List/search the step vocabulary (files + caches) with recorded/divergent/unrecorded badges and usage; `--snippets` writes `.vscode/saffron.code-snippets` for native VS Code completion. |
|
|
82
82
|
| `saffron mcp` | Serve the vocabulary and the project overview to AI assistants over stdio MCP (`search_steps`, `list_step_sets`, `project_status`), e.g. `claude mcp add saffron -- npx saffron mcp`. |
|
|
83
83
|
| `saffron author <prose-file> [-o out]` | Draft a `.saffron` feature file from plain-paragraph requirements, reusing the project's step vocabulary (AI; reports how many lines are seedable). |
|
|
84
84
|
| `saffron lsp` | Run the Saffron language server over stdio for JetBrains (LSP4IJ/Ultimate), Neovim, any LSP editor: badge completion, StepSet go-to-definition, hover, diagnostics. Highlighting for JetBrains comes from the bundled TextMate grammar (`textmate/saffron` in the package); run `npx saffron lsp` in a terminal for setup steps. |
|
|
85
85
|
| `saffron init [--agents list] [--examples]` | Make the project agent-ready (`--examples` installs the Saucedemo example suite): installs the bundled **Saffron agent skill** into `.claude/skills` and `.agents/skills` (Copilot/Cursor via `--agents`), registers the `saffron mcp` server in `.mcp.json` / `.cursor/mcp.json` / `.vscode/mcp.json`, adds a managed block to `AGENTS.md`/`CLAUDE.md`, scaffolds config. |
|
|
86
86
|
| `saffron report` | Open the latest HTML report. |
|
|
87
|
+
| `saffron dashboard` | Open the suite's quality dashboard: failing, flaky and never-run scenarios, repeated heals, slowest, trends, per tag. |
|
|
87
88
|
| `saffron trace [scenario] [--port n] [--no-open] [--json]` | Open the execution replay of the last run (every traced scenario, or the one you name): its Given / When / Then, the page inspectable at every action, the network alongside, and what the agent changed. Needs `"trace": "retain-on-failure"` (or `"on"`). |
|
|
88
89
|
|
|
89
90
|
Configuration lives in `saffron.config.json` at your project root:
|