Срез состоит из адреса и длины. Ни то ни другое не продлевает жизнь выделенной памяти, и справочник Zig 0.15.2 прямо говорит, что за корректность и время жизни указателей отвечает программист. Возврат среза из функции ничего не продлевает.
Поэтому в документации к вызову names у каталога должно быть сказано, кому принадлежит то, что он одалживает. Здесь памятью владеет каталог, и вызывающий код представление не освобождает. Уничтожение каталога делает недействительными все представления. Успешная перезагрузка, которая подменяет хранилище, тоже делает недействительными все прежние. Если добавление имени может увеличить и переместить хранилище, у добавления должно быть такое же предупреждение. Копия среза копирует дескриптор, а не сами имена.
Отказу нужна отдельная фраза. Если перезагрузка сначала строит замену и устанавливает её только при успехе, то при сбое подготовки старая память и её представления остаются действительными. Реализация, которая сначала очищает старое хранилище, такого обещать не может, и документация должна это сказать.
Есть и другой вариант. Вернуть выделенную копию и поручить вызывающему освободить её документированным аллокатором. Время жизни становится независимым, зато работы с владением прибавляется в каждой точке вызова. Что лучше, зависит от того, как вызывающий код на деле читает, перезагружает и прибирает за собой, а это пока не прослежено.