Repository navigation
environment.yml uses conda channel 'default' instead of 'defaults'; trailing space in _toc.yml #607
Description
Activity
Widening the scope of item 1: this is seven repos, not three editions — and it has already cost build time, which changes it from "latent, worth getting ahead of" to something with a measured failure attached.
Found while independently validating QuantEcon/data-lectures#51.
Scope
channels: - defaultis declared inenvironment.ymlon the default branch of all seven of these — confirmed live via the contents API and a YAML parser rather than from local clones, so no stale checkout is in play:Repo channelscontinuous_time_mcs['default']lecture-dp['default']lecture-jax['default']lecture-python-advanced.myst['default']lecture-python-intro['default']lecture-python-programming['default']lecture-python.myst['default']It has already cost two failed publish attempts
lecture-python-introrun 31133959513, tagpublish-2026aug07. Attempts 1 and 2 both died at the Setup Anaconda step — roughly 11 minutes of build time — and attempt 3 succeeded with byte-identical configuration:Attempt Outcome Error 1 fail, 00:14:48Z CondaHTTPError: HTTP 000 CONNECTION FAILED2 fail, 00:21:30Z CondaHTTPError: HTTP 503 Service Unavailable3 success, 00:39:30Z — no change to any file Both failures were fetching
https://conda.anaconda.org/default/linux-64/repodata.json. That is the channel this line names.The attribution holds rather than being circumstantial: every one of the 20 timeout errors in attempt 1 names host
conda.anaconda.organd none namesrepo.anaconda.com, anddefaultswas demonstrably healthy during the same failing step — ToS accepted forpkgs/mainandpkgs/rat 00:15:41, mid-failure. Had the file saiddefaults, the build would never have contacted the host that failed.Two corrections to the evidence in the issue body
Both matter for anyone fixing this across seven repos, because they change what you should expect to see.
The deprecation warning is not universal. The
Adding channel 'default'/conda-remove-defaultswarning quoted above appears in none of intro's three attempt logs — grep count 0. Intro's logs instead show the channel list resolving asChannels: - default - defaults. So the warning is real in the run you saw but is not a reliable signal for finding affected repos; parsingenvironment.ymlis.The channel is empty, not slow.
https://conda.anaconda.org/default/exists and returns HTTP 200 with 160 bytes of{"packages":{},"packages.conda":{}}. An early draft of this finding claimed it was pathologically slow (27s); that does not reproduce — nine consecutive samples came back in 0.266–0.482s. The defect is the needless dependency on an empty third-party channel, not latency. Worth stating plainly so the fix isn't justified on a number that won't hold up.Being fair about severity
This is intermittent exposure, not constant. It is the only run in
lecture-python-intro's last 40 to need a retry, andgit blameputs the line in2c42e29a(2023-01-25), untouched for about three and a half years and green across every publish since. The environments resolve because conda also carriesdefaultsfrom the separate hostrepo.anaconda.com.But every one of these seven repos currently makes each build depend on an anaconda.org channel that supplies zero packages, for no benefit — and when that host has a bad day, the build fails at step 4 with an error that names a channel nobody intended to use. The fix is one word per repo.
Two small defects in the build configuration, both found while porting this repo's scaffold into the new
lecture-python-programming.mledition (QuantEcon/lecture-python-programming.ml#6). Neither breaks the build today; the first is a latent failure worth getting ahead of.1.
environment.ymlnames the conda channeldefault, notdefaultsdefaultis not a conda channel. Conda adds it as a literal channel name and then resolves the packages fromdefaults, which it still adds implicitly — and warns about doing so:So the environment resolves by accident. Conda is deprecating the implicit-
defaultsbehaviour, and when it goes the build fails to resolve anything.This affects three editions — this repo,
lecture-python-programming.frandlecture-python-programming.fa— all of which carry- default.lecture-python-programming.zh-cnalready has- defaultsand is unaffected, so the corrected form is already proven in the fleet.The fix is one word in
environment.yml.2.
lectures/_toc.ymlline 39 has a trailing spaceThe entry reads
- file: workspacerather than- file: workspace. This is harmless in practice — YAML strips trailing whitespace from plain scalars, so bothjb buildand any tooling reading the file seeworkspace— but it propagates verbatim into every translation edition, sinceaction-translationcopies_toc.ymlfrom source as-is. It surfaced as a review comment on the downstream PR, where fixing it locally would only have created drift against this repo.Worth correcting here so it stops being re-copied.