Apply positional replacements in the same value-before-key order used when collecting matches.
Honor transducer accumulator changes, early reduction and completion results, while preserving find-when's
vector-or-nil result contract on Clojure and ClojureScript.
Preserve the original sequential collection passed to predicates during traversal.
Traverse ClojureScript ranges, map sequences, map entries and records through collection-protocol fallbacks.
Use an identity-unique ClojureScript removal sentinel so advanced compilation cannot confuse ordinary keyword data
with REMOVE. Reject undersupplied raw replacement arrays instead of inserting undefined values.
Preserve ClojureScript record types during value-only updates.
Honor key matching for JVM struct maps. Preserve their basis unless an actual edit renames or removes a base key;
such edits now produce an ordinary map instead of ignoring keys or replacing removed values with nil.
Correct the documented acc-set! return value and specify traversal, replacement-length, collision and
reconstruction contracts.
Keep helper macros on the compilation host to avoid undeclared-variable warnings from the standalone
ClojureScript compiler.
Regression coverage for traversal order, replacement cursors, metadata, collection boundaries, reentrancy and concurrency.
Shared collection-contract regressions, struct-map/XML coverage, and an advanced-compilation ClojureScript test task
included in bb test.
Reproducible JVM benchmarks with isolated workers, allocation measurements, deterministic fixtures and opt-in
scaling, map and vector suites, including a pinned Clojure 1.13 comparison runtime.
Controlled postwalk and value-only tree-seq comparisons, including separate collection/replacement timing and
allocation, derived traversal totals and per-JVM variation, replacing the older README figures.
A release check task and tested publication ordering: validate and build before pushing a tag, stop on command
failures, and publish the checked artifact from an unchanged clean checkout.
update-paths now accepts a vector or accumulator of replacements in addition to a function. Values are applied
sequentially in depth-first order matching path-when's traversal.
:raw-matches option for path-when returns the internal mutable accumulator (ArrayList on JVM, JS array on
ClojureScript) instead of converting to a vector. Enables zero-allocation update patterns by mutating matches
in-place and passing the same accumulator to update-paths.
acc-set! macro in co.multiply.pathling.accumulator for setting values at an index in accumulators.
Internal: Introduced Replacer interface (JVM) and IReplacer protocol (ClojureScript) to abstract over
function-based and collection-based replacement strategies.