Skip to content

lean: put elan's bin on PATH, so a fresh checkout finds lake - #38

Merged
rjrodger merged 2 commits into
mainfrom
claude/language-ports-tabulate-pv35wr
Sep 5, 2026
Merged

lean: put elan's bin on PATH, so a fresh checkout finds lake#38
rjrodger merged 2 commits into
mainfrom
claude/language-ports-tabulate-pv35wr

Conversation

@rjrodger

@rjrodger rjrodger commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

make test in the lean port fails with lake: not found on a machine
whose Lean came from elan. elan installs to ~/.elan/bin, and a stock
install does not put that on a non-login shell's PATH — so the shell
make spawns for each recipe cannot see it.

=== lean: FAIL
/bin/sh: 1: lake: not found
lean: build failed
make: *** [Makefile:32: build] Error 1

CI never hit this. It does not go through elan at all: it unpacks a
pinned release to /opt/lean/bin and puts that on GITHUB_PATH itself
(.github/workflows/ci.yml:235-242), so only a local checkout was
affected. Prepending a directory that does not exist is a no-op, which
is why CI is unchanged by this.

The change

Two lines in lean/Makefile, and the comment explaining why they are
there. They are the same two lines sekreto's lean port already carries,
for the same reason — make runs each recipe in its own shell, so
exporting PATH from the makefile is the only place all of them see it.

ELANBIN := $(HOME)/.elan/bin
export PATH := $(ELANBIN):$(PATH)

Verification

Run with a PATH that has no elan on it — the condition that produced
the failure:

$ env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
    sh -c 'command -v lake || echo "lake NOT on PATH (as expected)"; make test'
lake NOT on PATH (as expected)
Build completed successfully.
lean: 18 modules compile
lean: 572 corpus entries, all pass

All 572 corpus entries pass. No other port needed this — the other
twenty-two build under the session's default PATH as they did before.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SD5pZ6WjP8nMiUcAkRZjNN


Generated by Claude Code

`make test` in the lean port failed with "lake: not found" on a machine
whose Lean came from elan. elan installs to ~/.elan/bin and a stock
install does not put that on a non-login shell's PATH, so make's own
shell could not see it.

CI never hit this: it unpacks a pinned lean release to /opt/lean/bin and
puts that on GITHUB_PATH itself, so only a local checkout was affected.
Prepending a directory that does not exist is a no-op, which is why CI
stays as it was.

This is the line sekreto's lean port already carries, for the same
reason.

Verified by running `make test` with a PATH that has no elan on it: 18
modules compile, 572 corpus entries pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SD5pZ6WjP8nMiUcAkRZjNN
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

rjrodger pushed a commit to voxgig/sekreto that referenced this pull request Sep 5, 2026
main gained a house style guide and a two-part prose gate (vale +
tools/check_prose.py) while this branch was converting ports. Merging it is
also what unblocks CI: GitHub cannot build a merge ref for a conflicted PR,
so no pull_request workflow had run on this branch all day, while
voxgig/plugin#38 - opened from the same session minutes earlier and
mergeable - got all 28 checks at once.

Four conflicts, all README.md, all the same shape: main reworded the
PRE-adoption text for the gate, this branch rewrote the same paragraphs to
describe the adopted architecture. Resolved to this branch, because those
ports have adopted and main's rows say "switch - pending" for sixteen that
have moved. Style was then settled by running the gate rather than by
guessing at main's intent.

That turned up twelve findings, none of them from the merge itself: the
adoption agents wrote these READMEs before the gate existed on main, so
none of them could have known the rules.

  - six ports cited docs/design/plugin-providers.md, and one cited
    AGENTS.md. Documentation does not cite a working document; the
    citations are dropped, and each sentence still stands on its own.
  - c used "ours" and "our flags" for the port's own flags.
  - banned phrases: "sit with" (cpp), "load-bearing" and "quietly"
    (swift).

One of my own fixes was wrong and is corrected here rather than shipped:
rewriting c/README.md's "under our flags would weaken" dropped the verb and
left "under this port's flags would / the gate to suit the dependency". It
now reads "under these flags would weaken", which also stops the sentence
saying "this port" twice.

Verified after the merge: prose gate ok over 25 pages; omni register clean
at 457 files; omni_isolation_selftest 85/85; make test-python green, since
main moved `test:` to depend on scan-prose and that path needed exercising.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SD5pZ6WjP8nMiUcAkRZjNN
@rjrodger
rjrodger merged commit b48ae64 into main Sep 5, 2026
28 checks 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.

2 participants