Skip to content

Refresh the roadmap's open list against the real issue state - #320

Merged
ChronicallyJD merged 1 commit into
mainfrom
docs/roadmap-refresh
Aug 1, 2026
Merged

Refresh the roadmap's open list against the real issue state#320
ChronicallyJD merged 1 commit into
mainfrom
docs/roadmap-refresh

Conversation

@ChronicallyJD

Copy link
Copy Markdown
Collaborator

The ## Remaining list in design/ROADMAP.md was written on 2026-07-23 and
listed two closed issues, #168 and #171, as the next work to take. Anyone reading
it to decide what to do next would have picked up finished work. The roadmap is
the project's stated source of truth, so a stale list there is worse than none.

What changed

Records the 2026-07-31 closures: #168, #171, #301, #311, #314, #254, and #282.

Replaces the stale entries with what is actually open, in value-to-effort order:

  1. Selective-scan page reads (Chunk-group skipping avoids decode but not page reads: skipping to 1 of 667 groups still faults ~the whole table #310). Listed first because it is the dominant
    selective-query lever. Stated carefully: two causes are fixed and measured on
    a 20-group probe, 9577 buffers to 1547, and the 100M measurement that opened
    the issue has not been re-run against them. How much of the original 304,233
    remains is unknown.
  2. Bulk load throughput (Bulk load is 4.9x slower than heap, and import inherits it #155), with the separate ingest path (Explore a faster bulk-ingest path that bypasses core COPY's per-field parse (post-#155 load gap) #300) noted
    alongside rather than as its own entry, since they share a target.
  3. Vectorized decompression and aggregation (Vectorized decompression + aggregation for full-scan aggregates (~4× behind TimescaleDB) #289).
  4. reltuples after ANALYZE, unchanged and still cosmetic.

Note

No issue is closed by this commit, and it says so explicitly. Writing "does not
close #N" in a commit message closes #N: GitHub matches the keyword and ignores
the negation. That is how #310 came to be closed by the #315 commit, whose text
said the opposite. It has been reopened.

The Remaining list was written on 2026-07-23 and listed two items that have since
been closed, #168 and #171, as the next work to take. Anyone reading it for what
to do next would have picked up finished work.

Records the 2026-07-31 closures, and replaces the stale entries with what is
actually open: selective-scan page reads (#310), bulk load throughput (#155) with
the separate ingest path (#300) noted alongside it, and vectorized decompression
and aggregation (#289).

#310 is listed first and stated carefully: two causes are fixed and measured on a
20-group probe, and the 100M measurement that opened the issue has not been
re-run against them, so the size of the remainder is unknown.

Refs #310, #155, #300, #289. No issue is closed by this commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011miCFRSatixeNRw3w5yNq8
@ChronicallyJD
ChronicallyJD merged commit 87e3179 into main Aug 1, 2026
11 checks passed
@ChronicallyJD
ChronicallyJD deleted the docs/roadmap-refresh branch August 1, 2026 04:49
ChronicallyJD pushed a commit that referenced this pull request Aug 1, 2026
The refresh in #320 rebuilt the open list from issue STATE. The follow-up commit on
this branch fixed the #155 entry but repeated the same mistake on the entry it
wrote to replace it. An audit of every entry against its issue thread, its pull
requests and main found that all four were wrong, in three different ways.

#289 was a copy of the issue body and gave no sign that work is in flight. The
decompression half already merged (#307, 3.8 percent on q4 and 3.2 on q5) and the
aggregation half is open as #321. The "about 4x behind TimescaleDB" line reads as
the size of the prize for that work, but #321 measures 1.20x and 1.38x, and by its
own account the larger lever is dictionary-coded grouping. The widest gap, q6 at
5.3x behind and 3.1x slower than heap, is the only shape where columnar loses to
heap and nothing in flight touches it.

#300 was framed as core COPY's per-field parse. #300's own profile refuted that
before the entry was written: parse is about 21 percent, encode about 53 percent,
so bypassing the parser cannot make columnar beat heap. The measured top lever is
parallelism over the existing encoder with COPY unchanged, prototyped at 7.39x.
IMPORT_THROUGHPUT_PLAN.md was cited as the reference and is the wrong pointer: it
predates the #283 to #286 work and puts COPY under "Not in scope".

reltuples is removed. It was fixed on 2026-07-28 by #189 and is now exact on every
measured shape, and the cause the entry gave was explicitly disproven: it was a
block-offset mismatch, not blocks holding no row-group data. The line was written
about nine hours before the fix and survived two refreshes.

#310 is no longer listed as work. Both causes are merged and it was re-measured at
100M, 273,212 buffers to 8,917. It stays open for a confirmation reading on the
real dataset.

#291 was open and absent from the list; added, with the note that its
documentation half landed in #298.

Also fixed, all verified: the "Deferred, not yet built" paragraph listed two things
that have been on main since 2026-07-23; a cross-reference to "item 0" that #320's
renumbering left dangling; six Done rows naming the extension schema as columnar
rather than pgcolumnar, which a reader copying them would find does not exist; and
a closed-since line with the wrong date and three omissions.

Refs #289, #300, #291, #310. No issue is closed by this commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011miCFRSatixeNRw3w5yNq8
ChronicallyJD pushed a commit that referenced this pull request Aug 2, 2026
The refresh in #320 rebuilt the open list from issue STATE and not from issue
CONTENT. #155 was still open, so its original text was carried forward verbatim,
including the "about 4.9x slower than heap" figure. That number was the problem
statement from before the work, not the result: four encoder levers (#283 to #286,
merged via #290) had already taken the 100M-row load from 783 s to 383 s and the
gap to heap from about 4.9x to about 2.2x, with a byte-identical on-disk image.

So the roadmap named finished work as the next thing to take, and quoted a measured
figure that had been superseded. #155 itself was left open only because the
resolution comment said "closing as resolved" without closing it; it is closed now,
after verifying the four commits are on main.

The entry becomes #300, which is the real remaining work: core COPY's per-field
parse, paid identically by heap and TimescaleDB, and not reachable by another
encoder change.

Refs #155, #300. No issue is closed by this commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011miCFRSatixeNRw3w5yNq8
ChronicallyJD pushed a commit that referenced this pull request Aug 2, 2026
The refresh in #320 rebuilt the open list from issue STATE. The follow-up commit on
this branch fixed the #155 entry but repeated the same mistake on the entry it
wrote to replace it. An audit of every entry against its issue thread, its pull
requests and main found that all four were wrong, in three different ways.

#289 was a copy of the issue body and gave no sign that work is in flight. The
decompression half already merged (#307, 3.8 percent on q4 and 3.2 on q5) and the
aggregation half is open as #321. The "about 4x behind TimescaleDB" line reads as
the size of the prize for that work, but #321 measures 1.20x and 1.38x, and by its
own account the larger lever is dictionary-coded grouping. The widest gap, q6 at
5.3x behind and 3.1x slower than heap, is the only shape where columnar loses to
heap and nothing in flight touches it.

#300 was framed as core COPY's per-field parse. #300's own profile refuted that
before the entry was written: parse is about 21 percent, encode about 53 percent,
so bypassing the parser cannot make columnar beat heap. The measured top lever is
parallelism over the existing encoder with COPY unchanged, prototyped at 7.39x.
IMPORT_THROUGHPUT_PLAN.md was cited as the reference and is the wrong pointer: it
predates the #283 to #286 work and puts COPY under "Not in scope".

reltuples is removed. It was fixed on 2026-07-28 by #189 and is now exact on every
measured shape, and the cause the entry gave was explicitly disproven: it was a
block-offset mismatch, not blocks holding no row-group data. The line was written
about nine hours before the fix and survived two refreshes.

#310 is no longer listed as work. Both causes are merged and it was re-measured at
100M, 273,212 buffers to 8,917. It stays open for a confirmation reading on the
real dataset.

#291 was open and absent from the list; added, with the note that its
documentation half landed in #298.

Also fixed, all verified: the "Deferred, not yet built" paragraph listed two things
that have been on main since 2026-07-23; a cross-reference to "item 0" that #320's
renumbering left dangling; six Done rows naming the extension schema as columnar
rather than pgcolumnar, which a reader copying them would find does not exist; and
a closed-since line with the wrong date and three omissions.

Refs #289, #300, #291, #310. No issue is closed by this commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011miCFRSatixeNRw3w5yNq8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants