π¦ New version release - #544
Merged
Merged
Conversation
brentrager
force-pushed
the
changeset-release/main
branch
from
August 23, 2026 02:43
e0338bb to
cc1e48a
Compare
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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@smooai/smooth-operator@1.58.2
Patch Changes
f62ee95: fix(ingestion): the chunking contract (G2) β and the four ways the chunker was wrong
Gap G2 was recorded as open ("our knowledge store assumes pre-chunked text"),
but the
Chunkerthe connectors feed shipped with G1. What was actually missingwas the contract suite the gap doc asked for β and writing it found the
chunker wrong on four counts. Every one of them fails silently: no error, no
panic, just worse retrieval or a chunk the embedding API quietly truncates.
rust/ingestion/tests/chunking.rs(16 tests) pins chunk count / dense indices /stable ids, overlap as a shared run of words, metadata + title + source + acl
propagation onto every chunk, oversized spill with no word lost, UTF-8 integrity
at the boundary, and degenerate configs. Fixed against it:
max_charsis a hard cap on the emitted chunk, overlap included. Overlapwas prepended on top of a chunk that already filled the cap, so a default
500/64 chunker emitted chunks of up to 565 characters. The cap is the contract
with the embedding model's input limit β over it, the API truncates rather
than rejects, so the tail of a chunk is dropped from the index with nothing
logged. Overlap now comes out of the packing budget.
Chinese, Japanese or Thai document β or a long URL, or a minified blob β had
exactly one "word", so it came back as a single unbounded chunk. A 50k-char
document became one chunk, embedded truncated, retrievable as nothing useful.
The fallback cuts on character boundaries.
"\r\n\r\n"contains no"\n\n", soevery Windows-authored file and many HTTP-fetched pages arrived as one giant
paragraph and lost all paragraph structure. Content is CRLF-normalized first.
attributes section A's text to section B's heading at retrieval time.
Characters, never bytes, throughout: slicing to a byte offset to hit a character
cap cuts an em-dash or an emoji in half β a panic in Rust, silent mojibake in a
port to the other four languages.
Proof of red: reverting
chunker.rsin place, leaving the tests, fails 6 of 16.The UTF-8 guard needed a second pass and is worth calling out β built from
space-separated words it passed against a deliberately byte-slicing
implementation, because spaced text never reaches the character-split path at
all. Rebuilt on unspaced mixed-width text it panics on that same mutant. A guard
that cannot fail is the defect, not the reassurance.
Rust only. Chunking runs server-side in the ingestion crate; the other four
languages have no ingestion pipeline to port it into, so there is nothing to
port yet. No public API change β
Chunker::new/chunkkeep their signatures.@smooai/smooth-operator-web-chat-example@0.0.115
Patch Changes