Skip to content

feat!: bump all artifacts to v2.0.0, clean up release flow#692

Merged
rgbkrk merged 4 commits intomainfrom
feat/v2-versioning
Mar 11, 2026
Merged

feat!: bump all artifacts to v2.0.0, clean up release flow#692
rgbkrk merged 4 commits intomainfrom
feat/v2-versioning

Conversation

@rgbkrk
Copy link
Member

@rgbkrk rgbkrk commented Mar 10, 2026

All artifacts move to 2.0.0. Establishes a versioning contract, adds a magic bytes wire preamble, and cleans up the release flow — all ahead of fractional indexing for cell ordering.

Version bumps (2.0.0 everywhere)

  • runtimed Rust daemon (0.1.0-dev.102.0.0)
  • runtimed PyPI package (0.1.42.0.0)
  • runt-cli (1.4.12.0.0)
  • notebook / tauri.conf.json (1.4.12.0.0)
  • sidecar (1.4.12.0.0)

Magic bytes preamble

Every connection now starts with a 5-byte preamble before the JSON handshake frame:

Bytes Content
0–3 0xC0 0xDE 0x01 0xAC
4 Protocol version (2)

The daemon validates both before reading the handshake. Non-runtimed connections get a clear error instead of a serde parse failure. Protocol mismatches are rejected before any JSON parsing. This is the breaking wire change that justifies 2.0.0.

Document schema version

Adds schema_version (u64, currently 1) to the Automerge document root. This is the gate for the upcoming fractional indexing migration — schema version 2 will switch cells from an ordered List to a Map keyed by cell ID with fractional index positions. Independent from the wire protocol version.

Release flow

  • Stable desktop releases (v* tags) now also publish Python wheels to PyPI at the version from pyproject.toml. One tag ships everything.
  • Nightly still applies the PEP 440 alpha stamp (2.0.1a{timestamp}).
  • python-v* tag path kept for Python-only patches.

Python bindings

NotebookConnectionInfo now exposes protocol_version and daemon_version (previously dropped during conversion from Rust).

Versioning contract

Protocol version and schema version are independent internal compatibility markers — not tied to the artifact version. A protocol or schema bump doesn't force a major version bump; that depends on user impact. Documented in contributing/releasing.md and contributing/protocol.md.

PR submitted by @rgbkrk's agent Quill, via Zed

rgbkrk added 4 commits March 10, 2026 16:47
- Unify version numbers: runtimed, runt-cli, notebook, sidecar, and
  the PyPI package all move to 2.0.0. Major version = protocol version.
- Stop publishing Python wheels from stable desktop releases. Only
  nightly publishes pre-release alphas to PyPI (gated by new
  publish_python_prerelease input). Stable Python releases come from
  python-v* tags.
- Expose protocol_version and daemon_version in the Python
  NotebookConnectionInfo bindings for debuggability.
- Add protocol_version to Pool IPC handshake (backward compatible:
  old clients omit it, daemon accepts None).
- Document the versioning contract in contributing/protocol.md.
Stable desktop releases (v* tags) now publish Python wheels to PyPI
at the version from pyproject.toml. Nightly still applies the alpha
stamp. Removes the intermediate publish_python_prerelease flag in
favor of conditioning the alpha version bump on github_release_prerelease
directly.

Adds contributing/releasing.md covering the versioning scheme, release
procedures, tag conventions, and protocol version change process.
Every connection now starts with a 5-byte preamble: 4-byte magic
(0xC0DE01AC) + 1-byte protocol version. The daemon validates both
before reading the handshake frame, giving a clear error for
non-runtimed connections and version mismatches.

Reverts Handshake::Pool back to a unit variant since the preamble
now handles version gating — no need for redundant version fields
in the JSON handshake.

Adds schema_version (u64) to the Automerge document root. Set to 1
for the current ordered-list cell format. This enables future schema
migrations (e.g., fractional indexing) without conflating document
structure changes with wire protocol changes.
Protocol version and schema version are independent internal
compatibility markers, not user-facing semver drivers. A protocol
bump doesn't automatically force a major version bump — that
depends on user impact.

This removes the pressure to avoid protocol evolution just because
it would mean jumping to 3.0.0.
@rgbkrk rgbkrk merged commit 7de3c8d into main Mar 11, 2026
14 checks passed
@rgbkrk rgbkrk deleted the feat/v2-versioning branch March 11, 2026 03:30
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