Skip to content

chore: sync upstream dev for embedded Sirius - #13

Merged
aunjgr merged 32 commits into
matrixorigin:upstream-dev-mergefrom
aunjgr:sync/upstream-dev-merge
Sep 16, 2026
Merged

aunjgr merged 32 commits into
matrixorigin:upstream-dev-mergefrom
aunjgr:sync/upstream-dev-merge

Conversation

@aunjgr

@aunjgr aunjgr commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Refs matrixorigin/matrixone#28966, migration PR 1 of 10.

Synchronize upstream-dev-merge with sirius-db/sirius:dev at
05148c78756fa743aea7e0bd94ae7b688cda8411, retaining the TAE GPU ingestible,
query-scoped execution evidence and GPU task-owner quiescence changes already
on the integration branch. This is the foundation for embedding Sirius in MO;
it does not introduce the C ABI or port Flight/mo_scan onto the new engine.

Merge resolution and compatibility

  • Preserve both TAE and newly enabled upstream Iceberg sources/planner admission.
  • Preserve TAE's nvcomp linkage and upstream's Rust telemetry archive linkage.
  • Retain LZ4 in Pixi and seed lock regeneration from the upstream lock, leaving
    only six LZ4 package entries beyond upstream instead of unrelated dependency churn.
  • Adapt the retained fatal-stream branch to upstream's captured query-owned
    completion handler (the executor-global member was removed upstream).
  • Implement the new ingestible_table_info::display_name() contract for TAE
    without exposing manifest/object paths. Add a metadata regression and its
    narrowly scoped scanner-header test include.
  • Use the pinned DuckDB/cuCascade/TAE dependencies and upstream RAPIDS 26.08.

Validation

Native Pixi build, no container rebuilds, local RTX 3070 (sm86):

  • Release duckdb and sirius_unittest build passed.
  • TAE metadata, GPU TAE fixture and GPU failure-lifetime tests:
    142 assertions in 3 cases passed. The TAE fixture checks actual GPU
    execution counters and disables DuckDB fallback.
  • Separate sirius_execution_evidence_unittest:
    40 assertions in 6 cases passed. The first combined selection correctly
    reported that this tag is not in the GPU test binary; this separate target
    supplies the evidence rather than counting an empty selection as a pass.
  • Owning GPU pipeline-task suite: 162 assertions in 12 cases passed, including
    OOM retry/history, sink publication, materialization and failure lifetime.
  • Four TAE fixture queries (projection, aggregate, NULL filtering and a
    two-input join/group/order query) matched CPU CSV output with exactly two GPU
    pipeline workers and fallback disabled; execution logs contain the GPU_SCAN
    pipelines. Both outputs contain 23 rows.
  • Changed C++ formatting check passed.
  • No SF10/all-22 or embedded-mode claim is made by this synchronization PR.

The approved migration design is in matrixorigin/matrixone#28973; full numeric
compatibility remains tracked separately by matrixorigin/matrixone#28968.

mbrobbel and others added 30 commits September 8, 2026 12:40
Fix some deprecation warnings for 26.10.
## What changes for users

When Sirius rebuilds an spdlog sink after a logging-setting change, a
failed
rebuild must not leave the reported configuration describing a sink that
never
became active. This PR now restores the prior flush interval when that
rebuild
fails, matching its existing rollback behavior for backend and directory
changes.

Users still choose the supported logging backend, directory, level, and
flush
interval. Sirius owns validation and the transactional sink replacement.
A
focused regression forces the deterministic invalid-directory failure
and
checks that both the previous current_setting value and the exact active
sink
remain unchanged. The evidence boundary is that deterministic
construction
failure; this does not claim recovery from arbitrary external filesystem
failures after a sink is installed.

## Summary

- reject unsupported startup and runtime logging backend/level values
before mutation
- preserve the active backend, directory, sink, and startup logging
tuple when replacement sink construction fails
- restore LOG_FLUSH_SECONDS when spdlog sink reconstruction fails
- reject negative sirius_log_flush_seconds while preserving 0 as the
explicit periodic-flush opt-out
- consolidate the adjacent logging validation formerly carried by sirius-db#1516
into the rollback transaction already reviewed here

## Contract

Runtime backend changes accept only duckdb, spdlog, or noop; runtime
level
changes accept only trace, debug, info, warn, error, critical, or off.
Rejected
names leave visible and effective logging state unchanged. Runtime
directory,
backend, and flush-interval transitions restore their prior
process-global
value when sink construction fails, and startup restores the complete
backend/directory/level tuple. Flush intervals must be non-negative; 0
disables
periodic flushing.

## Why one PR

Validation and rollback touch the same startup tuple, setters, and
isolated-context regressions. Keeping them together makes the invariant
reviewable in one place: validate before mutation, then restore the
prior
coupled state if the external sink transition fails. This supersedes
sirius-db#1516;
sirius-db#1517 and sirius-db#1520 were already consolidated into those two predecessor
heads.

## Current public identity

- prior reviewed public head: 6afa3b3
- replacement head: 2373ed6
- candidate tree: c81c11e
- three-path review-repair diff SHA-256:
  67a00f054e528488863a4adf60e469336f268d8d1feaeca9e4dc1ba7d5cda1a8
- current Sirius dev observed during repair:
de71900; GitHub reports the replacement
  head mergeable

## Review repair

- restores LOG_FLUSH_SECONDS on any install_configured_log_sink throw
and rethrows
- adds a focused invalid-directory regression that verifies the prior
  DuckDB-visible value, process-global value, and exact sink identity
- changes the three environment pointers to auto const*
- uses non-throwing std::filesystem::remove_all overloads in the
affected
  failure-test teardown paths

## Validation

- complete replacement diff independently cold-reviewed; no submodule or
unrelated-source drift
- targeted repository pre-commit hooks pass, including clang-format,
codespell,
  and orphan-test validation
- explicit scripts/check_orphan_tests.py, git diff --check, and git show
--check pass
- native C++ execution was unavailable on the Apple-arm64 author host
without
  the Sirius Pixi/CUDA environment
- replacement exact-head hosted CI passes: Check 32994600965, Test
  32994601203, Distribution 32994602370, and Validate 32994766298

### Retained predecessor hosted receipts

- rollback head 19e58e4: workflow
31726205775; CUDA 13 runtime job 94536097118 and terminal aggregate job
  94545844935 passed
- validation head a3dfe9e: workflow
31726952876; CUDA 13 runtime job 94540138947 and terminal aggregate job
  94551660464 passed

### Retained failed-head repair receipt

- first consolidated head 8429111
omitted
the validation predecessor's utils/log_test_utils.hpp include while
retaining
  its scoped_recording_log_sink regression
- exact-head workflows 31732638303 and 31732638391 failed compilation at
  test/cpp/config/test_context.cpp:350
- repaired head deb2902: workflow
31733223327; runtime job 94559525138 and aggregate job 94566061275
passed
- the failed predecessor remains separately retained and receives no
terminal credit

### Retained pre-review current-dev receipt

- head 6afa3b3: hosted lint, GCC,
Clang,
  CUDA 13 build/runtime, TPC-H snapshot, and terminal aggregate passed
- Check 32350078769, Test 32350078679, Distribution 32350079434

---------

Co-authored-by: Abel Brown <abelb@nvidia.com>
…roseconds (sirius-db#1634)

## Description

GPU parquet scans store `TIMESTAMP_MILLIS` as cuDF
`TIMESTAMP_MILLISECONDS`. DuckDB `TIMESTAMP` is microseconds. The result
chunk reader only compared physical `INT64` storage, so it memcpy'd
millis into a microsecond vector and timestamps appeared ~1000× too
close to the Unix epoch (e.g. `1970-01-11` instead of `1997-09-05`).

This maps cuDF timestamp types (and `BOOL8`) in `cudf_type_to_duckdb`
and casts when **logical** types differ, in both `get_next_chunk` and
nested `read_into`.

Verified with SpatialBench SF10 `trip.t_pickuptime` on GPU vs CPU
(`1997-09-05 03:53:09` for `t_tripkey = 37529225`).

## Checklist
- [x] Read CONTRIBUTING.md
- [ ] Cover changes with new or existing tests
- [x] Document configuration changes in code and summarize in the
description above
- [ ] Update human and agent documentation (README.md, docs/, skills,
CLAUDE.md)

## Test plan
- [ ] GPU parquet scan of a `TIMESTAMP_MILLIS` column matches DuckDB CPU
values (not epoch-offset)
- [ ] Existing `test_host_table_chunk_reader` still passes

## References
No existing issue. Related but distinct: sirius-db#146 (result collector
widening), sirius-db#1107 (StarRocks timestamp encode).

---------

Co-authored-by: Patrick Wilson <611133+patdevinwilson@users.noreply.github.com>
…y support (sirius-db#1364)

This is PR 1 from a stack of PRs which together will make Sirius
internals be able to handle Concurrent query execution. This PR only
targets a part of task_creator. It is purposefully kept small to make it
easier to review.

## Summary

  Refactor task_creator and associated task queues to support concurrent
queries: per-query state is now isolated in a keyed map so that cleanup,
draining, and teardown target exactly one query without touching any
other
  in-flight query.

NOTE: this does not fully address how query teardown works for the
task_creator. That will be handled later. Additionally the following
constructs were added, but should be removed later and replaced by
something better:
   std::mutex in_flight_mutex;
  std::condition_variable in_flight_cv;
  std::size_t in_flight{0};
  void enter_in_flight();
  void leave_in_flight();
  void wait_for_in_flight();

  ### Motivation

  Previously, task_creator held a single global execution context and a
  single global pipeline-state map. Cleanup on query end called
interrupt() + drain() on the whole task-creation queue -- stalling every
  other query's producers and consumers -- and then cleared all global
  states in the map. This made it impossible to run more than one query
  concurrently through the same SiriusContext.

  ### What changed

  --- task_creator: per-query state ---

  - Introduced query_task_global_state: a per-query bundle holding the
    client context, pipeline global states, lookahead queue, and an
    in_flight counter (replaces _bounded_pool->wait_all() for per-query
    join).
  - set_client_context(query_id, ctx) now registers an entry in a keyed
    map instead of overwriting a single pointer.
  - prepare_for_query, schedule_lookahead, and drain_pending_tasks all
    look up the correct entry by query_id instead of touching shared
    singletons.
- drain_pending_tasks(query_id) drops only that query's queued creation
requests (via multi_index_priority_queue::drain(query_index)), leaving
every other query's requests in the queue. The queue itself stays open
    -- no interrupt()/reactivate() pair.
  - reset(query_id) drains pending tasks, waits for in-flight lambdas to
    finish, then removes the entry from the map.
- reset_all() iterates every registered entry and calls reset() on each;
    called from SiriusContext::terminate() as a safety net.

  --- sirius_pipeline: stamped with query id and priority ---

  - Added set_query_id/get_query_id and set_priority/get_priority to
    sirius_pipeline so that schedule() can derive queue index keys from
    the pipeline without taking the task_creator per-query lock on the
    hot path.
- planner::query::build_indices stamps every pipeline with its
query_id_t
    so the key is available before task_creator sees it.

  --- Shared index_keys_for extractor ---

  - Moved the key extraction lambda out of task_scheduler's constructor
    into a free function pipeline::index_keys_for (declared in
    gpu_pipeline_task.hpp, defined in gpu_pipeline_task.cpp).
- Both task_scheduler's queue and every gpu_pipeline_executor's queue
now
    use this single extractor, so a per-query drain(query_index{...})
    targets the same tasks in both queues.
  - The extractor reads query_id from pipe->get_query_id() rather than
unpacking the high bits of the scheduling priority; the priority only
    preserves 31 bits of the query id (sirius::query_priority_bits), so
    the unpacked value diverges from the real id once bit 31 is set,
    causing silent drain misses.

  --- itask_executor: per-query drain ---

  - Switched the internal queue from inspectable_mpsc to
    multi_index_priority_queue (using index_keys_for).
- Added drain_query_tasks(query_id) which drops only that query's queued
    tasks without touching others.

  --- task_scheduler: per-query drain ---

  - Added drain_query_tasks(query_id) which calls drain_query_tasks on
    every gpu_pipeline_executor and on the scheduler's own queue.
  - Called from SiriusContext::run_mandatory_cleanup after
task_creator::reset (producer stopped first, then queued work dropped,
    then query_.reset() destroys the plan).

  --- SiriusContext cleanup ordering ---

  - run_mandatory_cleanup now calls task_creator_->reset(query_id) then
    task_scheduler_->drain_query_tasks(query_id) before query_.reset(),
ensuring no queued task or in-flight lambda holds a raw operator pointer
    into the plan that is about to be destroyed.
  - The same ordered pair runs in drop_query_runtime_state_best_effort
    (the noexcept error backstop).
- terminate() calls reset_all() as a final safety net before destroying
    task_creator.

--- multi_index_priority_queue ---

- push() now returns bool (true = enqueued, false = dropped because
  interrupted).

### Tests

- test_task_creator_query_state.cpp (new): lifecycle correctness for the
per-query entry map -- two queries coexist, cleanup targets exactly one,
  reset of an unknown query is a no-op, double-reset is safe.
- test_task_index_keys.cpp (new): index_keys_for derives query_id from
  the pipeline rather than from the priority's high bits; tasks with
  bit-31 set in their query id still key correctly; non-pipeline tasks
  get sentinel keys.
- test_multi_index_priority_queue.cpp: added a case verifying that
  drain(query_index{...}) leaves the queue open for subsequent pushes
  (unlike interrupt()).
- test_task_creator.cpp: updated fixture to pass query_id through
  set_client_context.
…ks (sirius-db#1682)

Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.25.0 to 1.26.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuid-rs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v1.26.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add ContextV7::with_additional_precision_bits by <a
href="https://github.com/ChrisJr404"><code>@​ChrisJr404</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/904">uuid-rs/uuid#904</a></li>
<li>Prepare for 1.26.0 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/905">uuid-rs/uuid#905</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uuid-rs/uuid/compare/1.25.0...v1.26.0">https://github.com/uuid-rs/uuid/compare/1.25.0...v1.26.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/uuid-rs/uuid/commit/cdc96a87bddc38d0eb8f894c764e151d2299b4b3"><code>cdc96a8</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/905">#905</a> from
uuid-rs/cargo/v1.26.0</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/34e4f49c0d50c12f1b3021baf98b8fb91f6407bb"><code>34e4f49</code></a>
don't test macros under miri</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/d9e7242b37755d844d19fa74559a88e1c46c5206"><code>d9e7242</code></a>
update nightly used for miri</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/ec16819865b89aa3c52456c8afd0ce9a90f0fcdb"><code>ec16819</code></a>
prepare for 1.26.0 release</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/162cd208a4521138f1d8ce05b63342ba7ba5c4e6"><code>162cd20</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/904">#904</a> from
ChrisJr404/v7-additional-precision-bits</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/97eceffa708f87969792af604291d3e4984dfc90"><code>97eceff</code></a>
Add ContextV7::with_additional_precision_bits for microsecond
clocks</li>
<li>See full diff in <a
href="https://github.com/uuid-rs/uuid/compare/1.25.0...v1.26.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.25.0&new-version=1.26.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.25.0 to 1.26.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuid-rs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v1.26.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add ContextV7::with_additional_precision_bits by <a
href="https://github.com/ChrisJr404"><code>@​ChrisJr404</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/904">uuid-rs/uuid#904</a></li>
<li>Prepare for 1.26.0 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/905">uuid-rs/uuid#905</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uuid-rs/uuid/compare/1.25.0...v1.26.0">https://github.com/uuid-rs/uuid/compare/1.25.0...v1.26.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/uuid-rs/uuid/commit/cdc96a87bddc38d0eb8f894c764e151d2299b4b3"><code>cdc96a8</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/905">#905</a> from
uuid-rs/cargo/v1.26.0</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/34e4f49c0d50c12f1b3021baf98b8fb91f6407bb"><code>34e4f49</code></a>
don't test macros under miri</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/d9e7242b37755d844d19fa74559a88e1c46c5206"><code>d9e7242</code></a>
update nightly used for miri</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/ec16819865b89aa3c52456c8afd0ce9a90f0fcdb"><code>ec16819</code></a>
prepare for 1.26.0 release</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/162cd208a4521138f1d8ce05b63342ba7ba5c4e6"><code>162cd20</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/904">#904</a> from
ChrisJr404/v7-additional-precision-bits</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/97eceffa708f87969792af604291d3e4984dfc90"><code>97eceff</code></a>
Add ContextV7::with_additional_precision_bits for microsecond
clocks</li>
<li>See full diff in <a
href="https://github.com/uuid-rs/uuid/compare/1.25.0...v1.26.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.25.0&new-version=1.26.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…e-side compaction (sirius-db#1556)

# perf(scan): cache MVCC keep-masks by version, compose them into
decode-side compaction

**Rebased onto `dev`; one commit, no stacking.**

This PR was originally stacked on sirius-db#1409, which @joosthooz reimplemented
as sirius-db#1474 (decompression
pushdown) and sirius-db#1524 (late materialization). It also carried a per-chunk
MVCC gating commit that
has since landed independently as sirius-db#1555. Both bases are now in `dev`, so
what remains here is a
single commit re-derived against the current architecture.

## Problem

A table with committed deletes paid for its visibility keep-mask twice:

1. **The mask set was rebuilt on every query** — visibility-plan
capture, `GetSelVector` fill,
pinned carve — even when nothing had changed since the last build. The
visible state of a
table only changes at commits, so this is repeated work at an unchanged
version.
2. **Every masked chunk gave up decode-side compaction**, falling back
to a full-width decode
plus filter-by-copy. sirius-db#1555 fixed the *over*-gating (an entry with any
MVCC state disabled the
pushdown for all its chunks, including unmasked ones), but a genuinely
masked chunk still lost
   compaction outright.

## Change

### Part 1 — per-entry keep-mask version cache (`mvcc_mask_cache.hpp`)

`prepare_for_query` probes and publishes a single-version cache on the
pinned entry, keyed by
`{DuckTransactionManager::GetLastCommit, the querying transaction's
start_time, ChangesMade}`.

- **Reuse** requires an unchanged `last_commit`, a covering snapshot,
and a writer-free query.
- **Publishing** additionally requires the builder's snapshot to cover
every existing commit — a
writer sees its own uncommitted deletes, so its masks encode visibility
private to it.

This is exact because DuckDB assigns start times and commit ids from one
counter under the lock
that publishes `last_commit`: a concurrent commit receives an id above
the builder's snapshot and
increments `last_commit` before any transaction that could observe it
begins.

`prepare_mvcc_mask_tasks` skips `masks_ready` requests; a (re-)pin
resets the cache. Disable with
`SIRIUS_MVCC_MASK_CACHE=0`.

### Part 2 — compose the keep-mask into decode-side compaction

Extends the per-chunk gate from **exclusion** to **composition**: rather
than stripping row
selection from a masked chunk, attach the mask and let the decode AND it
into the same selection.

- `decode_visibility_mask` attaches to both compressed representations;
the cached provider
attaches it per masked chunk (device and host tiers) alongside the
pushdown scan.
- `decompress_chunk` takes the mask as a parameter — it is per chunk,
while
`decompression_pushdown_scan` is per scan — and hands the host words to
the wave orchestrator.
- `scan_filter_request` carries the words; the orchestrator uploads them
on s0 and ANDs them in as
one additional combine source, appended last so source 0's zero tail
survives.
`scan_filter_result::keep_mask_applied` echoes it, and only when `status
== applied`.
- `pushdown_outcome::visibility_mask_applied` carries the consumption
signal.
`prepare_for_processing` clears the split's mask on it, re-enabling the
zero-copy steal; the
  backstop still throws on a compacted batch with an unconsumed mask.
- The `mvcc_chunk_mask` padding contract tightens from don't-care to
zero. The job already zeroed
  its carves; the selection tail-zero invariant now depends on it.

A mask is never a filter source on its own: with no real filter the
survivor rate is just the
visible-row fraction, so compaction costs more than it saves and such a
request is refused. Every
non-applied outcome — refusal, selectivity bail, failure, feature off —
keeps the full-width
decode and the scan-side positional mask.

## Notes on the rebase

sirius-db#1524 rewrote the APIs this work sits on, so the port was not
mechanical:

- `decode_pushdown.hpp` is gone; `decode_visibility_mask` now lives in
`compressed_scan.hpp`.
- The three applied-batch carrier classes collapsed in `dev` into one
value-carrying
`pushdown_outcome`, so the consumption signal is a field on that outcome
rather than the
original `visibility_applied_gpu_table_representation` plus two
per-class flags. The invariant
still holds: `try_decompress_fused` is the only place that sets `applied
= true`, and it sets
  `keep_mask_applied` in the same statement.
- `set_range_pushdown`/`set_membership_pushdown` became
`set_pushdown_scan`.

## Testing

- Clean build.
- `[scan_manager] [cached_serving] [decode] [scan] [dynamic_filter]`:
581/581.
- Full C++ unit suite: 3025/3025.
- Full pre-commit hook set passes.
- Tests added: `test_mvcc_mask_job.cpp` covers the cache-key truth table
and the `masks_ready`
skip; `test_cached_serving_hardening.cpp` covers per-chunk composition
(a masked slot gets the
pushdown **and** its visibility mask, sharing the slot's words; a
default slot gets the pushdown
  alone).

## Not yet measured

⚠️ Earlier revisions of this description quoted SF1000 deltas for the
recovered mask-serving
overhead. Those were measured against the original sirius-db#1409 stack, before
sirius-db#1474/sirius-db#1524 rewrote the
decode path and before sirius-db#1555 landed, so they no longer describe this
change. They have been
removed rather than restated, and the change should be re-measured
before merge.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
## Motivation

PR sirius-db#1660 added a repository-local Claude skill for producing navigable
learning digests of pull requests. Codex users should have the
equivalent workflow available from the repository, with Codex-native
discovery and sandbox handling. Reviewers also benefit from seeing the
behavioral change and system flow before implementation detail.

The improvements developed for the Codex version are also applied back
to the Claude skill so both agents produce the same digest structure,
writing style, diagrams, Markdown source, and HTML preview. Only their
sandbox instructions, renderer path, and preview wording differ.

Codex opens Markdown files as source, so viewer-selected syntax
highlighting does not reliably show additions in green and removals in
red. The skill now generates a companion HTML preview to make that
presentation deterministic while preserving Markdown as the canonical,
portable artifact.

## What changed

- add the `pr-digest` skill under `.agents/skills/` for repository-wide
Codex discovery
- bring `.claude/skills/pr-digest/` to feature and writing-style parity
with the Codex skill
- keep the renderer, worked example, and plain-language guide
byte-identical between both packages
- translate the Claude-specific sandbox bypass into Codex elevated `gh`
execution
- require a grounded before/after example and compact Mermaid flowchart
before the key-change deep dive
- connect diagram concepts to line-accurate source anchors
- write for engineers who are new to the subsystem: define acronyms and
unavoidable terms, use behavior-focused headings, and explain each
mechanism as actor, action, and consequence
- add a PR-specific plain-language guide with concrete jargon rewrites
and a final readability check
- preserve standard fenced `diff` blocks with `+` and `-` markers in the
Markdown source
- require both `PR_digest_<N>.md` and a generated, self-contained
`PR_digest_<N>.html` preview
- add a standard-library renderer that converts diff rows to explicit
green/red styling and simple Mermaid flowcharts to accessible inline SVG
- keep the HTML free of remote scripts, styles, and images, and reject
executable link schemes
- include an updated PR sirius-db#1277 worked example and Codex UI metadata
- exclude the illustrative reference digest from repository `rumdl` link
validation because its links target the historical PR checkout

## Verification

- Codex `quick_validate.py`: `Skill is valid!`
- Claude `quick_validate.py`: `Skill is valid!`
- `rumdl` 0.2.44: no issues in the updated skill instructions
- Black 25.1.0: renderer is formatted
- repository pre-commit hooks applicable to the changed files pass; the
unavailable `pixi` wrapper was replaced by the equivalent direct `rumdl`
invocation
- renderer exercised against the PR sirius-db#1277 worked example: 9 diff blocks,
181 additions, 14 removals, and 1 inline flowchart
- revised format exercised against PR sirius-db#1556 at commit
`96ad7c54385691389b06b73767149f77417569ae`: 6 diff blocks, 86 additions,
4 removals, and 1 inline flowchart
- both agent-local renderers produce the same counts for the PR sirius-db#1277
and PR sirius-db#1556 fixtures
- revised the PR sirius-db#1556 digest's title, summary, before/after table,
diagram, change headings, and detailed prose using the new
plain-language guide
- verified every internal HTML navigation target resolves and neither
preview contains remote executable assets
- validated all 41 unique PR sirius-db#1556 local source-line links against that
checkout
- `git diff --check`

## Scope

This is a documentation and agent-workflow change only. No Sirius build
or C++ tests were run. Generated files under `PR_digests/` remain
ignored local review artifacts. The skill explains what a PR changes and
where it lives; adversarial code review remains a separate pass.
…starrocks (sirius-db#1722)

Bumps [mysql_async](https://github.com/blackbeam/mysql_async) from
0.37.0 to 0.37.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/blackbeam/mysql_async/releases">mysql_async's
releases</a>.</em></p>
<blockquote>
<h2>v0.37.1</h2>
<p>Fix data race in statement cache (see <a
href="https://redirect.github.com/blackbeam/mysql_async/issues/406">#406</a>)</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/blackbeam/mysql_async/compare/v0.37.0...v0.37.1">https://github.com/blackbeam/mysql_async/compare/v0.37.0...v0.37.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/blackbeam/mysql_async/commit/ce4b27698c50fb945d8c9ff8c40a2a646be50b12"><code>ce4b276</code></a>
bump micro version</li>
<li><a
href="https://github.com/blackbeam/mysql_async/commit/8b82d368d36d97897e546ed1cb6dcba9285e114b"><code>8b82d36</code></a>
Fix UB by replacing incorrectly implemented <code>ColumnsArcPtr</code>
by <code>arc_swap</code> (fi...</li>
<li>See full diff in <a
href="https://github.com/blackbeam/mysql_async/compare/v0.37.0...v0.37.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=mysql_async&package-manager=cargo&previous-version=0.37.0&new-version=0.37.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…-db#1680)

Bumps [prefix-dev/setup-pixi](https://github.com/prefix-dev/setup-pixi)
from 0.10.1 to 0.10.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/prefix-dev/setup-pixi/releases">prefix-dev/setup-pixi's
releases</a>.</em></p>
<blockquote>
<h2>v0.10.2</h2>
<h2>What's Changed</h2>
<h3>✨ New features</h3>
<ul>
<li>feat: Add support for linux-riscv64 by <a
href="https://github.com/pavelzw"><code>@​pavelzw</code></a> in <a
href="https://redirect.github.com/prefix-dev/setup-pixi/pull/282">prefix-dev/setup-pixi#282</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/prefix-dev/setup-pixi/compare/v0.10.1...v0.10.2">https://github.com/prefix-dev/setup-pixi/compare/v0.10.1...v0.10.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/prefix-dev/setup-pixi/commit/d3f436a425481402e6a95a1d1fc10331c708cd9e"><code>d3f436a</code></a>
feat: Add support for linux-riscv64 (<a
href="https://redirect.github.com/prefix-dev/setup-pixi/issues/282">#282</a>)</li>
<li>See full diff in <a
href="https://github.com/prefix-dev/setup-pixi/compare/f00437f565399d418b0acc85936d12c1fb668347...d3f436a425481402e6a95a1d1fc10331c708cd9e">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=prefix-dev/setup-pixi&package-manager=github_actions&previous-version=0.10.1&new-version=0.10.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…irius-db#1727)

`MAX_INDICES = 1 << 28` was a stale sanity bound predating the
HyperLogLog cardinality gate that now guards the real hazard
(cudf::dictionary::encode's illegal access on huge high-cardinality
inputs) by distinct fraction rather than row count. The row cap only
silently forced narrow, high-row-count pins (e.g. TPC-H q12's 5-column
lineitem pin at ~276M rows/chunk, orders pins at ~600-900M) to an
uncompressed fallback. Dictionary codes index the key set, not rows, so
any column a cudf column_view can represent already encodes; replace the
cap with size_type max.

Add a per-pin "N/M chunk(s) compressed" INFO line in both the host and
device materialize paths. A per-chunk encode failure only WARNs today
and silently pins that chunk raw — this class of degradation should
never be silent.

Extracted from Felipe's sirius-db#1391 (exp/fused-scan-filter), where these were
bundled with unrelated explorer and scan-manager diagnostic changes.


## Description

## Checklist
- [x] Read CONTRIBUTING.md and ensure PR meets "reviewability" checklist
- [x] Cover changes with new or existing tests
- [x] Document configuration changes in code and summarize in the
description above
- [ ] Update human and agent documentation (README.md, docs/, skills,
CLAUDE.md)

## References

---------

Co-authored-by: Felipe Aramburu <faramburu@nvidia.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
## Summary
- add a per-call `compression` named parameter to `CALL pin_table(...)`
- make explicit `compression=true/false` override the existing
`pin_table_compression` setting
- keep `pin_table_compression` as the compatibility default when the
argument is omitted
- update Super Sirius docs and add regression coverage for both override
directions and the empty-plan-dir fallback

## Configuration/API surface
`CALL pin_table(..., compression => true/false)` is now the preferred
way to request or suppress Simpatico compression for a specific pin.
Existing `pin_table_compression` YAML/SET behavior remains as the
default for calls that omit the new argument.

Backward compatibility is covered by the existing compression tests as
well: many existing cases set `pin_table_compression = true` and then
call `pin_table` without a `compression` argument. The full
`[compression][pin_table]` suite passing below exercises that
omitted-argument fallback alongside the new explicit-argument override
test.

Closes sirius-db#1358

## Validation
- `git diff --check`
- Remote GPU validation at `efda095a`, GPU `NVIDIA GeForce RTX 5060 Ti`,
driver `595.84`:
- `CUDAARCHS=120 CMAKE_BUILD_PARALLEL_LEVEL=2 pixi run make` — passed.
The initial high-parallel build failed silently during CUDA compilation,
and the testcontainers Go bridge needed an existing local Go module
cache because external Go module downloads timed out on the node; after
lowering parallelism and reusing the cache, the release build and
`sirius_unittest` linked successfully.
- `pixi run build/release/extension/sirius/test/cpp/sirius_unittest
"[compression][pin_table]"` — passed, 1224 assertions / 29 test cases.
This includes `pin_table compression - compression parameter overrides
session setting` and `pin_table compression - empty plan dir pins
uncompressed`.
- `pixi run build/release/extension/sirius/test/cpp/sirius_unittest
"[config]"` — passed, 688 assertions / 66 test cases.
- Additional remote GPU checks at `03d26110`, GPU `NVIDIA RTX PRO 4500
Blackwell`, driver `580.159.04`:
- `CUDAARCHS=120 CMAKE_BUILD_PARALLEL_LEVEL=48 pixi run make` — passed.
- `pixi run build/release/extension/sirius/test/cpp/sirius_unittest
"[compression][plan_register]"` — passed, 16 assertions / 6 test cases.
- `pixi run build/release/extension/sirius/test/cpp/sirius_unittest
"Sirius configuration rejects invalid compression retention fractions"`
— passed, 3 assertions / 1 test case.
- `pixi run build/release/extension/sirius/test/cpp/sirius_unittest
"Sirius configuration accepts intentional compression retention fraction
boundaries"` — passed, 4 assertions / 1 test case.
- SQL smoke with a single-GPU `scan_manager.use_sirius_datasource=false`
config: created a parquet input and matching Simpatico plan files, then
verified `compression=true` overrides `pin_table_compression=false` and
`compression=false` overrides `pin_table_compression=true`. The command
succeeded and Sirius logs showed compression only for `t_param_on`, not
for `t_param_off`.
- Pod limitation: full C++ `[compression][pin_table]` and broad
`[config]` aborted there when test-generated/default YAMLs initialized
Sirius' local `io_uring` datasource: `uring_reactor: ring init:
Operation not permitted`. The pod reported `kernel.io_uring_disabled =
0`, so this appeared to be a container syscall/capability restriction.
The successful remote GPU validation at `efda095a` above covers those
previously blocked suites.
- Not run locally: `pixi run ...` build/tests/pre-commit, because this
local machine is macOS ARM while the repo declares Linux CUDA pixi
platforms.

---------

Co-authored-by: Aaron Wu <Aaron.Wu@dell.com>
Co-authored-by: Yu <ranyuan_jin@outlook.com>
…rius-db#1439)

## Summary

- Captures Sirius, libcudf, and CCCL NVTX events in both supported
deployments without a sidecar injection DSO:
- **Vanilla DuckDB + `LOAD`** exports Quent's initializer from the
Sirius extension and points NVTX at that DSO before the first NVTX call.
- **Statically linked Sirius** exports the same initializer from DuckDB
and maps a Sirius-private NVTX injection token to the running
executable, while forwarding every other `dlopen` unchanged.
- Honors `SIRIUS_DISABLE` and `enable_quent: false` by skipping
automatic injection; otherwise preserves configuration precedence:
`NVTX_INJECTION64_PATH`, then `sirius.telemetry.nvtx_injection_lib`,
then automatic discovery.
- Mounts Quent's NVTX catalog/viewport routes and pins Quent to
`381e1be0`, which includes
[quent#544](rapidsai/quent#544) and the
`nvtx-sys` build fix from
[quent#697](rapidsai/quent#697). Generalized
schema work remains tracked by
[quent#618](rapidsai/quent#618).

## Verification

- `pixi run make`
- `pixi run make test` — 3,080 test cases and 32,833,137 assertions
passed
- `pixi run pre-commit run -a`
- TPC-H SF10 Q1 produced the exact same NVTX range/count signature in
both modes: 812 complete ranges across Sirius/default, libcudf, and
CCCL, with zero incomplete ranges or reconstruction anomalies.

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
I noticed the nightly build is failing with this build error ([CI
logs](https://github.com/sirius-db/sirius/actions/runs/34493208048/job/102924945721)):

```
/home/runner/actions-runner/_work/sirius/sirius/src/expression_evaluator/specializations/function.cpp: In member function 'sirius::evaluate_result sirius::expression_evaluator::evaluate(const sirius::ast::function_call&, evaluation_mode)':
/home/runner/actions-runner/_work/sirius/sirius/src/expression_evaluator/specializations/function.cpp:189:35: error: call of overloaded 'slice_strings(const cudf::strings_column_view&, const int&, const int&, int, rmm::_RMM_26_12::cuda_stream_view&, rmm::_RMM_26_12::device_async_resource_ref&)' is ambiguous
  189 |       cudf::strings::slice_strings(input_strings, start_val, stop_val, 1, _stream, _mr);
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/runner/actions-runner/_work/sirius/sirius/src/expression_evaluator/specializations/function.cpp:189:35: note: there are 2 candidates
In file included from /home/runner/actions-runner/_work/sirius/sirius/src/expression_evaluator/specializations/function.cpp:44:
/home/runner/actions-runner/_work/sirius/sirius/envs/nightly/.pixi/envs/default/include/cudf/strings/slice.hpp:64:1: note: candidate 1: 'std::unique_ptr<cudf::column> cudf::strings::slice_strings(const cudf::strings_column_view&, const cudf::numeric_scalar<int>&, const cudf::numeric_scalar<int>&, const cudf::numeric_scalar<int>&, cuda::__4::stream_ref, rmm::_RMM_26_12::device_async_resource_ref)'
   64 | slice_strings(strings_column_view const& input,
      | ^~~~~~~~~~~~~
/home/runner/actions-runner/_work/sirius/sirius/envs/nightly/.pixi/envs/default/include/cudf/strings/slice.hpp:100:25: note: candidate 2: 'std::unique_ptr<cudf::column> cudf::strings::slice_strings(const cudf::strings_column_view&, std::optional<int>, std::optional<int>, std::optional<int>, cuda::__4::stream_ref, rmm::_RMM_26_12::device_async_resource_ref)'
  100 | std::unique_ptr<column> slice_strings(
      |                         ^~~~~~~~~~~~~
```


cuDF nightly added new `std::optional` overloads for `slice_strings`.
Passing integer bounds made overload resolution ambiguous and broke
nightly CI builds.

This PR explicitly wraps the bounds in `std::optional<cudf::size_type>`
for newer cuDF.

---------

Signed-off-by: James Bourbeau <jbourbeau@nvidia.com>
…irius-db#1725)

## Description

When a `count(*)` query reaches Sirius's parquet scan without requesting
data columns, the scan currently reads and decodes every column just to
obtain the row count. Queries that DuckDB already answers from metadata
are unaffected.

This PR reads one **row-count carrier** instead: the narrowest
fixed-width, non-partition column in the bind schema, ties resolved to
the lowest schema position. The same choice applies to scans requesting
only partition or virtual columns. cuDF cannot preserve a row count in a
zero-column table, so at least one column must remain. The carrier is
read as a data column with no output entry, the same shape as a
pure-filter column, so output assembly and partition injection are
unchanged. Selection uses decoded type width, not compressed size.

Files that lack the carrier column, or have no row groups to resolve it
against, fall back to full-width reads. Fallback estimates use bind-type
widths for matching fixed-width, non-partition top-level columns, and
parquet metadata for the rest. The coalescer keeps projected and
full-width files in separate splits. Schemas without an eligible
fixed-width column keep the existing behavior.

Footer-only counting is outside this change. No configuration changes;
`docs/super-sirius/scan.md` is updated.

**Validation.** Tests cover carrier selection, unchanged real
projections and nested reads, missing-column fallback and memory sizing,
partition-named file columns, and coalescing across reader-option
changes. GPU results are checked against DuckDB CPU for flat, filtered,
partitioned and multi-file counts, including empty files, all-VARCHAR
schemas, schema evolution and an entirely NULL carrier.

All gates passed:
- `[carrier]`: 19 cases / 885 assertions.
- `[scan][parquet]`: 68 cases / 40,871 assertions.
- `make test`: 3,098 cases / 32,795,381 assertions.
- `make s3-test`: 92 cases.
- Pre-commit clean.

**Timing.** Local-file `SELECT count(*) FROM read_parquet(...)` on an
RTX 3060. Both GPU runs disable `statistics_propagation` to keep the
scan in the plan. Each binary gets one warm-up and three timed runs in
the same session; results below are medians. The dev binary is
`5201d9c3`, which differs from this branch's base only by sirius-db#1719.

| File | dev | This PR | DuckDB CPU (metadata only) |
| --- | --- | --- | --- |
| TPC-H SF1 lineitem, 6.0M rows / 49 row groups | 0.452 s | 0.031 s |
0.004 s |
| TPC-H SF10 lineitem, 60.0M rows / 489 row groups | 4.249 s | 0.238 s |
0.014 s |

These numbers compare the local scan path, not cold S3 throughput. The
CPU timings are a metadata-only reference.

## Checklist

- [x] Read CONTRIBUTING.md and ensure PR meets "reviewability" checklist
- [x] Cover changes with new or existing tests
- [x] Document configuration changes in code and summarize in the
description above (none)
- [x] Update human and agent documentation (README.md, docs/, skills,
CLAUDE.md): `docs/super-sirius/scan.md`

## References

Closes sirius-db#1723
…db#1759)

Bumps [arrow-array](https://github.com/apache/arrow-rs) from 59.2.0 to
59.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/apache/arrow-rs/releases">arrow-array's
releases</a>.</em></p>
<blockquote>
<h2>arrow 59.3.0</h2>
<h1>Changelog</h1>
<h2><a href="https://github.com/apache/arrow-rs/tree/59.3.0">59.3.0</a>
- (2026-08-25)</h2>
<p><a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">Full
Changelog</a></p>
<h3>Security fixes</h3>
<ul>
<li>[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10834">#10834</a></li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[59_maintenance] Backport fix for concat_run_arrays with all-empty
run arrays by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10828">#10828</a></li>
<li>[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger than the page size limit by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10826">#10826</a></li>
<li>[59_maintenance] Backport fix for cached Mask reads crossing
unloaded sparse pages by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10766">#10766</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/apache/arrow-rs/blob/main/CHANGELOG.md">arrow-array's
changelog</a>.</em></p>
<blockquote>
<h2><a href="https://github.com/apache/arrow-rs/tree/59.3.0">59.3.0</a>
- (2026-08-25)</h2>
<p><a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">Full
Changelog</a></p>
<h3>Security fixes</h3>
<ul>
<li>[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10834">#10834</a></li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[59_maintenance] Backport fix for concat_run_arrays with all-empty
run arrays by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10828">#10828</a></li>
<li>[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger than the page size limit by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10826">#10826</a></li>
<li>[59_maintenance] Backport fix for cached Mask reads crossing
unloaded sparse pages by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10766">#10766</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/apache/arrow-rs/commit/f90e061326bd821a7af09281d9e92de6f3b603d9"><code>f90e061</code></a>
[59_maintenance] Backport parquet-testing revision update for ALP tests
(<a
href="https://redirect.github.com/apache/arrow-rs/issues/10871">#10871</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/8061c9cb7a35cd9df2262ffa4b424174837b048d"><code>8061c9c</code></a>
[59_maintenance] chore: Update versions to <code>59.3.0</code> and add
CHANGELOG (<a
href="https://redirect.github.com/apache/arrow-rs/issues/10827">#10827</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/23673b8206bb5893e64c6fed4fd574c1a5bca615"><code>23673b8</code></a>
[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency (<a
href="https://redirect.github.com/apache/arrow-rs/issues/10834">#10834</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/e4e1237feb74ac8af3ee42f0026d0a55daf90dad"><code>e4e1237</code></a>
[59_maintenance] Backport fix for concat_run_arrays with all-empty run
arrays...</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/556186a5e5a9b3c399ab4841db7f03fdfca0ff4c"><code>556186a</code></a>
[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger t...</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/a878590477cc62964ea65c3da09cb289868675d5"><code>a878590</code></a>
[59_maintenance] Backport fix for cached Mask reads crossing unloaded
sparse ...</li>
<li>See full diff in <a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=arrow-array&package-manager=cargo&previous-version=59.2.0&new-version=59.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [cxx](https://github.com/dtolnay/cxx) from 1.0.199 to 1.0.200.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/cxx/releases">cxx's
releases</a>.</em></p>
<blockquote>
<h2>1.0.200</h2>
<ul>
<li>Do not classify references as guaranteed POD (<a
href="https://redirect.github.com/dtolnay/cxx/issues/1754">#1754</a>,
thanks <a
href="https://github.com/anforowicz"><code>@​anforowicz</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/dtolnay/cxx/commit/30ac7296e557ca0d5cd34d959b8e9848c10f4af4"><code>30ac729</code></a>
Release 1.0.200</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/6d6f6d3d064162b92a2ce2366f7983949fea0a0c"><code>6d6f6d3</code></a>
Resolve doc_markdown pedantic clippy lint in test</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/ae8b4ad74bf7285a9d2916abe35eee404193208f"><code>ae8b4ad</code></a>
Format PR 1754 with rustfmt</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/17ba0ccf297b519bade8a4685f40ceee9f59e1e6"><code>17ba0cc</code></a>
Merge pull request 1754 from anforowicz/return-type-c-linkage</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/1dbe319cce02aa41a846f360045bc47eaf7ac33d"><code>1dbe319</code></a>
Do not classify references as guaranteed POD</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/ba7f83a3829919c5b011e8f4e2336fb9a3452aef"><code>ba7f83a</code></a>
Bump Bazel build to rustc 1.98.1</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/4d9bee0ed5525094499c32e0c08f4648dcbec487"><code>4d9bee0</code></a>
Bazel rules_rust 0.74.0</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/8ec18748a7a79af1618c5e863cfb96cdfc28e9f7"><code>8ec1874</code></a>
Use C++17 nested namespace syntax in book</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/7c6d4981fa00df9b157a1cc8674f890845959f8b"><code>7c6d498</code></a>
Update wasi-sdk to 34.0</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/524707cfe7d6b62a838766175f76b02a73e03010"><code>524707c</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/cxx/issues/1750">#1750</a>
from dtolnay/go</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/cxx/compare/1.0.199...1.0.200">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cxx&package-manager=cargo&previous-version=1.0.199&new-version=1.0.200)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

Bumps [parquet](https://github.com/apache/arrow-rs) from 59.2.0 to
59.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/apache/arrow-rs/releases">parquet's
releases</a>.</em></p>
<blockquote>
<h2>arrow 59.3.0</h2>
<h1>Changelog</h1>
<h2><a href="https://github.com/apache/arrow-rs/tree/59.3.0">59.3.0</a>
- (2026-08-25)</h2>
<p><a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">Full
Changelog</a></p>
<h3>Security fixes</h3>
<ul>
<li>[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10834">#10834</a></li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[59_maintenance] Backport fix for concat_run_arrays with all-empty
run arrays by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10828">#10828</a></li>
<li>[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger than the page size limit by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10826">#10826</a></li>
<li>[59_maintenance] Backport fix for cached Mask reads crossing
unloaded sparse pages by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10766">#10766</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/apache/arrow-rs/blob/main/CHANGELOG.md">parquet's
changelog</a>.</em></p>
<blockquote>
<h2><a href="https://github.com/apache/arrow-rs/tree/59.3.0">59.3.0</a>
- (2026-08-25)</h2>
<p><a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">Full
Changelog</a></p>
<h3>Security fixes</h3>
<ul>
<li>[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10834">#10834</a></li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[59_maintenance] Backport fix for concat_run_arrays with all-empty
run arrays by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10828">#10828</a></li>
<li>[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger than the page size limit by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10826">#10826</a></li>
<li>[59_maintenance] Backport fix for cached Mask reads crossing
unloaded sparse pages by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10766">#10766</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/apache/arrow-rs/commit/f90e061326bd821a7af09281d9e92de6f3b603d9"><code>f90e061</code></a>
[59_maintenance] Backport parquet-testing revision update for ALP tests
(<a
href="https://redirect.github.com/apache/arrow-rs/issues/10871">#10871</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/8061c9cb7a35cd9df2262ffa4b424174837b048d"><code>8061c9c</code></a>
[59_maintenance] chore: Update versions to <code>59.3.0</code> and add
CHANGELOG (<a
href="https://redirect.github.com/apache/arrow-rs/issues/10827">#10827</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/23673b8206bb5893e64c6fed4fd574c1a5bca615"><code>23673b8</code></a>
[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency (<a
href="https://redirect.github.com/apache/arrow-rs/issues/10834">#10834</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/e4e1237feb74ac8af3ee42f0026d0a55daf90dad"><code>e4e1237</code></a>
[59_maintenance] Backport fix for concat_run_arrays with all-empty run
arrays...</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/556186a5e5a9b3c399ab4841db7f03fdfca0ff4c"><code>556186a</code></a>
[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger t...</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/a878590477cc62964ea65c3da09cb289868675d5"><code>a878590</code></a>
[59_maintenance] Backport fix for cached Mask reads crossing unloaded
sparse ...</li>
<li>See full diff in <a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=parquet&package-manager=cargo&previous-version=59.2.0&new-version=59.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…cks (sirius-db#1756)

Bumps [cxx](https://github.com/dtolnay/cxx) from 1.0.199 to 1.0.200.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/cxx/releases">cxx's
releases</a>.</em></p>
<blockquote>
<h2>1.0.200</h2>
<ul>
<li>Do not classify references as guaranteed POD (<a
href="https://redirect.github.com/dtolnay/cxx/issues/1754">#1754</a>,
thanks <a
href="https://github.com/anforowicz"><code>@​anforowicz</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/dtolnay/cxx/commit/30ac7296e557ca0d5cd34d959b8e9848c10f4af4"><code>30ac729</code></a>
Release 1.0.200</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/6d6f6d3d064162b92a2ce2366f7983949fea0a0c"><code>6d6f6d3</code></a>
Resolve doc_markdown pedantic clippy lint in test</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/ae8b4ad74bf7285a9d2916abe35eee404193208f"><code>ae8b4ad</code></a>
Format PR 1754 with rustfmt</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/17ba0ccf297b519bade8a4685f40ceee9f59e1e6"><code>17ba0cc</code></a>
Merge pull request 1754 from anforowicz/return-type-c-linkage</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/1dbe319cce02aa41a846f360045bc47eaf7ac33d"><code>1dbe319</code></a>
Do not classify references as guaranteed POD</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/ba7f83a3829919c5b011e8f4e2336fb9a3452aef"><code>ba7f83a</code></a>
Bump Bazel build to rustc 1.98.1</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/4d9bee0ed5525094499c32e0c08f4648dcbec487"><code>4d9bee0</code></a>
Bazel rules_rust 0.74.0</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/8ec18748a7a79af1618c5e863cfb96cdfc28e9f7"><code>8ec1874</code></a>
Use C++17 nested namespace syntax in book</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/7c6d4981fa00df9b157a1cc8674f890845959f8b"><code>7c6d498</code></a>
Update wasi-sdk to 34.0</li>
<li><a
href="https://github.com/dtolnay/cxx/commit/524707cfe7d6b62a838766175f76b02a73e03010"><code>524707c</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/cxx/issues/1750">#1750</a>
from dtolnay/go</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/cxx/compare/1.0.199...1.0.200">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cxx&package-manager=cargo&previous-version=1.0.199&new-version=1.0.200)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…starrocks (sirius-db#1755)

Bumps [arrow-array](https://github.com/apache/arrow-rs) from 59.2.0 to
59.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/apache/arrow-rs/releases">arrow-array's
releases</a>.</em></p>
<blockquote>
<h2>arrow 59.3.0</h2>
<h1>Changelog</h1>
<h2><a href="https://github.com/apache/arrow-rs/tree/59.3.0">59.3.0</a>
- (2026-08-25)</h2>
<p><a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">Full
Changelog</a></p>
<h3>Security fixes</h3>
<ul>
<li>[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10834">#10834</a></li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[59_maintenance] Backport fix for concat_run_arrays with all-empty
run arrays by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10828">#10828</a></li>
<li>[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger than the page size limit by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10826">#10826</a></li>
<li>[59_maintenance] Backport fix for cached Mask reads crossing
unloaded sparse pages by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10766">#10766</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/apache/arrow-rs/blob/main/CHANGELOG.md">arrow-array's
changelog</a>.</em></p>
<blockquote>
<h2><a href="https://github.com/apache/arrow-rs/tree/59.3.0">59.3.0</a>
- (2026-08-25)</h2>
<p><a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">Full
Changelog</a></p>
<h3>Security fixes</h3>
<ul>
<li>[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10834">#10834</a></li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[59_maintenance] Backport fix for concat_run_arrays with all-empty
run arrays by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10828">#10828</a></li>
<li>[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger than the page size limit by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10826">#10826</a></li>
<li>[59_maintenance] Backport fix for cached Mask reads crossing
unloaded sparse pages by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10766">#10766</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/apache/arrow-rs/commit/f90e061326bd821a7af09281d9e92de6f3b603d9"><code>f90e061</code></a>
[59_maintenance] Backport parquet-testing revision update for ALP tests
(<a
href="https://redirect.github.com/apache/arrow-rs/issues/10871">#10871</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/8061c9cb7a35cd9df2262ffa4b424174837b048d"><code>8061c9c</code></a>
[59_maintenance] chore: Update versions to <code>59.3.0</code> and add
CHANGELOG (<a
href="https://redirect.github.com/apache/arrow-rs/issues/10827">#10827</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/23673b8206bb5893e64c6fed4fd574c1a5bca615"><code>23673b8</code></a>
[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency (<a
href="https://redirect.github.com/apache/arrow-rs/issues/10834">#10834</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/e4e1237feb74ac8af3ee42f0026d0a55daf90dad"><code>e4e1237</code></a>
[59_maintenance] Backport fix for concat_run_arrays with all-empty run
arrays...</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/556186a5e5a9b3c399ab4841db7f03fdfca0ff4c"><code>556186a</code></a>
[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger t...</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/a878590477cc62964ea65c3da09cb289868675d5"><code>a878590</code></a>
[59_maintenance] Backport fix for cached Mask reads crossing unloaded
sparse ...</li>
<li>See full diff in <a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=arrow-array&package-manager=cargo&previous-version=59.2.0&new-version=59.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…rocks (sirius-db#1754)

Bumps [parquet](https://github.com/apache/arrow-rs) from 59.2.0 to
59.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/apache/arrow-rs/releases">parquet's
releases</a>.</em></p>
<blockquote>
<h2>arrow 59.3.0</h2>
<h1>Changelog</h1>
<h2><a href="https://github.com/apache/arrow-rs/tree/59.3.0">59.3.0</a>
- (2026-08-25)</h2>
<p><a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">Full
Changelog</a></p>
<h3>Security fixes</h3>
<ul>
<li>[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10834">#10834</a></li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[59_maintenance] Backport fix for concat_run_arrays with all-empty
run arrays by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10828">#10828</a></li>
<li>[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger than the page size limit by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10826">#10826</a></li>
<li>[59_maintenance] Backport fix for cached Mask reads crossing
unloaded sparse pages by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10766">#10766</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/apache/arrow-rs/blob/main/CHANGELOG.md">parquet's
changelog</a>.</em></p>
<blockquote>
<h2><a href="https://github.com/apache/arrow-rs/tree/59.3.0">59.3.0</a>
- (2026-08-25)</h2>
<p><a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">Full
Changelog</a></p>
<h3>Security fixes</h3>
<ul>
<li>[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10834">#10834</a></li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[59_maintenance] Backport fix for concat_run_arrays with all-empty
run arrays by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10828">#10828</a></li>
<li>[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger than the page size limit by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10826">#10826</a></li>
<li>[59_maintenance] Backport fix for cached Mask reads crossing
unloaded sparse pages by <a
href="https://github.com/alamb"><code>@​alamb</code></a> in <a
href="https://redirect.github.com/apache/arrow-rs/pull/10766">#10766</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/apache/arrow-rs/commit/f90e061326bd821a7af09281d9e92de6f3b603d9"><code>f90e061</code></a>
[59_maintenance] Backport parquet-testing revision update for ALP tests
(<a
href="https://redirect.github.com/apache/arrow-rs/issues/10871">#10871</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/8061c9cb7a35cd9df2262ffa4b424174837b048d"><code>8061c9c</code></a>
[59_maintenance] chore: Update versions to <code>59.3.0</code> and add
CHANGELOG (<a
href="https://redirect.github.com/apache/arrow-rs/issues/10827">#10827</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/23673b8206bb5893e64c6fed4fd574c1a5bca615"><code>23673b8</code></a>
[59_maintenance] Backport <code>cargo audit</code> fix by updating
<code>h2</code> dependency (<a
href="https://redirect.github.com/apache/arrow-rs/issues/10834">#10834</a>)</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/e4e1237feb74ac8af3ee42f0026d0a55daf90dad"><code>e4e1237</code></a>
[59_maintenance] Backport fix for concat_run_arrays with all-empty run
arrays...</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/556186a5e5a9b3c399ab4841db7f03fdfca0ff4c"><code>556186a</code></a>
[59_maintenance] Backport fix for DELTA_BYTE_ARRAY dedup with values
larger t...</li>
<li><a
href="https://github.com/apache/arrow-rs/commit/a878590477cc62964ea65c3da09cb289868675d5"><code>a878590</code></a>
[59_maintenance] Backport fix for cached Mask reads crossing unloaded
sparse ...</li>
<li>See full diff in <a
href="https://github.com/apache/arrow-rs/compare/59.2.0...59.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=parquet&package-manager=cargo&previous-version=59.2.0&new-version=59.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…irius-db#1761)

Bumps [syn](https://github.com/dtolnay/syn) from 3.0.4 to 3.0.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/syn/releases">syn's
releases</a>.</em></p>
<blockquote>
<h2>3.0.5</h2>
<ul>
<li>Report correct span for lex errors from
<code>LitStr::parse_with</code> (<a
href="https://redirect.github.com/dtolnay/syn/issues/2080">#2080</a>,
thanks <a
href="https://github.com/sunshowers"><code>@​sunshowers</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/dtolnay/syn/commit/e0ad92d68b588c964e82bb74c3bd3e1e99f97ceb"><code>e0ad92d</code></a>
Release 3.0.5</li>
<li><a
href="https://github.com/dtolnay/syn/commit/74e7d75f263942576a25d5ed4bf11d0d1e80e698"><code>74e7d75</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/syn/issues/2080">#2080</a>
from sunshowers/lit-str-span</li>
<li><a
href="https://github.com/dtolnay/syn/commit/4c264f3db3f0d567fb6a6ddfe1e129bbe5c2acbe"><code>4c264f3</code></a>
In LitStr::parse_with, report correct span for lex errors</li>
<li><a
href="https://github.com/dtolnay/syn/commit/7e2b27bc9331ba59c8e3a25a8eba2f5c647317bc"><code>7e2b27b</code></a>
Update test suite to nightly-2026-08-26</li>
<li>See full diff in <a
href="https://github.com/dtolnay/syn/compare/3.0.4...3.0.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=syn&package-manager=cargo&previous-version=3.0.4&new-version=3.0.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This fixes a crash when casting scalar values, such as `CAST(1 AS
HUGEINT)` generated by DuckDB's `sum_rewriter` for `SUM(ResolutionWidth
+ 1)` in Clickbench
[Q30](https://github.com/ClickHouse/ClickBench/blob/f44b1d0331c8feb3fa375497f1e34ad42542c95c/gendb/generated/q30.cpp#L1).
… task_scheduler to sirius_engine; Removed SiriusContext::query_ (sirius-db#1365)

This is PR 2 from a stack of PRs (it goes on top of
sirius-db#1364) which together will make
Sirius internals be able to handle Concurrent query execution. There is
more to come.

## Summary

This PR addresses:
- the `completion_handler`, creating one per query
- sets `active_gpu_ids` and `full_gpu_count` as part of the
`_query_task_global_states`, instead of just being set globally for
`task_creator`.
- deletes `SiriusContext::query_`, modifying code as needed
- deletes `_no_pref_rr_counter` (DEAD CODE)

This PR does not fully address everything including full query winddown.

### 1. Per-query completion handler (main change)

Previously, task_scheduler owned a single completion_handler and pushed
a
raw pointer to it into every gpu_pipeline_executor. 

The handler is now a shared_ptr<completion_handler> created in
sirius_engine::execute() and propagated down to every pipeline's
`gpu_pipeline_task_global_state` via task_creator::prepare_for_query().
Each executor site reads the handler from the task it is currently
executing, so error reports and completion signals are always scoped to
the right query.

The shared_ptr lifetime is load-bearing: sirius_engine is destroyed in
sirius_interface::cleanup_internal() before run_mandatory_cleanup()
drains
the task queues. A task still unwinding after
report without touching freed memory. Because
shared_ptr reference through its global state, the handler stays alive
until the last task releases it.

Changed interfaces:
- task_scheduler: prepare_for_query() + start_query() ->
start_query(query)
    (no return value; caller holds the future
- task_scheduler: terminate_query(error) -> terminate_query(handler,
error)
  - task_scheduler: drain_after_error() -> drain_after_error(query_id)
  - task_scheduler: wait_for_completion() ->
  - gpu_pipeline_executor: set_completion_handler() removed
- SiriusContext::create_query() now returns the query (ownership to
caller)
  - SiriusContext::get_query() removed
  - task_creator::prepare_for_query() now takr
  - task_creator::schedule_lookahead() no longer takes a query_id

### 2. Remove SiriusContext::query_

The query object (sirius::planner::query) was stored as
SiriusContext::query_.
It is an index over the plan that sirius_engine owns, so storing it in a
shared context while the plan lived in the engine created an ownership
mismatch. The query is now owned by sirius_engine alongside the plan it
indexes.

The corresponding get_query() accessors on SiriusContext are removed;
the
one call site in sirius_engine::execute() now reads from the engine's
own
query_ field.

### 3. Remove _no_pref_rr_counter (DEAD CODE)

The round-robin counter (_no_pref_rr_counter and its reset in
prepare_for_query, plus set_no_pref_rr_counter_for_testing()) has been
removed.  It was dead code.

## Files changed

src/sirius_engine.{hpp,cpp} -- owns query_ and completion_handler_
  src/include/sirius_context.hpp       -- removed query_, get_query()
  src/sirius_context.cpp               -- cre
  src/include/pipeline/task_scheduler.hpp
src/pipeline/task_scheduler.cpp -- collapsed prepare+start, removed
counter
  src/include/pipeline/gpu_pipeline_executor.hpp
  src/pipeline/gpu_pipeline_executor.cpp -- rield
  src/include/pipeline/sirius_pipeline_task_states.hpp
  src/include/pipeline/gpu_pipeline_task.hpp -- get_completion_handler()
  src/include/creator/task_creator.hpp
src/creator/task_creator.cpp -- takes handler in prepare_for_query
docs/super-sirius/pipeline-execution.md -- updated for pull-signal
dispatch
  test/cpp/pipeline/test_per_query_completion
  test/cpp/pipeline/test_oom_reschedule.cpp -r
  test/cpp/operator/test_mgpu_stress.cpp   -- removes counter injection

## New tests (test_per_query_completion_handl

  - completing one query leaves another query's future unset
  - one query's failure does not poison another's handler
  - the handler outlives the engine-side refe
  - every pipeline of one query shares its handler
  - a global state built without a query carries no handler (null-guard)

---------

Co-authored-by: Akhil Nair <akhiljnair.188@gmail.com>
)

## Description

Restores the iceberg scan path removed in sirius-db#1147, re-ported onto the
current `gpu_ingestible` scan architecture. The original targeted the
pre-redesign io framework, which is why it went dead end-to-end rather
than being migrated. Refs sirius-db#655.

On the GPU: V1 append-only tables, V2 positional deletes, and V3
deletion vectors (Puffin + Roaring). `iceberg_gpu_ingestible` extends
`parquet_gpu_ingestible` — iceberg data files are parquet and bind into
the same `MultiFileBindData` — and adds two behaviours: it stamps
`disable_filter_pushdown` on splits that carry deletes, and applies a
delete pipeline to each decoded batch.

Suppressing pushdown is load-bearing rather than conservative.
Positional deletes and deletion vectors are keyed on a row's position
within its data file, so if cuDF drops rows during decode the decoded
positions no longer identify file positions and the mapping is
unrecoverable. The predicate therefore runs after deletes, which is also
Iceberg's required order.

Delete-read failures throw. The earlier version caught everything and
returned empty delete data described as "treating as V1", which turned
*"the deletes could not be read"* into *"there are none"* and returned
rows the table had logically removed.

Manifest parsing is delegated to DuckDB's `iceberg` and `avro`
extensions rather than hand-rolled; `iceberg_metadata()` covers
discovery, and a `read_avro` query supplies the three V3 deletion-vector
fields it does not expose. That removes 949 lines of
varint/deflate/schema parsing which reimplemented an extension `iceberg`
already depends on.

The V3 deletion-vector fixture was not a valid Puffin file — a bare blob
with no container magic or footer, which both readers accepted because
ours checked only the blob's own magic and CRC and DuckDB's did not
check the container until 1.5.5. It is rebuilt as a spec-valid container
by a committed generator, and `read_deletion_vector` now validates the
container framing, the footer's blob descriptor, and the decoded
position count before anything reaches the scan.

## What this path refuses, and why

Review converged on one principle: **anything the scan cannot PROVE is
declined at plan time**, because a runtime fallback on this path poisons
the connection and a silent mis-read is worse than a CPU query. Every
decline returns the specific reason it hit, and DuckDB answers the query
correctly.

| Declined | Why the GPU path cannot answer it |
|---|---|
| Unpinned `iceberg_scan(path)` (no `snapshot_from_id`) | The bound
snapshot id is not recoverable from Sirius, so delete discovery would
resolve "current" independently and could pair one snapshot's data files
with another's deletes. See *The double-planning problem*. |
| Renamed / added / dropped-and-re-added columns | Columns are resolved
by NAME while Iceberg is field-ID keyed. |
| Data files with no Parquet field ids (`add_files` migrations, name
mapping) | Nothing proves the file carries the table's current schema;
name resolution can read a different column. |
| Promoted column types (int → long) | Promotion keeps both name and
field id, so the file matches on identity while storing the narrower
physical type. |
| Data files whose fields are in a different physical ORDER | A valid
Iceberg layout. For a full `SELECT *` the GPU path installs no reader
projection, so cuDF emits the file's order while the plan expects the
snapshot's — castable types come back swapped and converted, with
nothing thrown. |
| `snapshot_from_timestamp` / `version` selectors | The delete path
resolves only `snapshot_from_id`. |
| `allow_moved_paths = true` | duckdb-iceberg rewrites bound data-file
paths; delete discovery keeps the manifests' original paths, so the two
no longer refer to the same files. |
| Equality deletes | Match on key VALUES, so the scan must force-project
key columns even when unselected. Not wired — see Known limitations. |
| Deletion vectors with no `record_count`, or above the retention
ceiling | `record_count` is the only thing the decoded position count
can be checked against, and every decoded vector is retained through
execution, so an absent or oversized one would size a plan-time
allocation from what the table wrote. Both a per-vector and a
statement-wide ceiling apply. |

Over-declining costs performance. Under-declining returns wrong rows
with no error, which is why the bias runs this way.

### New dependency: croaring

Deletion vectors are portable-Roaring blobs inside Puffin files. This PR
decodes them with CRoaring's own bounds-checked entry points
(`roaring_bitmap_portable_deserialize_size` +
`roaring::Roaring::readSafe`), which is what duckdb-iceberg does with
the same blob in `src/core/deletes/iceberg_deletion_vector.cpp`.
`croaring` is added to `pixi.toml` and `roaring` to `vcpkg.json` — the
same package duckdb-iceberg takes, present at our pinned vcpkg baseline.
Host-side only, no CUDA involvement; the loadable extension gains
`libroaring` as a runtime dependency alongside the existing libspdlog /
libyaml-cpp.

### Verified against Apache's implementation, not only our own fixtures

`test/cpp/integration/data/iceberg_conformance/` carries
pyiceberg-written tables with expectations taken from pyiceberg's own
scan, plus a generator and a process-isolated runner wired into CI. This
matters because the hand-built fixtures were green through three real
bugs — hand-built fixtures encode the implementation's own assumptions.
The corpus is what found them.

The corpus cannot cover delete files: pyiceberg 0.11.1 declines to write
merge-on-read deletes, so every delete fixture is still hand-built by a
committed generator, and a green delete test is weaker evidence than a
green conformance test.

### Why an unpinned scan is declined

`iceberg_scan` installs `IcebergScanSerialize` /
`IcebergScanDeserialize` on every overload and both throw, so any plan
holding an `iceberg_scan` `LogicalGet` fails `plan.Copy()` during
*serialization*. Sirius's optimizer hook copies the plan, so it falls
back to re-planning from SQL text — once in `OnFinalizePrepare` and
again when the GPU operator executes. Each of those binds resolves
"current" independently, and Sirius's delete discovery is a further
resolution, so nothing makes them agree and a commit landing mid-plan
could pair one snapshot's data files with another's deletes. Requiring
`snapshot_from_id` closes that: every bind and every metadata query then
names the same id.

The real fix is upstream and cannot be stacked here. The snapshot a bind
resolved is not reachable from outside the extension —
`MultiFileBindData` has no snapshot field, `OpenFileInfo::extended_info`
carries only file_size / etag / last_modified / first_row_id /
sequence_number (and the sequence number does not move on a delete-only
commit), and both the bind data and the file list are extension-private
types. `IcebergBindInfo` *is* installed as `get_bind_info` and holds the
resolved `IcebergMultiFileList` when it runs, but publishes only the
catalog entry, while `BindInfo` carries an `options` map that goes
unused. Three `InsertOption` calls upstream (`snapshot_id`,
`table_uuid`, `schema_id`) would expose it and let this decline go away.

Deriving it instead is not viable: highest sequence number is not the
current snapshot under rollback, branches or staged WAP commits, and
comparing data-file sets cannot separate two snapshots that differ only
in deletes.

**Note the cost of the current decline**, since it is not only
usability: `snapshot_from_id` is also Iceberg's time-travel selector, so
it selects the snapshot's SCHEMA. On the conformance `drop_readd` table,
checked against DuckDB's own reader — `iceberg_scan(path)` returns `y`
NULL, NULL; `iceberg_scan(path, snapshot_from_id => <current>)` returns
`y` 111, 222. Telling a user to pin in order to reach the GPU can
quietly give them a *different table*, not the same one faster. That
case is left unpinned in the suite with the reason in-file.

### A per-extension-build fact this corpus depends on

The pyiceberg corpus has no `version-hint.text`, so reading it needs
`unsafe_enable_version_guessing`, and **the runtime value of that flag
is not predictable from either the extension version or its source**:

```
iceberg 75726455 (DuckDB v1.5.4) -> false
iceberg 45163a28 (DuckDB v1.5.5) -> true    <- kVerifiedIcebergVersion
```

duckdb-iceberg registers it `Value::BOOLEAN(false)` at `45163a28` *and*
on `main`, so the core-repository binary reporting that version is not
built from the tree it names. Measured in fresh processes (`-init
/dev/null`, `SIRIUS_DISABLE=1`, no `~/.duckdbrc`): the setting does not
exist before `LOAD iceberg` and reads back `true` after.

Sirius does not force the flag — its metadata connection mirrors the
outer session's effective value in both directions — so the fixture now
`SET`s it explicitly rather than inheriting an ambient default, and
reports `extension_version` and `current_setting(...)` together when the
precondition fails.

### Known limitations

- **Schema evolution declines rather than running on the GPU.** Every
case in the table above is refused at plan time rather than resolved.
Resolving by field ID is the complete fix and is a follow-up.
`MultiFileColumnMapper` is not reusable for it — it is constructed from
`MultiFileReaderData` / `MultiFileReader` / `MultiFileList` and produces
a mapping into DuckDB's own reader path, with no callable seam. cuDF's
`SchemaElement` carries `field_id` directly, and Sirius already parses
the footer into `FileMetaData`, so resolution by field id is a local
change to `parquet_schema_mapping`. The gate reads every data file's
Parquet footer on the planning thread; the scan needs the same footers
later, so they belong in one cache rather than two passes (performance
follow-up).
- **Equality deletes ship but are unreachable.** The filter, the GPU
anti-join mask and the plan-time materialization are built and
unit-tested directly, but the route is gated behind
`kEqualityDeleteRouteImplementedToSpec` (compile-time false) and
`read_iceberg_delete_data` refuses a live equality entry. The refusal
names both remaining spec defects: keys are every column of the delete
file rather than the entry's `equality_ids`, and the stored sequence
numbers are the MANIFEST's rather than per-entry data sequence numbers
(the inheritance rule). Both must be fixed before the route is enabled.
- **No nested-struct-child reorder fixture.** The physical-order
comparison covers nested fields by construction — the same recursive
walk on the table side, the same footer preorder on the file side — but
that is an argument, not a test.

## Checklist

- [x] Read CONTRIBUTING.md
- [x] Cover changes with new or existing tests
- [x] Document configuration changes in code and summarize in the
description above (no configuration changes)
- [x] Update human and agent documentation (`docs/super-sirius/scan.md`)

## Testing

Built and run against DuckDB 1.5.5, on an A100 (sm_80) and re-verified
on an RTX A5000 (sm_86).

- `pixi run make release`
- `sirius_unittest "[iceberg]"` — **64 cases / 1225 assertions**
- Full `sirius_unittest` — **3135 cases / 32,790,073 assertions** (run
under `pixi run`; `test_dense_count_join_detection.cpp` forks `python`,
which exists only inside the pixi env)
- pyiceberg conformance runner — **4/4** (`append_only`, `drop_readd`,
`rename_col`, `add_column`), wired into CI
- V3 deletion-vector fixtures validated by two readers we did not write:
pyiceberg's `PuffinFile`, and DuckDB's iceberg extension with Sirius
disabled

Note for reviewers: `iceberg` is a **core** extension (`INSTALL
iceberg;`, not `FROM community`) and is rebuilt per DuckDB release. The
suite warns when the loaded build differs from the one the fixtures were
verified against — see the version-guessing note above for why that pin
matters more than it looks.

## References

Refs sirius-db#655

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…db#1762)

## Description

Refresh the README to describe Sirius as a GPU-Native Composable
Analytics Engine and show the supplied architecture and AWS TPC-H
figures. Replace the old DGX performance claim with the hot-run
comparison context: all 22 queries, the best Sirius g7e size versus
DuckDB on m9g.16xlarge, cost per run, logarithmic scales, and lower-left
results being better.

Add a short Python quick start based on the TPC-H benchmark, including
the matching DuckDB Python build, extension loading, a Parquet query,
and result fetching. Document how to enable Simpatico compression with
both required settings before pinning, using the bundled TPC-H plans,
with GPU/host support, plan requirements, fallback behavior, and Python
usage.

## Validation

- Checked README local links, Python syntax, compression setting names
and ordering, and the bundled plan path.
- Cross-checked the Python example against
`test/tpch_performance/performance_test.py` and compression behavior
against the extension implementation and compressed pinning guide.
- Confirmed both replacement image files exactly match the supplied
attachments.
- `git diff --check` passes.
- GPU execution and the full Pixi pre-commit suite were not run: this
host is macOS and Pixi is unavailable.

## Checklist

- [x] Read CONTRIBUTING.md and checked PR reviewability.
- [x] Validated the documentation and examples with the checks above; no
runtime code changes.
- [x] Documented existing Simpatico options; no configuration behavior
changes.
- [x] Updated the README and referenced supporting documentation.
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.26.0 to 1.26.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuid-rs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v1.26.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Seat the v7 counter below the version nibble by <a
href="https://github.com/lenamonj"><code>@​lenamonj</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/907">uuid-rs/uuid#907</a></li>
<li>Don't panic in overflowing Timestamp to SystemTime conversion by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/909">uuid-rs/uuid#909</a></li>
<li>Prepare for 1.26.1 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/910">uuid-rs/uuid#910</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/lenamonj"><code>@​lenamonj</code></a>
made their first contribution in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/907">uuid-rs/uuid#907</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uuid-rs/uuid/compare/v1.26.0...v1.26.1">https://github.com/uuid-rs/uuid/compare/v1.26.0...v1.26.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/uuid-rs/uuid/commit/9f927126c89892ddfed6cd2f92df16852f3f9aa6"><code>9f92712</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/910">#910</a> from
uuid-rs/cargo/v1.26.1</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/d4df8f0cd9f461b4ef493254420052ffa5ce6277"><code>d4df8f0</code></a>
prepare for 1.26.1 release</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/5613f2357c1fc06afc5fffd98e96da2ccf25a608"><code>5613f23</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/909">#909</a> from
uuid-rs/fix/ts-conversion-overflow</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/fda00eba938383d242bad33143c8af73227f2a2c"><code>fda00eb</code></a>
don't panic in overflowing Timestamp to SystemTime conversion</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/c82e88ca184e4ab83ce6b4ac0be33d32a0b9c3c4"><code>c82e88c</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/907">#907</a> from
lenamonj/v7-counter-placement</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/ac065a6c17389a67dc6e98ef5f9a2e1d7ad4a670"><code>ac065a6</code></a>
Align the counter diagram</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/34ec10208d813672928c299146dfe4c18cedcec7"><code>34ec102</code></a>
Seat the v7 counter below the version nibble</li>
<li>See full diff in <a
href="https://github.com/uuid-rs/uuid/compare/v1.26.0...v1.26.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.26.0&new-version=1.26.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ks (sirius-db#1768)

Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.26.0 to 1.26.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuid-rs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v1.26.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Seat the v7 counter below the version nibble by <a
href="https://github.com/lenamonj"><code>@​lenamonj</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/907">uuid-rs/uuid#907</a></li>
<li>Don't panic in overflowing Timestamp to SystemTime conversion by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/909">uuid-rs/uuid#909</a></li>
<li>Prepare for 1.26.1 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/910">uuid-rs/uuid#910</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/lenamonj"><code>@​lenamonj</code></a>
made their first contribution in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/907">uuid-rs/uuid#907</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uuid-rs/uuid/compare/v1.26.0...v1.26.1">https://github.com/uuid-rs/uuid/compare/v1.26.0...v1.26.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/uuid-rs/uuid/commit/9f927126c89892ddfed6cd2f92df16852f3f9aa6"><code>9f92712</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/910">#910</a> from
uuid-rs/cargo/v1.26.1</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/d4df8f0cd9f461b4ef493254420052ffa5ce6277"><code>d4df8f0</code></a>
prepare for 1.26.1 release</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/5613f2357c1fc06afc5fffd98e96da2ccf25a608"><code>5613f23</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/909">#909</a> from
uuid-rs/fix/ts-conversion-overflow</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/fda00eba938383d242bad33143c8af73227f2a2c"><code>fda00eb</code></a>
don't panic in overflowing Timestamp to SystemTime conversion</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/c82e88ca184e4ab83ce6b4ac0be33d32a0b9c3c4"><code>c82e88c</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/907">#907</a> from
lenamonj/v7-counter-placement</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/ac065a6c17389a67dc6e98ef5f9a2e1d7ad4a670"><code>ac065a6</code></a>
Align the counter diagram</li>
<li><a
href="https://github.com/uuid-rs/uuid/commit/34ec10208d813672928c299146dfe4c18cedcec7"><code>34ec102</code></a>
Seat the v7 counter below the version nibble</li>
<li>See full diff in <a
href="https://github.com/uuid-rs/uuid/compare/v1.26.0...v1.26.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.26.0&new-version=1.26.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Summary

- Add opaque white backgrounds to the architecture, performance, and
contributor-logo PNGs so they render consistently in GitHub dark mode.
- Rename `combined-logos-light.png` to
`combined-logos-light-transparent.png` and update its README references
to make the remaining transparency explicit.

## Testing

- Verified the flattened PNGs are opaque and retain their upstream
dimensions.
- Verified the renamed transparent logo remains referenced correctly.

_Written by Codex._

# Before:
<img width="866" height="1138" alt="image"
src="https://github.com/user-attachments/assets/4cfd5b59-ad89-4f5b-930a-af4ead8dab35"
/>

# After:
<img width="866" height="1138" alt="image"
src="https://github.com/user-attachments/assets/b8a69ea0-054a-4711-a759-52fabc95257b"
/>
)

## Description

Use `uint32_t` for chunk-local bit-position arithmetic in the generated
bit-unpack helper. Global offsets and 64-bit value reconstruction remain
unchanged. Adds a compile-time bounds check and regression coverage for
INT64 widths 0–64, chunk boundaries, and partial tails.

Decode latency on GB300 for **32 GiB output tables** (eight columns,
four streams):

| Plan | Before | After | Reduction |
|---|---:|---:|---:|
| 10-bit bitpack | 15.93 ms | 11.85 ms | 25.6% |
| 28-bit bitpack | 19.53 ms | 13.85 ms | 29.1% |
| Delta-bitpack | 13.87 ms | 11.44 ms | 17.5% |
| Identity control | 10.91 ms | 10.91 ms | Unchanged |

Synthetic GPU-resident inputs; completed decode calls include output
allocation. Results are medians of three independent runs with 15 timed
samples each, excluding compression and validation—not TPC-H query
timings.

Nsight Compute confirms the 4 GiB-column bitpack kernel improves from
1.90 to 1.39 ms, with DRAM utilization increasing from 41% to 56%.
Copies and synchronization are unchanged.

Validation: all five targeted tests passed; benchmark warmup and final
outputs were fully verified.

## Checklist

- [x] Read CONTRIBUTING.md and ensure PR meets "reviewability" checklist
- [x] Cover changes with new or existing tests
- [x] Document configuration changes in code and summarize in the
description above (no configuration changes)
- [x] Update human and agent documentation (README.md, docs/, skills,
CLAUDE.md) (no docs to update)
aminaramoon and others added 2 commits September 15, 2026 16:01
…irius-db#1775)

## Description

The hybrid-scan multi-file reader requires the RAPIDS 26.08 APIs, while
CCCL has moved the stream reference API out of the deprecated
`<cuda/stream_ref>` header. This updates libcudf, libcuvs, and libkvikio
to 26.08.01, migrates the affected dynamic-filter kernels and cuco
allocator to `<cuda/stream>`, and removes kvikIO's `cuda_std_17`
interface feature where it would otherwise break CMake generation for
the C/C++-only DuckDB target.

## Validation

- `pixi run pre-commit run -a` passes at this commit.
- The final stacked tree passes the complete release build.

## Checklist

- [x] Read `CONTRIBUTING.md` and meet the PR reviewability requirements.
- [x] Use existing build coverage for dependency and header migration.
- [x] No user-facing configuration change.

## Stack

Layer 1 of 6. Based on `dev`; followed by sirius-db#1772.

---------

Co-authored-by: Matthijs Brobbel <m1brobbel@gmail.com>
@aunjgr
aunjgr merged commit 93df6a8 into matrixorigin:upstream-dev-merge Sep 16, 2026
5 of 9 checks passed
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.