0c20c91e85
Verdict GO, with one mandatory constraint. Phase 0 HOLDS: the customer-facing path set is fully derivable from data the controller already parses (ParseComposeClassifiableBinds), and ValidateBackupSpec's refusal set already covers the path-safety class data_paths: needs -- so the annotation-only design introduces no new filesystem-write primitive. No catalog folder is reachable only via env indirection; zero templates use long `type: bind` syntax. Found off-brief: the derivation is ALREADY LIVE at deploy time (stacks/manager.go:183 ensureUserdataMounts, "the deploy belt"), proven by a clean two-box control -- media/podcasts exists on demo-felhom where audiobookshelf is deployed, not on demo-hp, and is in no skeleton. P0 GO: derived set 14 dirs vs hardcoded 14 (+media/podcasts, -documents); all three hand-verified anchors match. P1 GO: 4 sources incl. nested + accented names all index ready. P2 GO: deep-link template constructible in Go from (sourceName, relPath) alone; login redirect preserves the target. P3 GO for the feature, with a pre-existing setgid-chain break recorded. P4 GO: userdata/import is shareable, guard unchanged, no live share created. P5: before-state inventory captured read-only on both boxes. P6 GO-conditional: the naive derivation produced 20 distinct outputs from 20 identical runs -- a guaranteed FileBrowser force-recreate loop -- fixed by one sort. P7: 12 sources safe server-side. No production code, no version bump, no live mutation.