diff --git a/CHANGELOG.md b/CHANGELOG.md index 0de578a..ee8a709 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,34 @@ +## [0.7.1] - 2026-09-11 + +### Added +- **`MobDev.Differential.run/3` emits divergences onto `Mob.Defect.Bus`** + (MOB-159 phase 2). A `{:divergence, ...}` result now emits a + `Mob.Defect.Capsule` (kind: `:divergence`, owner: `:mob`) via + `Mob.Defect.emit_divergence/2`. New `:fixture` option threads a + caller-supplied identifier into the capsule's fingerprint key so + the same divergence in the same fixture groups across runs. + + `:ok` and every documented `{:error, _}` shape (`:not_ready`, + `:differential_unavailable`, `:tree_error`, `:comparator_error`) do + not emit — nothing to report on a clean run, and a harness gap is + not a framework defect. A novel result shape logs at `:error` via + `Logger` and does not emit, so adding a new taxonomy member is an + explicit decision to compare or skip rather than silent absorption. + + The emit path is guarded by `Code.ensure_loaded?(Mob.Defect) and + function_exported?(Mob.Defect, :emit_divergence, 2)`, so a resolver + picking a `mob 0.7.x` (still allowed by the widened dep spec below) + silently no-ops instead of crashing with `UndefinedFunctionError`. + Callers who require the emit should pin `mob >= 0.8.1` themselves. + +### Changed +- **`{:mob, ...}` dep spec widened to `~> 0.7.25 or ~> 0.8.1`.** Blocks + 0.8.0 (which predates `Mob.Defect.emit_divergence/2`) while still + admitting the 0.7.x line for consumers who have not moved to the 0.8 + series yet. + +--- + ## [0.7.0] - 2026-09-11 ### Added diff --git a/mix.exs b/mix.exs index a964863..5d534ad 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule MobDev.MixProject do def project do [ app: :mob_dev, - version: "0.7.0", + version: "0.7.1", elixir: "~> 1.19", description: "Development tooling for the Mob mobile framework", source_url: "https://github.com/genericjam/mob_dev", diff --git a/mix.lock b/mix.lock index 43a3c35..6cf8fba 100644 --- a/mix.lock +++ b/mix.lock @@ -28,7 +28,7 @@ "mint": {:hex, :mint, "1.10.0", "85af3353bfc504f5bdfe494bd92b8490f87a306dc659ee1ad0af435107e898dc", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "8b16fb72aaa7531d206a1f05e4cc85509ba531ccec7a17a22736c9c95cbb24d1"}, "mix_audit": {:hex, :mix_audit, "2.1.5", "c0f77cee6b4ef9d97e37772359a187a166c7a1e0e08b50edf5bf6959dfe5a016", [:make, :mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.11", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "87f9298e21da32f697af535475860dc1d3617a010e0b418d2ec6142bc8b42d69"}, "mix_unused": {:hex, :mix_unused, "0.4.1", "9f8d759a300a79d2077d6baf617f3a5af6935d50b0f113c09295b265afc3e411", [:mix], [{:libgraph, ">= 0.0.0", [hex: :libgraph, repo: "hexpm", optional: false]}], "hexpm", "fa21f688a88e0710e3d96ac1c8e5a6181aea8a75c8a4214f0edcfeb069b831a3"}, - "mob": {:hex, :mob, "0.8.1", "d5e5ec455012c3efb9535387df394c676f2e1bdf08bc6f4f2a45e1f71dea7763", [:mix], [{:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a229649aaa955e92f0f25374d8559abe0df2e81de7887a038861cecf66938038"}, + "mob": {:hex, :mob, "0.8.2", "55d6feda5b705f59898107414000c96e3a7024d83b2d37158639dc9a4d5f855e", [:mix], [{:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "822c4ca023f40947e7f669ef11a5669adc9c2ccdf1d13375d2c50d8eb1d4f072"}, "mox": {:hex, :mox, "1.2.0", "a2cd96b4b80a3883e3100a221e8adc1b98e4c3a332a8fc434c39526babafd5b3", [:mix], [{:nimble_ownership, "~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}], "hexpm", "c7b92b3cc69ee24a7eeeaf944cd7be22013c52fcb580c1f33f50845ec821089a"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, "nimble_ownership": {:hex, :nimble_ownership, "1.0.2", "fa8a6f2d8c592ad4d79b2ca617473c6aefd5869abfa02563a77682038bf916cf", [:mix], [], "hexpm", "098af64e1f6f8609c6672127cfe9e9590a5d3fcdd82bc17a377b8692fd81a879"},