Skip to content

main does not build on OTP 26 while README and the AI install guide promise it #97

Open

Description

@hyperpolymath

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 — cowlib 2.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 modern cowlib/bandit. Matches the
    toolchain the project actually targets (erlang 27.0, elixir 1.19.5-otp-27).
  • B. Keep OTP 26 support. Pin cowlib back 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.adoc and 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

  1. added a commit that references this issue on Sep 29, 2026
  2. added a commit that references this issue on Sep 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaves incorrectlypriority:p2Normal - queue itscope:repoConfined to this repositorystatus:readyFully specified and ready to be picked up

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions