Repository navigation
main does not build on OTP 26 while README and the AI install guide promise it #97
Description
main cannot build on OTP 26, but the README and the AI installation guide
both promise OTP 26 as the floor. An AI or a stranger following the documented
prerequisites on OTP 26 gets a compile failure, not a working install — so this
bears directly on the "install hyperpolymath's FoT please" goal.
Measured
On PR #96 (base 30a4a6be, the #93 merge commit) three CI cells fail:
Test (Elixir 1.15 / OTP 26) FAILURE
Test (Elixir 1.16 / OTP 26) FAILURE
Test (Elixir 1.17 / OTP 26) FAILURE
Test (Elixir 1.19 / OTP 27) SUCCESS
All three fail identically, in dependency compilation — before a single test runs:
src/cow_capsule.erl:18:2: function parse/1 undefined
src/cow_capsule.erl:30:2: spec for undefined function parse/1
** (Mix) Could not compile dependency :cowlib
Provenance — this is not PR #96
| Ref | cowlib in mix.lock |
OTP 26 cells |
|---|---|---|
PR #94 base (4a7b7ed, pre-#93) |
2.16.0 | all SUCCESS |
30a4a6be (#93 merge, current main) |
2.20.0 | all FAILURE |
| PR #96 head | 2.20.0 (unchanged from base) | all FAILURE |
git diff 30a4a6be...HEAD -- elixir-mcp/mix.lock on PR #96 shows exactly one
line changed: gen_stage removed. PR #96 does not touch cowlib. The bump
landed with #93 and is already on main — #96 merely runs CI against it and
is the first PR to surface it.
Why it was not caught
The three OTP-26 cells are not in the required-status-checks list for main.
That list holds only CodeQL, CodeRabbit and governance / Code quality + docs,
so a red Test matrix cell cannot block a merge. #93 was merged with --admin.
The contradiction to resolve
README.adoc:217-218— "OTP 26 or newer"docs/AI_INSTALLATION_GUIDE.adoc:117— "OTP 26 or newer"mix.lock—cowlib2.20.0, which does not compile on OTP 26
Two coherent resolutions exist; this is a support-policy call, not a mechanical fix:
- A. Raise the floor to OTP 27. Drop the three OTP-26 matrix cells, change both
documents to "OTP 27 or newer", and keep moderncowlib/bandit. Matches the
toolchain the project actually targets (erlang 27.0,elixir 1.19.5-otp-27). - B. Keep OTP 26 support. Pin
cowlibback to a release that compiles on OTP 26
(2.16.0 is proven to, on PR fix(ci): make the dogfood gate .deed-aware #94's base) and hold the matrix as it is.
Acceptance criteria
- The documented OTP floor, the CI matrix and what actually compiles all state
the same thing. No document promises a version the build cannot satisfy. - A green run exists on every OTP version the documents promise — the promise is
backed by a measured cell, not an assumption. - If the floor rises,
README.adoc,docs/AI_INSTALLATION_GUIDE.adocand the
toolchain files are changed in the same commit, so no reader sees a stale floor. - The relevant Test matrix cells are added to the required-status-checks list for
main, or this issue records explicitly why a red build matrix is allowed
not to block. A cell nobody is required to pass is a cell that will go red again.
Scope note
Filed per the owner's standing rule of 2026-09-15 — a new finding does not block a
merge; it becomes an issue with acceptance criteria. The defect is already on main,
so merging PR #96 neither introduces nor worsens it.
Activity
Resolve #95, #97, #98 — toolchain floor, CodeRabbit findings, gate gu…
docs(#97): cite the measured OTP 26 failure, not the inferred one