The Wire · Showcase
ECTO FIXES CRITICAL SPLICE BUG, PHOENIX ADOPTS BOB FOR DOCKER IMAGES
By RepoJournal · Filed · About Elixir & Phoenix
Ecto shipped a fix for a long-standing splice parameter bug that was causing placeholder mismatches in dynamic expressions, while Phoenix moved to Bob's API for smarter Docker image selection in release generation.
Ecto's dynamic expression builder had a nasty problem: when splicing parameters, the postwalker appended the same parameter multiple times per placeholder occurrence, resulting in k placeholders generating k copies of parameters and broken bindings [1]. The fix recurses through splices into a map on first occurrence, so subsequent placeholders reuse the param instead of duplicating it [1]. That same release also tackles a data-modifying CTE planner cache traversal issue [2] that could corrupt query state. On the Phoenix side, `phx.gen.release` now uses Bob's API instead of hardcoded Docker image logic [3], which means generated Dockerfiles will automatically pull the optimal image for your target architecture and Elixir version. Phoenix also shipped Seenode deployment support [4], adding it as a first-class option alongside existing platforms. The Elixir repo meanwhile corrected documentation inconsistencies: `IO.read/2` docs incorrectly claimed the count argument was in bytes when it counts characters [5], and `MapSet.split_with/2` had a copy-pasted doctest that passed a two-element tuple to a single-argument predicate [6].
Action items
- → Review Ecto changelog and test dynamic expressions with splices if you use them elixir-ecto/ecto [plan]
- → Regenerate Phoenix release tasks to pick up Bob API integration phoenixframework/phoenix [monitor]
- → Update any custom `IO.read/2` implementations assuming byte counts elixir-lang/elixir [monitor]
References
- [1] Fix splice params in dynamic expressions ↗ elixir-ecto/ecto
- [2] Fix data-modifying CTE planner cache traversal ↗ elixir-ecto/ecto
- [3] use Bob API for finding best docker image in phx.gen.release ↗ phoenixframework/phoenix
- [4] Add Seenode support to Phoenix deployment guide ↗ phoenixframework/phoenix
- [5] Fix `IO.read/2` docs: integer count is in characters, not bytes ↗ elixir-lang/elixir
- [6] Align `Access.filter/1` spec with its truthy semantics ↗ elixir-lang/elixir
FAQ
- What changed in Elixir & Phoenix on July 9, 2026?
- Ecto shipped a fix for a long-standing splice parameter bug that was causing placeholder mismatches in dynamic expressions, while Phoenix moved to Bob's API for smarter Docker image selection in release generation.
- What should Elixir & Phoenix teams do about it?
- Review Ecto changelog and test dynamic expressions with splices if you use them • Regenerate Phoenix release tasks to pick up Bob API integration • Update any custom `IO.read/2` implementations assuming byte counts
- Which Elixir & Phoenix repositories shipped on July 9, 2026?
- elixir-ecto/ecto, phoenixframework/phoenix, elixir-lang/elixir