Skip to content

Release v0.120.1 - #654

Merged
leonardoaraujosantos merged 8 commits into
mainfrom
release/v0.120.1
Sep 24, 2026
Merged

leonardoaraujosantos merged 8 commits into
mainfrom
release/v0.120.1

Conversation

@leonardoaraujosantos

Copy link
Copy Markdown
Contributor

Cuts v0.120.1, a patch on top of v0.120.0 (published 2026-09-18, the latest published release). It covers the eleven PRs merged since that tag: #635–#638, #645–#648, #651–#653.

Why a patch

No C ABI symbol was added or removed, and no struct was re-laid out: 708 clay_*( symbols on both sides, and every - line in the clay.h diff is the CLAY_ABI_PATCH define or a comment. That is what moves this repo's minor. pyclay did gain one keyword argument (layer_height on the multires and sculpt-layer Layer brushes), which the Python API's SemVer would call a minor; the notes say so and follow the 0.24.2 precedent. The version moved in all three files in 7f6cf38f.

What lands

  • docs/release-notes/v0.120.1.md. It opens with a one-row-per-PR summary of everything since v0.120.0, then a section per change, What moves under you (formats, then entry points), the ABI diff, the gates, Known limits (including everything carried from v0.120.0), and Upgrading by risk.
  • docs/RELEASE.md: the 0.120.1 history entry.
  • tests/device/last-gate.json: this release's device gate.
  • A correction to v0.120.0's notes. Their gates section was written before the gates ran and was never updated: it said all gates were stale, when as tagged the hardware gates were waived and the device gate passed on iOS 27.0. It is corrected with a dated note above the original text. The published v0.120.0 release body is updated to match; its tag and artifacts are unchanged.
  • make-voxel-sculpt-layer-creation-a-step (Make a voxel sculpt layer's creation, and each edit inside it, an undo step #651) archived: all 11 tasks were ticked, but it was left unarchived. The roadmap header is recounted to 21 capabilities, 240 archived, 41 open.

The headline changes, for a caller who changes nothing

Verification

release_check.py --skip-slow: every row PASS, exit 0.

  • bindings checked against a real built pyclay (766 capabilities).
  • dialect covers the cpu, cuda and metal profiles.
  • parity compared cpu only; cuda, opencl and vulkan were not built.

Device gate: PASSED, and this time against a real baseline.

  • Run: iPad15,5 on iOS 27.0 (24A437), claycore 7f6cf38f, 75 cases, seven cold sessions, thermal state nominal at both ends, no RunningBoard kill lines.
  • It is the first same-OS comparison since the iOS 27.0 re-baseline, so REGRESSION could fire. v0.120.0 had no such check.
  • Median ratio 0.998 over 75 cases; no case above both the 1.4 tolerance and the 0.125 ms floor.
  • The canary drifted x1.65 while thermalState read nominal, so sdf_flatten and sdf_relax were measured warm. Their budgets held.

The four GPU hardware gates are carried as waivers at 59e42ccf. Nothing they depend on changed since then: git diff over the full kernel-relevant set is empty. No GPU backend ran against this tree.

Closes #634: stroke_build reads 0.324 ms against the baseline's 0.488 (0.66x), within 1.09x of its iOS 26.5.2 figure. So the 1.64x at v0.120.0 neither persisted nor came from the OS. Whether that reading was high or something in this range recovered it, a one-shot gallery case cannot say; the notes state the ambiguity rather than resolve it.

After merge

Tag v0.120.1 on the merge commit. The release workflow builds the wheels, the xcframework with its SwiftPM checksum and the kernels artifact, and opens a draft. The draft's body will be replaced with docs/release-notes/v0.120.1.md, the artifacts checked, and the release published.

A patch: no C symbol was added or removed since v0.120.0, the case v0.52.2
set the precedent for. The behaviour changes that shipped entry points
now answer with go in the release notes' "What moves under you" section.
Compared against v0.120.0. What moves under a caller: an unconfined
infinite grid reports an unbounded tape.bounds and meshing refuses it
without a region (#645), bounds narrow per operator (#637), the undo
bound reports a grab rather than its node (#648), the node influence
bound widens behind a smooth sibling (#653), the brick build keeps a
grab the cull cannot judge (#652), voxel sculpt-layer operations and
creation are undo steps (#647, #651), and pyclay's multires Layer
brushes gain layer_height (#636, #646).

The ABI section is diffed against the tag: zero symbols added or
removed, no '-' line inside a typedef struct. The device gate result
is a marked placeholder until the iOS 27.0 same-OS run lands.
A patch with no ABI surface change that a caller still observes in
seven ways, each with its measurement, and the eleven merges that
carried the released 0.120.0 line without being in v0.120.0.
v0.120.0's notes said its hardware and device gates were stale: that
section was written before the gates ran and not updated before the tag.
As tagged, the four hardware gates were waived at 59e42cc and the device
gate passed at 704f2d4 on iOS 27.0 -- the re-baseline run, which is why
v0.120.0 had no regression coverage. Corrected with a dated note above the
original text, which is kept.

make-voxel-sculpt-layer-creation-a-step (#651) had all 11 tasks ticked
and was not archived by the PR that finished it; archived here, with its
scene-model delta synced. The roadmap header is recounted: 21
capabilities, 240 archived, 41 open.

The v0.120.1 notes now say why this is a patch although pyclay gained a
keyword argument, citing the 0.24.2 precedent.
One row per PR merged since the last published release, each with the
headline number from its own section, which names what it was measured
on. No new figure is introduced.
iPad15,5 on iOS 27.0 (24A437), claycore 7f6cf38 at ABI 0.120.1: seven
cold sessions, 75 cases, thermal state nominal at both ends, tree clean.
Scored against the iOS 27.0 baseline taken at v0.120.0 -- the first
same-OS comparison since the re-baseline, so REGRESSION could fire this
time. Nothing failed: median ratio 0.998 across 75 cases, none above both
the 1.4 tolerance and the 0.125 ms floor. The canary drifted x1.65 across
the run while thermalState read nominal; sdf_flatten and sdf_relax were
measured past x1.3 of it and their budgets held.
The gate passed against the iOS 27.0 baseline: median ratio 0.998 over 75
cases, none above both the tolerance and the floor. stroke_build (#634)
read 0.324 ms against the baseline's 0.488 -- it fell rather than held or
rose, so the notes' two predictions are replaced with what was measured,
and the ambiguity about v0.120.0's high reading is stated.
@leonardoaraujosantos
leonardoaraujosantos merged commit 0aa2fde into main Sep 24, 2026
31 of 32 checks passed
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.

Device watch item: stroke_build 0.298 -> 0.488 ms (1.64x) across iOS 26.5.2 -> 27.0, unattributable until a same-OS gate

1 participant