# Changelog All notable changes to this project will be documented in this file. ## 1.11.0 - 2026-09-15 Changes since 1.10.1: ### Added - Added export of a scenario as a standalone, plug-and-play Playwright e2e test project (zip archive with `package.json`, `playwright.config.ts`, `test.spec.ts`, `README.md`, `.env`, `credentials.json`, `snippets/*.js`, and any attached scenario files) that runs entirely independently of the liqa backend. Available as a "Export e2e test" button on the scenario detail page, `GET /scenarios/:id/export-e2e`, and the `export_e2e_test` MCP tool. - The exported test only bundles the credentials, snippets, and attached files actually referenced (directly or transitively) by the scenario's steps. - Added a "Used Snippets" section on the scenario detail page listing the snippets referenced by the scenario's steps, linking to each snippet's detail page. Backed by `GET /scenarios/:id/used-snippets`. ## 1.10.1 - 2026-09-15 Changes since 1.10.0: ### Added - `context.runSnippet()` now logs "Snippet started"/"finished"/"failed" entries, matching the automatic step start/pass/fail logging. ### Changed - Reworked the Markdown log export format: each log entry is now its own `## [level] timestamp` section with the message as its body, instead of a single large table. ### Fixed - Run logs could persist out of call order (e.g. a snippet's "started" log appearing after its "finished" log) because writes were fire-and-forget and raced against each other. Log entries now carry a per-run sequence number assigned in call order, and queries/exports sort by it. ## 1.10.0 - 2026-09-15 Changes since 1.9.1: ### Added - Added a "Download logs" button on the scenario run detail page: opens a modal to choose Markdown (default) or CSV, then downloads the run's logs in that format. - Added `GET /scenarios/:id/run/:runId/logs/export?format=csv|md` backend endpoint to export a run's logs. ## 1.9.1 - 2026-09-15 Changes since 1.9.0: ### Added - Scenario run logs now include an automatic entry when a step starts and when it finishes (pass or fail), so step boundaries are visible in run logs even for steps that don't call `context.log`/`context.assert` themselves. ## 1.9.0 - 2026-09-15 Changes since 1.8.0: ### Added - Added `context.assert(fn, description)` for scenario/snippet script steps: runs the given function, requires it to return `true`, logs the outcome (`log` on success, `error` on failure or exception), and throws to stop the step on failure. ### Changed - Documented `context.assert` in `docs/scenario.md`. ## 1.8.0 - 2026-09-15 Changes since 1.7.1: ### Added - `context.downloadFile()` now accepts `data:` URIs, so scenario steps can save in-script generated content (e.g. a credential JWT) as a run artifact without a network fetch. ### Changed - Documented the full scenario step `context` file API (`getScenarioFiles`, `downloadFile`) in `docs/scenario.md`. ## 1.7.1 - 2026-04-21 Changes since 1.7.0: ### Added - Added MCP tools to upload, list, and fetch scenario files using base64 content payloads. - Added MCP tools to list run artifacts and fetch run artifact content with metadata. ### Changed - Documented MCP binary content handling for scenario files and run artifacts. ## 1.7.0 - 2026-04-21 Changes since 1.6.1: ### Added - Added scenario file storage and run artifact support on the backend. - Added file management UI for scenarios and run details, including artifact lists. - Added snippet CRUD tools to the MCP server. ### Changed - Added dynamic page titles based on the active client content. - Extended the scenarios list to show the latest run status and timestamp. ### Fixed - Exposed file expiry metadata in scenario and run file responses. - Disabled expired download actions in the UI while keeping the action visible.