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
--json machine-readable output for generate, diff, and doctor: stdout carries exactly one JSON object (status, discovered classes, built outputs, and per-language errors with actionable suggestions); human-readable progress goes to stderr
mirror_bridge doctor subcommand integrating the diagnostic tool into the unified CLI
mirror_bridge diff --check CI gate: exits non-zero when the binding surface drifted from the committed snapshot, without ever modifying it
CMake package support: find_package(mirror_bridge) and FetchContent/add_subdirectory consumption via the exported mirror_bridge::mirror_bridge target, which now carries the reflection compile flags; version compatibility file; header installs preserve directory structure; as a dependency, mirror_bridge no longer injects global compile flags into the parent project
AGENTS.md operating manual for AI coding agents and llms.txt/llms-full.txt documentation bundles (generated by tools/gen_llms_txt.sh)
Error catalog (docs/reference/errors.md): every known failure mode with exact symptom, cause, and fix
pip-installable mirror-bridge package (packaging/pip/): wraps the Docker toolchain so pip install mirror-bridge gives a working mirror_bridge CLI anywhere, plus mirror_bridge shell for an interactive container
MCP server (pip install 'mirror-bridge[mcp]', run mirror-bridge-mcp): exposes generate_bindings, doctor, and check_binding_drift as native tool calls for AI agents
Claude Code integration (integrations/claude-code/): drop-in bind-cpp skill teaching the generate → fix → verify loop
Living benchmarks: a monthly CI workflow reruns the runtime suite and regenerates the table in docs/internals/benchmarks.md
API stability contract (docs/reference/stability.md): which surfaces are stable pre-1.0 and how versioning works
Smart pointer regression tests for Lua and JavaScript (members, params, returns, nil reset, abstract pointees)
Fixed
Class-type smart pointers never compiled in the Lua and JavaScript backends (overload declaration order defeated two-phase lookup); they now work with the same deep-copy semantics as Python
bool returned/accepted as a number in Lua and JavaScript; it now maps to native booleans in both directions
Methods taking std::unique_ptr<T> by value failed to compile (parameter storage tried to copy a move-only type); smart pointer parameters now use value storage and are moved into the call
Test harness named modules after the source filename instead of the MIRROR_BRIDGE_*MODULE declaration, producing unloadable modules whenever the two differed (the root cause of the long-red Tests workflow)
generate no longer reports success when a stale .so from a previous run exists but the current compile failed
generate --lang all now attempts every language and reports all failures instead of aborting on the first one
Amalgamation stripped #define MIRROR_BRIDGE_VALIDATE(T) from the single headers, leaving a dangling macro body that broke every single-header consumer
Rust FFI binding generation: generate_bindings<T>() produces extern "C" wrappers, C headers, and safe Rust wrapper types with Drop, Send, Sync, and idiomatic getters/setters
mirror_bridge watch command for live reload during development: watches headers for changes and auto-recompiles bindings
mirror_bridge diff command to show binding surface changes since last build, catching accidental ABI breaks
Bulk array transfer for numeric vectors: vector<float>, vector<double>, vector<int>, etc. are now returned as array.array objects via single memcpy (~10-50x faster than element-by-element list construction)
String interning for member names in Python dict conversion via PyUnicode_InternFromString
Exception handling for Lua (luaL_error) and JavaScript (napi_throw_error) bindings: C++ exceptions are now caught and propagated as native errors in all three languages
Compile-time binding validation: bind_class<T> now produces clear static_assert messages when a class contains unconvertible member types, instead of cryptic template errors
MIRROR_BRIDGE_VALIDATE(T) macro for explicit validation outside bind_class
std::expected<T, E> type conversion for Python (ValueError on error), Lua (idiomatic value, err multi-return), and JavaScript (throw Error on error)
GitHub Codespaces support (.devcontainer/devcontainer.json) for instant browser-based development
std::optional<T> type conversion for Python, Lua, and JavaScript