Releases: nerima-lisp/cl-weave
Release list
v1.0.0
What's Changed
- release: v0.11.0 — time-travel debugging, hardened CI, MkDocs, perf overhaul by @takeokunn in #19
- build(deps): bump the github-actions group with 5 updates by @dependabot[bot] in #20
- release: v1.0.0 — stable, SemVer, audit-driven correctness fixes by @takeokunn in #21
New Contributors
- @dependabot[bot] made their first contribution in #20
Full Changelog: v0.11.0...v1.0.0
v0.11.0
v0.10.0
Integrates three work units, verified green via nix flake check (667 tests) and CI.
Fixes — runtime correctness
- Cleanup hooks (
after-each/after-all) always run viaunwind-protect, and condition handling is widened toserious-conditionso SBCL platform timeouts (bare serious conditions, not errors) still reach cleanup. --bailonly consumes a following token when it parses as a valid bail value; supports inline--bail=N.- Isolated output is read via
uiop:read-file-string(char-accurate for multibyte content). gen-such-thatvalidates that its predicate is a function.:randomtest ordering computes each label hash once (decorate-sort-undecorate).
Performance
- Strict-empty-batch fast path in collection (skips the CPS walk for trivially-empty suites).
- Single-pass list+tail cloning, incremental stable hashing, one-shot suite lineage.
- S-expression reporters bind
*print-pretty*to nil for stable, single-line machine output. - Adds a benchmarking harness under
benchmarks/.
Refactor
- Split the largest source and test files into focused, single-responsibility modules with dependency-ordered ASDF wiring.
Full Changelog: v0.9.0...v0.10.0
cl-weave v0.8.0
Runtime hardening and concurrency safety harvested from the development
worktrees. Behavior-preserving for well-formed input; the changes bound
pathological input, remove quadratic hot paths, and make shared state
thread-safe.
Fixed
- mocks: O(n²) call recording → amortized O(1);
copy-treeon recorded
arguments (infinite loop on cyclic/shared structure) → cycle-safe graph copy;
a clear/register race that corrupted result slots → generation-guarded writes;
nested/overlapping spies restored out of order → proper LIFO spy stacks. - snapshots: non-atomic
:supersedewrites (file corruption on crash) →
temp-file + atomic rename under a lock; O(n²) diff → O(n). - watch: change detection keyed on write-date alone (missed same-second
edits, false-fired ontouch) → existence+mtime+size+content-hash signature;
O(n²)assocscans → hash; dependency specs resolved via
resolve-dependency-spec. - concurrency: worker pool defaulted to one OS thread per test (resource
exhaustion on large suites) → bounded pool; cooperative cancellation and
guaranteed thread cleanup on error. - reporters/matchers: improper/circular-list safety in
one-of-candidates
and run-result normalization;*print-circle*bound around cyclic failure
printing; shrinker errors no longer double-wrapped.
Changed
- DoS caps on retry / timeout / worker / shard / bail / candidate counts and
close-to precision; numeric-token length guard; CPU-based default worker
count. logic, shrinking, and tag/dependency normalizers rewritten recursion →
iterative with explicit cycle rejection.- Registry locking for concurrent registration; string-name validation on
register-suite/register-test. - Test selection/collection rebuilt from per-node subtree walks to precomputed
O(1) hash indexes. - CI: hardened workflows (SHA-pinned actions,
concurrencycancel-in-progress,
least-privilege permissions, fork-PR secret gating) and per-check
validationCommandsasserting each artifact's schema/shape.
Notes
normalize-bailnow returnst(re-mapped downstream to bail-limit 1);
register-suite/register-testrequire string names.- The subprocess-isolation rewrite is not in this release — it triggered a
Linux-onlysb-cover"Recursive lock attempt" cascade and is deferred to its
own PR after Linux-side debugging.
Full Changelog: v0.7.0...v0.8.0
cl-weave v0.7.0
Consolidates the useful, self-contained work found across the project's
development worktrees into one low-risk release. Speculative and large-scale
refactors (1.0 version bumps, file-splitting, concurrency/isolation rewrites,
the 100% coverage gate) were deliberately left out.
Fixed
- JUnit reporter:
xml-escaped-stringnow emits only characters valid per
the XML 1.0Charproduction, substituting?for everything else.
Previously surrogate code points (#xD800–#xDFFF) and the non-characters
#xFFFE/#xFFFFleaked into JUnit output and produced unparseable XML.
Behavior-preserving for all previously valid output.
Changed
- CI: all GitHub Actions are pinned to full-length commit SHAs, as now
required by repository policy.
Docs
- Added top-level
CHANGELOG.md,CODE_OF_CONDUCT.md,CONTRIBUTING.md,
SECURITY.md, andSUPPORT.md, each linking to the canonicaldocs/src/*
policies rather than duplicating them. - Aligned the release, versioning, and maintenance docs to reference GitHub
Releases plusCHANGELOG.md; added a documentation badge and Contributing
section to the README; clarified that thetimeoutprefix is an optional
outer guard.
No public API, CLI, or reporter-shape changes.
Full Changelog: v0.6.0...v0.7.0
cl-weave v0.6.0
Highlights
- Configurable coverage gates: enforce minimum expression/branch coverage from the CLI with
--coverage-min-expressionand--coverage-min-branch; unmet gates exit nonzero. - Linux-only CI, honestly documented: the darwin runner was removed from GitHub Actions (#10), and runtime-support metadata, docs, and tests now advertise SBCL on x86_64-linux as the supported target (#11). Local darwin
nixusage keeps working. --fail-with-no-testssmoke gates: the filtered CI smoke checks (workflow, flake checks, and quality-gate metadata) now fail when a filter selects zero tests instead of passing silently (#11).- Logic query fix:
resolve-logic-valuepreserves dotted logic pairs and resolves long proper lists iteratively instead of erroring on improper lists (#11). - Tooling cleanup: the perl
alarmtimeout shim is replaced by GNUtimeoutacross CI, flake checks, and documented commands; flake sources are cleaned withcleanSourceWith; community templates use "Public Surface" sections and docs drop Vitest/FiveAM compatibility framing (#11).
Validation
nix build .#checks.aarch64-darwin.test— 489 passed, 0 failed- GitHub Actions
nix (x86_64-linux)green onmain
Full changelog: v0.5.0...v0.6.0
cl-weave v0.5.0
What's Changed
- docs: minimize README and publish docs/ as a GitHub Pages mdBook site by @takeokunn in #7
- feat: extend test selection and dependency-aware watch by @takeokunn in #8
- Fix CLI coverage compilation by @takeokunn in #9
Full Changelog: v0.4.0...v0.5.0
cl-weave v0.4.0
User-visible changes
- Canonical ASDF test integration: the self-test suite now lives in the
cl-weave/testssecondary system insidecl-weave.asd, andasdf:test-systemdrives it. The standalonecl-weave-tests.asd,scripts/run-tests.lisp, and the script-based coverage gate are removed; CI andnix flake checkrun everything through the packagedcl-weaveCLI. - Benchmark API: new
benchmarkmacro andmeasurefunction withbenchmark-resultstatistics (minimum-ms,maximum-ms,mean-ms,median-ms). - Metadata schema v23 (breaking for metadata consumers): the
citationblock and lifecyclesecurityDocumentfield are removed following the repository governance-document cleanup. Vulnerability reporting now routes to private GitHub security advisories. - Internal refactor: registration macros, JSON metadata writers, logic query macros, and property generators are now generated from shared data-driven helper families; behavior is unchanged.
Validation
- Full
nix flake check(466 tests, reporters, smoke checks, structural lint) passes on x86_64-linux and aarch64-darwin.
cl-weave v0.1.0
First tagged release of cl-weave — a Vitest-inspired Common Lisp testing framework with a dependency-free core, structured machine-readable reporters, and AI-agent-oriented runtime metadata.
Highlights
- Vitest-style DSL:
describe/it/test, matcher assertions, smart S-expression assertions, table tests, focus/skip/todo, retry, timeout, bail, sharding, sequence ordering, filtering, concurrent execution, and expected failures - Property-based testing with deterministic shrinking, form-level mutation testing, subprocess isolation, snapshot matchers, mock functions, and CPS helpers
- spec, S-expression, JSON, JSONL/NDJSON, TAP, GitHub Actions, and JUnit XML reporters with stable artifact schemas
cl-weaveCLI (run/list/watch/doctor/metadata) with Vitest-shaped aliases and CI environment variables- AI-friendly runtime metadata: typed options, artifact schemas, capability matrix, package exports, and lifecycle contracts
- Nix flake packaging with reproducible CI entrypoints for Linux and macOS
Install
nix run github:takeokunn/cl-weave -- --help
nix profile install github:takeokunn/cl-weaveFull details in CHANGELOG.md.