Skip to content

chore(release): add shared-minor cut tooling - #7610

Merged
moq-bot[bot] merged 10 commits into
mainfrom
quest/m1/shared-version
Nov 2, 2026
Merged

moq-bot[bot] merged 10 commits into
mainfrom
quest/m1/shared-version

Conversation

@kixelated

@kixelated kixelated commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

MoQ's independently numbered packages need one shared minor at each release cut, while patches remain independent.

Approach

  • Add just version [0.MINOR.0] and enforcement on every just check/just ci. version.json keeps enforcement disabled until the cut records its minor.
  • Discover published Cargo/npm packages, apply named exemptions, promote experimental library dependencies, and update wrapper versions, bindings requirements, and workspace lock entries. Restore version files on failure and preserve published changelogs.
  • Document the cut procedure and finish the quest. Package versions, dependency requirements, and existing lockfiles are unchanged in this checkout.

Decisions

Follow the newer maintainer decision in moq-dev/moq#7585: only published library dependents promote experiments. moq-uring joins; moq-archive stays experimental. Rust kio, kio-macros, qmux, and npm @moq/qmux remain exempt; @moq/signals joins. Patches are independent, with no version_group.

Use disposable changelogs with release-plz set-version, which otherwise renames published headings and refuses missing changelogs. Edit only npm/Python workspace versions in their locks to avoid unrelated dependency churn. Shared cuts also advance Python, Dart, and Kotlin's published FFI requirements; their path/workspace overrides otherwise hide stale registry constraints.

Include c/moq/VERSION: the quest's file list and Versions inventory omitted it, but the live C release workflow publishes that independent version. This follows the goal of covering every published MoQ package and clarifies the inventory.

Impact

  • Public API and wire: none. Tooling and version/release documentation only.
  • No package bumps, publication, repository tags, or release cut. Dependency-audit removals and all existing lockfiles are preserved.

Alternatives

Lockstep patch groups contradict the recorded decision. Bumping before the pre-cut merge creates avoidable conflicts. Whole-lockfile re-resolution risks reverting dependency-audit removals.

Checks

On the final head 0f66c2198608d1aacc7620462f12bb9a2505e334, after merging main at 96244dd854:

  • quest gate just check passed (exit 0). Root orchestration changed, so every lane ran: 31 passed and none failed. check flake was skipped because this host's Nix builder cannot create user namespaces. Swift skips off macOS by design.
  • quest check --base origin/main: 586 documents ok.
  • python3 sh/version.test.py: 7 tests pass, 7.3 s in total when each test runs in isolation (11–15 s under concurrent just check load). The release-plz update fixture takes 2.5 s of that.

Merge resolution:

  • quest/m1/shared-version.md was a modify/delete conflict with moq-dev/moq#7585, which landed the library-only promotion decision that this PR already implements. Resolved by keeping the file deleted.
  • moq-dev/moq#7356 replaced sh/dispatch.sh's tool table with per-module declarations. Resolved by dropping the old table and adding release-plz to the gh module's tools=, which matches the existing sh/dispatch-query.test.py stub.

Review

mechanical fix by codex / Codex: Merged base and preserved both dependency-comment intents without metadata changes; passed python3 -m py_compile sh/version.py, python3 sh/version.test.py, python3 sh/version.py, bash -n sh/dispatch.sh, python3 sh/dispatch-query.test.py, uv build --package moq-rs --out-dir /tmp/quest-land-7610-dist, just py test, just kt check, uv run --no-sync ruff check sh/version.py sh/version.test.py sh/dispatch-query.test.py, and uv run --no-sync ruff format --check sh/version.py sh/version.test.py sh/dispa (head 2fedd98)

Claude Code, claude-opus-5-5, medium effort, reviewed 0f66c2198608d1aacc7620462f12bb9a2505e334 against origin/main (96244dd854e4eeffedfdeaa9ef4a736266eb11b9). Main changed AGENTS.md, so quest review started a new session. Round 2 had no findings. Round 1 (on the merge 768bc01da6) raised two findings:

  • Partly fixed, partly refuted: release-plz fixture in the merge gate on every diff. Fixed: CONTRIBUTING said "Run it when changing release-plz", which contradicted the wiring. It now says just gh test runs the fixture on every check. Refuted: the test is fast (2.5 s; 7.3 s for the whole file). It shares the bun lane alongside lanes that take minutes. It is high-signal, because every flake.lock bump can change release-plz. sh/dispatch.sh:435-436 records why gh's tooling tests run on every diff. The reviewer accepted this.
  • Refuted: enforcement fails main PRs once active. This is the recorded maintainer decision in the quest Plan, as merged in moq-dev/moq#7585: "Enforcement: a CI check in just check — CI check ✅". The check fails when a 0.0.x package has a published 0.x.y library dependent, and it is disabled only until the cut. The reviewer accepted this.

Earlier rounds (previous session, last on 9de0b6f6ba): wrapper FFI constraints, the declared release-plz prerequisite, and a discriminating release-plz fixture were fixed. Library-only promotion was accepted per the maintainer decision.

Follow-ups

None from this PR. The C/CARLA observations did not reproduce. Known external issues: nested dev shells duplicating PATH (moq-dev/moq#7594), the KVM probe (moq-dev/moq#7598), and the @moq/net flake recorded in moq-dev/moq#7590.

Release/CI overlaps: moq-dev/moq#7431 changes other entries in the GitHub justfile. moq-dev/moq#7356 and moq-dev/moq#7585 have since landed on main, and their conflicts are resolved above.

(Written by GPT-6.1 Sol; iterated by Claude Opus 5.5)

kixelated and others added 2 commits November 1, 2026 19:45
Quest-Claim: ff3168453fd3f1cd
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
@kixelated kixelated changed the title Every package shares one minor version chore(release): add shared-minor cut tooling Nov 2, 2026
kixelated and others added 3 commits November 1, 2026 20:05
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Keep binding floors on the shared minor while allowing their patches to advance independently.

Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
@kixelated
kixelated marked this pull request as ready for review November 2, 2026 06:55
@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c7efe11b-5179-4dda-8d7a-51cebd38f3fd
Commits

Reviewing files that changed from the base of the PR and between 8699953 and 2fedd98.

Files selected for processing: 13
  • .github/justfile
  • CONTRIBUTING.md
  • justfile
  • kt/moq/build.gradle.kts
  • py/moq-rs/pyproject.toml
  • quest/m1/README.md
  • quest/m1/shared-version.md
  • quest/m2/release/cut.md
  • sh/dispatch-query.test.py
  • sh/dispatch.sh
  • sh/version.py
  • sh/version.test.py
  • version.json
Files with no reviewable changes: 2
  • quest/m1/README.md
  • quest/m1/shared-version.md

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 1 remain after this review.

Walkthrough

The change adds a Python tool to check and set shared minor versions for eligible published packages across ecosystems. It adds configuration for the shared minor and package exemptions, and updates release instructions and wrapper version guidance. Just recipes run the checker and its tests. The new fixture tests cover package selection, version validation, release cuts, lockfiles, FFI requirements, and recovery from a failed release-plz operation.

Merge Risk: Minimal · up to 2fedd

No actionable issue was established for the shared-minor tooling. It is ready to merge after normal checks.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 4.55% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main change: shared-minor release-cut tooling.
Description check Passed The description directly explains the shared-minor tooling, enforcement, package handling, documentation, tests, and release impact.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 4.55% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 22 functions across 5 files. (6 skipped: 6 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches
Simplify code
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Warning

Some tools did not complete. Review the errors below.

Biome (2.5.15)
version.json

Biome could not lint this file: configuration resulted in errors. Check the repository's Biome configuration and plugins.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Automated review by review (OpenAI)

Reviewed commit: fc94ca4

No actionable bugs found. The shared-minor cut tool keeps the policy centralized while reusing release-plz for Rust requirements; targeted workspace-lock edits and disposable changelogs avoid unrelated resolution and published-history churn. Library-only promotion, explicit exemptions, wrapper FFI ranges, rollback, and the disabled-before-cut gate are consistent with the documented release policy. The integration fixture distinguishes a manually selected minor from a recomputed breaking bump.

Verification: static review of the implementation, fixtures, gate wiring, and current package/lock configuration only. I did not run tests, release-plz, builds, or a release cut; the PR's reported checks were not independently reproduced.

(Written by OpenAI)

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes

  • Shared-minor tooling (sh/version.py) — new just version [0.MINOR.0] that discovers published packages, sets one shared minor at a cut, and checks minor drift, experiment promotion, lock versions, stale exemptions, and FFI requirement floors. Enforcement stays off until version.json records a minor.
  • Tests (sh/version.test.py) — policy unit tests plus one real, nonpublishing release-plz update fixture that proves a hand-set version survives later breaking commits and leaves published changelogs untouched.
  • Config (version.json) — records minor: null and the named exemptions (kio, kio-macros, qmux, @moq/qmux).
  • CI wiring (.github/justfile, sh/dispatch.sh, sh/dispatch-query.test.py) — the check and test run on every just check/just ci through the always-selected gh module; release-plz joins its tool list.
  • Docs (CONTRIBUTING.md, quest/m2/release/cut.md, quest removal) — Versions section rewritten for the shared minor, the cut procedure points at it, and the completed quest/m1/shared-version.md is deleted with its README entry.

I confirmed packages/eligible against the live workspace (moq-uring is promoted through the library moq-relay; moq-archive is not, via binary-only moq-cli and a moq-hls dev-dep), the lock patterns resolve exactly one version per package in the real bun.lock/uv.lock, and the FFI-floor minor-only rule is intentional (a floor-vs-crate guard would false-positive because main lags release patches).

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@kixelated
kixelated added this pull request to the merge queue Nov 2, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Nov 2, 2026
@moq-bot

moq-bot Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

quest land watch: the merge queue removed this pull request at 0f66c21 because it conflicts with main (merge_conflict).

The land fixer works on it in the background, and the watcher re-enqueues it at the back of the queue once it is fixed or judged flaky, or hands it back here with what it needs.

(written by quest land watch)

@moq-bot
moq-bot Bot enabled auto-merge November 2, 2026 20:31
@moq-bot

moq-bot Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

codex / Codex land fixer note:

Merged base and resolved the overlapping dependency comment by retaining the shared-release policy and the updated instance/range/demand API explanation. Parsed Python package metadata is identical to both base and the pinned PR. Validation passed: 7 versioning tests, 32 dispatch tests, all 113 Python package tests, Kotlin JVM builds/tests and publication metadata checks, Python wheel/sdist build, and Python lint/format checks. The native builds initially could not locate libclang; rerunning with the installed library exposed through LIBCLANG_PATH passed.

(written by codex / Codex)

@moq-bot

moq-bot Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

quest land watch: armed auto-merge on this pull request at 2fedd98, so it joins the back of the merge queue once its required checks pass, with the land fixer's fix (codex / Codex): Merged base and preserved both dependency-comment intents without metadata changes; passed python3 -m py_compile sh/version.py, python3 sh/version.test.py, python3 sh/version.py, bash -n sh/dispatch.sh, python3 sh/dispatch-query.test.py, uv build --package moq-rs --out-dir /tmp/quest-land-7610-dist, just py test, just kt check, uv run --no-sync ruff check sh/version.py sh/version.test.py sh/dispatch-query.test.py, and uv run --no-sync ruff format --check sh/version.py sh/version.test.py sh/dispa.

(written by quest land watch)

@moq-bot
moq-bot Bot added this pull request to the merge queue Nov 2, 2026
Merged via the queue into main with commit fafbc1b Nov 2, 2026
9 of 10 checks passed
@moq-bot
moq-bot Bot deleted the quest/m1/shared-version branch November 2, 2026 21:51
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