commit 431ecc6 ↗ · timescale/timescaledb · · committed Jun 12, 2026 · +414−11 · base ba6bc789fb81
Agent prompt
what a new run launched now would send
Logical decoding (and similar tooling) sometimes needs to materialize the original hypertable rows from a single compressed-chunk row (one compressed batch), without decompressing a whole chunk table.
Add a SQL set-returning function that takes one compressed-batch row as a `record` and yields the decompressed user rows it represents. Recover the input row type from the record itself; take the output row shape from the call site’s column definition list so callers can write e.g.:
SELECT x.*
FROM <compressed_chunk> t
LIMIT 1
CROSS JOIN LATERAL <fn>(t) AS x(time timestamptz, device_id int, value float);
Acceptance criteria a teammate would know upfront:
- Decompressing all batches from a compressed chunk (lateral over each row) must be set-equal to the uncompressed hypertable data (no missing/extra rows), including NULLs.
- Decompressing one batch must yield exactly that batch’s rows.
- Non-compressed records must error as not a compressed batch (including missing/wrong-typed batch metadata).
- Segment-by / column type mismatches against the AS (...) shape must raise a user-facing invalid-parameter error, not an internal error.
- Wire it through the usual extension SQL + TSL cross-module registration so community builds fail cleanly if the function is invoked without TSL.
Interface contract — the change must expose exactly this surface:
_timescaledb_functions.decompress_batch(record) RETURNS SETOF record; C symbol ts_decompress_batch (LANGUAGE C STRICT).
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_timescaledb_c431ecc6a8def`). 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.