Changelog

All notable changes to windupjs are documented here. From 1.0 the project follows semantic versioning: the public CLI and programmatic API are stable, and breaking changes wait for a major bump. Format loosely follows Keep a Changelog.

1.9.0

Closing the loop on account profiles: you can now retire one, and the status can no longer imply an identity it doesn’t have.

1.8.1

Two rough edges the 1.8.0 profiles hit on first real use.

1.8.0

One account per project, for anyone holding a personal Claude plan plus one per client — from a real workflow report.

1.7.0

The two rough edges left by the 1.6.0 re-test. The first one inverts the tool’s most important signal, so it led.

1.6.0

Follow-up to the 1.5.0 re-test. The 1.5.0 guard was right but half-done: it turned a false green into no test at all, and it blocklisted tag names instead of looking at the page. Both fixed — and the fix is deterministic, not “hope the model improves”.

1.5.0

Six items from a first-contact report on a real production app. The headline one makes a green run mean something again.

1.4.0

1.3.0

1.2.0

1.1.0

1.0.0

First stable release. The API and CLI surface built across the 0.x line are now committed to under semver. No feature changes over 0.60 — this is the stability milestone plus one security hardening found in the pre-1.0 review:

0.60.0

0.59.0

0.58.0

Runtime realism — test at real device viewports and gate on real page performance. Both tested and validated live (real-browser).

New modules device.ts / vitals.ts; config.device / config.budgets; RunMetrics.web_vitals; FailureKind "budget"; Browser.webVitals(); per-device cache keying.

0.57.0

Two more from the backlog — a ledger-history view and a flaky-quarantine gate — each tested and validated end-to-end.

New modules trends.ts; Scenario.quarantine / RunMetrics.quarantined; quarantinedScenarioIds().

0.56.0

Verificação mais forte + inteligência de cobertura — três recursos, cada um testado e validado ao vivo (real-browser).

Asserts ricos no expect. A verificação de uma ação vai além de selector/url/selector_value: text_contains ({ selector, text } — o texto do elemento contém a string), count ({ selector, equals?/min?/max? } — quantos elementos batem), not_visible (um selector sumiu/oculto — o negativo de selector) e attribute ({ selector, name, value }). Combinam entre si (AND); o planner conhece os novos tipos e o schema (Ajv + Gemini) os valida. Validado ao vivo: um expect com os quatro juntos passa numa página real; mutações falham com a failed_condition exata.

Console/rede como falha — run --fail-on-console / --fail-on-5xx. O Windup passa a observar passivamente o runtime: um cenário pode “passar” enquanto a página logou um erro de JS ou recebeu um 5xx silencioso. Erros de console + exceções não capturadas e respostas 5xx são sempre registrados (RunMetrics.diagnostics, mostrados no console/HTML/JSON, como o --a11y); e falham o run (kind diagnostics) quando --fail-on-console/--fail-on-5xx (ou config.failOn.{consoleErrors,http5xx}) estão ativos. Stubs deliberados do config.network (ex.: um {status:500}) e URLs em config.failOn.ignore não contam. Uma falha diagnostics nunca invalida o cache nem re-planeja, e não é retentável. Validado ao vivo em todos os caminhos, incluindo a exclusão de stubs.

windup suggest-scenarios. Das rotas do site map sem cobertura (via windup coverage) + LLM, propõe (escreve) os cenários faltantes — uma chamada por rota, reusando a maquinaria do windup new (id único, start_url validado, segurança de credenciais, gasto no ledger como authoring). --limit N, --force, --dry-run (lista sem chamar LLM/escrever), --llm, --json. Fecha o ciclo scan → coverage → suggest: sai de “o que falta” para “aqui está o rascunho pra revisar”.

Novos módulos suggest-scenarios.ts; config.failOn; RunMetrics.diagnostics; FailureKind "diagnostics"; Browser.{textContent,count,getAttribute,waitForHidden,consoleErrors,failedResponses}; campos de Expect text_contains/count/not_visible/attribute.

0.55.0

0.54.0

Diagnostics & determinism — a batch of tools that read what Windup already knows and two config knobs that make hard-to-reproduce states testable. Every command is LLM-free; each feature is unit-tested and validated (real-browser for the two that touch the page).

Four read-only commands (zero LLM, straight from the ledger/cache):

Determinism (config, applied every run, never cached, author-declared):

CI guard-rail:

New modules why.ts/explain.ts/diff.ts/badge.ts/ledger.ts/network.ts/clock.ts; config.network/config.clock; a windup doctor config check.

0.53.0

Resilient-CI pair — turn a flaky suite green without hiding the flake, and cap how long a suite may run. Both tested (unit + real-browser live) and LLM-free on the happy path:

0.52.0

Three items from the beta round (feedback #8), in the requested priority order — each tested and validated live:

0.51.0

Three CI features (from the roadmap brainstorm), each tested and validated live:

0.50.0

0.49.0

0.48.0

0.47.0

0.46.0

Five roadmap features in one release (from the “ideas for later” brainstorm), each tested and validated live:

0.45.0

0.44.0

0.43.0

0.42.0

0.41.0

0.40.0

0.39.0

0.38.0

0.37.0

0.36.0

0.35.0

0.34.0

0.33.0

0.32.0

0.31.0

0.30.0

0.29.0

0.28.0

0.27.0

0.26.0

0.25.0

0.24.0

0.23.0

0.22.0

0.21.0

0.20.0

0.19.0

0.18.x

0.15.0

0.13.0 – 0.14.x

0.12.0

0.11.0

0.10.0

0.9.0

0.6.0 – 0.8.x

0.1.0 – 0.5.0