Skip to content

1.0 becomes main: merge v1 into main (#431) - #475

Merged
EricAndrechek merged 399 commits into
mainfrom
v1
Oct 6, 2026
Merged

EricAndrechek merged 399 commits into
mainfrom
v1

Conversation

@EricAndrechek

Copy link
Copy Markdown
Member

The 1.0 SDK becomes main. The maintainer approved this on #431, and the chtypes lead cleared it explicitly.

v1 has been the 1.0 release line since 1.0.0 shipped from it. All four bindings are published from it, with 1.0.2 the latest lockstep release. This merge makes main, the default branch, carry 1.0, and retires the 0.x tree from it. 0.x stays reachable through its tags (go/v0.*, python/v0.*, ts/v0.*, rust/v0.*) and git history.

What lands on main:

Done with this PR, as cleared: main's required status checks become exactly v1's 21, with strict left off because the merge queue tests the combined commit. main's three 0.x contexts (abi, abi-fixtures, artifacts) no longer exist on this tree.

Merge method: the merge queue's MERGE, so v1's history is kept.

Refs #431.

🤖 Generated with Claude Code

EricAndrechek and others added 30 commits October 3, 2026 12:39
…xempt

The baseline and every plant now use produced_outputs() plus the fabricated paths, so a real generated file copied into the temp tree no longer fires.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
…1_TOOLCHAIN

registry:2 held only the basic tree, so four of five registry cases could not
find their tags. push_tree.py loads every tree cases.json names. The report's
toolchain now comes from CHTYPES_V1_TOOLCHAIN (matrix value; 'registry' here),
documented in the runner contract.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
v1: selftests of the banner-exempt checks keep real generated files exempt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
…OST digest)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
Replaces the inferred filter-zone paragraph with the contract the artifact
producer measured on live servers of all four pinned lines (22 filters x 3
insert zones x 3 query zones, byte-identical), with no ABI change:

- the filter compile's settings carry the filter's zone, the WHERE's
  session (else profile, then defaults, then the image zone); every
  evaluation runs the WHERE under it;
- an evaluation's settings (Filter.rows, a block's parse, an attached
  rows call) are the body's INSERT settings: the parse zone only;
- differing zones are an ordinary input, never refused;
- K filters with K zones over one block each answer as their own session.

Also: the literal-versus-column zone rules, the two zones spelled in all
four bindings, the DefaultKind row moved into the vocabulary table, and
the Rust options structs are plain structs with Default (a
non_exhaustive struct cannot be built with ..Default::default() outside
the crate).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
abi-v1: freeze the description on the owner's confirmation (F-Regen)
…fecycle and concurrent cases, regenerated layer)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
…lter settings, lifecycle and concurrent cases)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
…lter settings), lifecycle and concurrent cases

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
…loader step 7, lifecycle and concurrent case runners)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
v1-network: produce each binding's registry-transport report
… loader refusal

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012NdkF6p8Q3qkdxKCgbdjgb
EricAndrechek and others added 21 commits October 6, 2026 03:23
…head)

The ruling on #468 changed before merge from "clear" to "unlock": after an
open that attempted a load and failed, the setup record is KEPT but becomes
replaceable, so a plain retry runs under the recorded zone, never the empty
setup; and the binding's own input checks (a refused spelling, an unverified
open without the caller's opt-in) unlock nothing.

The shared cases now pin that:
- setup.latches_only_on_success: a refused spelling and a withheld opt-in
  each leave a different setup refused; a refused load makes the record
  replaceable; a replaced record is locked again; a plain retry after a
  step 7 refusal is refused again under the recorded zone; the corrected
  setup opens, and the image reports that zone.
- setup.a_retry_after_a_failed_open_keeps_the_recorded_setup: a refused
  load, then a plain retry with no new setup, which must load under the
  recorded zone.

The stub gains a zone probe (_stubshared.ZONE_PROBE): chs_type_validate of
exactly "!Z:" returns the zone the image holds, so each runner reads it back
through its public validate_type. Open steps may now carry "request" (a
registry over an empty cache) and "allow" (the caller's opt-in).

This commit carries no binding change: on the clear head both cases fail,
at the setup after the refused spelling and at the retry's image zone.

refs #468

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The parent used to stop at the first failing case, so a later case's result
was never seen. It now runs each case in its own process, reports every
failure, then fails once. Still no binding change: on the clear head both
cases must fail in Rust too.

refs #468

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The lead refined the ruling before merge: clearing the record failed open,
because a plain retry after a transient failure silently loaded under the
empty setup (UTC) instead of the zone the caller chose.

Now, while no image has completed load step 7:
- an open that attempted a load and failed (resolve or fetch, signature, an
  incompatible artifact, a missing symbol, step 7) KEEPS the record but marks
  it replaceable: a retry with no new setup runs under the recorded zone and
  defaults, and a different setup replaces the record;
- a replaced record is locked again, and so is any record an open commits
  for its load, so no setup replaces a record under a load;
- the binding's own input checks fail before anything is attempted and
  unlock nothing: a refused version spelling (checked before the attempt
  begins) and an unverified open without both opt-ins (checked before the
  commit, through a gate the loader now exposes);
- two different setups before any open is attempted are still a UsageError.
After the first successful step 7 nothing changes.

The generation guard stays: a failed open still never unlocks a setup that
was recorded or replaced after it began (another caller's setup, replacing
an unlocked record during a slow fetch, must stay locked).

- Go: setup.go replaceable; failedOpen unlocks; Registry.open treats an
  ocifetch.SpellingError as misuse; OpenUnverified asks the new
  abi1.CheckUnverifiedAllowed first.
- Python: _setup.py _replaceable; open_failed unlocks; Registry._open parses
  the request before the attempt; open_unverified checks opt-ins first.
- TypeScript: setup.ts replaceable; settleFailedOpen unlocks; the spelling
  check is back before the settled opening; openUnverified asks the loader's
  exported checkUnverifiedAllowed first.
- Rust: setup.rs replaceable and unlock_after_failed_open; Registry::open
  parses the spelling first; open_unverified checks opt-ins first.

Section 6 rules 1, 2 and 4, the settings guide and the four [Unreleased]
CHANGELOG entries say so.

refs #468

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
setup: a failed open before the first step 7 unlocks setup (#468)
…d paths (#431)

Approved by the maintainer (public issue #431).

- delete the five Go v0 verification files, Python's fetch.py and _manifest.py,
  TS's fetch.ts, Rust's dead src/fetch/ and digest.rs, and tests/parity/manifest.json
- policy-merge-check: drop their PROTECTED_GLOBS entries; the registry adapters'
  reasons describe v1; the docstring and the carve-out selftest use the v1 tree
- CONTRIBUTING.md: the generated protected-glob block, and the carve-out prose
- drop the build exclusions for the deleted files (pyproject, tsconfig x2, biome)
- comments that cited the deleted files point at the v1 code; regenerated
  (gen-constants --write, abi-v1 gen --write; the ABI fingerprint is unchanged)
- v1-abi-gen: check-no-hand-decls --scope all (0 findings over 221 files)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The comment fix in genfixtures/sign.go (it cited a deleted v0 file) changes the
generator's recorded identity; every fixture file is otherwise byte-identical.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ocs (#431)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The maintainer approved retiring the published 0.x versions. A Go version can
never be deleted from the proxy; a retract directive in a later release is the
only tool. It takes effect with the next go/v1.0.x release.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
retire v0 (1/2): delete the retained v0 binding code and prune its protected paths (#431)
…ing (#431)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
retire v0 (2/2): the v0 channel tooling and the old download host's checks (#431)
Every 1.0 production build runs ClickHouse's own result-type validation and
truthiness for a filter (FilterTransform) and a CHECK (CheckConstraintsTransform),
measured clean on all four supported lines by the artifact producer. The two
divergence entries and their register twins go, per the register's own rule
(an entry disappears when an artifact stops diverging). main's #392 wording
(fix in progress; retired lines never rebuilt) is replaced: 0.x is retired and
1.0 ships only the supported lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…istered for 1.0

The demangle DEFAULT over-accept was the last registered divergence. Measured
through the published go v1.0.2 binding against production builds
20261004.052404 on 26.3, 26.7, 26.8 and 26.9: each refuses the CREATE TABLE
with 446 (an upper() DEFAULT control compiles), as a real server does. The
entry and its register twin go. Also drops the Object('json') decline scoped
to 24.8-25.10, the ABI-revision-5 format aside, the 24.8-25.10 half of the
Enum DEFAULT note and the served index.json reference: 1.0 ships only the
supported lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
go: retract the 0.x line, v0.1.0 to v0.5.2 (#431)
docs: merge main's #392 into v1; the filter and CHECK over-admits are fixed in 1.0
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