v0.15.49
Added
TraitBridgeConfiggainscontext_typeandresult_typefields (plus aResolvedCrateConfig::bridge_associated_types()helper that aggregates them across all configured bridges). Backends use this to skip generic record/POJO codegen for the bridge's associated types instead of hardcoding literal"NodeContext"/"VisitResult"checks. Any project with a callback-style trait can now wire its own context/result types through the bridge codegen.feat(alef-core,alef-backend-ffi):ffi_skip_methodsonTraitBridgeConfigfilters individual methods from the FFI vtable struct andimpl Trait for KreuzbergXBridge. Methods whose signatures can't traverse the C FFI boundary (e.g.Option<&dyn Trait>returns) are dropped, falling back to the trait's default implementation.feat(alef-backend-swift): trait-bridge support for trait methods that take excluded internal types by reference (e.g.Renderer::render(&self, doc: &InternalDocument)). Outbound trampolines now deserialise the JSON-bridged `String` parameter back to the source type using its fully-qualified Rust path.
Fixed
Codegen (cross-cutting)
fix(codegen): scope cfg-gated trait-bridge field detection to fields whose type references an opaque wrapper (per `cfg.opaque_type_names`). The previous logic in `gen_from_core_to_binding_cfg` + the struct emitters forced `Default::default()` / `#[serde(skip)]` for any cfg-gated field listed in `never_skip_cfg_field_names`, which incorrectly defaulted regular convertible fields like `metadata: HtmlMetadata` on `ConversionResult`. Restores `result.metadata.document.*` access in the Python binding.fix(backend-pyo3,backend-wasm): drive trait-bridge post-process from `core_import` instead of hardcoded crate names. The pyo3 visitor-fallback rewrite and the wasm `From<Wasm*>` impl rewrite previously matched the literal string `html_to_markdown_rs`. Both now build their search/replace patterns via the configured `core_import` plus the per-bridge `type_alias` / `options_type` / `resolved_options_field`.fix(alef-backend-extendr): trait-bridge codegen now compiles for R bindings. Six end-to-end issues fixed (Result generic arity, RwLock map_err, Send/Sync for Robj, SendRobj wrapper for tokio::spawn_blocking, JSON-bridged Robj args, Named param branch in build_extendr_arg). Unblocks removing `exclude_languages = ["r"]` from OcrBackend/PostProcessor/Validator/EmbeddingBackend/DocumentExtractor/Renderer.fix(alef-backend-ffi): stop duplicating the `Plugin` super-trait impl in `gen_ffi_trait_impl`.
WASM trait bridge
fix(wasm-backend): WASM trait bridge constructor now correctly reads the JS object's `name` property as a plain string (was always falling through to the default).fix(wasm-backend): `build_wasm_arg` no longer uses Rust `{:?}` Debug formatting for non-primitive JS bridge arguments. `TypeRef::Bytes` emits `js_sys::Uint8Array::from(...)`; `Named`/`Vec`/`Map` use `serde_wasm_bindgen::to_value(...)`.fix(wasm-backend): async WASM trait bridge methods now correctly await the `Promise` returned by the JS function (was treating the Promise as the resolved value).
Per-backend codegen
fix(alef-e2e/swift): `[].` traversal element accessor resolves field aliases before computing the Swift method name; enum elements call `.toString()` not `.to_string().toString()`.fix(alef-backend-dart): add `rust_input: crate` to the generated `flutter_rust_bridge.yaml`.fix(alef-backend-go): filter `ffi_skip_methods` in trait bridge generation.fix(alef-backend-java): post-generation line-length wrapping pass for Checkstyle.fix(alef-backend-napi): skip opaque-struct methods whose return type is a capsule type; napi capsule passthrough now runtime-compatible with the `tree-sitter` npm package (raw `napi_create_external`, optional `napi_type_tag_object`, configurable property name).fix(alef-backend-rustler): refactor method-call rendering to use a single `core_path` template variable.fix(alef-e2e/kotlin): resolve `options_type` across language overrides (csharp/c/go/php/python); bareword imports fallback to `kotlin_pkg_id`.fix(alef-e2e/java,alef-e2e/go,alef-e2e/php,alef-e2e/streaming_assertions): extensive streaming-test codegen fixes across all four — see CHANGELOG for the full breakdown.fix(alef-e2e/c,alef-e2e/swift,alef-e2e/zig,alef-e2e/dart,alef-backend-zig): five codegen bugs that broke c/swift/zig/dart e2e tests.
See CHANGELOG.md for the complete per-fix breakdown.