package catalogue import "testing" // Replay of novox/hq issue 279 (2026-10-06): the media managers' recycle-bin folders were declared owned by // a literal user and group, and on a machine whose puid and pgid settings named another account the apps // refused them as not writable. A directory's owner could not follow the account its module runs as. Written // only with what the catalogue had before its fix (mesh-controller #260): Compose, LeftOut, a setting layer, // and the adoption tests' anchor, so it is laid over the commit before. func TestReplay279(t *testing.T) { r := anAdoptedAnchor() r.Modules = append(r.Modules, Manifest{Module: "sonarr", Resources: []map[string]any{ {"id": "recycle-bin", "type": "directory", "path": "/srv/sonarr/recycle", "mode": "0755", "owner": "${setting:puid}:${setting:pgid}"}, {"id": "identity", "type": "file", "path": "/srv/sonarr/identity.env", "mode": "0644", "content": "PUID=${setting:puid}\nPGID=${setting:pgid}\n"}, }, }) with := anchorRendering(false) with.Settings["sonarr"] = []Layer{{From: "node anchor", Values: map[string]any{"puid": "1001", "pgid": "2000"}}} composed, err := r.Compose(with) if err != nil { t.Fatalf("the machine did not compose: %v", err) } if why, left := composed.LeftOut["sonarr"]; left { t.Fatalf("the module was left out: %s", why) } got, ok := byID(composed.Resources)["sonarr.recycle-bin"] if !ok { t.Fatal("the recycle bin was not declared") } if got["owner"] != "1001:2000" { t.Fatalf("the recycle bin reaches the node-engine owned by %v, not the account the module runs as (1001:2000)", got["owner"]) } }