Change Log
View SourceAll notable changes to this project will be documented in this file. See Conventional Commits for commit guidelines.
v0.2.0 (2026-05-18)
Features:
add
ai-rules.maudetemplate (priv/maude/ai-rules.maude) — second bundled Maude module alongsideiot-rules.maude. Targets AI-generated automation rules over Agents, Capabilities, ToolInvocations, and richer predicates (capability, budget, jurisdiction, authority). Detects ten conflict types including tool-call conflict, capability shadowing, pack-tool composition mismatch, sovereignty violation, authority escalation, approval-gate bypass, and agent-loop cascade. ~570 lines of algebraic specification.add
ExMaude.AIElixir API parallel toExMaude.IoT. Submodules:ExMaude.AI.Encoder— Elixir term → Maude syntax for ai-rulesExMaude.AI.Validator— pre-encode rule validation, including explicit:unverifiablereturns for:contains/:matchesregex operatorsExMaude.AI.ConflictParser— Maude output → typed conflict maps, handling both pairwise (aiConflict) and single-rule (aiConflictSingle) constructors
add
ExMaude.ai_rules_path/0helper returning the bundledai-rules.maudepath underpriv/.add
[:ex_maude, :ai, :detect_conflicts, :start | :stop]telemetry events withtemplate: :ai_rulesmetadata for observability parity with the IoT path.promote
:nifbackend to production grade. The Rust crate now uses a dedicated reader thread feeding acrossbeam-channel, enforces per-command timeouts viarecv_timeout, captures both stdout and stderr (matching the Port backend'sstderr_to_stdoutsemantics), and returns structured errors ({:timeout, ms},:eof,{:io_error, msg},{:lock_poisoned, what}). All blocking entry points run on theDirtyIoscheduler.add
ExMaude.Parser.parse_backend_response/1as the single source of truth for turning a Maude command's raw output into{:ok, value} | {:error, %Error{}}. Both the Port and NIF backends now share this parser.expose a
nif_loaded/0probe in the NIF native module — a cheap call used byExMaude.Backend.available?/1to detect whether Rustler has populated the native function table.
Bug Fixes:
fix
ExMaude.Backend.available?(:nif)checking the wrong function name (:initialize/1instead of the actual:start/1), which made the backend appear unavailable even when the precompiled binary loaded correctly.fix
ExMaude.Backend.NIFno longer falling back into a "stub mode" when the NIF fails to load — the GenServer now refuses to start and surfaces a clear:nif_not_loadederror pointing at theEX_MAUDE_BUILD=1escape hatch.fix
:not_implementederror type removed; replaced by:nif_not_loadedand:nif_errorfor genuine NIF failure modes.
v0.1.1 (2026-04-07)
Bug Fixes:
align NIF precompiled build config with production patterns by Tobias Bohwalli
switch NIF to RustlerPrecompiled for proper Hex packaging by Tobias Bohwalli
v0.1.0 (2026-04-03)
Features:
add Livebook notebooks for interactive documentation by Tobias Bohwalli
add bundled Maude binaries and IoT rules module by Tobias Bohwalli
add NIF backend stub with Rustler scaffolding by Tobias Bohwalli
add C-Node backend with maude_bridge by Tobias Bohwalli
add mix maude.install task for binary installation by Tobias Bohwalli
add IoT rule conflict detection module by Tobias Bohwalli
add Maude binary management, server, pool, and public API by Tobias Bohwalli
add backend behaviour and Port backend implementation by Tobias Bohwalli
add parser and telemetry modules by Tobias Bohwalli
add core types (Error, Term, Result structs) by Tobias Bohwalli
Bug Fixes:
remove HTML div wrapper and pre-release notice for hex.pm rendering by Tobias Bohwalli
suppress noisy make output when binary is up-to-date by Tobias Bohwalli
handle missing Location header in redirect safely by Tobias Bohwalli
tighten encoder specs to resolve dialyzer contract_supertype warning by Tobias Bohwalli
make CNode backend fully functional by Tobias Bohwalli
split telemetry tests to use MaudeCase for integration tests by Tobias Bohwalli
handle write() return values in maude_bridge.c by Tobias Bohwalli
add ex_doc and doctor to test env for CI by Tobias Bohwalli
suppress unused alias warnings in conditional test blocks by Tobias Bohwalli
replace deprecated Exception.exception?/1 with is_exception/1 by Tobias Bohwalli
convert @platform_patterns to function for compile-time compatibility by Tobias Bohwalli
Performance Improvements:
- add benchmark suite by Tobias Bohwalli