diff --git a/doc/thinking/2026-04-26-namespace-manager-step30.md b/doc/thinking/2026-04-26-namespace-manager-step30.md new file mode 100644 index 00000000..c9149539 --- /dev/null +++ b/doc/thinking/2026-04-26-namespace-manager-step30.md @@ -0,0 +1,15 @@ +# 2026-04-26 — NamespaceManager rewrite, step 30 + +## Цель шага + +Закрыть startup gap в `buildermgr`: manager должен отражать и существующие namespace-ы, а не только новые события watcher-а. + +## Что меняем + +1. `buildermgr.StartNSWatcher()` создаёт пустой `NamespaceManager`. +2. После `Subscribe()` выполняется `BootstrapAndDispatch()` по текущему snapshot resolver-а. + +## Что НЕ меняем + +- не меняем low-level registration helper; +- не меняем remove path. \ No newline at end of file diff --git a/pkg/buildermgr/ns_watcher.go b/pkg/buildermgr/ns_watcher.go index 38a9827c..5b78898a 100644 --- a/pkg/buildermgr/ns_watcher.go +++ b/pkg/buildermgr/ns_watcher.go @@ -30,8 +30,11 @@ func StartNSWatcher( pkgw *packageWatcher, mgr manager.Interface, ) { - nsManager := utils.NewBootstrappedNamespaceManager(utils.DefaultNSResolver(), utils.NamespaceSourceEnv, time.Now().UTC()) + nsManager := utils.NewNamespaceManager() nsManager.Subscribe(NewNamespaceSubscriber(envw, pkgw, mgr)) + if _, err := nsManager.BootstrapAndDispatch(ctx, utils.DefaultNSResolver().Snapshot(), utils.NamespaceSourceEnv, time.Now().UTC()); err != nil { + logger.Error("buildermgr.NSWatcher: BootstrapAndDispatch failed", zap.Error(err)) + } factory := k8sInformers.NewSharedInformerFactoryWithOptions( kubeClient,