internal/app/names.go
The header comment at names.go:15-20 explains that hyphen joins are ambiguous — ob-<app>-<service> maps both (a-b, c) and (a, b-c) to ob-a-b-c — and that this is why persistent names use join (underscore) and runtime names use runtimeName (authored - escaped to --).
Four functions bypass both:
names.go:176 ProtectionTimer
names.go:180 ProtectionTimerForEnvironment
names.go:103 ProtectionCredentialFile
names.go:123 ProtectionEnvelopePath
gIdent permits hyphens (^[a-z]([a-z0-9-]{0,38}[a-z0-9])?$), so the collision is reachable. Systemd unit names are host-global, which makes the two timer functions the ones that matter most.
ProtectionTimer has no callers and can simply be deleted; see item 8.
Split out of #50 as item 4.
internal/app/names.goThe header comment at
names.go:15-20explains that hyphen joins are ambiguous —ob-<app>-<service>maps both(a-b, c)and(a, b-c)toob-a-b-c— and that this is why persistent names usejoin(underscore) and runtime names useruntimeName(authored-escaped to--).Four functions bypass both:
names.go:176ProtectionTimernames.go:180ProtectionTimerForEnvironmentnames.go:103ProtectionCredentialFilenames.go:123ProtectionEnvelopePathgIdentpermits hyphens (^[a-z]([a-z0-9-]{0,38}[a-z0-9])?$), so the collision is reachable. Systemd unit names are host-global, which makes the two timer functions the ones that matter most.ProtectionTimerhas no callers and can simply be deleted; see item 8.Split out of #50 as item 4.