Skip to content

chore(main): release 0.18.0 - #1830

Merged
github-actions[bot] merged 2 commits into
mainfrom
release-please--branches--main
Aug 24, 2026
Merged

chore(main): release 0.18.0#1830
github-actions[bot] merged 2 commits into
mainfrom
release-please--branches--main

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

🤖 I have created a release beep boop

0.18.0 (2026-08-24)

⚠ BREAKING CHANGES

  • engine: cross-process texture import for Python processors (#1899)
  • engine: graphics and ray-tracing kernels at Python parity (#1896)
  • python: batched kernel dispatch — one submission, one fence (#1889)
  • engine: GLSL is the kernel source contract — vendored compiler, keyed cache (#1885)
  • engine: CpuReadbackBridge, set_cpu_readback_bridge and its FullAccess mirror are deleted; open_cpu_readback_staging is added to the escalate wire.
  • plan: run_cpu_readback_copy(buffer_to_image) now refuses a staging that has never been filled from its surface.
  • engine: run_compute_kernel and register_compute_kernel change shape.
  • engine: Texture::native_handle() returns a DMA-BUF fd whose ownership transfers to the caller; previously the texture closed it at drop. No in-tree caller exists.
  • engine: a pool surface id names the frame — recycled ids fail loudly, never serve another frame's pixels (#1877)
  • engine: subscribe() returns Result and registers its subscriber before returning, so no event is lost to the establishment window (#1875)
  • python: delete the wheel duplicate media_clock_now_ns export (#1860)
  • engine: audio tick timestamps carry the machine epoch (#1859)
  • engine: MediaClock carries the machine monotonic epoch (#1858)
  • retire the manifest, schema and codegen layer from the consumer trees (#1854)
  • sdk: delete the @org/package/Type identity grammar and streamlib-idents (#1851)
  • engine: the registry, graph and control plane key on the import path (#1850)
  • idents: delete the orphaned package layer — resolver, manifest, lockfile, package source, archive (#1843)
  • sdk: strip the type from port declarations and control-plane rendering (#1831)
  • engine: streamlib::schemas::current_schema_idents and current_schema_definition are removed, along with the GET /api/schemas and GET /api/schemas/{name} control-plane endpoints.

Features

  • ci: check-clock-usage — enforce the wall-clock allowlist (#1861) (1494b08), closes #1728
  • engine: CPU readback becomes an always-present GpuContext capability (#1883) (d99755b)
  • engine: cross-process texture import for Python processors (#1899) (a28c3ce)
  • engine: delete the embedded schema registry (#1827) (fc6be3f)
  • engine: GLSL is the kernel source contract — vendored compiler, keyed cache (#1885) (83d81d4)
  • engine: graphics and ray-tracing kernels at Python parity (#1896) (2179da4)
  • engine: named N-binding compute dispatch from Python, end to end (#1882) (106570d)
  • engine: present-class escalate ops — a processor-owned window over the wire (#1935) (9a9a0e8), closes #1929
  • engine: surface checkout leases — a held frame's pool slot is never rehanded (#1869) (7e90288)
  • engine: the display name disambiguates duplicates within one graph (#1845) (c9e5fa0)
  • engine: the present-loop seam — one machinery, the built-in display folds onto it (#1934) (257581a), closes #1928
  • engine: the readback staging goes host-cached, and states its memory type on the wire (#1943) (4923876)
  • engine: the single compute dispatch runs on the same machinery as a batch (#1912) (5b8f378)
  • engine: validation findings are counted, and a rig test can fail on one (#1913) (46f609f)
  • media: a shared engine event pump — N window-owning processors in one process (#1923) (63543cd)
  • python: batched kernel dispatch — one submission, one fence (#1889) (19eafe6)
  • python: export_opaque_fd hands the OPAQUE_FD texture allocation to native code (#1905) (00abef7)
  • python: the cast object speaks DLPack — one shipped composable, VideoFrame rebuilt on it (#1931) (2079088)
  • python: the CPU doors open on texture-backed surfaces — staged read-in, block-edge publish, implied copy usages (#1945) (b30927e)
  • python: the scoped device-tensor view over a kernel output (#1902) (7d9a615)
  • python: the typed cast claims its frame — read(into=VideoFrame) pins the surface, drop releases it (#1871) (ed098d4)
  • python: the wheel's window object — a Python processor owns its debug window (#1936) (272cf3f)
  • python: the write scopes on the cast object — writable(), cpu(), and the multi-surface refusal (#1933) (ebf25af)
  • sdk: every processor descriptor carries its class's import path (#1848) (afae87c)
  • sdk: strip the type from port declarations and control-plane rendering (#1831) (45cff3a), closes #1816

Bug Fixes

  • adapters: concurrent cpu-readback reads each reserve their own timeline value (#1918) (f0a6bba)
  • ci: sync the in-tree version pins at the release bump, and gate them (#1955) (7e4917a)
  • engine: a pool surface id names the frame — recycled ids fail loudly, never serve another frame's pixels (#1877) (5a7b8dd)
  • engine: a surface-share export has exactly one fd owner — the texture DMA-BUF export mints per call instead of memoizing (#1881) (78c5bc8)
  • engine: audio tick timestamps carry the machine epoch (#1859) (a3cc658)
  • engine: bound every wire-derived length the frame-header read path trusts (#1832) (cbd6b9e)
  • engine: bridge teardown releases a crashed helper's surface-share registrations (#1906) (1640bdc)
  • engine: cross-process device export reads the pooled backing, never the producer's ring (#1868) (53d5410)
  • engine: MediaClock carries the machine monotonic epoch (#1858) (614bfa7), closes #1725
  • engine: per-link iceoryx2 port reclaim for helper-process endpoints on disconnect (#1862) (e76762e)
  • engine: RHI test fixtures build the video profiles and export memory production builds (#1895) (db09366)
  • engine: subscribe() returns Result and registers its subscriber before returning, so no event is lost to the establishment window (#1875) (655e74d)
  • engine: the DMA-BUF plane-layout query follows creation tiling, not the modifier's value (#1919) (796ea28)
  • engine: the pixel-buffer upload ends its destination in a layout the image usage allows (#1920) (683cd95), closes #1916
  • engine: the tone mapper leaves each image in a layout its usage allows (#1894) (110876b)
  • rhi: the extension-properties buffer outlives the names it lends (#1847) (11f5671), closes #1846

Performance

  • engine: the staging cache stops allocating on every lookup (d99755b)
  • engine: write frames straight into the iceoryx2 loan (#1922) (793e609)
  • xtask: optimize the lint gates so the test suite stops paying for them (#1849) (1385bd4)

Code Refactoring

  • engine: the registry, graph and control plane key on the import path (#1850) (4e2ac4b)
  • python: delete the wheel duplicate media_clock_now_ns export (#1860) (fd44620)
  • sdk: delete the @org/package/Type identity grammar and streamlib-idents (#1851) (d0dcea3)

Documentation

  • plan: re-cut the REMOVED bullet this change would have falsely retired (d99755b)

Miscellaneous

  • idents: delete the orphaned package layer — resolver, manifest, lockfile, package source, archive (#1843) (96717c8)
  • retire the manifest, schema and codegen layer from the consumer trees (#1854) (d69e753)

This PR was generated with Release Please. See documentation.

@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 29 times, most recently from 6226e34 to 7127923 Compare August 18, 2026 11:14
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 18 times, most recently from e1b8e0b to 5c41615 Compare August 24, 2026 20:09
tato123 added a commit that referenced this pull request Aug 24, 2026
…them (#1955)

* fix(ci): sync the in-tree version pins at the release bump, and gate them

The Release workflow has failed on every one of the last 20 pushes to main,
and it is the only failure there. `release-please`'s `simple` release type
bumps `[workspace.package] version` and ships no cargo dependency-requirement
updater, so the 45 in-tree `{ path = "…", version = "…" }` pins sit still while
the crates they name move. Within a minor line that is invisible — `^0.17.0`
matches `0.17.1` — but `^0.17.0` excludes `0.18.0`, so the release branch holds
a workspace that cannot resolve at all and `cargo update --workspace` exits 101.
The auto-merge step never runs, no tag is cut, and `trigger-wheel-release` is
skipped.

Release PR #1830 has been open since 2026-08-11 for exactly this reason, and
the PEP 503 index still tops out at 0.17.1.

The sync step's own comment always claimed it rewrote the requirements; only
`cargo update` was ever there. Move the pins first, with a gate holding the
same rule on every PR so the drift can only ever appear at the bump.

`cargo` resolves the whole workspace before building any member, so the sync
tool cannot be built once the bump has landed — the resolve it repairs is the
one that fails. It is built while main still resolves and the binary is run
against the release branch.

`[workspace.package].version` and `.release-please-manifest.json` are untouched
and stay release-please's alone; only the dependency requirements move.

Closes #1954

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(ci): make the version-pin scan TOML-section aware

The first cut matched dependency lines by shape alone, so
`[dependencies.streamlib-error]` — path and version on their own lines — was
invisible to it. A pin the gate cannot see is a pin that reaches the release
branch, which is the exact failure this gate exists to prevent, and it would
have failed silently.

Walk the table headers instead: a dependency entry is now one stated inside a
dependency table, in either spelling, including the target-specific and
workspace forms. `[lib]` and `[[test]]` paths fall out for free, since they
live outside every dependency table rather than being excluded by shape.

Scope the inherited-version check to `[package]` for the same reason — a
`version.workspace = true` under a `[package.metadata.…]` table an external
tool owns must not answer for the crate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from 5c41615 to 3967e20 Compare August 24, 2026 22:46
@github-actions
github-actions Bot merged commit 1027b23 into main Aug 24, 2026
@github-actions
github-actions Bot deleted the release-please--branches--main branch August 24, 2026 22:47
@github-actions

Copy link
Copy Markdown
Contributor Author

🤖 Created releases:

🌻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment