Repository navigation
9lives 0.5.0
SDK
package.jsondeclares the engine protocol, capabilities and prove fault
kinds the build implements under"9l", so9l doctorcan compare an
installed SDK with the CLI without loading it. A test keeps the field equal
to the constants the bridge and prove channel send.
CLI
9l run --retries <n>passes Playwright's own per-test retries to every
job, replacing the project's setting, so--retries 0 --attempts Nlets 9l
own all retries and their evidence. The--attemptshelp says that
Playwright's configured retries still apply inside each attempt. Receipts
recordflakyTests, the tests that failed and then passed on a Playwright
retry inside the attempt, with or without--sdk, and9l run/9l resultprintN test(s) passed only on a Playwright retry inside this attemptunder the job (additive).- With
--sdk, receipts recordreportedAssertions, the assertion steps the
worker reported as passed in each executed test's last completed attempt,
andpassedWithoutAssertions, the tests that passed while reporting none.
9l runand9l resultprintN passed test(s) reported no assertion stepunder such a job, so a green test that asserted nothing is visible.
These are the worker's report, not verified coverage;assertionCoverage
staysunknown. Without--sdkthe counts are absent, because Playwright's
JSON reporter serializes onlytest.stepsteps. Receipt, run-result and
run-status contracts gain the two optional fields (additive). - Receipts record
keepAttachmentswhen--keep-attachmentswas given,
failureAttachmentsfor the attachment files the listed failures
reference andretainedAttachmentsfor those copied into the receipt
directory. A request that found nothing to copy prints--keep-attachments: the listed failures referenced no attachment filesunder the job instead
of silently doing nothing (additive). - Each failed test in a receipt carries a
class:assertion,timeout,
action-timeout,environment(a connection, name-resolution or
certificate error on navigation, by Chromium or Firefox error code),
unexpected-passorother. It comes from Playwright's structured status
and its own error prefixes, never from message text, so a test quoting
those words is stillother.9l runand9l resultshow it after the
failing line, so a target that never came up is not read as a broken test
(additive). 9l scan --format jsonaddsscoringto the result: the 0–100 scale, the
points each severity costs (35 critical, 20 high, 10 medium, 4 low, 0 info),
the grade thresholds (A 90, B 75, C 60, D 40) and the grade. The Markdown
report prints the same rule under the score, anddocs/cli.mdand the
scan_urldescription state it, so ascoreof 0 on a page with ten
medium findings can be checked rather than guessed at.9l scanreports the page's own aborted prefetch and RSC requests as one
infofinding per page, withoccurrencesand up to five distincturls
(omittedUrlscounts the rest), instead of one finding per URL. Other
failed requests stay one finding per URL. The grouped finding has nourl,
so itsidno longer depends on which prefetch was aborted first; against a
baseline from an earlier release the per-URL findings show as fixed and the
grouped one as new, once.9l doctorjudges the SDK pair by the protocol and capabilities the
installed@9l/playwrightdeclares, the contractrun --sdkchecks in the
handshake, instead of by version string. A different release that this CLI
admits is reported as admitted but unqualified, with the install command
for the matching release; a different protocol or capability set is
incompatible and, under--sdk, a missing prerequisite. Under--sdk, a
newsdk/faultscheck lists the prove fault kinds the SDK applies. An SDK
that predates the declaration is reported as such.9l doctorno longer tells a Node release above the qualified 24 to
install Node 24. Below 22 stays missing with the install step; any other
supported release is a warning without one.9l proveaccepts--config <file>and--project <name>(repeatable),
applied to the baseline and every fault run as9l runapplies them. A spec
outside the nearest config'stestDirno longer has to move to be proved.- When
9l run --sdk,9l proveor9l confirmcannot run a spec, the
reason names only the missing package:@9l/playwright,@playwright/test
or apackage.jsonthat declares it. Previously it asked for both packages
even when one was installed. 9l healsays when Tier 1 and verification were not attempted. In the
session JSON, and in the MCPheal_testresult,tier1andverifiedare
nullwhen the session ended before that stage ran (the original passed,
ran zero tests or failed an assertion, or no candidate was proposed);
previously both read as a failed zero-test run.9l healaccepts
--format json(the default, the session JSON) and--format text(the
state and reason, one line per run withnot attempted, and the verified
candidate's diff; no JSON). An unknown option is reported as such; only a
Python-only option such as--frameworkis referred to9lives heal.
Install
- CLI:
curl -fsSL https://9lives.run/install.sh | sh(macOS, Linux), or download the archive for your platform below and verify it againstSHA256SUMSas described in docs/install.md (Windows ZIPs included). - SDK:
npm install --save-dev @9l/playwright@0.5.0 @playwright/test@1.64.0. Matching CLI and SDK releases are the qualified pair;9l doctor --sdknow reports whether an installed pair is admitted.
Qualified with @playwright/test 1.61.1–1.64.0 on Chromium, Node 24 (22 minimum), built with Go 1.27.3.
Full Changelog: v0.4.9...v0.5.0