# 2026-04-26 — NamespaceManager rewrite, step 6 ## Цель шага Закрыть race-surface в router вокруг динамического добавления namespace informer-ов. ## Проблема В router есть два связанных mutable map: - `HTTPTriggerSet.triggerInformer` - `HTTPTriggerSet.funcInformer` `AddNamespace()` пишет в них на лету, а `updateRouter()` одновременно итерируется по ним. Кроме того, `functionReferenceResolver` получает `funcInformer` map и читает ее без синхронизации. Это делает dynamic onboarding потенциальным источником: - `concurrent map iteration and map write`; - чтения неполного снимка informer-ов; - гонок между router rebuild и resolver lookup. ## Исправление 1. В `HTTPTriggerSet` добавляется `RWMutex` для informer maps. 2. Чтение informer-ов переводится на snapshot helpers. 3. `functionReferenceResolver` получает собственный lock и метод `addInformer()`. 4. `router.AddNamespace()` обновляет router map и resolver map под контролируемым доступом. ## Что НЕ меняем - не переписываем router lifecycle целиком; - не добавляем remove semantics; - не меняем trigger/function business logic.