Skip to content

v26.46.0 release notes - #39690

Merged
maheshwarip merged 9 commits into
mainfrom
docs/v26.46.0-release-notes
Oct 16, 2026
Merged

maheshwarip merged 9 commits into
mainfrom
docs/v26.46.0-release-notes

Conversation

@bosconi

@bosconi bosconi commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

Release notes for the v26.46.0 train. Dates in RC snapshots are provisional until the release ships. One commit is added per snapshot; the final snapshot sets the real dates.

  • Content: 1 Feature (Metric Sinks), 1 Kafka sink message attribution section (split out of Improvements by an editor on this branch), 9 Improvements, 7 Bug Fixes — all from rc.1.
  • final adds no entries. v26.46.0-rc.1...v26.46.0 is ahead_by: 1 and that commit is the version bump, so nothing was cherry-picked onto the release branch after rc.1. The five agent-skills PRs in the window are four automated mz-docs regenerations plus one prose clarification, all omitted.
  • Dates: real Cloud 2026-10-15, Self-Managed 2026-10-16 — identical to the provisional pair rc.1 estimated, so no date line changed in this run. The v26.46.0 tag was cut 2026-10-14 (Wednesday); the first Thursday on or after it is 2026-10-15, Self-Managed the day after.
  • Operator compatibility: row present for v26.46, release date 2026-10-16.
  • Branch updated from main in this run (it was 89 commits behind). The merge conflict was the top-of-list insertion point in both files; resolved keeping v26.46.0 above main's consolidated v26.45.1. Section order is now v26.46.0, v26.45.1, v26.44.1.

⚠️ Open questions for the release owner

  • Metric sinks (#39653) — still open at the final tag, and this is the last snapshot before ship. enable_metric_sink is true in src/sql/src/session/vars/definitions.rs, re-verified at v26.46.0, so availability is established — but doc/user still has no page for CREATE METRIC SINK, DROP METRIC SINK, or SHOW METRIC SINKS. Either a docs page lands with the release, or the Metric Sinks section is held for the release that ships its documentation; publishing the heading as-is sends readers to a 404. (Also stale, harmlessly: doc/developer/generated/sql/session/vars/definitions.md still describes the default as false.)
  • Bounded persist part decoding (#39587, omitted): persist_part_decode_batch_rows is unset at the tag. If the batch size is being turned on for this release, this is a strong Improvement — the PR measures an OOM-killed hydration becoming 303 s on TPC-H SF100 lineitem.
  • SQL Server change-table cleanup (#39463, omitted): behind CDC_CLEANUP_CHANGE_TABLE, which defaults off. Publish if the flag is being enabled.
  • Persist per-shard metric cardinality (#39357, #39591, #39601, omitted): adds persist_shard_metrics and friends, but production keeps both, so no scrape shrinks in this release. Should self-managed operators be told the knob exists before their scrape is the one that breaks at ~390k series?
  • Nullable-UNIQUE constraint fix and its revert (#39598, #39660, both omitted): net zero shipped behavior, but the planner defect is still open and the near-miss was an environmentd boot panic after upgrade, not a cosmetic one.
  • Per-subsystem chunk spill gates (#39659, omitted): shipped as the sole substantive commit of v26.45.1 and reaches main in this window. If it warrants a note, that note belongs on ## v26.45.1 (#39661), not here.
  • Kafka sink message attribution (#39566, #39590): confirm the private-preview wording. Settled on this branch — the entry is its own section using the {{< private-preview />}} shortcode and linking CREATE SINK: Headers.

Snapshot drafts (with PR links) in mz-skills:

Borderline PRs omitted: rc.1: 10 — omitted.md#borderline, final: 1 — omitted.md#borderline

🤖 Generated with Claude Code

Adds the `## v26.46.0` section to `doc/user/content/releases/_index.md`
and the operator compatibility row for v26.46, from the rc.1 snapshot.

Dates are provisional (Cloud 2026-10-15, Self-Managed 2026-10-16) and are
set for real by the final snapshot.
@bosconi
bosconi requested a review from a team as a code owner October 9, 2026 07:23
val-materialize and others added 3 commits October 9, 2026 10:18
Moves the materialize-sink-id header entry out of Improvements into a
private-preview section, matching how SCIM role mapping was announced
in v26.34, and links to the CREATE SINK Headers docs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Brings in the v26.45.0/v26.45.1 consolidation and the rest of main, which
this branch was 89 commits behind. Conflicts in doc/user/content/releases/_index.md
and the operator-compatibility YAML were both the top-of-list insertion point:
resolved by keeping this branch's v26.46.0 section and row above main's
consolidated v26.45.1 ones. Section order is now v26.46.0, v26.45.1, v26.44.1.
The final snapshot of this train publishes no new entries: comparing
v26.46.0-rc.1...v26.46.0 is ahead_by 1 and that commit is the version bump,
so nothing was cherry-picked onto the release branch after rc.1. The five
agent-skills PRs in the window are four automated mz-docs regenerations plus
one prose clarification, all omitted.

The real dates - Cloud 2026-10-15, Self-Managed 2026-10-16 - are identical to
the provisional pair rc.1 estimated, so the two date lines in _index.md and the
Release date in the operator-compatibility YAML already carry them and need no
edit. This commit records the snapshot as applied.

One item for the release owner: Metric Sinks, the release's headline feature,
still has no user-facing documentation at the final tag - doc/user has no page
for CREATE METRIC SINK, DROP METRIC SINK, or SHOW METRIC SINKS. Either a docs
page lands with the release, or the section is held for the release that ships
its documentation.
@bosconi bosconi mentioned this pull request Oct 16, 2026
val-materialize and others added 5 commits October 16, 2026 11:34
Removed sections on Metric Sinks and Kafka sink message attribution from the release notes for version 26.46.0.
Cut the Console account-pages entry (Cloud-only, live in Cloud before the
release) and the replica-scoped override fix (internal flags only). Drop
"by default" from read-then-write (the flag was removed), narrow the
network policy entry to create/alter, note that Kafka sources on private
brokers stall on reconnect, and trim internal detail elsewhere.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Advises Self-Managed deployments with upsert sources to hold off on
upgrading to v26.46.0 because of a potential performance regression,
following the advisory format used for the v26.30.1 MySQL YEAR change.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@maheshwarip
maheshwarip enabled auto-merge (squash) October 16, 2026 17:51
@maheshwarip
maheshwarip merged commit c4bf58e into main Oct 16, 2026
11 checks passed
@maheshwarip
maheshwarip deleted the docs/v26.46.0-release-notes branch October 16, 2026 17:51
maheshwarip added a commit that referenced this pull request Oct 23, 2026
Release notes for the **v26.47.0** train. One commit was added per
snapshot; the `final` snapshot sets the real dates. **All six snapshots
(`rc.1`–`rc.5`, `final`) are now applied — this branch is complete and
ready for review.**

- **Content**: 2 Feature sections (`TRY_CAST`, `EXCLUDE ALL NOT NULL
CONSTRAINTS`), 7 Improvements, 13 Bug Fixes — `rc.1` contributed all of
it except the top four Bug Fixes: `rc.2` added two, and `rc.3` and
`rc.4` one each. `rc.5` added no new entries; it amended `rc.4`'s
probe-port Bug Fix instead (see below). `final` adds nothing at all —
its tracking issue holds only the unassociated `release: bump to version
v26.47.0` commit
([`bed23494d`](bed2349)),
and the `v26.47.0-rc.5` and `v26.47.0` tags are 14h28m apart with that
bump the only thing between them. Its commit is empty and exists to
record on the branch that the snapshot was applied.
- **Dates (final, no longer provisional)**: Cloud **2026-10-22**,
Self-Managed **2026-10-23**. Every RC estimated this same pair from the
`v26.47.0-rc.1` tag, and the real dates confirmed it — the five RCs
compressed into one week rather than pushing the train out — so no
published date text changed in the `final` commit. ⚠️ One thing worth a
last look before merge: **2026-10-22 is a Wednesday**, one day off the
usual Thursday Cloud date (2026-10-23 is the normal Friday Self-Managed
day). That is the supplied value and it stands, but if the release owner
expected Thursday 2026-10-23 / Friday 2026-10-24, this branch is where
to correct it.
- **Operator compatibility**: row added for `v26.47`, release date
`2026-10-23`.
- **Branch base**: `main`, whose newest section is `## v26.45.1` —
v26.46.0's section is still on its own unmerged branch (#39690). Expect
a top-of-list conflict when both merge; `v26.47.0` goes above
`v26.46.0`.

✅ **Corrections already on this branch** — a `final` verification pass
over the whole assembled section confirmed these and deliberately left
them alone:

- **`rc.1` named a syntax that does not exist.** It published "`CREATE
TABLE ... FROM SOURCE` now accepts an `ALL COLUMNS NULLABLE` option",
taking the name from
[#39680](#39680
title and body. At the `v26.47.0` tag the option is `EXCLUDE ALL NOT
NULL CONSTRAINTS`
(`TableFromSourceOptionName::ExcludeAllNotNullConstraints`), and
`NULLABLE` is not a lexer keyword at all, so the published syntax would
have been a parse error for anyone who copied it. A human editor caught
this and replaced the bullet with the
`{#v26.47-exclude-not-null-constraints}` feature section now on the
branch. The `rc.1` snapshot directory in mz-skills still carries the
wrong wording — snapshot directories are the record of what was reviewed
at the time and are left untouched.
- **`rc.5`'s cross-snapshot rewrite is applied once**, including the
"Deployments using password, SASL, or OIDC authentication have no
separate internal SQL port and continue to be probed on the external
one" clause.
- **PR citations are stripped from all entries** as a deliberate
house-style edit, matching how published sections read. PR links remain
available in the mz-skills snapshot drafts linked below.

⚠️ **Open questions for the release owner** — none of these were
resolved by `final`; this branch is the last place to act on them

- **Was any `rc.4` artifact handed to a customer or used for an upgrade
rehearsal?** This decides a published entry.
[#40036](#40036)
(published as a Bug Fix by `rc.4`) made the operator probe
`environmentd`'s internal SQL port unconditionally, which crashloops
deployments using Password, SASL, or OIDC authentication — they have no
internal SQL port.
[#40046](#40046) fixed
that roughly seven hours later, inside this same unreleased train, so no
shipped build (`v26.46.1` probes the external port unconditionally)
could have hit it. It is therefore recorded as **Borderline** rather
than published as a Bug Fix of its own, and its substance folded into
`rc.4`'s bullet as a scoping clause. If an `rc.4` build did reach
anyone, the crashloop *was* reachable and
[#40046](#40046)
should be published in its own right. Note the author wrote an explicit
positive release-note line for it, which is why this is flagged rather
than quietly dropped.
- **GA announcements — the largest judgment call in this train.** Three
docs PRs remove preview markers:
[#39831](#39831)
(source versioning, `CREATE TABLE ... FROM SOURCE`),
[#39836](#39836)
(replacement materialized views),
[#39830](#39830)
(Kafka sink headers, noted as "GA in v26.47"). None changes code, so all
three were held; drafted wording for each is in `omitted.md`. Which are
actually GA in v26.47.0 and should be announced? Note v26.46.0 published
Kafka sink message attribution as *private preview* — if the header goes
GA here, this release should say so rather than repeat the preview
framing.
- **GCS blob read throughput**
([#39906](#39906),
held in `rc.2`): restores the read throughput GCS deployments lost when
[#39351](#39351) —
already shipped — forced HTTP/2 and collapsed per-request connections
into one. It is selected by `persist_blob_http_pool`, verified to
default to `off` at the `v26.47.0-rc.2` tag, and the author notes "the
default should eventually be 'GCS-only'". **Is `persist_blob_http_pool`
being set to `gcs` for v26.47.0?** If so this is a clear win to publish
for GCP users, who carry the regression today; drafted wording is in
rc.2's `omitted.md`.
- **`SUBSCRIBE` soft assertions**
([#37611](#37611),
[#39764](#39764), both
held): drafted as Bug Fixes, then pulled back. Both failures come from
`soft_assert_or_log!`, which panics only where soft assertions are
enabled and otherwise logs; neither PR says what a release build does.
Are soft assertions on in the environments customers run? If yes, both
are publishable as drafted in `omitted.md`.
- **Console Freshness page**
([#39340](#39340),
held): a complete new Monitoring > Freshness page, gated behind
`freshness-page-CNS164`, off in both Cloud and self-managed, and the
LaunchDarkly flag is not yet created. If it is turned on for v26.47.0,
this likely deserves a Feature heading.
- **PostgreSQL sources ingesting during a snapshot**
([#39419](#39419),
[#39479](#39479),
held): adding a large table to an existing source would no longer stall
the tables already hydrated — but
`storage_persist_sink_description_lookahead` is `Duration::ZERO` at the
tag. Publish if the lookahead is being enabled.
- **Coalesced materialized-view sink batches**
([#37591](#37591),
held): measures ~67% fewer blob writes and ~54% smaller state diffs, at
~10 ms added p50 latency on small writes, but
`compute_mv_sink_shared_batch_max_bytes` is `0` at the tag. Publish
(with the latency cost stated) if the staged rollout reaches customers
in this release.
- **MCP 2026-07-28 conformance checks**
([#39694](#39694),
[#39695](#39695),
held): `enable_mcp_protocol_2026_07_28` is `false` at the tag. If the
revision is being served, these belong together as one Improvement.
- **Refresh strategy columns**
([#39597](#39597),
published as an Improvement): this renames `aligned_to` →
`aligned_to_expression` and `at` → `at_expression` and changes their
type. It is a breaking change for anyone selecting them, in a schema
documented as unstable — it may warrant more prominence than a bullet.
- **Retained input after `ALTER SINK ... SET FROM`** (from `rc.3`'s
[#37653](#37653)): the
PR records a pre-existing gap it does not fix — after `SET FROM`, the
*old* upstream relation stays held, and therefore un-compactable, until
the sink is dropped or `environmentd` restarts. It is not something this
release changed, so it is out of these notes, but it is a real footgun
for the blue/green pattern that `sql/alter-sink.md` recommends `SET
FROM` for. Should the `ALTER SINK` page or the blue/green guide call it
out?
- **Operator upgrade shows pending changes** (from `rc.4`'s
[#40036](#40036)): the
probe-port change alters the generated `environmentd` StatefulSet, so
after upgrading the operator, existing environments report pending
changes and pick up the new port on their next rollout — they are
**not** restarted on their own. That is an upgrade consequence rather
than something the release changed, so it is out of the notes, but a
Self-Managed operator who cannot account for the pending-changes state
may read it as a problem. The v26.47 upgrade guide looks like the right
venue.

Snapshot drafts (with PR links) in mz-skills:
- rc.1:
[release_notes.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.1/release_notes.md)
/
[omitted.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.1/omitted.md)
- rc.2:
[release_notes.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.2/release_notes.md)
/
[omitted.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.2/omitted.md)
- rc.3:
[release_notes.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.3/release_notes.md)
/
[omitted.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.3/omitted.md)
- rc.4:
[release_notes.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.4/release_notes.md)
/
[omitted.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.4/omitted.md)
- rc.5:
[release_notes.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.5/release_notes.md)
/
[omitted.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.5/omitted.md)
- final:
[release_notes.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/final/release_notes.md)
/
[omitted.md](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/final/omitted.md)

**Borderline PRs omitted:** rc.1: 14 —
[omitted.md#borderline](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.1/omitted.md#borderline),
rc.2: 2 —
[omitted.md#borderline](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.2/omitted.md#borderline),
rc.3: 0 —
[omitted.md#borderline](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.3/omitted.md#borderline),
rc.4: 0 —
[omitted.md#borderline](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.4/omitted.md#borderline),
rc.5: 1 —
[omitted.md#borderline](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/rc.5/omitted.md#borderline),
final: 0 —
[omitted.md#borderline](https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.47.0/final/omitted.md#borderline)

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

---------

Co-authored-by: Claude <[email protected]>
Co-authored-by: Valerie Chiang <[email protected]>
Co-authored-by: Pranshu Maheshwari <[email protected]>
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.

4 participants