VersionControl:PRs/maybelle-config/256

From PickiPedia: A knowledge base of bluegrass, old time psychedelic jams, and other public domain music
Jump to navigationJump to search
maybelle-config#256: hunter: /moods, a directory per Mood, shared by every container (Moods as Directories, step 1)
State 🟣 merged 2026-11-01 14:28:46
Worked on by magent, re, justin
Moods #emergence
Deploy hunter
Branch moods-dirs → production, by magent-cryptograss
Opened · last pushed 2026-11-01 10:03:56 · 2026-11-01 10:03:43
Step 1 of [Cryptograss:Moods as Directories](https://pickipedia.xyz/wiki/Cryptograss:Moods_as_Directories): Moods own directories, agents own processes. Nothing uses `/moods` yet. Step 2 (magenta's poller) starts each agent's new sessions there.

**What it adds**
- **`/opt/magenta/moods`** on hunter, mounted at **`/moods`** in every container (`docker-compose.yml.j2`).
- **The group `moods`, gid 3000,** on hunter and in the image. magent joins it in the image, and each agent joins at startup (`setup_agent`: `usermod -aG moods`).
- **setgid 2775 and a default ACL** (`playbook.yml`, which installs `acl`), so anything anyone makes there stays group-writable whatever their umask.
- **`safe.directory /moods/*`**, system-wide in the image, so git doesn't call one agent's clone "dubious ownership" when another agent works in it.
- **The hourly unpushed-work backup** (#253) now covers each Mood's directory too (`moods/<slug>/…`). A worktree's patch is now named by its path beside its checkout (`threads__<thread>__<repo>.patch`). Two threads' worktrees of the same repo would otherwise write the same file.

**Tested**
- **The shared directory, for real:** in a throwaway container from `magenta-arthel:latest` with the same group, ACL and `safe.directory`, I made magent (1000) and re (2001) separate users, both with umask 022. Each committed in the other's clone and worktree, `git gc` ran as re, and files came out `rw-rw-r--+`.
- **Unit tests:** `test_vcs_unpushed.py` has 5 tests, 1 new (a Mood's checkout plus two threads' worktrees of one repo). `test_container_startup.py` has 26, all passing.
- **The compose template** renders with `/opt/magenta/moods:/moods`.

**Needs:** an image rebuild, which the deploy's build-image does.

Deploy: hunter
Worked on by: magent, re, Justin, in #emergence