Skip to content

Releases: ben-challis/greenlight

v0.3.0

Choose a tag to compare

@greenlight-beacon greenlight-beacon released this 20 Sep 18:52
47d3652

0.3.0 (2026-09-20)

Breaking Changes

  • Keep the because() reason for all subsequent matchers in an expectation chain until another because() replaces it. To limit a reason to one assertion, start a separate expectation chain for subsequent assertions. (#1965)

v0.2.2

Choose a tag to compare

@greenlight-beacon greenlight-beacon released this 20 Sep 18:38
0625d4f

0.2.2 (2026-09-20)

Bug Fixes

  • Reduce delays to other workers and timeout checks when a worker emits invalid UTF-8 output. (#1902)
  • Reject unsupported cyclic array traversal in toEqual() and toEqualCanonicalizing() with InvalidArgumentException instead of memory exhaustion. (#1926)
  • Apply correct PHPStan type checks when expectation factory and modifier names use different letter cases, such as THAT() and NOT(). (#1919)

v0.2.1

Choose a tag to compare

@greenlight-beacon greenlight-beacon released this 19 Sep 19:44
1441e6f

0.2.1 (2026-09-19)

Bug Fixes

  • Preserve attachment creation order during crash recovery when a test has more than 99 attachments. (#1923)
  • Handle explicit null data attribute arguments correctly in PHPStan provider and duplicate-label checks. (#1928)

Performance Improvements

  • Reduce allocations for repeated expect() calls without arguments. (#1958)

v0.2.0

Choose a tag to compare

@greenlight-beacon greenlight-beacon released this 18 Sep 17:35
35b8612

0.2.0 (2026-09-18)

Breaking Changes

  • Replace Expect::that() with Expect::value() for values or Expect::calling() for calls. Value expectations never execute their subject. (#1949)
  • Replace Expect::eventually() and Expect::consistently() with call chains such as Expect::calling($probe)->returnValue()->eventually()->within($seconds). Use ->consistently()->for($seconds) for continuous checks. (#1949)

Features

  • Use the functional API with use function Greenlight\expect: expect($value) checks values and expect()->calling($callback) checks calls. The runner loads the helper automatically. Outside the runner, load src/Expect/functions.php explicitly after the Composer autoloader. (#1949)
  • Check call results with toReturn() or select them with returnValue(). Call expectations also support immediate and temporal toThrow() checks. (#1949)

Bug Fixes

  • Reject infinite subjects in toBeWithin(), including when a tolerance boundary overflows. (#1922)
  • Return absolute paths for newly created temporary roots so cleanup still works after the working directory changes. (#1921)

Performance Improvements

  • Prepare test listings in linear time when the saved run contains many failed test IDs. (#1918)
  • Limit UTF-8 conversion work for large captured writes, including malformed input. (#1920)

v0.1.1

Choose a tag to compare

@greenlight-beacon greenlight-beacon released this 07 Sep 02:27
cae404b

0.1.1 (2026-09-07)

Features

  • Add color to CLI help while respecting --ansi, --no-ansi, and NO_COLOR. (#1901)

Bug Fixes

  • Make interruption notices more visible with spacing and the configured warning style. (#1900)
  • Reject reporter paths that resolve to the same file before opening or truncating reports. (#1892)
  • Keep coverage exclusions within the correct declaration when strings contain literal braces. (#1888)
  • Preserve recorded double-call arguments after caller variables change, and prevent generated return values from overwriting reference parameters. (#1895)
  • Restore output buffers and error handlers after an output callback throws. (#1890)
  • Compare reordered object lists correctly when property names contain canonical sort-key delimiters. (#1887)
  • Allow parallel Hyperf workers to create the scan directory concurrently. (#1889)
  • Accept plugin factory return types that use class aliases, different letter case, self, or parent. (#1897)
  • Render numeric worker IDs and large assignment-gap totals without errors in saved run profiles. (#1899)
  • Preserve PHPUnit skips with empty reasons during conversion, and leave uncertain dynamic reasons unchanged. (#1898)

Performance Improvements

  • Limit temporary memory use while reading large worker diagnostic bursts. (#1891)
  • Reduce exact test-ID selection time for failed-test reruns and repeated --test-id options. (#1894)

v0.1.0

Choose a tag to compare

@greenlight-beacon greenlight-beacon released this 05 Sep 13:23
72100c4

0.1.0 (2026-09-05)

Breaking Changes

  • Replace native Tempest #[Tag] attributes on test constructor parameters with #[Service('tag')]. Enum tags must become string tags. (#1855)

Features

  • Create doubles for methods with object parameter defaults, including objects nested in arrays. Object defaults require readable source files. (#1852)
  • Select a named plugin container with #[Service(source: 'name')], optionally with a service ID. (#1853)

Bug Fixes

  • Preserve files outside attachment staging when the staging root is a symbolic link. (#1833)
  • Reject named-pipe attachment sources before they can block a worker. (#1839)
  • Keep attachment copies within their reserved size when the source file grows. (#1801)
  • Keep the empty failed-run notice out of JSONL standard output. (#1838)
  • Keep run profiles out of JSONL and JUnit standard output. (#1835)
  • Keep watch status messages out of JSONL standard output. (#1806)
  • Preserve numeric suite names as strings in JSON test manifests. (#1840)
  • Use current source code for every watch iteration, including new test methods. Watch mode requires process support. (#1831)
  • Preserve named variadic arguments and references in double callbacks, and reject surplus arguments on non-variadic reference methods. (#1829)
  • Allow double calls to omit parameters whose defaults use private class constants. (#1811)
  • Report failed expectations in #[After] hooks with expected and actual values when no earlier failure exists. (#1844)
  • Give each retry its full hard-timeout window. (#1822)
  • Prevent canonical equality errors with cyclic objects and false mismatches for equal numeric values. (#1820)
  • Use a conservative PHPStan type for captureArgument() calls with unpacked arguments. (#1846)
  • Accept valid unpacked string-containment arguments in PHPStan checks. (#1834)
  • Generate IDE helpers with correctly qualified class names and declared generic types. (#1825)
  • Prepare temporal matchers consistently regardless of method-name case. (#1832)
  • Use registered factories for lazy harness services and dispose services in reverse creation order. (#1824)
  • Leave PHPUnit classes unchanged when conversion could change assertion argument evaluation order. (#1848)
  • Treat disabled PCOV as unavailable instead of failing during coverage collection. (#1836)

Performance Improvements

  • Limit HTML coverage reports to known coverage lines when source files are unavailable. (#1826)
  • Create repeated doubles faster by reusing loaded proxy classes. (#1837)
  • Reduce repeated double-call overhead by reusing method contracts within each factory. (#1842)
  • Drain worker diagnostic pipes promptly on supported platforms to reduce stalls during large writes. (#1827)
  • Reduce plugin callback overhead by sorting priorities once per runtime. (#1843)
  • Reduce reporter memory use for skipped tests and retried passes by releasing unused captured output. (#1841)

v0.0.1

Choose a tag to compare

@greenlight-beacon greenlight-beacon released this 04 Sep 22:14
e7cf371

0.0.1 (2026-09-04)

Initial release.