Ephemeral Mount Modes (`tmpfs`, `ephemeral`)
Status: Open — per-mount Git isolation (shared | worktree | clone) is shipped; storage-kind modes (tmpfs, per-instance ephemeral volumes) remain an unimplemented design proposal
Shipped baseline
The enum currently has three variants — MountIsolationShared, Worktree, Clone — and requires a host MountConfigsrc on every mount. These cover git semantics for the mounted path (bind mount, per-container worktree, full directory copy) but have no way to express storage kind: a path that should be per-instance and hidden from the host, or a path that should be tmpfs-backed for speed and guaranteed teardown. Today an operator can only get either behavior by hand-writing a Docker --mount/--tmpfs flag outside jackin.role.toml or the workspace config. Docker's read-only-root security profile (docker_profile.rstmpfs_paths) mounts a fixed preset of tmpfs paths for hardened containers, but that's an internal security mechanism, not the declarative per-mount tmpfs/ephemeral modes described below — it doesn't cover arbitrary operator-declared paths like ~/.gradle/daemon.
Remaining work
- Extend
MountIsolationtoshared | worktree | clone | tmpfs | ephemeral. - Extend the workspace mount TOML schema so
tmpfs/ephemeralmounts can omitsrc(host source), and rejectreadonlyon those two modes. - Add an optional
sizefield ontmpfs, reusing the parsing helper from declarative resource limits. - Docker translator:
tmpfs→--tmpfs <dst>:size=<n>,mode=1777;ephemeral→--mount type=volume,source=jackin-<container>-<slug>,target=<dst>. - Per-instance Docker volume label scheme so
purgecan enumerate and deleteephemeralvolumes (no such labeling exists incleanup.rstoday). - Role-level mount defaults via
[[runtime.mounts]]injackin.role.toml, with workspace mounts overriding bydst. - Docs updates for mount isolation and the Mounts guide once shipped.
Out of scope
tmpfssize enforcement beyond Docker's own default behavior.ephemeralmode with operator-managed, non-purge-cleaned persistence (would need a distinctvolume = "<name>"mode).- File ownership/mode flags on
tmpfs. - Cross-instance shared ephemeral volumes (handled instead by the existing shared-cache mount pattern).
Related work
- Research: Ephemeral mount modes — design proposal (multicode comparison, schema/backend design, open questions)
- Agent Orchestration Program
- Selectable sandbox backends — cross-backend translation home for a future Apple-container implementation
- Declarative resource limits — shares the size-parsing helper