Skip to content

v0.3.0 — Machine-readable CLI, packaging, agent integrations, CI overhaul

Latest

Choose a tag to compare

@FranciscoThiesen FranciscoThiesen released this 06 Jun 01:07
· 32 commits to main since this release

Added

  • --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
  • Async/await support: std::future<T> → Python awaitable, JavaScript Promise
  • GitHub issue and PR templates for better contribution experience
  • Feature matrix table in README showing per-language feature support

Changed

  • Improved devcontainer configuration with proper C++2c reflection flags