Skip to content

chore: update deps + nix env to latest, target Elixir 1.20#4

Merged
lostbean merged 1 commit into
mainfrom
chore/update-deps-latest
Jun 16, 2026
Merged

chore: update deps + nix env to latest, target Elixir 1.20#4
lostbean merged 1 commit into
mainfrom
chore/update-deps-latest

Conversation

@lostbean

Copy link
Copy Markdown
Owner

Refreshes the dev environment and all dependencies to the latest, moving the toolchain to Elixir 1.20.

Toolchain

Before After
Elixir 1.19.4 1.20.1
Erlang/OTP 28 (erts-16.2) 28.5.0.2 (erts-16.4)

flake.nix: unstable.beamMinimal28Packages.elixir_1_19elixir_1_20; both nixpkgs inputs bumped to latest (nixos-25.11 → 2026-06-15, nixpkgs-unstable → 2026-06-16). elixir-ls and livebook still build against the new pin.

Dependencies

Dep Old New (resolved)
telemetry ~> 1.0 ~> 1.4 (1.4.2)
opentelemetry_api ~> 1.2 ~> 1.5 (1.5.0)
opentelemetry ~> 1.3 ~> 1.7 (1.7.0)
opentelemetry_exporter ~> 1.6 ~> 1.10 (1.10.0)
jason ~> 1.2 ~> 1.4 (1.4.5)
req_llm (opt) ~> 1.0 ~> 1.16 (1.16.0)
jido (opt) ~> 2.0 ~> 2.3 (2.3.2)
ex_doc (dev) ~> 0.28 ~> 0.40 (0.40.3)
dialyxir (dev) ~> 1.0 ~> 1.4 (1.4.7)
credo (dev) ~> 1.6 ~> 1.7 (1.7.19)

mix.exs Elixir requirement: ~> 1.14~> 1.18 (dev env is 1.20; floor kept wide enough to stay installable on 1.18/1.19 for a published library).

Code (fixes for new Elixir 1.20 type warnings)

  • lib/agent_obs/req_llm.ex: reorder normalize_model_string/1 clauses — the %{provider:, model:} clause was placed after the broader %{model:} clause and was therefore unreachable, so provider-tagged maps never got the "provider:model" formatting. 1.20's type checker surfaced this latent bug; specific clause now comes first.
  • test/agent_obs/multi_backend_test.exs: replace an always-false refute ... == comparison of disjoint tuple types with explicit per-tag asserts (:agent_obs_phoenix / :agent_obs_generic).

Verification (all green on Elixir 1.20.1 / OTP 28)

mix compile --warnings-as-errors, mix test (230 passed / 8 excluded), mix format --check-formatted, mix credo --strict, mix dialyzer — all pass.

CI

.github/workflows/ci.yml runs everything through nix develop, so it inherits the toolchain from the flake — no workflow edit needed.

- flake: bump both nixpkgs inputs to latest; use beamMinimal28Packages.elixir_1_20 (Elixir 1.20.1 / OTP 28.5.0.2)
- mix.exs: require Elixir ~> 1.18; bump telemetry, opentelemetry*, jason, req_llm, jido, ex_doc, dialyxir, credo constraints to latest minor lines
- fix Elixir 1.20 type warnings:
  - reorder normalize_model_string/1 clauses (provider+model clause was unreachable)
  - replace always-false handler_id comparison in multi_backend_test with per-tag asserts

Verified: mix compile --warnings-as-errors, mix test (230 pass / 8 excluded),
mix format --check-formatted, mix credo --strict, mix dialyzer all green.
@lostbean lostbean merged commit 319a099 into main Jun 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant