chore(ai-clis): order after uv-providing features - #76
Merged
Conversation
specifyCli installs via uv, and install.sh self-provisions uv when it is absent. Nothing ordered that against features that also install uv, so ai-clis could run first, run the Astral installer, and then have its uv overwritten by python-tools moments later — wasted work and a nondeterministic build. installsAfter is the right knob rather than dependsOn: dependsOn is a hard, auto-installing dependency and cannot be conditioned on option values, so it would force uv into every container using this feature, including the ones that omit specifyCli. installsAfter only reorders features the user already selected and is inert otherwise. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
devcontainers/action@v1 defaults base-path-to-features to '', so validate-only scandirs an empty path and dies with ENOENT before reading any metadata. release.yaml already passes ./src; validate.yml never did. This workflow only triggers on src/**/devcontainer-feature.json, and no PR had touched one since early June, so the breakage went unnoticed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
specifyCliinstalls via uv, andinstall.sh:130-142self-provisions uv when it's absent (command -v uv→~/.local/bin/uv→ Astral installer). So the feature works standalone — this is not a missing dependency.The gap is ordering. This repo's
python-toolsfeature also installs uv to/usr/local/bin/uv, and nothing sequenced the two. Ifai-clishappened to run first, it ran the Astral installer, andpython-toolsthen overwrote that uv. No breakage, but a duplicated download and a nondeterministic build.Why
installsAfterand notdependsOnPer the Features spec,
dependsOnis a hard dependency: the resolver auto-installs it recursively and fails the whole container build if it can't be satisfied. NeitherdependsOnnorinstallsAftercan be conditioned on option values.Since
specifyCliis one of ten optional installs,dependsOnwould force uv into every container usingai-clis— including ones passingomit: "specifyCli"orinstall: "claudeCode"that never touch Python.installsAfteronly reorders features the user already selected and is inert otherwise, which matches the real relationship.Change
The three community uv features are the ones listed on containers.dev;
va-his additionally confirmed against GHCR (the repo hassrc/uvand the registry issues a pull token for it). Unused entries are no-ops, so listing all three only helps.Also documented the uv relationship in the README.
Risk
Metadata and docs only — no install logic changed.
🤖 Generated with Claude Code