Skip to content

Releases: nerima-lisp/cl-weave

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 10:29
v1.0.0
41020b8

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

Full Changelog: v0.11.0...v1.0.0

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 04:12
v0.11.0
fc41b53

Full Changelog: v0.10.0...v0.11.0

v0.10.0

Choose a tag to compare

@takeokunn takeokunn released this 24 Jul 04:41
v0.10.0
7ddc1a2

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 via unwind-protect, and condition handling is widened to serious-condition so SBCL platform timeouts (bare serious conditions, not errors) still reach cleanup.
  • --bail only 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-that validates that its predicate is a function.
  • :random test 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

Choose a tag to compare

@takeokunn takeokunn released this 19 Jul 06:20
v0.8.0
9854451

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-tree on 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 :supersede writes (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 on touch) → existence+mtime+size+content-hash signature;
    O(n²) assoc scans → 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, concurrency cancel-in-progress,
    least-privilege permissions, fork-PR secret gating) and per-check
    validationCommands asserting each artifact's schema/shape.

Notes

  • normalize-bail now returns t (re-mapped downstream to bail-limit 1);
    register-suite/register-test require string names.
  • The subprocess-isolation rewrite is not in this release — it triggered a
    Linux-only sb-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

Choose a tag to compare

@takeokunn takeokunn released this 19 Jul 05:07
v0.7.0
7f640c2

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-string now emits only characters valid per
    the XML 1.0 Char production, substituting ? for everything else.
    Previously surrogate code points (#xD800#xDFFF) and the non-characters
    #xFFFE/#xFFFF leaked 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, and SUPPORT.md, each linking to the canonical docs/src/*
    policies rather than duplicating them.
  • Aligned the release, versioning, and maintenance docs to reference GitHub
    Releases plus CHANGELOG.md; added a documentation badge and Contributing
    section to the README; clarified that the timeout prefix 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

Choose a tag to compare

@takeokunn takeokunn released this 12 Jul 19:19
v0.6.0
6d379f3

Highlights

  • Configurable coverage gates: enforce minimum expression/branch coverage from the CLI with --coverage-min-expression and --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 nix usage keeps working.
  • --fail-with-no-tests smoke 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-value preserves dotted logic pairs and resolves long proper lists iteratively instead of erroring on improper lists (#11).
  • Tooling cleanup: the perl alarm timeout shim is replaced by GNU timeout across CI, flake checks, and documented commands; flake sources are cleaned with cleanSourceWith; 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 on main

Full changelog: v0.5.0...v0.6.0

cl-weave v0.5.0

Choose a tag to compare

@takeokunn takeokunn released this 12 Jul 14:25
v0.5.0
7e282e3

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

Choose a tag to compare

@takeokunn takeokunn released this 12 Jul 13:15
v0.4.0
6c4ea81

User-visible changes

  • Canonical ASDF test integration: the self-test suite now lives in the cl-weave/tests secondary system inside cl-weave.asd, and asdf:test-system drives it. The standalone cl-weave-tests.asd, scripts/run-tests.lisp, and the script-based coverage gate are removed; CI and nix flake check run everything through the packaged cl-weave CLI.
  • Benchmark API: new benchmark macro and measure function with benchmark-result statistics (minimum-ms, maximum-ms, mean-ms, median-ms).
  • Metadata schema v23 (breaking for metadata consumers): the citation block and lifecycle securityDocument field 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

Choose a tag to compare

@takeokunn takeokunn released this 11 Jul 03:43
v0.1.0
9bf0250

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-weave CLI (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-weave

Full details in CHANGELOG.md.