* feat: add Engine class for Playwright Check Suite engine selection
Adds Engine.node('24') and Engine.bun('1.3') static factory methods
for selecting the JavaScript runtime engine. Also accepts plain
{ name, version } objects in checkly.config.ts.
Omitting the engine property sends null to the backend (auto-detect).
* feat: add known-version autocomplete hints to Engine factory methods
* feat: auto-detect engine from project version files
Detects the JavaScript engine from .node-version, .nvmrc,
.tool-versions, .bun-version, or package.json engines field.
No hardcoded version list — extracted versions are passed through
to the backend, which validates them.
Detection is cached per session via a shared promise on Session,
so concurrent bundle() calls only read version files once.
* feat: add Node.js 26 to engine version autocomplete hints
* fix: restrict engine prop to Engine type only, update docs
* feat: add engines.json rule-based version resolution with warnings
Resolves detected and explicit engine versions through semver-based
rules. EOL/unavailable versions are remapped with WarningDiagnostic
notices. Denied versions (e.g. Bun 2.x) clear the engine selection.
Rules are inlined as TypeScript constants (canonical source:
monorepo/engines.json). The loader has an async signature to support
future API-based rule loading.
* chore: update engine rule notice wording
* feat: add SubstitutedPropertyValueDiagnostic for engine version notices
Uses a dedicated diagnostic class for substituted property values.
Auto-detected substitutions include a hint about version files and
how to override with explicit Engine.node() / Engine.bun().
* fix: propagate notices for denied engine versions
When a version is denied (e.g. Bun 2.0), the notices were silently
discarded because resolveNode/resolveBun returned undefined. Now
denied results propagate notices so warnings are shown to the user.
* fix: use InvalidPropertyValueDiagnostic for denied engine versions
Denied versions (e.g. Bun 2.x) now produce an error diagnostic
instead of a warning, while substituted versions (e.g. Node 18 → 22)
remain as warnings.
* test: add engine resolver unit tests and sandbox integration tests
Unit tests (15): verify all rule matching, follow chains, remapping,
and deny behavior for both Node and Bun.
Sandbox integration tests (3): verify engine diagnostics flow
end-to-end through parse-project — EOL warning, denied error,
and clean pass for valid versions.
* chore: update Bun rule notices to include substitution target
* ci: retrigger CI