Async-replication digest scans (ObjectDigestsInRange, CompareDigests, ApplyToObjectDigests) only read the object header via DocIDAndTimeFromBinary (~42 bytes), but the LSM replace-cursor path still copies each on-disk node’s full serialized value—including large vector payloads—out of the segment. That wastes allocations and bandwidth during hash-tree / digest scans.
Make on-disk replace-cursor iteration able to retain only the first N value bytes of each node and discard the remainder without allocating it, while keeping seek/merge/iteration semantics byte-identical to the existing full-value path (the cursor’s notion of node span/offset must still cover the whole on-disk node). N=0 must preserve today’s full-value behavior so default cursors are untouched. Memtable-backed entries can remain full (already in memory). Do not change the on-disk segment format.
Route ObjectDigestsInRange, CompareDigests, and ApplyToObjectDigests through that prefix-retaining on-disk path with N bounded by the header length DocIDAndTimeFromBinary actually reads. Cover both mmap and pread segment read paths, and keep reusable cursor buffer reuse correct across varying value sizes.
Interface contract — the change must expose exactly this surface:
Export storobj.MarshallerV1HeaderLen (header bound for digest scans). Bucket APIs: CursorReplaceDigestReusable(valuePrefixLen int) and CursorOnDiskDigest(valuePrefixLen int) returning *CursorReplace with on-disk segments in digest mode. Segment stack: newReplaceCursorDigestReusable(valuePrefixLen int) / SegmentGroup digest reusable cursors. Parsers: ParseReplaceNodeDigestIntoPread and ParseReplaceNodeDigestIntoMMAP retaining only the first valuePrefixLen value bytes with full-node out.offset parity vs the existing full parsers.
Work only inside this repository checkout. Make the code change the task
describes, keeping the diff focused — no drive-by refactors.
When you are done, leave your changes committed or in the working tree;
they are collected automatically.
Stay on this snapshot checkout (`task/ycb_weaviate_c00129f4a16e8`). Never checkout, pull, or rebase onto `main`. That branch is a README-only orphan.
Stay on this HEAD. Do not fetch another default branch. Push only on the Cursor-created `crazy-cursor/…` side branch from this HEAD.
Some past runs of this task were launched with a different prompt (the prompt template changed since, or those runs predate this benchmark's stored prompt). Each run persists the exact prompt it sent at launch — that per-launch record is the audit trail; this page shows only the current one.
Reference diff
The task commit's diff against its first parent — the judge's comparison target.