The simple chunker has an edge case worth adding to its known limitations: with overlap set to zero, current.slice(-overlap) becomes slice(0), which copies the entire previous chunk. A caller trying to disable overlap can therefore get growing duplicated content instead.
I would handle zero explicitly and validate that overlap is non-negative and smaller than chunkSize. A tiny fixture with several short paragraphs can assert the exact chunk boundaries for zero and positive overlap. That makes the from-scratch implementation more useful for your suggested 300, 800 and 2000-character experiments, where an unnoticed duplication bug would distort the retrieval comparison.