Repository navigation
Conversation
added 6 commits
October 12, 2026 16:00
initial element leads to the wrong behaviour in some cases eg. "*", tests added
… of the slice, that is only appended to, so the underlying array data is not changed. Fixed the deadlock, add tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Mostly bug fixes that was found during extensive usage of the library and adding AI tools to the development pipeline.
The full list:
Correctness
Sum works with any associative operator (internal/internalpipe/sum.go)
Each parallel chunk now seeds its accumulator from real data instead of the type's zero value, so Sum is correct for +, *, min, max, … — not just addition.
Range reports an exact length for floats (internal/internalpipe/constructor.go)
Len is now derived consistently with the value predicate, removing a float-rounding off-by-one at range boundaries (integers unchanged).
ff.Reduce forwards its optional seed (pkg/ff/reduce.go)
The initVal argument is now passed through to the underlying reducer, so seeded folds behave as documented.
genTickets is robust for non-positive input (internal/internalpipe/pipe.go)
Reordered the clamp so the token helper can't block on a zero/negative count.
Concurrency & robustness
Any() terminates promptly and respects known bounds (internal/internalpipe/any.go)
The parallel scan is now bounded and cancellable, so background workers stop as soon as a result is found, and Take-limited pipes are treated as bounded rather than "unknown length".
First() finishes deterministically for every pipe length (internal/internalpipe/first.go)
Chunk bookkeeping is now exact and the read window is clamped to the pipe length, so parallel First() completes for any length/worker combination and never reads past the end.
Yeti.Handle() is reentrancy-safe (internal/internalpipe/yeet.go)
Handlers now run outside the internal locks, so a handler can safely interact with the same Yeti (Yeet/Snag/Handle) without contention.
Documentation accuracy
Code doc comments match shipped API (pkg/pipe/constructors.go, pkg/pipies/filters.go)
Removed references to a helper that isn't shipped yet (Until) and a non-existent method (Pipe.Distinct()), and fixed a Fn typo — comments now describe the actual surface.
README examples compile and match behavior (README.md)
Corrected signatures and snippets (pointer returns for Any/First, uint16 parallelism, Take vs Gen results, reduce examples) so copy-paste examples work as written.
Tests
Added regression coverage for each area:
Sum with non-+ operators (*, min)
Any() goroutine-leak guard
First() with uneven chunking
Yeti handler reentrancy + concurrent Yeet/Snag/Handle
Range float length boundaries
genTickets with non-positive counts