You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bump wasm-cxx-shim to v0.4.0-alpha.1, drop wasm-uu ray_cast cfg-gates
The shim's v0.4.0-alpha.1 release moves its tested manifold pin to
upstream main HEAD (`5f95a3ac`), the same commit our host build pins.
That means the wasm-uu lane now sees the same C API surface as host —
including ray_cast, which we cfg-gated off in 0.1.7 / 3.4.106 because
the previous shim (v0.3.0) defaulted to the v3.4.1 pin and didn't
have it. The gates can drop now.
The shim is alpha because it carries a single vendored diff of
upstream manifold#1690 (the PR that adds `MANIFOLD_NO_IOSTREAM`
natively). When #1690 merges, the shim re-cuts as non-alpha v0.4.0
and the carry-patch goes away. The alpha pin SHA is encoded in the
tag itself (`v0.4.0-alpha.1+5f95a3ac`) for explicit lockstep.
Changes:
- `crates/manifold-csg-sys/build.rs`: WASM_CXX_SHIM_TAG → `v0.4.0-alpha.1+5f95a3ac`.
- Drop the `#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]`
gates introduced in 0.1.7 / 3.4.106:
- sys: `ManifoldRayHitVec`, `ManifoldRayHit`, `manifold_ray_hit_vec_size`,
`manifold_alloc_ray_hit_vec`, `manifold_destruct_ray_hit_vec`,
`manifold_delete_ray_hit_vec`, `manifold_ray_cast`,
`manifold_ray_hit_vec_length`, `manifold_ray_hit_vec_get`
- safe: `pub mod ray`, `pub use ray::RayHit`, `Manifold::ray_cast`
- tests: `ray_cast_through_cube`, `ray_cast_miss`, `ray_cast_hit_has_normal`
- `wasm32-uu/CMakeLists.txt`: comment updated.
- `CLAUDE.md`: "Pin / shim follow-ups" updated to note ray_cast is no
longer gated.
- `.claude/skills/deep-review/SKILL.md`: matching update in section 10.
- `docs/plans/wasm-unknown-unknown.md`: shim version bumped.
Versions for the next release:
manifold-csg-sys 3.4.106 → 3.4.107
manifold-csg 0.1.7 → 0.1.8
manifold3d-sys / manifold3d facades follow lockstep `=` pins.
Verified:
- 214 host integration tests pass (3 ray_cast tests run on host as
always)
- wasm-uu CI-equivalent build clean: cargo build --target
wasm32-unknown-unknown -p manifold-csg --no-default-features
--features unstable-wasm-uu --tests --examples
- Produced wasm has zero unexpected imports (`wasm-objdump -x -j Import`
reports "Section not found") — confirms ray_cast now resolves against
the helper-built manifold archive
- 12 playground Node tests pass against the new build
- cargo fmt + cargo clippy clean
Followup: when shim's non-alpha v0.4.0 ships (after #1690 merges), bump
the pin off `-alpha.1`. No code changes expected — just a tag swap.
Copy file name to clipboardExpand all lines: .claude/skills/deep-review/SKILL.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -195,7 +195,7 @@ This crate tracks manifold3d upstream. Verify:
195
195
- Pinned version in `build.rs` — what version are we on? What's latest? What changed?
196
196
- ABI compatibility — have any C API function signatures changed in newer manifold3d releases?
197
197
- Deprecated functions — are we binding any C API functions that upstream has deprecated?
198
-
-**wasm32-unknown-unknown cfg-gates may need revisiting.** Grep for `target_os = "unknown"` across the workspace. Each gated FFI declaration / safe wrapper / test is gated because that C API surface postdates the shim's tested manifold pin. When the shim's tested pin moves to (or past) our host pin, those gates can be removed. Currently gated: `manifold_ray_*` (ray casting). The OBJ I/O gates are gated for a different reason (iostream patches strip them) and stay regardless.
198
+
-**wasm32-unknown-unknown cfg-gates may need revisiting.** Grep for `target_os = "unknown"` across the workspace. Each gated FFI declaration / safe wrapper / test is gated because that C API surface postdates the shim's tested manifold pin. When the shim's tested pin moves to (or past) our host pin, those gates can be removed. The OBJ I/O gates (`manifold_*_obj`) are gated for a different reason (iostream patches strip them) and stay regardless.
199
199
- New capabilities — has upstream added significant new C API surface (new types, new operations) that we're missing?
200
200
- Build system changes — has manifold3d changed its CMake structure, added/removed FetchContent deps, changed library names?
201
201
- Known upstream bugs — check manifold3d issues for bugs affecting functions we bind (especially boolean operations, MeshGL64, CrossSection offset)
- Show the user: current pin (from `MANIFOLD_VERSION` in `crates/manifold-csg-sys/build.rs`), the target, and a one-line commit summary of what's between them: `gh api repos/elalish/manifold/compare/<current>...<target> --jq '{ahead_by: .ahead_by, commits: [.commits[] | {sha: .sha[0:8], message: (.commit.message | split("\n")[0])}]}'`
36
36
- Confirm before proceeding.
37
+
-**Check shim coverage.** Before committing to the target, verify `wasm-cxx-shim` supports it. Look at the latest shim release's `MANIFOLD_GIT_TAG` default (in the helper at `cmake/WasmCxxShimManifold.cmake`, or in the release notes). If the target SHA is past the shim's tested pin, flag it: either pick a target the shim already supports, or be ready to cfg-gate any new C API on `not(all(target_arch = "wasm32", target_os = "unknown"))` (the wasm-uu lane will fall back to the shim's tested pin via `wasm_cxx_shim_add_manifold()`'s default). Mismatch without gating produces wasm-uu link failures — see CLAUDE.md "Versioning" section.
Copy file name to clipboardExpand all lines: CLAUDE.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,7 @@ The sys crate clones manifold3d (pinned to a specific commit on master, post-v3.
21
21
-**`manifold-csg-sys`** uses version `{major}.{minor}.{patch}` where major.minor tracks the upstream manifold3d version and patch >= 100 is our release number. For example, `3.4.100` tracks manifold3d v3.4.1, and `3.4.101` would be our next release against the same upstream. Patch bumps (e.g., `3.4.101` → `3.4.102`) must be semver-compatible: no removed or changed function signatures, only additions.
22
22
-**`manifold-csg`** uses standard semver (`0.1.0`, etc.) independent of the upstream version. Its `Cargo.toml` pins the sys crate version it depends on.
23
23
- When bumping the manifold3d pin in `build.rs`, the sys crate version must be updated to match (e.g., manifold3d v3.5.0 -> sys crate `3.5.100`).
24
+
-**Before bumping `MANIFOLD_VERSION`, check that `wasm-cxx-shim` supports the new pin.** The shim's helper (`wasm_cxx_shim_add_manifold()`) ships carry-patches generated against a specific manifold commit; pins past that point may not patch cleanly, and FFI declarations for any C API added in the gap will produce wasm-uu link failures. Two paths if the shim hasn't caught up: (1) wait for a shim release that pins past your target SHA, or (2) cfg-gate the new FFI surface on `not(all(target_arch = "wasm32", target_os = "unknown"))` so the wasm-uu lane stays on the shim's tested pin. The "Pin / shim follow-ups" section below covers the post-bump cleanups for path (2).
24
25
- The sys crate pins upstream to a specific commit SHA rather than a tag. This is necessary because upstream doesn't follow strict semver — minor releases can include breaking changes. Pinning to a commit gives us the same reproducibility as a tag, while allowing us to pick up post-release fixes and carry-patches between releases.
25
26
-**Version bumps**: feature PRs may (and usually should) include their own version bump so the merge is ready to publish. The `/publish` skill will bump at publish time only if no PR has done so since the last release. Note that `cargo-semver-checks` CI requires a bump whenever the PR changes the public API in a way the current version doesn't allow (e.g., a breaking change requires a minor bump pre-1.0).
26
27
-**Facade crates** (`manifold3d`, `manifold3d-sys`) always ship in lockstep with their canonical counterparts (`manifold-csg`, `manifold-csg-sys`) via `=` version pins. Bumping the canonical means bumping the facade.
@@ -48,7 +49,7 @@ The sys crate clones manifold3d (pinned to a specific commit on master, post-v3.
48
49
49
50
Things to revisit whenever the manifold pin moves OR `wasm-cxx-shim` cuts a new release:
50
51
51
-
-**Re-evaluate wasm32-unknown-unknown cfg-gates.** Any FFI declaration / safe wrapper / test gated on `not(all(target_arch = "wasm32", target_os = "unknown"))` exists because that surface postdates the shim's tested manifold pin. When the shim's tested pin moves up to (or past) our host pin, those gates can be dropped and the surface unified across targets. Current gated surface: `manifold_ray_*` (ray casting), `manifold_*_obj` (OBJ I/O — gated for a different reason: iostream patches strip it). Grep for `target_os = "unknown"` to enumerate.
52
+
-**Re-evaluate wasm32-unknown-unknown cfg-gates.** Any FFI declaration / safe wrapper / test gated on `not(all(target_arch = "wasm32", target_os = "unknown"))` exists because that surface postdates the shim's tested manifold pin. When the shim's tested pin moves up to (or past) our host pin, those gates can be dropped and the surface unified across targets. Current gated surface: `manifold_*_obj` (OBJ I/O — gated for a different reason: iostream patches strip it; this stays regardless). Ray casting is **no longer gated** as of shim v0.4.0-alpha.1, whose tested pin matches our host pin. Grep for `target_os = "unknown"` to enumerate.
52
53
-**Re-evaluate carry-patches.** For each patch in `crates/manifold-csg-sys/patches/` (if any), check whether it's merged upstream and included in the new pin; if so, delete it.
0 commit comments