Question
Document the one build that exists inside the devcontainer, and stop AGENTS.md
implying the host's two-install convention applies in there.
Graduated from the which-build ticket.
The decision is made; this is the writing-down.
The answer: inside, run pixi run dl and pixi run aid. There is exactly one
build in there and it is the working tree — pyproject.toml declares
devlaunch = { path = ".", editable = true } and postCreateCommand runs pixi install, so the container comes up with ./dev.sh's job already done.
The forcing constraint is devpod, not naming. dl shells out to a bare
devpod from PATH (dl.py:843,866) and refuses cleanly when it is absent
(:72). Inside the container devpod exists only at
.pixi/envs/default/bin/devpod. So a devlaunch installed anywhere else would not
merely be redundant — it would have no devpod to drive and would die on the
lookup. Corroborated independently by
the in-container prototype, whose
nested ProxyCommand names exactly that path.
./dev.sh does not work in there, and not for the reason the question
guessed: it exits at its first check because uv is absent from the container
(not in the Dockerfile, not in [tool.pixi.dependencies], not in the claude-code
feature's install). The XDG_DATA_HOME worry was moot in the other direction —
dev.sh hardcodes ${HOME}/.local/share and the container sets exactly that path.
The proposed wording is in #99's resolution comment. Take it from there — but
with the two amendments below.
Amendment 1 — drop the proposed final paragraph
#99's draft ends with a paragraph explaining that the scratch-XDG recipe is
host-only and that XDG_CONFIG_HOME is load-bearing inside the container.
Do not include it. It has been superseded by
the credentials ticket, which
established that the XDG_CONFIG_HOME half guards nothing on the host either
and is being deleted outright by
#115 rather than caveated.
Once #115 lands there is no XDG_CONFIG_HOME in the instruction to warn about, so
the paragraph would document a hazard that no longer exists. Two closed tickets
pointed opposite ways here and the later, stronger finding wins: deleting beats
caveating, which is #115's own stated reasoning and principle 2's.
Amendment 2 — fix a stale claim while you are in this file
AGENTS.md still says --version reports no provenance. That is already false on
main: PR #85 landed (dev, editable from <tree>). The new section's own example
depends on it being true, so it cannot be left contradicting itself two paragraphs
apart.
The metal obligation this ticket carries
#99 could not run these — it was a reading ticket and other agents held the host's
Docker. Before this closes, paste into the PR:
pixi run dl --version from inside the container,
- one
pixi run dl <repo> from inside,
command -v uv || echo none, confirming the uv-absent claim on metal.
CLAUDE.md is a symlink to AGENTS.md — edit AGENTS.md.
This is a wayfinder:build ticket: go through /tdd. Most of it is prose and
does not take a unit test; say plainly in the PR which parts are covered and which
rest on the pasted transcripts, rather than inventing a test for a paragraph.
Blocked on #115 — it edits
the same section of the same file. Sequencing them avoids a conflict and makes
amendment 1 unambiguous.
Question
Document the one build that exists inside the devcontainer, and stop
AGENTS.mdimplying the host's two-install convention applies in there.
Graduated from the which-build ticket.
The decision is made; this is the writing-down.
The answer: inside, run
pixi run dlandpixi run aid. There is exactly onebuild in there and it is the working tree —
pyproject.tomldeclaresdevlaunch = { path = ".", editable = true }andpostCreateCommandrunspixi install, so the container comes up with./dev.sh's job already done.The forcing constraint is devpod, not naming.
dlshells out to a baredevpodfromPATH(dl.py:843,866) and refuses cleanly when it is absent(
:72). Inside the container devpod exists only at.pixi/envs/default/bin/devpod. So a devlaunch installed anywhere else would notmerely be redundant — it would have no devpod to drive and would die on the
lookup. Corroborated independently by
the in-container prototype, whose
nested
ProxyCommandnames exactly that path../dev.shdoes not work in there, and not for the reason the questionguessed: it exits at its first check because
uvis absent from the container(not in the Dockerfile, not in
[tool.pixi.dependencies], not in the claude-codefeature's install). The
XDG_DATA_HOMEworry was moot in the other direction —dev.shhardcodes${HOME}/.local/shareand the container sets exactly that path.The proposed wording is in #99's resolution comment. Take it from there — but
with the two amendments below.
Amendment 1 — drop the proposed final paragraph
#99's draft ends with a paragraph explaining that the scratch-
XDGrecipe ishost-only and that
XDG_CONFIG_HOMEis load-bearing inside the container.Do not include it. It has been superseded by
the credentials ticket, which
established that the
XDG_CONFIG_HOMEhalf guards nothing on the host eitherand is being deleted outright by
#115 rather than caveated.
Once #115 lands there is no
XDG_CONFIG_HOMEin the instruction to warn about, sothe paragraph would document a hazard that no longer exists. Two closed tickets
pointed opposite ways here and the later, stronger finding wins: deleting beats
caveating, which is #115's own stated reasoning and principle 2's.
Amendment 2 — fix a stale claim while you are in this file
AGENTS.mdstill says--versionreports no provenance. That is already false onmain: PR #85 landed(dev, editable from <tree>). The new section's own exampledepends on it being true, so it cannot be left contradicting itself two paragraphs
apart.
The metal obligation this ticket carries
#99 could not run these — it was a reading ticket and other agents held the host's
Docker. Before this closes, paste into the PR:
pixi run dl --versionfrom inside the container,pixi run dl <repo>from inside,command -v uv || echo none, confirming theuv-absent claim on metal.CLAUDE.mdis a symlink toAGENTS.md— editAGENTS.md.This is a
wayfinder:buildticket: go through/tdd. Most of it is prose anddoes not take a unit test; say plainly in the PR which parts are covered and which
rest on the pasted transcripts, rather than inventing a test for a paragraph.
Blocked on #115 — it edits
the same section of the same file. Sequencing them avoids a conflict and makes
amendment 1 unambiguous.