# Exploration: File-Level Mount Overlays

## Follow-up to Mount Specificity Ordering

The sorting fix (parent paths before child paths) was correct for directory mounts,
but it exposed a deeper bug: `ResolvedMount` always mounts its staging directory
as a single bind mount. When a config profile mount targets `/workspace/x/y` and
contains a single file `z.json`, the staging directory (containing only `z.json`)
replaces the ENTIRE `/workspace/x/y` directory, hiding all sibling files from the
git repo.

## Root Cause

In `apply_resolved_profile`:
```python
volume_mounts.append({
    "source": str(mount_dir),      # staging dir with ONLY z.json
    "target": expanded_target,     # /workspace/x/y
    "type": "bind",
})
```

This mounts a directory. Docker bind mounts at a directory path completely replace
the target directory. There is no merge.

## What the User Expects

Git repo mount: `/repo/x` → `/workspace/x` (directory with many files)
Config profile mount: `z.json` → `/workspace/x/y/z.json` (single file overlay)

Expected: `/workspace/x/y/` contains all repo files PLUS the overlaid `z.json`.
Actual (before sorting): parent mount hides child mount (child never visible).
Actual (after sorting): child directory mount replaces parent subdirectory
(`/workspace/x/y` now contains ONLY `z.json`).

## Solution

Mount each file individually instead of the staging directory.

```python
for file_path, content in mount.files.items():
    full_path = mount_dir / file_path
    full_path.write_text(content)
    volume_mounts.append({
        "source": str(full_path),
        "target": os.path.join(expanded_target, file_path),
        "type": "bind",
    })
```

This creates file-level bind mounts. Docker mounts a single file without affecting
sibling files in the parent directory.

## Edge Cases

- Empty `files` dict: skip, no mounts created.
- Nested file paths (`a/b/c.txt`): mount `staging/a/b/c.txt` → `target/a/b/c.txt`.
  Docker creates parent directories as needed.
- File target already exists in git repo: file mount wins (desired override behavior).
- No git repo mount (directory doesn't exist in image): Docker creates parent dirs
  for the first file mount.

## Sorting Fix Status

KEEP the sorting. It is still correct and necessary for cases where directory
mounts genuinely override parent directories (e.g., a git mount to `/workspace/x`
and another git mount to `/workspace/x/sub`). File-level mounts also benefit from
sorting because the parent directory mount must exist before file mounts inside it.
