The frame mounted ${localEnv:HOME} at /WSL_USER to reach one file inside it,
~/.zsh_history. That granted the container read-write reach over the host's SSH
keys, shell profiles and every other repository on the machine as a side effect
of wanting one history file.
In the workspace repository the same pattern made the readonly flag on its
GitHub token directory decorative — the same inodes were writable by the second
path, verified by inode before the fix. That is what makes this a fleet-wide
change (RSRMID-3052) rather than a per-repository tidy-up.
Bind the single file at the same path instead, with a touch in
initializeCommand so Docker cannot create a directory where the file belongs —
on the host, where it would outlive the container.
Recorded in the comment while narrowing it: nothing here currently reads that
path. post-create.sh says symlinking ~/.zsh_history out of /WSL_USER "is
devbase's job now", but this frame never lists the devbase Feature, so nothing
does it — the script stopped and the Feature never started, which means this
repository has no shell-history persistence at all today. Not fixed here:
completing that migration is its own change, and this commit deliberately only
stops the mount being wider than it needs to be.
Also drops the GitHub.copilot extension, deprecated for us since the team works
with Claude; anthropic.claude-code stays. Unrelated to the mount change, kept in
the same commit only because it edits the same few lines of the same file.
Part of RSRMID-3052 — a fleet-wide fix. This frame mounted
${localEnv:HOME}at/WSL_USERto reach one file inside it,~/.zsh_history. That granted the container read-write reach over the host's SSH keys, shell profiles and every other repository on the machine.Why this is more than untidy
In the workspace repository the same pattern made the
readonlyflag on its GitHub token directory decorative — the same inodes were reachable read-write by the second path, verified there by inode before the fix:That workspace fix is merged and verified after a rebuild: no host-home mount remains, and writes to the token directory now fail.
What changed here
The bind names the single file at the same path, and
initializeCommandtouches~/.zsh_historyso Docker cannot create a directory where the file belongs — on the host, where it would outlive the container.A pre-existing defect found on the way, and recorded rather than fixed
Nothing here currently reads that path.
post-create.shsays symlinking~/.zsh_historyout of/WSL_USER"is devbase's job now" — but this frame never lists the devbase Feature, so nothing does it. The script stopped and the Feature never started, which means this repository has no shell-history persistence at all today.Not fixed here: completing that migration is its own change, and this PR deliberately only stops the mount being wider than it needs to be. The comment in the frame now records it so the next reader is not misled by the
post-create.shnote.Also
Drops the
GitHub.copilotextension, deprecated for us since the team works with Claude;anthropic.claude-codestays. Unrelated to the mount change, in the same commit only because it edits the same few lines of the same file.