Skip to content

docs: Weaviate 1.39 release - #479

Open
g-despot wants to merge 17 commits into
mainfrom
v1-39/main
Open

docs: Weaviate 1.39 release#479
g-despot wants to merge 17 commits into
mainfrom
v1-39/main

Conversation

@g-despot

Copy link
Copy Markdown
Contributor

Release PR aggregating the ready 1.39 documentation into main. Assembled on the v1-39/main integration branch from the sub-PRs below.

Included

#474 reference updates (v1-39/reference-updates)

  • Remove the three schema_tx_* Prometheus metrics deleted from core in 1.39 (monitoring.md).
  • Promote the Boost API note from preview to GA, rename the BoostPreview include alias to BoostNote across the five search pages that render it.

#475 HNSW snapshots are automatic in 1.39 (v1-39/hnsw-snapshots-deprecation)

  • Compact v2 makes HNSW snapshots always-on. Five PERSISTENCE_HNSW_SNAPSHOT_* env vars are now deprecated no-ops (env-vars/index.md).
  • hnsw-snapshots.md split into a 1.39 section and a pre-1.39 section (the docs serve the latest three minors); concepts/storage.md rewritten; config index card reworded.

Each component passed a verifier build and an editor pass individually, and the two touch disjoint files (clean merge). This PR's CI is the authoritative combined build.

Deliberately NOT included

Flag for the release owner

#475 documents that in 1.39 an unreadable HNSW snapshot fails index startup, where 1.38 self-healed. That behavior change is tracked as a pre-GA engineering question (does the fallback get restored?). The env-var deprecation content is solid regardless; only that one paragraph in concepts/storage.md is contingent. If engineering restores the fallback before GA, that paragraph must be reverted.

g-despot added 8 commits July 19, 2026 21:46
Remove the schema_tx metrics, which were deleted from core in 1.39.

Promote the Boost API note from preview to generally available, and
rename the now-misleading BoostPreview import alias to BoostNote across
the five pages that render it.
In v1.39 the HNSW commit log compactor owns the full on-disk lifecycle of
the vector index. Snapshots are always created and managed automatically,
and the five PERSISTENCE_HNSW_SNAPSHOT_* environment variables are inert
no-ops that log a startup warning when set.

Docs serve the latest three supported minors, so the pre-v1.39
configuration guidance is retained and scoped to v1.31 through v1.38
rather than removed.

- configuration/hnsw-snapshots.md: lead with the v1.39 behavior and the
  list of ignored variables; move the existing configuration reference
  into a section scoped to earlier versions.
- concepts/storage.md: describe snapshots as part of the storage engine
  rather than an opt-in speedup, cover the streaming on-disk merge and
  the crash-safety mechanisms, and scope the previous conditional
  creation and snapshot fallback behavior to earlier versions.
- env-vars/index.md: mark the five variables deprecated in v1.39 while
  preserving what they did for readers on earlier versions.
- feature-notes/hnsw-snapshots.mdx: note the v1.39 change on both pages
  that consume the include.
The v1.39 crash-safety paragraph said a compacted segment that cannot be
read in full is dropped in favor of the snapshot and the remaining clean
segments. That is not what the loader does. For both raw commit logs and
compacted .sorted/.condensed segments it calls truncateToLastValidRecord,
keeping every record written before the corruption and leaving the file
valid for later compaction. Only the damaged tail is lost.

The two outcomes differ in recall, so describe the retention explicitly
and phrase both cases as the single mechanism they actually are.

Note that the struct comment at compact/loader.go:73-74 and the matching
one at hnsw/startup.go:101-102 still describe the discard behavior and
contradict the implementation. Tracked separately on the core side.
The card read "Configure HNSW index snapshots for faster recovery and
startup." There is nothing to configure in v1.39, but the page still
serves v1.37 and v1.38 readers who can configure it, so the description
now leads with the outcome instead of the action and reads correctly for
both audiences.

Keeps the imperative benefit-first voice of the neighbouring cards
("Reduce memory usage with...", "Enable the built-in..."), and drops the
restatement of the card title, which the title already supplies.
Blocking items:

- Move the v1.39 startup-failure behavior out of the historical note and
  into the main durability prose. It was the last sentence of a box
  titled "Behavior before v1.39", which told v1.39 readers to skip the
  highest-consequence fact in the release.
- Split the durability paragraph in three so commit logs and snapshots
  are not conflated. Commit logs, including compacted ones, self-heal by
  truncation; snapshots are never truncated or repaired and an unreadable
  one fails the index load.
- Stop calling HNSW compaction output a "segment", which contradicts
  "the vector index does not use segmentation" earlier on the same page.
  Vocabulary is now commit log, compacted commit log, snapshot, compactor.
- Replace en dashes in the env-var rows with "through", matching the
  other two files.

Also:

- Compound title on the feature-note include, per the rq-8bit precedent.
- Halve the repeated boilerplate in the five env-var rows and point the
  historical half at a new stable anchor on the pre-v1.39 section, so
  readers on earlier versions land on the part that applies to them.
- Drop "periodically" from the snapshot lead-in (compaction is driven by
  the compactor, not a timer) and stop framing a snapshot as conditional.
- Retitle both scoping notes to name v1.31 through v1.38 explicitly,
  since snapshots did not exist before v1.31.
- Add a caution to the configuration page covering the fail-to-start
  behavior, which every deprecated env-var row links to.
- Name the configuration file that silently accepts these settings.

The recovery advice was verified against the compactor deleting its
input files after a successful snapshot write, and the loader filtering
covered commit logs, which together confirm no local copy survives.

@orca-security-eu orca-security-eu Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Infrastructure as Code high 0   medium 0   low 0   info 0 View in Orca
Passed Passed SAST high 0   medium 0   low 0   info 0 View in Orca
Passed Passed Secrets high 0   medium 0   low 0   info 0 View in Orca
Passed Passed Vulnerabilities high 0   medium 0   low 0   info 0 View in Orca

g-despot and others added 9 commits August 4, 2026 15:29
The 1.38.x compatibility row carried literal "-" placeholders for
TypeScript, Go and C#. TypeScript v3.14.0 (published to npm on
2026-07-17) is the first released client with v1.38 support: its CI
matrix adds WEAVIATE_138 (1.38.2), it ships the Boost query parameter,
and it handles the per-collection asyncEnabled setting that v1.38
removed. Go and C# keep their placeholders: the newest published
releases (go-client v5.7.3, Weaviate.Client 1.1.1) still target v1.37,
and only unreleased main-branch work adds v1.38 support.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THnwHPggu8hcxb2BTMLLRB
Weaviate serves gRPC-web under the /v1/grpc-web/ path prefix on the
existing REST port, so browsers can reach the gRPC API without a second
listener. Enabled by default; toggled at runtime with grpc_web_enabled.

No client library speaks gRPC-web yet, so this states that the interface
exists without implying a supported client path or a runnable example.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THnwHPggu8hcxb2BTMLLRB
In Weaviate Cloud the gRPC-web interface is reached through the REST
Endpoint URL rather than the gRPC Endpoint URL, because it is served on
the REST port.

Added to the existing "REST Endpoint vs gRPC Endpoint" admonition on the
connect page, which already owns this distinction. The default cluster
settings page was considered and rejected: it is a table of setting
defaults with no endpoint content.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THnwHPggu8hcxb2BTMLLRB
grpc_web_enabled has no environment variable. Core only ever seeds it
with a default DynamicValue and has no os.LookupEnv branch, unlike
DEBUG_ENDPOINTS_ENABLED, so it can be set only as a runtime override.

- Add the override to the General table with the environment variable
  column marked "not applicable" rather than left blank or invented.
- Soften the page's blanket claim that every runtime configuration
  corresponds to an existing environment variable.
- State on the gRPC API page that there is no environment variable
  equivalent, so readers who know the convention stop looking.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THnwHPggu8hcxb2BTMLLRB
- Use the protocol's own capitalisation, gRPC-Web, in prose. Code-font
  /v1/grpc-web/, grpc_web_enabled and the #grpc-web anchor are unchanged,
  so cross-links still resolve.
- Say to set the override to false rather than leaving the value implied.
- Promote the section to a "## gRPC-Web" sibling so the matched
  Server-side / Client-side pair is no longer split.
- Give the no-environment-variable sentence a subject and attach it to
  the enablement idea.
- Drop the rest/REST collision and the vague antecedent.
- Tie the client-library guard to the browser framing so it cannot be
  misread as contradicting client gRPC support.
- Make the cloud sentence second person, matching its admonition.
- Avoid a third term for the same concept on the runtime-config page.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THnwHPggu8hcxb2BTMLLRB
The interface can be turned off in two places, and core spells the key
differently in each: grpc.grpcWebEnabled in the static configuration
file, grpc_web_enabled as a runtime override. Present them as a short
list so the camelCase/snake_case split cannot be skimmed past.

Also correct the runtime-config note, which claimed the setting could
only be set as a runtime override. That is now false. The separate
"no environment variable equivalent" statement stands: a configuration
file field is not an environment variable.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THnwHPggu8hcxb2BTMLLRB
docs(release-notes): fill the TypeScript client cell for the v1.38 row
docs: document the gRPC-Web interface (GA in 1.39)
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.

1 participant