Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
72ce597
fix: adapt to latest `elide` cli
sgammon Sep 25, 2026
652f137
fix: harness and driver fixes for elide 1.6
sgammon Sep 25, 2026
f4b3a39
fix(node-api): keep test tmpdirs inside the overlay
sgammon Sep 25, 2026
f857b30
fix(reports): tiered pass rates and reward an advancing floor
sgammon Sep 25, 2026
0b4e23e
feat(run): targeted test selection with --filter '[<suite>:]<pattern>'
sgammon Sep 25, 2026
41079e2
fix: 65s per-test limit; drop modules CPython 3.13 removed
sgammon Sep 25, 2026
ab5fe26
docs(readme): explain why tests are skipped, per suite
sgammon Sep 25, 2026
0e1a196
fix(summary): pluralize correctly, mark ADVANCED with an up arrow, pl…
sgammon Sep 25, 2026
084fb3c
fix: registry per-test limits to 65s
sgammon Sep 25, 2026
97cde61
chore: add 1.6.0+dd7116a51 (85762dd3efe4) run reports
sgammon Sep 25, 2026
681ed14
docs+charts: purple chart palette, slimmer README
sgammon Sep 25, 2026
0e064c6
chore(reports): drop the 1.6.0 report series from this branch
sgammon Sep 25, 2026
505f434
fix(cpython-core): resume a shard after its driver dies
sgammon Sep 25, 2026
6c15c53
docs: cite elide-dev/runtime for tracking issues, drop Bali from README
sgammon Sep 25, 2026
151e047
feat(cpython-core): grant threads, subprocesses and loopback network
sgammon Sep 25, 2026
6c17461
feat(run): --timeout-scale for slow builds; fresh cpython shard cwd p…
sgammon Sep 25, 2026
2282b12
fix: bound cpython driver hangs; test262 limit follows --timeout-scale
sgammon Sep 25, 2026
f20ec8b
chore: ignore python caches
sgammon Sep 25, 2026
88801a4
fix(cli): scope <suite>: filter prefixes when run directly
sgammon Sep 25, 2026
2713737
feat(cli): --work-dir for concurrent harness runs
sgammon Sep 25, 2026
f4aec24
chore(expectations): skip node-api tests that need node:cluster
sgammon Sep 26, 2026
5598d07
feat(cli): fit the compliance summary to the terminal width
sgammon Sep 26, 2026
b62459a
chore(expectations): skip node-api tests that need --expose-internals
sgammon Sep 26, 2026
62eaea6
expectations(cpython): gate driver-truncating hangs from the 1.6.0 run
sgammon Sep 26, 2026
52d41b5
expectations(cpython): ungate tarfile hangs fixed by _lzma, gate zipf…
sgammon Sep 26, 2026
7aa5edd
feat(harness): exclude out-of-scope tests from every pass rate
sgammon Sep 26, 2026
857e9d1
feat(wpt): run META variants; exclude browser-only files and subtests
sgammon Sep 26, 2026
7a868e5
test(harness): cover wpt exclusions in the baseline test
sgammon Sep 26, 2026
f33f717
expectations(cpython): exclude CPython-implementation modules; node o…
sgammon Sep 27, 2026
06f15c2
fix(cpython): run the driver against a writable copy of Lib
sgammon Sep 27, 2026
bb6c31a
fix(node-api): keep common's umask setup call disabled
sgammon Sep 27, 2026
04140cd
expectations(cpython): exclude test_bisect's C-accelerator classes
sgammon Sep 27, 2026
94f4359
fix(node-api): overlay worker_threads shim re-exports the runtime's m…
sgammon Sep 27, 2026
f105517
fix(cpython): kill the driver's process group so orphans can't hang a…
sgammon Sep 27, 2026
b060f82
fix(harness): cap container memory and cpython-core driver concurrency
sgammon Sep 27, 2026
f47f5f0
fix(cpython): retry a module interrupted by a late SIGINT from the pr…
sgammon Sep 27, 2026
0cb3462
chore(expectations): drop stale skips, exclude C-API/refcount/env tests
sgammon Sep 27, 2026
f26fac5
fix(cpython): collect between tests once many fds are open
sgammon Sep 27, 2026
236f037
fix(wpt): real cross-origin hosts, and cap load on the wpt server
sgammon Sep 27, 2026
588aff7
fix(wpt): exclude CORS enforcement as unsupported, and report exclusions
sgammon Sep 27, 2026
c294739
chore(expectations): label exclusions unsupported, out of scope or n/a
sgammon Sep 27, 2026
9c9d3a6
chore: ratchet the baseline to 1.6.0+834e9f50f
sgammon Sep 27, 2026
958dd36
chore: add 1.6.0+834e9f50f (3cd8cc55c963) run reports
sgammon Sep 27, 2026
8a1db54
chore: cleanup intermediate reports
sgammon Sep 30, 2026
affaf75
chore: run testsuite cycle against pre-release
sgammon Sep 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ artifacts/
expectations/jdk-jtreg.reference.*.json
!expectations/jdk-jtreg.reference.linux-x64.json
diagnostics/
__pycache__/
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
[submodule "suites/cpython"]
path = suites/cpython
url = https://github.com/python/cpython.git
branch = 3.12
branch = 3.13
shallow = true
[submodule "suites/openjdk"]
path = suites/openjdk
Expand Down
7 changes: 5 additions & 2 deletions BRIEFING-cpython-core.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ bun run setup # once: deps + submodules
bun run testsuite --elide nightly --suite cpython-core --include 'test_json' --log
# one module under investigation:
bun run testsuite --elide nightly --suite cpython-core --include 'test_builtin' --log
# by name, any module/case whose id contains 'time' (case-insensitive glob; 'test_ast.*literal_eval*' picks cases):
bun run testsuite --elide nightly --log --filter 'cpython-core:*time*'
# full suite (~90s):
bun run testsuite --elide nightly --suite cpython-core
# after fixes land in an Elide nightly, re-baseline:
Expand Down Expand Up @@ -96,8 +98,9 @@ Start with `test_builtin` (17), `test_descr`/`test_dict` (12), then

- Runtime fixes happen in the Elide repo (GraalPy-based Python engine); this
repo pins nightlies and measures.
- 103 skips are already classified in `expectations/cpython-core.toml` and
excluded from the denominator; keep skip entries commented.
- 103 skips are already classified in `expectations/cpython-core.toml`; keep
skip entries commented. Skips still count against the overall pass rate, but
not against the "vs expectations" rate.
- The pass rate is already 95.9% — the value here is *classification honesty*
(separating defects from platform limits) more than raw number movement.
- After a fix lands: full run → check `changes.md` → `--ratchet` → commit.
2 changes: 2 additions & 0 deletions BRIEFING-javac-jtreg.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ bun run setup # once: deps + submodules + sparse checkout
bun run testsuite --elide nightly --suite javac-jtreg --include 'tools/javac/IllDefinedOrderOfInit.java' --log
# one failing test with full output:
bun run testsuite --elide nightly --suite javac-jtreg --include 'tools/javac/T6411379.java' --log --show-failure-output
# by name, any test whose path contains 'lambda' (case-insensitive glob, see docs/running.md 'Targeted runs'):
bun run testsuite --elide nightly --log --filter 'javac-jtreg:*lambda*'
# full suite (~12 min):
bun run testsuite --elide nightly --suite javac-jtreg
# after fixes land in an Elide nightly, re-baseline:
Expand Down
2 changes: 2 additions & 0 deletions BRIEFING-node-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ bun run setup # once: deps + submodules + sparse checkouts
bun run testsuite --elide nightly --suite node-api --include 'test/parallel/test-path.js' --log
# a target group:
bun run testsuite --elide nightly --suite node-api --include 'test/parallel/test-buffer*.js' --log
# by name, any file whose path contains 'timers' (case-insensitive glob, see docs/running.md 'Targeted runs'):
bun run testsuite --elide nightly --log --filter 'node-api:*timers*'
# full suite (~6 min):
bun run testsuite --elide nightly --suite node-api
# after fixes land in an Elide nightly, re-baseline:
Expand Down
8 changes: 6 additions & 2 deletions BRIEFING-test262.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ Counts are test executions (a file can run in both default and strict mode).
bun run setup # once: deps + submodules
# quick slice (seconds):
bun run testsuite --elide nightly --suite test262 --include 'test/built-ins/Error/prototype/stack/**/*.js' --log
# by name, any file whose path contains 'getTime' (case-insensitive glob, see docs/running.md 'Targeted runs'):
bun run testsuite --elide nightly --log --filter 'test262:*gettime*'
# full suite (~20 min):
bun run testsuite --elide nightly --suite test262
# after fixes land in an Elide nightly, re-baseline:
Expand Down Expand Up @@ -95,8 +97,10 @@ Signature view of the top clusters:

- Fixes happen in the Elide runtime (GraalJS-based); this repo pins nightlies
and measures. `--elide nightly` picks up a fresh build.
- 10,587 skips are intentional (see `expectations/test262.toml`) and excluded
from the pass-rate denominator.
- 10,587 skips are intentional (see `expectations/test262.toml`). They still
count against the overall pass rate (the headline is over every selected
test), but they are expected skips, so they do not count against the
"vs expectations" rate.
- Some failing features are proposal-stage (immutable ArrayBuffer, source-
phase imports). If Elide won't ship them yet, classify as `[skip]` with a
comment rather than leaving them as permanent failures.
Expand Down
7 changes: 5 additions & 2 deletions BRIEFING-wpt-wintertc.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ bun run setup # once: deps + submodules + sparse checkouts
bun run testsuite --elide nightly --suite wpt-wintertc --include 'url/urlsearchparams-constructor.any.js' --log
# a target area:
bun run testsuite --elide nightly --suite wpt-wintertc --include 'encoding/textdecoder-fatal-single-byte.any.js' --log
# by name, any file whose path contains 'encodeInto' (case-insensitive glob, see docs/running.md 'Targeted runs'):
bun run testsuite --elide nightly --log --filter 'wpt-wintertc:*encodeinto*'
# full suite (~12s of harness runtime inside Docker):
bun run testsuite --elide nightly --suite wpt-wintertc --threads 8
# after fixes land in an Elide nightly, re-baseline:
Expand Down Expand Up @@ -106,8 +108,9 @@ machine).
5. **Park / skip candidates**: `fetch/fetch-later` (136 — browser-only,
needs window/iframe/BFCache), `.window.js` tests requiring `document`/
`XMLHttpRequest` (~90). Consider adding these to `[skip]` in
`expectations/wpt-wintertc.toml` with a comment, so the pass-rate
denominator reflects reachable tests.
`expectations/wpt-wintertc.toml` with a comment. Note this only cleans up
the "vs expectations" rate; the overall pass rate keeps skipped tests in
its denominator on purpose.

Items 1–3 alone should move the suite from 75.3% to roughly **88–90%**.

Expand Down
248 changes: 36 additions & 212 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,242 +1,66 @@
# conformance testing

This repository runs upstream conformance test suites against pinned builds of
[Elide](https://elide.dev) and publishes per-version Markdown/JSON reports.
**Test262** (TC39's JavaScript conformance suite) is the first suite; the
harness is workload-neutral so more suites — and, later, benchmarks — slot in.
[Elide](https://elide.dev) and publishes per-version reports. Suites:

Next suites are added in this order:

1. `wpt-wintertc` - a sparse Web Platform Tests subset for WinterTC / ECMA-429 JavaScript-facing APIs, including fetch.
2. `cpython-core` - CPython 3.12 top-level `Lib/test/test_*` modules and packages.
3. `javac-jtreg` - full OpenJDK langtools `tools/javac` coverage through jtreg, compiling with Elide and initially running generated programs with a regular JDK.
4. `node-api` - sparse Node.js core JavaScript API tests, starting with `node:path` and `process`.

Tracking: [Compliance Testing meta (WHIPLASH#1172)](https://github.com/elide-dev/WHIPLASH/issues/1172),
[Test262 (WHIPLASH#1173)](https://github.com/elide-dev/WHIPLASH/issues/1173).

> [!CAUTION]
> Full enabled slices may be RED until expectations are ratcheted and failures
> are classified.

## Bali runtime compatibility

This repository also supports Bali as a Docker-based Linux AMD64 target. Elide remains the default.

```sh
bun run testsuite --target bali --suite jdk-jtreg --bali-home /path/to/linux-amd64/bali
```
| Suite | What it covers |
|---|---|
| `test262` | TC39's JavaScript conformance suite |
| `wpt-wintertc` | a sparse Web Platform Tests subset for WinterTC / ECMA-429 APIs, including fetch |
| `cpython-core` | CPython 3.12 `Lib/test/test_*` modules and packages |
| `javac-jtreg` | OpenJDK langtools `tools/javac` through jtreg, compiling with Elide |
| `node-api` | sparse Node.js core JavaScript API tests |

See [Bali setup and expectations](BALI.md) and [Bali compatibility history](reports/bali/index.md).
The runtime suite (`test/jdk`) is separate from Elide's compiler suite (`javac-jtreg`).
Runner coverage, verified passes, reference issues, and unsupported files remain separate.
Tracking: [Compliance Testing meta (elide-dev/runtime#1172)](https://github.com/elide-dev/runtime/issues/1172),
[Test262 (elide-dev/runtime#1173)](https://github.com/elide-dev/runtime/issues/1173).

## Compatibility

<!-- compat-summary:start -->

_Generated by `bun run testsuite --update-summaries` from the latest committed reports._

Last updated: 2026-08-31T23:46:11.051Z
Last updated: 2026-09-30T17:31:58.679Z

![Latest compatibility pass rates](reports/pass-rate.svg)

| Suite | Version | Digest | Pass rate | Regressions |
|---|---|---|---:|---:|
| cpython-core | `1.4.99+8b374d579` | `4094eb2fb1ff` | 97.0% | 0 |
| javac-jtreg | `1.4.99+8b374d579` | `4094eb2fb1ff` | 100.0% | 0 |
| node-api | `1.4.99+8b374d579` | `4094eb2fb1ff` | 70.1% | 0 |
| test262 | `1.4.99+8b374d579` | `4094eb2fb1ff` | 99.9% | 0 |
| wpt-wintertc | `1.4.99+8b374d579` | `4094eb2fb1ff` | 89.9% | 0 |
| Suite | Version | Digest | Pass rate | vs expectations | Regressions | New passes |
|---|---|---|---:|---:|---:|---:|
| cpython-core | `1.6.0+b8edacc63` | `7aa30129531a` | 90.8% | 100.0% | 0 | 0 |
| javac-jtreg | `1.6.0+b8edacc63` | `7aa30129531a` | 93.0% | 100.0% | 0 | 0 |
| node-api | `1.6.0+b8edacc63` | `7aa30129531a` | 81.8% | 100.0% | 0 | 0 |
| test262 | `1.6.0+b8edacc63` | `7aa30129531a` | 93.0% | 100.0% | 0 | 0 |
| wpt-wintertc | `1.6.0+b8edacc63` | `7aa30129531a` | 95.5% | 100.0% | 0 | 0 |

_Pass rate_ counts every test in the selection, including skipped/suppressed ones.
_vs expectations_ is the share of tests at or above the checked-in baseline (only regressions count against it).

<!-- compat-summary:end -->

## How it works

A Bun/TypeScript harness drives each suite through its best native runner and
normalizes the results. Test262 runs via the stock `test262-harness` + `eshost`
using a **custom eshost `elide` host** (installed through a Bun patch). Each run
executes inside a combined Docker image (a pinned Elide + Node + Bun), so every
`elide run` is a fast local subprocess. Results are compared against a
checked-in **expectations baseline** — a run is green iff there are no
regressions.

## Prerequisites
normalizes the results. Each run executes inside a Docker image with a pinned
Elide, so every `elide run` is a fast local subprocess. Results are compared
against a checked-in expectations baseline: new failures are regressions, tests
that newly pass advance the floor, and a `--ratchet` run locks the gains in.

- Docker (the runner pulls/builds the Elide image)
- Bun
- Suite submodules and Bun dependencies prepared with one command:
`bun run setup`
Skips never inflate the numbers above: a skipped test still counts as a non-pass
in _Pass rate_. Every skip has a written reason in `expectations/<suite>.toml`;
see [why tests are skipped](docs/reports.md#why-tests-are-skipped).

`bun run setup` installs root and harness dependencies, initializes the upstream
suite submodules, and applies the sparse checkouts used by WPT and OpenJDK. To
only prepare submodules, run `bun run setup:suites`. To check that already
prepared submodules are populated correctly, run `bun run setup:suites --check`.

## Running
## Quick start

```bash
# Full suite against the current Elide nightly, with a live ✅/❌ test log
bun run setup # deps + suite submodules
bun run testsuite --elide nightly --suite test262 --log

# A quick slice (finishes in seconds) — scope to any glob
bun run testsuite --elide nightly --log --include 'test/language/types/boolean/**/*.js'

# Current broad-suite smoke commands. These may be RED until expectations are
# ratcheted, but they should emit upstream case/subtest results instead of
# runner setup failures.
bun run testsuite --elide nightly --suite wpt-wintertc --include 'url/urlsearchparams-constructor.any.js' --log
bun run testsuite --elide nightly --suite cpython-core --include 'test_json' --log
bun run testsuite --elide nightly --suite javac-jtreg --include 'tools/javac/IllDefinedOrderOfInit.java' --log
bun run testsuite --elide nightly --suite node-api --include 'test/parallel/test-path.js' --log

# Broader slices after the smoke path is stable.
bun run testsuite --elide nightly --suite wpt-wintertc --threads 8 --log
bun run testsuite --elide nightly --suite cpython-core --threads 8 --log
bun run testsuite --elide nightly --suite javac-jtreg --threads 4 --log

# Run every registered suite after building the harness image once.
bun run testsuite --elide nightly --all-suites --log

# Prepare selected suite submodules first, then run. Useful in fresh clones or CI.
bun run testsuite:ready --elide nightly --all-suites --log

# Run a subset with a comma-separated suite list.
bun run testsuite --elide nightly --suite wpt-wintertc,cpython-core --log

# Run multiple selected suites at once. --threads is per suite; --suite-workers
# controls how many suite containers run concurrently.
bun run testsuite --elide nightly --all-suites --suite-workers 2 --threads 4 --log

# Update reports plus the generated README compatibility summary.
bun run testsuite --elide nightly --all-suites --log --update-summaries

# Pin a specific build: image tag, digest, or a local Elide install directory
bun run testsuite --elide ghcr.io/elide-dev/elide@sha256:…
bun run testsuite --elide /path/to/elide-install # dir containing bin/elide + lib/
```

`./bin/run ...` remains as a direct executable alias for the same Bun/TypeScript
launcher.

By default, the launcher builds a total concurrency budget of
`available CPUs * 2`. It then runs up to that many suite workers, capped by the
number of selected suites, and divides the remaining budget into per-suite
threads. `--threads N` overrides the per-suite adapter thread count: Test262
forwards it to `test262-harness`, `wpt-wintertc` runs multiple WPT files at once,
`cpython-core` splits selected modules across worker processes, and
`javac-jtreg` forwards it to jtreg's native `-concurrency:N`. `--suite-workers N`
overrides how many suite containers run concurrently. `CONCURRENCY_MULTIPLIER`
or `--concurrency-multiplier N` can change the default multiplier from `2`.

`--log` streams one normalized mark per completed test to stderr (`✅` pass ·
`❌` fail · `🛑` error · `⊘` skip); the summary line goes to stdout. Add
`--verbose` to also mirror raw runner stdout/stderr, which is useful for
debugging harness behavior. Failure messages are persisted in reports either
way; console printing can be controlled with `--failure-output show|hide` or the
aliases `--show-failure-output` / `--hide-failure-output`. The exit code is
non-zero on any regression.

## Reports

Committed under `reports/<elide-version>/<short-digest>/<workload>/`:

| file | purpose |
|---|---|
| `<workload>.md` | human rollup: pass-rate, regressions, new passes |
| `impact.md` / `impact.json` | failures clustered by root-cause signature, ranked by blast radius |
| `changes.md` / `changes.json` | diff vs the previous run (fixed / regressed / added / removed) |
| `summary.json` | counts + regression/new-pass ids (machine) |
| `results.json.gz` | every test's status (machine, for cross-version diffs) |
| `pass-rate.svg` | static pass/fail/error/skip chart for the run |

`reports/index.md` (+ `index.json` + `pass-rate.svg`) is the top-level matrix
of the latest run per suite. Machine-readable index entries point at the
workload-scoped report directory. Published via GitHub Pages.

Passing `--update-summaries` also refreshes the generated compatibility block in
this README from the latest report index. This is intended for mainline bot runs:
run all suites, commit the changed `reports/`, `expectations/*.ratchet.toml` if
ratcheting, and README summary content, then push.

## Expectations & the ratchet

`expectations/test262.toml` is the hand-curated baseline:

```toml
[skip] # excluded from the run, with a reason
"test/intl402/**" = "Intl 402 not supported yet"
[fail] # expected failures (link an issue)
"test/built-ins/RegExp/property-escapes/**" = "partial (…)"
```

A run is **green iff actual matches expected**: new failures are **regressions**
(red, fail CI); tests that newly pass are surfaced as **new passes** (advance the
baseline). To accept the current failure set as the baseline (so only *new*
breakage fails CI):

```bash
bun run testsuite --elide nightly --ratchet
```

This regenerates the machine-owned `expectations/<workload>.ratchet.toml`
(exact test ids) from the current failures. `compare` treats a test as
expected-fail if it matches a `[fail]` glob **or** is in the ratchet set;
`[skip]` always wins.

## Analysis CLI

A derived SQLite database (`.harness/results.sqlite`, gitignored) is built by
ingesting the committed `results.json.gz` files, and powers ad-hoc queries:

```bash
bun run harness/src/cli.ts db build # (re)build the DB from committed runs
bun run harness/src/cli.ts impact <workload> [semver] [digest] # impact-ordered failures for a run
bun run harness/src/cli.ts diff <workload> [A] [B] # version diff (default: two most recent)
bun run harness/src/cli.ts query "SELECT …" # read-only SQL over the results
```

The committed JSON files are the source of truth and the contract for a future
static web UI; the SQLite DB is a disposable local index.

## Layout

```
suites/test262/ Test262 (git submodule)
manifests/ curated suite slices for WPT, CPython, and jtreg
suites/drivers/ small bridge/wrapper programs used by external suites
expectations/ workload baselines + machine ratchets
reports/ committed per-version reports + top-level index
harness/ the Bun/TypeScript harness (src/, fixtures/, patches/)
docker/ harness images (image-ref + local install dir)
bin/run.ts Bun/TypeScript launcher: resolve --elide → docker build → docker run
bin/run executable alias for bin/run.ts
.devcontainer/ Codespaces dev environment
.github/workflows/ nightly + on-demand compliance runs, Pages publish
docs/superpowers/ design specs and implementation plans
```

## Development

```bash
bun install # installs root TypeScript/Bun types for bin/run.ts
bun run typecheck # type-check the host launcher
cd harness
bun install # applies the eshost `elide` host patch
bun test # unit tests
bun run typecheck
```

Or open the repo in a GitHub Codespace / VS Code devcontainer, which provisions
Bun, Node, Docker-in-Docker, and Elide automatically.










## Further reading

- [Running the suites](docs/running.md): prerequisites, every launcher flag, targeted runs with `--filter`, concurrency.
- [Reports, expectations and analysis](docs/reports.md): the report layout, why tests are skipped, the ratchet, and the SQLite analysis CLI.
- [Contributing](docs/contributing.md): local development, tests, and the repository layout.
- Per-suite briefings: [test262](BRIEFING-test262.md), [wpt-wintertc](BRIEFING-wpt-wintertc.md), [cpython-core](BRIEFING-cpython-core.md), [javac-jtreg](BRIEFING-javac-jtreg.md), [node-api](BRIEFING-node-api.md).
- Design specs and plans live under [docs/superpowers](docs/superpowers/).
4 changes: 4 additions & 0 deletions bin/bali-docker.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ test("Bali plan validates suites from the registry and accepts --ratchet anywher
expect(scopedArgs.slice(scopedArgs.indexOf("--include"))).toEqual(["--include", "java/lang/**,java/util/**", "--threads", "8"]);
expect(() => baliPlan(["--bali-home", "dist", "--threads", "zero"], "/repo")).toThrow("--threads");
expect(baliPlan(["--bali-home", "dist"], "/repo")).not.toHaveProperty("include");
const filtered = baliPlan(["--bali-home", "dist", "--filter", "*Date*"], "/repo");
expect(filtered.filter).toBe("*Date*");
const filteredArgs = harnessArgs(filtered, "d", { registry: "/r", repoRoot: "/w", baliHome: "/b", suiteRoot: "/s", reports: "/p", expectations: "/e" });
expect(filteredArgs.slice(filteredArgs.indexOf("--filter"))).toEqual(["--filter", "*Date*"]);
});

test("Docker launcher rejects macOS artifacts and a host reference JDK, and propagates build errors", async () => {
Expand Down
Loading
Loading