Kaynağa Gözat

SVI Рабочее сохранение

SVI 4 ay önce
ebeveyn
işleme
83615b3c50
55 değiştirilmiş dosya ile 261 ekleme ve 244 silme
  1. 1 2
      v4/lev1/local_ctx/ctx_value/ctx_value_test.go
  2. 2 2
      v4/lev1/local_ctx/local_ctx.go
  3. 8 8
      v4/lev1/log_buf/log_buf.go
  4. 5 5
      v4/lev2/kchan/kchan.go
  5. 2 2
      v4/lev2/kmodule/kmodule.go
  6. 13 11
      v4/lev2/kserv_http/kserv_http.go
  7. 3 3
      v4/lev2/kserv_http/kserv_http_test.go
  8. 4 3
      v4/lev2/kserv_http_std/kserv_http_std.go
  9. 5 3
      v4/lev2/kspec/ikernel_module.go
  10. 7 3
      v4/lev2/kspec/ikernel_server_http.go
  11. 1 1
      v4/lev2/kspec/imodule_stat.go
  12. 1 1
      v4/lev2/kwg/kwg.go
  13. 1 1
      v4/lev2/log_topic/log_topic.go
  14. 1 2
      v4/lev2/log_topic/log_topic_test.go
  15. 6 6
      v4/lev2/lsi/kstore_kv_std/kv_bucket_base/kv_bucket_base.go
  16. 2 2
      v4/lev2/lsi/kstore_kv_std/rec_meta/rec_meta.go
  17. 0 2
      v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve.go
  18. 1 2
      v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve_test.go
  19. 11 12
      v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http.go
  20. 6 6
      v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http_test.go
  21. 1 1
      v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub.go
  22. 3 3
      v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub_test.go
  23. 4 4
      v4/lev2/lti/bus_spec/ibus_handler_sub.go
  24. 2 2
      v4/lev2/lti/dot/dot.go
  25. 3 3
      v4/lev2/lti/dot/msg_unsub/msg_unsub.go
  26. 2 2
      v4/lev2/lti/dot/msg_unsub/msg_unsub_test.go
  27. 13 12
      v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go
  28. 3 3
      v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook_test.go
  29. 1 2
      v4/lev2/lti/kbus/dict_topic_serve/dict_topic_serve.go
  30. 3 3
      v4/lev2/lti/kbus/dict_topic_serve/dict_topic_serve_test.go
  31. 1 1
      v4/lev2/lti/kbus/dict_topic_sub/dict_topic_sub.go
  32. 2 3
      v4/lev2/lti/kbus_base/kbus_base.go
  33. 4 5
      v4/lev2/lti/kbus_base/kbus_base_test.go
  34. 17 15
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go
  35. 5 6
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http_test.go
  36. 18 13
      v4/lev2/lti/kbus_http/kbus_http.go
  37. 22 22
      v4/lev2/lti/kbus_http/kbus_http_test.go
  38. 3 3
      v4/lev2/lti/kbus_local/client_bus_local/client_bus_local.go
  39. 4 4
      v4/lev2/lti/kbus_local/client_bus_local/client_bus_local_test.go
  40. 5 5
      v4/lev2/lti/kbus_local/kbus_local_test.go
  41. 2 2
      v4/lev2/wui/wui_types/iwui_ctx.go
  42. 6 4
      v4/lev3/mod_kctx/mod_kctx.go
  43. 3 3
      v4/lev3/mod_kctx/mod_kctx_test.go
  44. 6 4
      v4/lev3/mod_keeper/mod_keeper.go
  45. 3 3
      v4/lev3/mod_keeper/mod_keeper_test.go
  46. 4 4
      v4/lev3/mod_serv_http/btn_modules/btn_modules.go
  47. 3 3
      v4/lev3/mod_serv_http/http_api/http_api_test.go
  48. 5 3
      v4/lev3/mod_serv_http/mod_serv_http.go
  49. 3 3
      v4/lev3/mod_serv_http/mod_serv_http_test.go
  50. 7 6
      v4/lev3/mod_serv_http/page_module/page_module.go
  51. 5 4
      v4/lev3/mod_serv_http/page_module/page_module_test.go
  52. 5 5
      v4/lev3/mod_serv_http/page_monolit/page_monolit.go
  53. 4 4
      v4/lev3/mod_serv_http/page_monolit/page_monolit_test.go
  54. 7 5
      v4/lev3/mod_wui/mod_wui.go
  55. 2 2
      v4/lev3/mod_wui/mod_wui_test.go

+ 1 - 2
v4/lev1/local_ctx/ctx_value/ctx_value_test.go

@@ -4,12 +4,11 @@ import (
 	"testing"
 
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 )
 
 type tester struct {
 	t         *testing.T
-	val       comp_spec.ICtxValue
+	val       ICtxValue
 	createdAt ITime
 }
 

+ 2 - 2
v4/lev1/local_ctx/local_ctx.go

@@ -9,9 +9,9 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx/ctx_value"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/lst_sort"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
@@ -46,7 +46,7 @@ type LocalCtx struct {
 	fnCancel func()          // Функция отмены контекста
 
 	dictVal map[string]comp_spec.ICtxValue // Словарь различных значений
-	lstSort *lst_sort.LstSort        // Сортированный список значений
+	lstSort *lst_sort.LstSort              // Сортированный список значений
 	log     comp_spec.ILogBuf              // Локальный буфер
 }
 

+ 8 - 8
v4/lev1/log_buf/log_buf.go

@@ -55,18 +55,18 @@ func (sf *LogBufParam) SelfCheck() {
 type LogBuf struct {
 	sync.RWMutex
 	*LogBufParam
-	lst    []comp_spec.ILogMsg
-	lstErr []comp_spec.ILogMsg
+	lst    []log_msg.ILogMsg
+	lstErr []log_msg.ILogMsg
 }
 
 // NewLogBuf -- возвращает новый потокобезопасный буфер лога.
-func NewLogBuf(param *LogBufParam) comp_spec.ILogBuf {
+func NewLogBuf(param *LogBufParam) ILogBuf {
 	hassert(param != nil, "NewLogBuf(): param=nil")
 	param.SelfCheck()
 	sf := &LogBuf{
 		LogBufParam: param,
-		lst:         []comp_spec.ILogMsg{},
-		lstErr:      []comp_spec.ILogMsg{},
+		lst:         []log_msg.ILogMsg{},
+		lstErr:      []log_msg.ILogMsg{},
 	}
 	sf.Prefix_ += "."
 	return sf
@@ -78,7 +78,7 @@ func (sf *LogBuf) IsTerm() mKs.ISafeBool {
 }
 
 // GetErr -- возвращает сообщение ошибки по номеру.
-func (sf *LogBuf) GetErr(num int) comp_spec.ILogMsg {
+func (sf *LogBuf) GetErr(num int) log_msg.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	if len(sf.lstErr) == 0 {
@@ -94,7 +94,7 @@ func (sf *LogBuf) GetErr(num int) comp_spec.ILogMsg {
 }
 
 // Get -- возвращает сообщение по номеру.
-func (sf *LogBuf) Get(num int) comp_spec.ILogMsg {
+func (sf *LogBuf) Get(num int) log_msg.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	if len(sf.lst) == 0 {
@@ -198,7 +198,7 @@ func (sf *LogBuf) checkLenErr() {
 }
 
 // Печатает сообщение в терминал, если разрешено.
-func (sf *LogBuf) printTerm(msg comp_spec.ILogMsg) {
+func (sf *LogBuf) printTerm(msg log_msg.ILogMsg) {
 	if !sf.IsTerm_.Get() {
 		return
 	}

+ 5 - 5
v4/lev2/kchan/kchan.go

@@ -17,11 +17,11 @@ var (
 
 // KChanParam -- параметры умного канала
 type KChanParam[T any] struct {
-	Limit_   int             // лимит на размер канала, не может быть пустым
-	OnWrite_ func(T)         // Обратный вызов при записи в канал
-	OnRead_  func(T)         // Обратный вызов при чтении из канала
-	OnClose_ func()          // Обратный вызов при закрытии канала
-	OnLimit_ func()          // Обратный вызов при достижении лимита
+	Limit_   int                 // лимит на размер канала, не может быть пустым
+	OnWrite_ func(T)             // Обратный вызов при записи в канал
+	OnRead_  func(T)             // Обратный вызов при чтении из канала
+	OnClose_ func()              // Обратный вызов при закрытии канала
+	OnLimit_ func()              // Обратный вызов при достижении лимита
 	Ctx_     comp_spec.ILocalCtx // Локальный контекст для контроля создателя
 }
 

+ 2 - 2
v4/lev2/kmodule/kmodule.go

@@ -27,7 +27,7 @@ type kModule struct {
 	bus       bus_spec.IKernelBus
 	timePhase mKs.ISafeInt
 	strLive   mKs.ISafeString
-	stat      mKs.IModuleStat
+	stat      kspec.IModuleStat
 }
 
 // NewKernelModule -- возвращает новый модуль на основе ядра.
@@ -48,7 +48,7 @@ func NewKernelModule(name *module_name.AModuleName) kspec.IKernelModule {
 }
 
 // Stat -- возвращает статистику модуля.
-func (sf *kModule) Stat() mKs.IModuleStat {
+func (sf *kModule) Stat() kspec.IModuleStat {
 	return sf.stat
 }
 

+ 13 - 11
v4/lev2/kserv_http/kserv_http.go

@@ -4,6 +4,7 @@ package kserv_http
 import (
 	"embed"
 	"fmt"
+	"io/fs"
 	"net/http"
 	"os"
 	"strings"
@@ -20,8 +21,10 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 var (
@@ -30,9 +33,9 @@ var (
 
 // kServHttp -- встроенный HTTP-сервер.
 type kServHttp struct {
-	kCtx     mKs.IKernelCtx
-	lCtx     mKs.ILocalCtx
-	log      mKs.ILogBuf
+	kCtx     kspec.IKernelCtx
+	lCtx     comp_spec.ILocalCtx
+	log      comp_spec.ILogBuf
 	strUrl   string // URL, на котором слушает HTTP-сервер
 	fiberApp *fiber.App
 	isWork   mKs.ISafeBool
@@ -49,7 +52,7 @@ var (
 	hassert      = helpers.Hassert
 )
 
-func getParams() (string, mKs.ILogBuf, mKs.IKernelCtx) {
+func getParams() (string, comp_spec.ILogBuf, kspec.IKernelCtx) {
 	param := &log_buf.LogBufParam{
 		IsTerm_: mL1.NewSafeBool(true),
 		Prefix_: "kServHttp",
@@ -63,7 +66,7 @@ func getParams() (string, mKs.ILogBuf, mKs.IKernelCtx) {
 }
 
 // GetKernelServHttp -- возвращает  встроенный HTTP-сервер.
-func GetKernelServHttp() mKs.IKernelServerHttp {
+func GetKernelServHttp() kspec.IKernelServerHttp {
 	block.Lock()
 	defer block.Unlock()
 	if kernServHttp != nil {
@@ -94,11 +97,10 @@ func GetKernelServHttp() mKs.IKernelServerHttp {
 	sf.fiberApp.Use(compress.New(compress.Config{
 		Level: compress.LevelBestCompression, // 2
 	}))
-	sf.fiberApp.Get("/static", static.New(static.Config{
-		Root:       http.FS(embedDirStatic),
-		PathPrefix: "static",
-		Browse:     true,
-		MaxAge:     3600 * 24,
+	sf.fiberApp.Get("/static", static.New("/static", static.Config{
+		FS:     fs.FS(embedDirStatic),
+		Browse: true,
+		MaxAge: 3600 * 24,
 	}))
 	// Или расширьте конфигурацию для индивидуальной настройки
 	// Назначьте промежуточное программное обеспечение для /metrics
@@ -120,7 +122,7 @@ func (sf *kServHttp) IsWork() mKs.EBool {
 }
 
 // Log -- возвращает локальный лог.
-func (sf *kServHttp) Log() mKs.ILogBuf {
+func (sf *kServHttp) Log() comp_spec.ILogBuf {
 	return sf.log
 }
 

+ 3 - 3
v4/lev2/kserv_http/kserv_http_test.go

@@ -4,10 +4,10 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 const (
@@ -16,8 +16,8 @@ const (
 
 type tester struct {
 	t    *testing.T
-	kCtx IKernelCtx
-	wg   IKernelWg
+	kCtx kspec.IKernelCtx
+	wg   kspec.IKernelWg
 	me   *mock_env.MockEnv
 }
 

+ 4 - 3
v4/lev2/kserv_http_std/kserv_http_std.go

@@ -8,17 +8,18 @@ import (
 	"time"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 // kServHttpStd -- реализация HTTP-сервера на стандартной библиотеке.
 type kServHttpStd struct {
-	kCtx   mKs.IKernelCtx
-	log    mKs.ILogBuf
+	kCtx   kspec.IKernelCtx
+	log    comp_spec.ILogBuf
 	port   int
 	server *http.Server
 }

+ 5 - 3
v4/lev2/kspec/ikernel_module.go

@@ -1,7 +1,9 @@
 package kspec
 
 import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/module_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 )
 
 // IKernelModule -- интерфейс к модулю на основе ядра.
@@ -9,13 +11,13 @@ type IKernelModule interface {
 	// Run -- запускает модуль в работу
 	Run()
 	// IsWork -- возвращает состояние модуля
-	IsWork() EBool
+	IsWork() core_spec.EBool
 	// Name -- возвращает уникальное имя модуля
 	Name() *module_name.AModuleName
 	// Ctx -- возвращает контекст модуля
-	Ctx() ILocalCtx
+	Ctx() comp_spec.ILocalCtx
 	// Log -- возвращает буферный лог модуля
-	Log() ILogBuf
+	Log() comp_spec.ILogBuf
 	// Live -- "сигнал жизни"
 	Live() string
 	// Stat -- возвращает статистику модуля

+ 7 - 3
v4/lev2/kspec/ikernel_server_http.go

@@ -1,6 +1,10 @@
 package kspec
 
-import "github.com/gofiber/fiber/v3"
+import (
+	"github.com/gofiber/fiber/v3"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+)
 
 // IKernelServerHttp -- интерфейс к серверу HTTP в ядре.
 type IKernelServerHttp interface {
@@ -9,7 +13,7 @@ type IKernelServerHttp interface {
 	// Fiber -- возвращает объект веб-приложения fiber
 	Fiber() *fiber.App
 	// Log -- возвращает локальный лог
-	Log() ILogBuf
+	Log() comp_spec.ILogBuf
 	// IsWork -- возвращает признак работы
-	IsWork() EBool
+	IsWork() core_spec.EBool
 }

+ 1 - 1
v4/lev0/core_spec/imodule_stat.go → v4/lev2/kspec/imodule_stat.go

@@ -1,4 +1,4 @@
-package core_spec
+package kspec
 
 // IModuleStat -- статистика модуля.
 type IModuleStat interface {

+ 1 - 1
v4/lev2/kwg/kwg.go

@@ -61,7 +61,7 @@ func GetKernelWg(ctx context.Context) kspec.IKernelWg {
 }
 
 // Log -- возвращает лог ожидателя потоков.
-func (sf *kernelWg) Log() mKs.ILogBuf {
+func (sf *kernelWg) Log() comp_spec.ILogBuf {
 	return sf.log
 }
 

+ 1 - 1
v4/lev2/log_topic/log_topic.go

@@ -12,7 +12,7 @@ import (
 
 // LogTopic -- элемент лога шины.
 type LogTopic struct {
-	topic  topic.ITopicFix  // Топик, куда публиковать лог
+	topic  topic.ITopicFix     // Топик, куда публиковать лог
 	client bus_spec.IBusClient // С помощью чего публиковать лог
 }
 

+ 1 - 2
v4/lev2/log_topic/log_topic_test.go

@@ -3,7 +3,6 @@ package log_topic
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_local/client_bus_local"
@@ -27,7 +26,7 @@ func (sf *tester) new() {
 }
 
 var (
-	qTopicTest = bus_ent.ATopic("test_topic")
+	qTopicTest = bus_ent.NewTopicFix("test_topic")
 )
 
 // Правильное создание топика.

+ 6 - 6
v4/lev2/lsi/kstore_kv_std/kv_bucket_base/kv_bucket_base.go

@@ -20,14 +20,14 @@ import (
 // Он должен быть разумным значением (например, до 100 МБ).
 // Как только бакет заполнится, он будет вытеснен на диск.
 type KvBucketBase struct {
-	Name_      string                               `json:"name"`       // Имя бакета
-	Level_     int                                  `json:"level"`      // Уровень бакета
-	Number_    int                                  `json:"num"`        // Номер бакета
-	Size_      int64                                `json:"size"`       // Размер бакета
-	SizeLimit_ int64                                `json:"size_limit"` // Лимит размера бакета
+	Name_      string                                   `json:"name"`       // Имя бакета
+	Level_     int                                      `json:"level"`      // Уровень бакета
+	Number_    int                                      `json:"num"`        // Номер бакета
+	Size_      int64                                    `json:"size"`       // Размер бакета
+	SizeLimit_ int64                                    `json:"size_limit"` // Лимит размера бакета
 	CreatedAt_ core_spec.ITime                          `json:"created_at"` // Время создания бакета
 	UpdatedAt_ core_spec.ITimeMut                       `json:"updated_at"` // Время обновления бакета
-	Vers_      int                                  `json:"vers"`       // Версия бакета
+	Vers_      int                                      `json:"vers"`       // Версия бакета
 	dictRec    map[store_key.AStoreKey]core_spec.IRecKv // Словарь для хранения данных
 }
 

+ 2 - 2
v4/lev2/lsi/kstore_kv_std/rec_meta/rec_meta.go

@@ -22,8 +22,8 @@ type RecMeta struct {
 	Key_       *store_key.AStoreKey `json:"key"`       // Ключ
 	Vers_      int64                `json:"vers"`      // Версия записи
 	Operation_ string               `json:"operation"` // Тип операции над записью
-	createdAt_ core_spec.ITime          `voc:"created_at"` // Дата создания записи
-	updateAt_  core_spec.ITimeMut       `voc:"update_at"`  // Дата последнего обновления
+	createdAt_ core_spec.ITime      `voc:"created_at"` // Дата создания записи
+	updateAt_  core_spec.ITimeMut   `voc:"update_at"`  // Дата последнего обновления
 
 	// Хеш мета-информации записи (вместе с значением, но без этого поля разумеется)
 	Sha_    string `json:"sha"`

+ 0 - 2
v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve.go

@@ -10,8 +10,6 @@ import (
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/handler_name"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
 

+ 1 - 2
v4/lev2/lti/bus_mock/mock_hand_serve/mock_hand_serve_test.go

@@ -3,7 +3,6 @@ package mock_hand_serve
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
 
@@ -56,7 +55,7 @@ func (sf *tester) new() {
 }
 
 var (
-	qTopicTest = bus_ent.ATopic("test_topic")
+	qTopicTest = bus_ent.NewTopicFix("test_topic")
 )
 
 func (sf *tester) newGood1() {

+ 11 - 12
v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http.go

@@ -6,40 +6,39 @@ import (
 	"log"
 	"sync"
 
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
 
 // MockHandSubHttp -- обработчик подписки по HTTP.
 type MockHandSubHttp struct {
-	Name_    bus_ent.AHandlerName // Уникальное имя обработчика
-	Topic_   bus_ent.ATopic       // Имя топика, на который подписан обработчик
-	WebHook_ string               // Куда обращаться при запросах
-	BinMsg_  []byte               // Последнее бинарное сообщение
+	Name_    bus_ent.IHandlerNameFix // Уникальное имя обработчика
+	Topic_   bus_ent.ITopicFix       // Имя топика, на который подписан обработчик
+	WebHook_ string                  // Куда обращаться при запросах
+	BinMsg_  []byte                  // Последнее бинарное сообщение
 	block    sync.RWMutex
 }
 
 // NewMockHandSubHttp -- возвращает новый обработчик подписки по HTTP.
-func NewMockHandSubHttp(topic bus_ent.ATopic, webHook string) mKs.IBusHandlerSubscribe {
-	mKh.Hassert(topic != "", "NewHandlerHttpSub(): topic is empty")
+func NewMockHandSubHttp(topic bus_ent.ITopicFix, webHook string) bus_spec.IBusHandlerSubscribe {
+	mKh.Hassert(topic != nil, "NewHandlerHttpSub(): topic is empty")
 	mKh.Hassert(webHook != "", "NewHandlerHttpSub(): webHook is empty")
 	sf := &MockHandSubHttp{
 		Topic_:   topic,
-		Name_:    mKd.NewHandlerName(webHook + "_" + rand.Text()),
+		Name_:    bus_ent.NewHandlerNameFix(bus_ent.AHandlerName(webHook + "_" + rand.Text())),
 		WebHook_: webHook,
 	}
 	return sf
 }
 
 // Topic -- возвращает имя топика, на который подписан обработчик.
-func (sf *MockHandSubHttp) Topic() bus_ent.ATopic {
+func (sf *MockHandSubHttp) Topic() bus_ent.ITopicFix {
 	return sf.Topic_
 }
 
 // SetName -- устанавливает имя обработчика.
-func (sf *MockHandSubHttp) SetName(name bus_ent.AHandlerName) {
+func (sf *MockHandSubHttp) SetName(name bus_ent.IHandlerNameFix) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	mKh.Hassert(name != nil, "HandlerHttpSub.SetName(): name is empty")
@@ -47,7 +46,7 @@ func (sf *MockHandSubHttp) SetName(name bus_ent.AHandlerName) {
 }
 
 // Name -- возвращает уникальное имя обработчика.
-func (sf *MockHandSubHttp) Name() bus_ent.AHandlerName {
+func (sf *MockHandSubHttp) Name() bus_ent.IHandlerNameFix {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
 	return sf.Name_

+ 6 - 6
v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http_test.go

@@ -7,11 +7,11 @@ import (
 
 	"github.com/gofiber/fiber/v3"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
 
 const (
@@ -22,7 +22,7 @@ const (
 type tester struct {
 	t     *testing.T
 	me    *mock_env.MockEnv
-	ctx   IKernelCtx
+	ctx   kspec.IKernelCtx
 	isBad bool // Признак испорченности обработчика
 	hand  *MockHandSubHttp
 }
@@ -96,7 +96,7 @@ func (sf *tester) new() {
 }
 
 var (
-	qTopicTest = defs.NewTopic("test_topic")
+	qTopicTest = bus_ent.NewTopicFix("test_topic")
 )
 
 func (sf *tester) newGood1() {
@@ -110,10 +110,10 @@ func (sf *tester) newGood1() {
 	if sf.hand == nil {
 		sf.t.Fatalf("newGood1(): handler==nil")
 	}
-	if name := sf.hand.Name(); !strings.Contains(name.Get(), "/test/local_") {
+	if name := sf.hand.Name(); !strings.Contains(name.String(), "/test/local_") {
 		sf.t.Fatalf("newGood1(): name(%v)!='/test/local_'", name)
 	}
-	sf.hand.SetName(defs.NewHandlerName("test_name"))
+	sf.hand.SetName(bus_ent.NewHandlerNameFix("test_name"))
 	if name := sf.hand.Name(); name.Get() != "test_name" {
 		sf.t.Fatalf("newGood1(): name(%v)!='test_name'", name)
 	}

+ 1 - 1
v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub.go

@@ -44,7 +44,7 @@ func (sf *MockHandlerSub) FnBack(binMsg []byte) {
 }
 
 // Возвращает уникальное имя обработчика подписки.
-func (sf *MockHandlerSub) Topic() bus_ent.ATopic {
+func (sf *MockHandlerSub) Topic() bus_ent.ITopicFix {
 	return sf.Topic_
 }
 

+ 3 - 3
v4/lev2/lti/bus_mock/mock_hand_sub_local/mock_hand_sub_test.go

@@ -4,7 +4,7 @@ import (
 	"strings"
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
 
 type tester struct {
@@ -41,7 +41,7 @@ func (sf *tester) new() {
 }
 
 var (
-	qTopicTest = defs.NewTopic("test_topic")
+	qTopicTest = bus_ent.NewTopicFix("test_topic")
 )
 
 func (sf *tester) newGood1() {
@@ -50,7 +50,7 @@ func (sf *tester) newGood1() {
 	if sf.hand == nil {
 		sf.t.Fatalf("newGood1(): handler==nil")
 	}
-	if name := sf.hand.Name(); !strings.Contains(name.Get(), "test_name_") {
+	if name := sf.hand.Name(); !strings.Contains(name.String(), "test_name_") {
 		sf.t.Fatalf("newGood1(): name(%v)!='test_name_'", name)
 	}
 	if topic := sf.hand.Topic(); topic.Get() != "test_topic" {

+ 4 - 4
v4/lev2/lti/bus_spec/ibus_handler_sub.go

@@ -1,15 +1,15 @@
 package bus_spec
 
-import(
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/base_ent"
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
 
 // IBusBaseHandler -- базовый обработчик обратного вызова.
 type IBusBaseHandler interface {
 	// Topic -- топик подписки обработчика
-	Topic() base_ent.ITopicFix
+	Topic() bus_ent.ITopicFix
 	// Name -- уникальное имя обработчика
-	Name() base_ent.IHandlerNameFix
+	Name() bus_ent.IHandlerNameFix
 }
 
 // IBusHandlerSubscribe -- объект обработчика подписки.

+ 2 - 2
v4/lev2/lti/dot/dot.go

@@ -8,8 +8,8 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/dot/msg_unsub"
 )
 
-// PublichResp -- ответ на публикацию.
-type PublichResp = msg_pub.PublishReq
+// PublishResp -- ответ на публикацию.
+type PublishResp = msg_pub.PublishResp
 
 // PublishReq -- запрос на публикацию.
 type PublishReq = msg_pub.PublishReq

+ 3 - 3
v4/lev2/lti/dot/msg_unsub/msg_unsub.go

@@ -8,13 +8,13 @@ import (
 
 // UnsubReq -- запрос на отписку от топика.
 type UnsubReq struct {
-	Name_ bus_ent.AHandlerName `json:"name"` // Уникальная метка подписки
-	Uuid_ string               `json:"uuid"`
+	HandlerName_ bus_ent.AHandlerName `json:"name"` // Уникальная метка подписки
+	Uuid_        string               `json:"uuid"`
 }
 
 // SelfCheck -- проверка запроса на правильность полей.
 func (sf *UnsubReq) SelfCheck() {
-	mKh.Hassert(sf.Name_ != "", "UnsubReq.SelfCheck(): name is empty")
+	mKh.Hassert(sf.HandlerName_ != "", "UnsubReq.SelfCheck(): name is empty")
 	mKh.Hassert(sf.Uuid_ != "", "UnsubReq.SelfCheck(): uuid is empty")
 }
 

+ 2 - 2
v4/lev2/lti/dot/msg_unsub/msg_unsub_test.go

@@ -45,8 +45,8 @@ func (sf *tester) req() {
 	sf.t.Log("req")
 	sf.reqBad1()
 	req := &UnsubReq{
-		Name_: bus_ent.AHandlerName("test_topic"),
-		Uuid_: "test_uuid",
+		HandlerName_: bus_ent.AHandlerName("test_topic"),
+		Uuid_:        "test_uuid",
 	}
 	req.SelfCheck()
 }

+ 13 - 12
v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go

@@ -5,20 +5,21 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
 
 // dictSubHook -- словарь потребителей топика по подписке.
 type dictSubHook struct {
-	kCtx  mKs.IKernelCtx
+	kCtx  kspec.IKernelCtx
 	dict  map[bus_ent.AHandlerName]struct{} // В качестве ключа -- URL веб-хука
 	block sync.RWMutex
 }
 
 // NewDictSubHook -- возвращает новый словарь веб-хуков одного топика.
-func NewDictSubHook() mKs.IDictSubHook {
+func NewDictSubHook() bus_spec.IDictSubHook {
 	sf := &dictSubHook{
 		kCtx: kctx.GetKernelCtx(),
 		dict: map[bus_ent.AHandlerName]struct{}{},
@@ -27,7 +28,7 @@ func NewDictSubHook() mKs.IDictSubHook {
 }
 
 // Unsubscribe -- удаляет из словаря подписки обработчик.
-func (sf *dictSubHook) Unsubscribe(handler mKs.IBusHandlerSubscribe) {
+func (sf *dictSubHook) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	if handler == nil {
@@ -35,18 +36,18 @@ func (sf *dictSubHook) Unsubscribe(handler mKs.IBusHandlerSubscribe) {
 		return
 	}
 	handlerName := handler.Name()
-	delete(sf.dict, handlerName)
-	sf.kCtx.Del(handlerName.Get())
+	delete(sf.dict, handlerName.Get())
+	sf.kCtx.Del(handlerName.String())
 }
 
 // Subscribe -- добавляет в словарь подписки новый обработчик.
-func (sf *dictSubHook) Subscribe(handler mKs.IBusHandlerSubscribe) {
+func (sf *dictSubHook) Subscribe(handler bus_spec.IBusHandlerSubscribe) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	mL0.Hassert(handler != nil, "dictSubHook.Subscribe(): handler==nil")
 	handlerName := handler.Name()
-	sf.dict[handlerName] = struct{}{}
-	sf.kCtx.Set(handlerName.Get(), handler, "subscribe handler")
+	sf.dict[handlerName.Get()] = struct{}{}
+	sf.kCtx.Set(handlerName.String(), handler, "subscribe handler")
 }
 
 // Read -- вызывает все обработчики словаря подписок.
@@ -54,12 +55,12 @@ func (sf *dictSubHook) Read(binMsg []byte) {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
 	for handlerName := range sf.dict {
-		optHand := sf.kCtx.Get(handlerName.Get())
+		optHand := sf.kCtx.Get(string(handlerName))
 		if optHand.IsNone() {
-			sf.kCtx.Del(handlerName.Get())
+			sf.kCtx.Del(string(handlerName))
 			continue
 		}
-		handler := optHand.Some().Val().(mKs.IBusHandlerSubscribe)
+		handler := optHand.Some().Val().(bus_spec.IBusHandlerSubscribe)
 		go handler.FnBack(binMsg)
 	}
 }

+ 3 - 3
v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook_test.go

@@ -3,7 +3,7 @@ package dict_sub_hook
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_sub_local"
 )
 
@@ -15,8 +15,8 @@ type tester struct {
 }
 
 var (
-	qTopicHand1 = defs.NewTopic("hand_topic1")
-	qTopicHand2 = defs.NewTopic("hand_topic2")
+	qTopicHand1 = bus_ent.NewTopicFix("hand_topic1")
+	qTopicHand2 = bus_ent.NewTopicFix("hand_topic2")
 )
 
 func TestDictSubWebHook(t *testing.T) {

+ 1 - 2
v4/lev2/lti/kbus/dict_topic_serve/dict_topic_serve.go

@@ -9,7 +9,6 @@ import (
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
@@ -60,7 +59,7 @@ func (sf *dictServe) Unregister(handler bus_spec.IBusHandlerServe) {
 		sf.kCtx.Log().Err("dictServe.Unregister(): IBusHandlerSubscribe==nil")
 		return
 	}
-	delete(sf.dictServe, handler.Topic())
+	delete(sf.dictServe, handler.Topic().Get())
 }
 
 // SendRequest -- вызывает обработчик при поступлении запроса.

+ 3 - 3
v4/lev2/lti/kbus/dict_topic_serve/dict_topic_serve_test.go

@@ -3,8 +3,8 @@ package dict_topic_serve
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_serve"
 )
 
@@ -15,8 +15,8 @@ type tester struct {
 }
 
 var (
-	qTopicBad  = defs.NewTopic("test_bad_topic")
-	qTopicServ = defs.NewTopic("topic_hand_serv")
+	qTopicBad  = bus_ent.NewTopicFix("test_bad_topic")
+	qTopicServ = bus_ent.NewTopicFix("topic_hand_serv")
 )
 
 func TestDictSub(t *testing.T) {

+ 1 - 1
v4/lev2/lti/kbus/dict_topic_sub/dict_topic_sub.go

@@ -57,7 +57,7 @@ func (sf *dictTopicSub) Subscribe(handler bus_spec.IBusHandlerSubscribe) {
 	dictSubHook := sf.dictTopicHook[topic.Get()]
 	if dictSubHook == nil {
 		dictSubHook := dict_sub_hook.NewDictSubHook()
-		sf.dictTopicHook[topic] = dictSubHook
+		sf.dictTopicHook[topic.Get()] = dictSubHook
 	}
 	dictSubHook.Subscribe(handler)
 }

+ 2 - 3
v4/lev2/lti/kbus_base/kbus_base.go

@@ -15,7 +15,6 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus/dict_topic_serve"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus/dict_topic_sub"
@@ -62,7 +61,7 @@ func GetKernelBusBase() *KBusBase {
 	Bus_.IsWork_.Set()
 	Bus_.KCtx_.Wg().Add(busBaseStreamName)
 	Bus_.KCtx_.Set("kernBusBase", Bus_, "base of data bus")
-	_ = mKs.IKernelBus(Bus_)
+	_ = bus_spec.IKernelBus(Bus_)
 	return Bus_
 }
 
@@ -125,7 +124,7 @@ func (sf *KBusBase) RegisterServe(handler bus_spec.IBusHandlerServe) mL0.IResult
 }
 
 // Publish -- публикует сообщение в шину.
-func (sf *KBusBase) Publish(topic *topic.ATopic, binMsg []byte) mL0.IResult[core_spec.EBool] {
+func (sf *KBusBase) Publish(topic bus_ent.ITopicFix, binMsg []byte) mL0.IResult[core_spec.EBool] {
 	sf.log.Debug("KBusBase.Publish(): topic='%v'", topic)
 	if !sf.IsWork_.Get() {
 		err := fmt.Errorf("KBusBase.Publish(): topic='%v',bus already closed", topic)

+ 4 - 5
v4/lev2/lti/kbus_base/kbus_base_test.go

@@ -3,7 +3,6 @@ package kbus_base
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_serve"
@@ -14,8 +13,8 @@ import (
 type tester struct {
 	t        *testing.T
 	kBus     bus_spec.IKernelBus
-	handSub  *mock_hand_sub_local.MockHandlerSub
-	handServ *mock_hand_serve.MockHandlerServe
+	handSub  bus_spec.IBusHandlerSubscribe
+	handServ bus_spec.IBusHandlerServe
 }
 
 var (
@@ -66,7 +65,7 @@ func (sf *tester) unsubBad1() {
 
 func (sf *tester) reqGood1() {
 	sf.t.Log("reqGood1")
-	res := sf.kBus.SendRequest(sf.handServ.Topic_, []byte("test_msg"))
+	res := sf.kBus.SendRequest(sf.handServ.Topic(), []byte("test_msg"))
 	if res.IsErr() {
 		sf.t.Fatalf("reqGood1(): err=%v", res.Err())
 	}
@@ -141,7 +140,7 @@ func (sf *tester) new() {
 }
 
 var (
-	qNameA = defs.NewTopic("test_topic")
+	qNameA = bus_ent.NewTopicFix("test_topic")
 )
 
 // Закрытие шины.

+ 17 - 15
v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go

@@ -14,27 +14,29 @@ import (
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_string"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/dot"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_http"
 )
 
 // ClientBusHttp -- клиент HTTP-шины.
 type ClientBusHttp struct {
-	bus       mKs.IKernelBus
-	lCtx      mKs.ILocalCtx
-	log       mKs.ILogBuf
+	bus       bus_spec.IKernelBus
+	lCtx      comp_spec.ILocalCtx
+	log       comp_spec.ILogBuf
 	isWork    mKs.ISafeBool
 	urlRemote string // URL дистанционной шины
 	urlLocal  string // URL локальной шины для веб-хуков
 }
 
 // NewClientBusHttp - -возвращает новый клиент HTTP-шины.
-func NewClientBusHttp(urlRemote string) mKs.IBusClient {
+func NewClientBusHttp(urlRemote string) bus_spec.IBusClient {
 	param := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
 		Prefix_: "ClientBusHttp",
@@ -59,13 +61,13 @@ func NewClientBusHttp(urlRemote string) mKs.IBusClient {
 }
 
 // Unsubscribe -- отписывается от топика в дистанционной шине.
-func (sf *ClientBusHttp) Unsubscribe(handler mKs.IBusHandlerSubscribe) {
+func (sf *ClientBusHttp) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 	_uuid, err := uuid.NewV6()
 	mL1.Hassert()(err == nil, "ClientBusHttp.Unsubscribe(): in generate UUID v6, err=\n\t%v", err)
 
 	req := &dot.UnsubReq{
-		Name_: handler.Name(),
-		Uuid_: _uuid.String(),
+		HandlerName_: handler.Name().Get(),
+		Uuid_:        _uuid.String(),
 	}
 	req.SelfCheck()
 	binReq, err := json.MarshalIndent(req, "", "  ")
@@ -94,11 +96,11 @@ func (sf *ClientBusHttp) Unsubscribe(handler mKs.IBusHandlerSubscribe) {
 }
 
 // Subscribe -- подписывается на топик в дистанционной шине.
-func (sf *ClientBusHttp) Subscribe(handler mKs.IBusHandlerSubscribe) mKs.IResult[mKs.EBool] {
+func (sf *ClientBusHttp) Subscribe(handler bus_spec.IBusHandlerSubscribe) mKs.IResult[mKs.EBool] {
 	_uuid, err := uuid.NewV6()
 	mL0.Hassert(err == nil, "ClientBusHttp.Subscribe(): in generate UUID v6, err=\n\t%v", err)
 	req := &dot.SubscribeReq{
-		Topic_:   handler.Topic(),
+		Topic_:   handler.Topic().Get(),
 		Uuid_:    _uuid.String(),
 		WebHook_: sf.urlLocal + "/bus/pub", // Веб-хук всегда на своей стороне
 	}
@@ -133,11 +135,11 @@ func (sf *ClientBusHttp) Subscribe(handler mKs.IBusHandlerSubscribe) mKs.IResult
 }
 
 // SendRequest -- отправляет в дистанционную шину запрос.
-func (sf *ClientBusHttp) SendRequest(topic bus_ent.ATopic, binReq []byte) mL0.IResult[[]byte] {
+func (sf *ClientBusHttp) SendRequest(topic bus_ent.ITopicFix, binReq []byte) mL0.IResult[[]byte] {
 	_uuid, err := uuid.NewV6()
 	mL1.Hassert()(err == nil, "ClientBusHttp.SendRequest(): in generate UUID v6, err=\n\t%v", err)
 	req := &dot.ServeReq{
-		Topic_:  topic,
+		Topic_:  topic.Get(),
 		Uuid_:   _uuid.String(),
 		BinReq_: binReq,
 	}
@@ -171,7 +173,7 @@ func (sf *ClientBusHttp) SendRequest(topic bus_ent.ATopic, binReq []byte) mL0.IR
 }
 
 // RegisterServe -- регистрирует в локальной шине обработчик.
-func (sf *ClientBusHttp) RegisterServe(handler mKs.IBusHandlerServe) mL0.IResult[mKs.EBool] {
+func (sf *ClientBusHttp) RegisterServe(handler bus_spec.IBusHandlerServe) mL0.IResult[mKs.EBool] {
 	if handler == nil {
 		return mL0.NewErr[mKs.EBool](fmt.Errorf("ClientBusHttp.RegisterServe(): handler==nil"))
 	}
@@ -184,11 +186,11 @@ func (sf *ClientBusHttp) RegisterServe(handler mKs.IBusHandlerServe) mL0.IResult
 }
 
 // Publish -- публикует сообщение в дистанционной шину.
-func (sf *ClientBusHttp) Publish(topic bus_ent.ATopic, binMsg []byte) mL0.IResult[mKs.EBool] {
+func (sf *ClientBusHttp) Publish(topic bus_ent.ITopicFix, binMsg []byte) mL0.IResult[mKs.EBool] {
 	_uuid, err := uuid.NewV6()
 	mL1.Hassert()(err == nil, "ClientBusHttp.Publish(): in generate UUID v6, err=\n\t%v", err)
 	req := &dot.PublishReq{
-		Topic_:  topic,
+		Topic_:  topic.Get(),
 		Uuid_:   _uuid.String(),
 		BinMsg_: binMsg,
 	}
@@ -248,7 +250,7 @@ func (sf *ClientBusHttp) makePost(hReq *http.Request) mKs.IResult[[]byte] {
 }
 
 // Log -- возвращает локальный лог клиента.
-func (sf *ClientBusHttp) Log() mKs.ILogBuf {
+func (sf *ClientBusHttp) Log() comp_spec.ILogBuf {
 	return sf.log
 }
 

+ 5 - 6
v4/lev2/lti/kbus_http/client_bus_http/client_bus_http_test.go

@@ -7,12 +7,11 @@ import (
 	"testing"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_serve"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_sub_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_base"
@@ -36,9 +35,9 @@ type tester struct {
 
 var (
 	//go:fix inline
-	qNameSub = defs.NewTopic("test_topic_sub")
+	qNameSub = bus_ent.NewTopicFix("test_topic_sub")
 	//go:fix inline
-	qNameServ = defs.NewTopic("test_topic_serv")
+	qNameServ = bus_ent.NewTopicFix("test_topic_serv")
 )
 
 func TestClientBusHttp(t *testing.T) {
@@ -115,7 +114,7 @@ func (sf *tester) sendBad2() {
 }
 
 var (
-	qNameBad = defs.NewTopic("test_bad_topic")
+	qNameBad = bus_ent.NewTopicFix("test_bad_topic")
 )
 
 // Нет такого топика.
@@ -215,7 +214,7 @@ func (sf *tester) pubGood1() {
 }
 
 var (
-	qNameTest = defs.NewTopic("test_topic")
+	qNameTest = bus_ent.NewTopicFix("test_topic")
 )
 
 // Левый адрес.

+ 18 - 13
v4/lev2/lti/kbus_http/kbus_http.go

@@ -8,12 +8,14 @@ import (
 
 	"github.com/gofiber/fiber/v3"
 
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_sub_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/dot"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_base"
 )
@@ -21,7 +23,7 @@ import (
 // kBusHttp -- шина данных поверх HTTP.
 type kBusHttp struct {
 	*kbus_base.KBusBase
-	log mKs.ILogBuf
+	log comp_spec.ILogBuf
 }
 
 var (
@@ -30,7 +32,7 @@ var (
 )
 
 // GetKernelBusHttp -- возвращает шину HTTP.
-func GetKernelBusHttp() mKs.IKernelBus {
+func GetKernelBusHttp() bus_spec.IKernelBus {
 	block.Lock()
 	defer block.Unlock()
 	if Bus_ != nil {
@@ -66,7 +68,7 @@ func (sf *kBusHttp) postSub(ctx fiber.Ctx) error {
 	ctx.Set("Content-type", "text/json")
 	ctx.Set("Cache-Control", "no-cache")
 	sf.log.Debug("postSub()")
-	req := &dict_topic_serve.SubscribeReq{}
+	req := &dot.SubscribeReq{}
 	err := ctx.Bind().Body(req)
 	if err != nil {
 		resp := &dot.SubscribeResp{
@@ -86,11 +88,12 @@ func (sf *kBusHttp) postSub(ctx fiber.Ctx) error {
 // Процесс подписки веб-хука.
 func (sf *kBusHttp) processSubscribe(req *dot.SubscribeReq) *dot.SubscribeResp {
 	req.SelfCheck()
-	handler := mock_hand_sub_http.NewMockHandSubHttp(req.Topic_, req.WebHook_)
+	topic := bus_ent.NewTopicFix(req.Topic_)
+	handler := mock_hand_sub_http.NewMockHandSubHttp(topic, req.WebHook_)
 	resp := &dot.SubscribeResp{
 		Status_: "ok",
 		Uuid_:   req.Uuid_,
-		Name_:   handler.Name(),
+		Name_:   handler.Name().Get(),
 	}
 	res := sf.Subscribe(handler)
 	if res.IsErr() {
@@ -106,7 +109,7 @@ func (sf *kBusHttp) postPublish(ctx fiber.Ctx) error {
 	ctx.Set("Content-type", "text/html; charset=utf8")
 	ctx.Set("Content-type", "text/json")
 	ctx.Set("Cache-Control", "no-cache")
-	req := &dict_topic_serve.PublishReq{}
+	req := &dot.PublishReq{}
 	err := ctx.Bind().Body(req)
 	if err != nil {
 		resp := &dot.PublishResp{
@@ -126,7 +129,8 @@ func (sf *kBusHttp) postPublish(ctx fiber.Ctx) error {
 // Выполняет процесс публикации.
 func (sf *kBusHttp) processPublish(req *dot.PublishReq) *dot.PublishResp {
 	req.SelfCheck()
-	res := sf.Publish(req.Topic_, req.BinMsg_)
+	topic := bus_ent.NewTopicFix(req.Topic_)
+	res := sf.Publish(topic, req.BinMsg_)
 	resp := &dot.PublishResp{
 		Status_: "ok",
 		Uuid_:   req.Uuid_,
@@ -164,7 +168,8 @@ func (sf *kBusHttp) postSendRequest(ctx fiber.Ctx) error {
 // Обрабатывает входящий запрос.
 func (sf *kBusHttp) processSendRequest(req *dot.ServeReq) *dot.ServeResp {
 	req.SelfCheck()
-	res := sf.SendRequest(req.Topic_, req.BinReq_)
+	topic := bus_ent.NewTopicFix(req.Topic_)
+	res := sf.SendRequest(topic, req.BinReq_)
 	resp := &dot.ServeResp{
 		Status_: "ok",
 		Uuid_:   req.Uuid_,
@@ -207,17 +212,17 @@ func (sf *kBusHttp) processUnsubRequest(req *dot.UnsubReq) *dot.UnsubResp {
 		Status_: "ok",
 		Uuid_:   req.Uuid_,
 	}
-	optHandler := sf.KCtx_.Get(req.Name_.Get())
+	optHandler := sf.KCtx_.Get(string(req.HandlerName_))
 	if optHandler.IsNone() {
 		resp.Status_ = fmt.Sprintf("kernelBusHttp.processUnsubRequest(): not get handler(%v) from kernel ctx",
-			req.Name_)
+			req.HandlerName_)
 		return resp
 	}
 	if optHandler == nil {
-		resp.Status_ = fmt.Sprintf("kernelBusHttp.processUnsubRequest(): handler(%v) not exists", req.Name_)
+		resp.Status_ = fmt.Sprintf("kernelBusHttp.processUnsubRequest(): handler(%v) not exists", req.HandlerName_)
 		return resp
 	}
-	hand := optHandler.Some().Val().(mKs.IBusHandlerSubscribe)
+	hand := optHandler.Some().Val().(bus_spec.IBusHandlerSubscribe)
 	sf.Unsubscribe(hand)
 	return resp
 }

+ 22 - 22
v4/lev2/lti/kbus_http/kbus_http_test.go

@@ -8,10 +8,10 @@ import (
 	"strings"
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_serve"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_sub_local"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/dot"
@@ -28,8 +28,8 @@ const (
 )
 
 var (
-	qNameSub  = defs.NewTopic("topic_sub")
-	qNameServ = defs.NewTopic("topic_serv")
+	qNameSub  = bus_ent.NewTopicFix("topic_sub")
+	qNameServ = bus_ent.NewTopicFix("topic_serv")
 )
 
 func TestKernelBusHttp(t *testing.T) {
@@ -64,8 +64,8 @@ func (sf *tester) unsubGood2() {
 		sf.t.Fatalf("unsubGood1(): err=%v", res.Err())
 	}
 	req := &dot.UnsubReq{
-		Name_: sf.handSub.Name_,
-		Uuid_: test_uuid,
+		HandlerName_: sf.handSub.Name().Get(),
+		Uuid_:        test_uuid,
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
 	body := strings.NewReader(string(binReq))
@@ -135,8 +135,8 @@ func (sf *tester) unsubGood1() {
 		count++
 	}
 	req := &dot.UnsubReq{
-		Name_: sf.handSub.Name_,
-		Uuid_: test_uuid,
+		HandlerName_: sf.handSub.Name().Get(),
+		Uuid_:        test_uuid,
 	}
 	resp := Bus_.processUnsubRequest(req)
 	if resp.Status_ != "ok" {
@@ -154,8 +154,8 @@ func (sf *tester) unsubBad2() {
 		count++
 	}
 	req := &dot.UnsubReq{
-		Name_: sf.handSub.Name_,
-		Uuid_: test_uuid,
+		HandlerName_: sf.handSub.Name().Get(),
+		Uuid_:        test_uuid,
 	}
 	resp := Bus_.processUnsubRequest(req)
 	if resp.Status_ == "ok" {
@@ -188,7 +188,7 @@ func (sf *tester) pub() {
 func (sf *tester) pubGood2() {
 	sf.t.Log("pubGood2")
 	req := &dot.PublishReq{
-		Topic_:  qNameSub,
+		Topic_:  qNameSub.Get(),
 		Uuid_:   test_uuid,
 		BinMsg_: []byte("http_pub"),
 	}
@@ -254,7 +254,7 @@ func (sf *tester) pubBad2() {
 	defer Bus_.IsWork_.Set()
 
 	req := &dot.PublishReq{
-		Topic_:  qNameSub,
+		Topic_:  qNameSub.Get(),
 		Uuid_:   test_uuid,
 		BinMsg_: []byte("test_pub"),
 	}
@@ -272,7 +272,7 @@ func (sf *tester) pubGood1() {
 		sf.t.Fatalf("pubGood1(): err=%v", res.Err())
 	}
 	req := &dot.PublishReq{
-		Topic_:  qNameSub,
+		Topic_:  qNameSub.Get(),
 		Uuid_:   test_uuid,
 		BinMsg_: []byte("test_pub"),
 	}
@@ -316,7 +316,7 @@ func (sf *tester) sub() {
 func (sf *tester) subGood2() {
 	sf.t.Log("subGood2")
 	req := &dot.SubscribeReq{
-		Topic_:   qNameServ,
+		Topic_:   qNameServ.Get(),
 		Uuid_:    test_uuid,
 		WebHook_: "http://localhost:18200/bus/pub/",
 	}
@@ -354,7 +354,7 @@ func (sf *tester) subGood2() {
 func (sf *tester) subBad3() {
 	sf.t.Log("subBad3")
 	req := &dot.SubscribeReq{
-		Topic_:   qNameServ,
+		Topic_:   qNameServ.Get(),
 		Uuid_:    test_uuid,
 		WebHook_: "http://localhost:18200/bus/pub/",
 	}
@@ -376,7 +376,7 @@ func (sf *tester) subBad3() {
 func (sf *tester) subGood1() {
 	sf.t.Log("subGood1")
 	req := &dot.SubscribeReq{
-		Topic_:   qNameServ,
+		Topic_:   qNameServ.Get(),
 		Uuid_:    test_uuid,
 		WebHook_: "http://localhost:18200/bus/",
 	}
@@ -389,14 +389,14 @@ func (sf *tester) subGood1() {
 }
 
 var (
-	qNameEmpty = defs.NewTopic("")
+	qNameEmpty = bus_ent.NewTopicFix("")
 )
 
 // Проверка кривых полей запроса в процессе подписки.
 func (sf *tester) subBad2() {
 	sf.t.Log("subBad2")
 	req := &dot.SubscribeReq{
-		Topic_: qNameEmpty,
+		Topic_: qNameEmpty.Get(),
 	}
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -447,7 +447,7 @@ func (sf *tester) reqBad4() {
 	sf.handServ.IsBad_.Set()
 	defer sf.handServ.IsBad_.Reset()
 	req := &dot.ServeReq{
-		Topic_:  sf.handServ.Topic_,
+		Topic_:  sf.handServ.Topic().Get(),
 		Uuid_:   test_uuid,
 		BinReq_: []byte("test_msg"),
 	}
@@ -484,7 +484,7 @@ func (sf *tester) reqBad4() {
 func (sf *tester) reqGood1() {
 	sf.t.Log("reqGood1")
 	req := &dot.ServeReq{
-		Topic_:  sf.handServ.Topic_,
+		Topic_:  sf.handServ.Topic().Get(),
 		Uuid_:   test_uuid,
 		BinReq_: []byte("test_msg"),
 	}
@@ -519,14 +519,14 @@ func (sf *tester) reqGood1() {
 }
 
 var (
-	qNameBad = defs.NewTopic("bad_topic")
+	qNameBad = bus_ent.NewTopicFix("bad_topic")
 )
 
 // Нет такого топика для запросов.
 func (sf *tester) reqBad3() {
 	sf.t.Log("reqBad3")
-	req := &msg_serve.ServeReq{
-		Topic_:  qNameBad,
+	req := &dot.ServeReq{
+		Topic_:  qNameBad.Get(),
 		Uuid_:   test_uuid,
 		BinReq_: []byte("test_msg"),
 	}

+ 3 - 3
v4/lev2/lti/kbus_local/client_bus_local/client_bus_local.go

@@ -2,17 +2,17 @@
 package client_bus_local
 
 import (
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_local"
 )
 
 // ClientBusLocal -- клиент локальной шины.
 type ClientBusLocal struct {
-	mKs.IKernelBus
+	bus_spec.IKernelBus
 }
 
 // NewClientBusLocal -- клиент локальной шины.
-func NewClientBusLocal() mKs.IBusClient {
+func NewClientBusLocal() bus_spec.IBusClient {
 	sf := &ClientBusLocal{
 		IKernelBus: kbus_local.GetKernelBusLocal(),
 	}

+ 4 - 4
v4/lev2/lti/kbus_local/client_bus_local/client_bus_local_test.go

@@ -3,13 +3,13 @@ package client_bus_local
 import (
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
 
 type tester struct {
 	t       *testing.T
-	lClient IBusClient
+	lClient bus_spec.IBusClient
 }
 
 func TestClientBusLocal(t *testing.T) {
@@ -20,7 +20,7 @@ func TestClientBusLocal(t *testing.T) {
 }
 
 var (
-	qTopicLocal = defs.NewTopic("local_topic")
+	qTopicLocal = bus_ent.NewTopicFix("local_topic")
 )
 
 // Создание нового клиента.

+ 5 - 5
v4/lev2/lti/kbus_local/kbus_local_test.go

@@ -3,22 +3,22 @@ package kbus_local
 import (
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_serve"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_sub_local"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
 
 type tester struct {
 	t        *testing.T
-	lBus     IKernelBus
+	lBus     bus_spec.IKernelBus
 	handSub  *mock_hand_sub_local.MockHandlerSub
 	handServ *mock_hand_serve.MockHandlerServe
 }
 
 var (
-	qTopicSub  = defs.NewTopic("topic_hand_sub")
-	qTopicServ = defs.NewTopic("topic_hand_serv")
+	qTopicSub  = bus_ent.NewTopicFix("topic_hand_sub")
+	qTopicServ = bus_ent.NewTopicFix("topic_hand_serv")
 )
 
 func TestKernelBusLocal(t *testing.T) {

+ 2 - 2
v4/lev2/wui/wui_types/iwui_ctx.go

@@ -2,10 +2,10 @@
 package wui_types
 
 import (
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 )
 
 // IWuiCtx -- контекст веб-интерфейса.
 type IWuiCtx interface {
-	mKs.ILocalCtx
+	comp_spec.ILocalCtx
 }

+ 6 - 4
v4/lev3/mod_kctx/mod_kctx.go

@@ -6,9 +6,11 @@ import (
 
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/http_api"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_module"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_monolit"
@@ -16,10 +18,10 @@ import (
 
 // ModuleKernelCtx -- модуль контекста ядра.
 type ModuleKernelCtx struct {
-	mKs.IKernelModule
-	kCtx      mKs.IKernelCtx
-	kServHttp mKs.IKernelServerHttp
-	log       mKs.ILogBuf
+	kspec.IKernelModule
+	kCtx      kspec.IKernelCtx
+	kServHttp kspec.IKernelServerHttp
+	log       comp_spec.ILogBuf
 }
 
 var (

+ 3 - 3
v4/lev3/mod_kctx/mod_kctx_test.go

@@ -5,9 +5,9 @@ import (
 	"testing"
 	"time"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 const (
@@ -18,8 +18,8 @@ const (
 type tester struct {
 	t    *testing.T
 	me   *mock_env.MockEnv
-	kCtx IKernelCtx
-	mod  IKernelModule
+	kCtx kspec.IKernelCtx
+	mod  kspec.IKernelModule
 }
 
 func TestModKernelCtx(t *testing.T) {

+ 6 - 4
v4/lev3/mod_keeper/mod_keeper.go

@@ -6,9 +6,11 @@ import (
 
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/http_api"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_module"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_monolit"
@@ -16,10 +18,10 @@ import (
 
 // ModuleKeeper -- модуль сторожа.
 type ModuleKeeper struct {
-	mKs.IKernelModule
-	kCtx      mKs.IKernelCtx
-	kServHttp mKs.IKernelServerHttp
-	log       mKs.ILogBuf
+	kspec.IKernelModule
+	kCtx      kspec.IKernelCtx
+	kServHttp kspec.IKernelServerHttp
+	log       comp_spec.ILogBuf
 }
 
 var (

+ 3 - 3
v4/lev3/mod_keeper/mod_keeper_test.go

@@ -5,9 +5,9 @@ import (
 	"testing"
 	"time"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 const (
@@ -18,8 +18,8 @@ const (
 type tester struct {
 	t    *testing.T
 	me   *mock_env.MockEnv
-	kCtx IKernelCtx
-	mod  IKernelModule
+	kCtx kspec.IKernelCtx
+	mod  kspec.IKernelModule
 }
 
 func TestModKeeper(t *testing.T) {

+ 4 - 4
v4/lev3/mod_serv_http/btn_modules/btn_modules.go

@@ -7,15 +7,15 @@ import (
 	"strings"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui"
 	mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
 )
 
 type BtnModules struct {
 	btn  mWt.IWuiButton
-	kCtx mKs.IKernelCtx
+	kCtx kspec.IKernelCtx
 }
 
 // NewBtnModules -- возвращает новую кнопку для показа модулей.
@@ -46,7 +46,7 @@ func (sf *BtnModules) clickMonolit(dict map[string]string) mL0.IResult[string] {
 		err := fmt.Errorf("clickMonolit(): monolit module not found")
 		return mL0.NewErr[string](err)
 	}
-	mon := optMonolit.Some().Val().(mKs.IKernelMonolit)
+	mon := optMonolit.Some().Val().(kspec.IKernelMonolit)
 	chLst := mon.Ctx().SortedList()
 	strOut := ``
 	for _, val := range chLst {
@@ -58,7 +58,7 @@ func (sf *BtnModules) clickMonolit(dict map[string]string) mL0.IResult[string] {
 		strRow := strBlockRow
 		strRow = strings.ReplaceAll(strRow, "{.id}", id)
 		strRow = strings.ReplaceAll(strRow, "{.key}", val.Key())
-		moduleName := val.Val().(mKs.IKernelModule).Name().Get()
+		moduleName := val.Val().(kspec.IKernelModule).Name().Get()
 		strRow = strings.ReplaceAll(strRow, "{.name}", moduleName)
 		type_ := fmt.Sprintf("%#T", val.Val())
 		type_ = strings.ReplaceAll(type_, ".", ".<br>")

+ 3 - 3
v4/lev3/mod_serv_http/http_api/http_api_test.go

@@ -5,17 +5,17 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 type tester struct {
 	t    *testing.T
-	kCtx IKernelCtx
-	serv IKernelServerHttp
+	kCtx kspec.IKernelCtx
+	serv kspec.IKernelServerHttp
 	api  *HttpApi
 }
 

+ 5 - 3
v4/lev3/mod_serv_http/mod_serv_http.go

@@ -6,8 +6,10 @@ import (
 
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/http_api"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_module"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_monolit"
@@ -15,9 +17,9 @@ import (
 
 // ModuleServHttp -- модуль HTTP-сервера.
 type ModuleServHttp struct {
-	mKs.IKernelModule
-	kServHttp mKs.IKernelServerHttp
-	log       mKs.ILogBuf
+	kspec.IKernelModule
+	kServHttp kspec.IKernelServerHttp
+	log       comp_spec.ILogBuf
 }
 
 var (

+ 3 - 3
v4/lev3/mod_serv_http/mod_serv_http_test.go

@@ -5,10 +5,10 @@ import (
 	"testing"
 	"time"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 const (
@@ -19,8 +19,8 @@ const (
 type tester struct {
 	t   *testing.T
 	me  *mock_env.MockEnv
-	ctx IKernelCtx
-	mod IKernelModule
+	ctx kspec.IKernelCtx
+	mod kspec.IKernelModule
 }
 
 func TestModServHttp(t *testing.T) {

+ 7 - 6
v4/lev3/mod_serv_http/page_module/page_module.go

@@ -9,13 +9,14 @@ import (
 	"github.com/gofiber/fiber/v3"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 // PageModule -- страница показа модуля.
 type PageModule struct {
-	ctx mKs.IKernelCtx
+	ctx kspec.IKernelCtx
 }
 
 var page *PageModule
@@ -226,15 +227,15 @@ func (sf *PageModule) postSvgSec(ctx fiber.Ctx) error {
 }
 
 // Возвращает модуль.
-func (sf *PageModule) getModule(id string) (mKs.IKernelModule, mKs.ICtxValue) {
+func (sf *PageModule) getModule(id string) (kspec.IKernelModule, comp_spec.ICtxValue) {
 	optMonolit := sf.ctx.Get("monolit")
 	if optMonolit.IsNone() {
 		return nil, nil
 	}
-	mon := optMonolit.Some().Val().(mKs.IKernelMonolit)
+	mon := optMonolit.Some().Val().(kspec.IKernelMonolit)
 	chLst := mon.Ctx().SortedList()
 	var (
-		val    mKs.ICtxValue
+		val    comp_spec.ICtxValue
 		isFind bool
 	)
 	for _, val = range chLst {
@@ -247,6 +248,6 @@ func (sf *PageModule) getModule(id string) (mKs.IKernelModule, mKs.ICtxValue) {
 	if !isFind {
 		return nil, nil
 	}
-	mod := val.Val().(mKs.IKernelModule)
+	mod := val.Val().(kspec.IKernelModule)
 	return mod, val
 }

+ 5 - 4
v4/lev3/mod_serv_http/page_module/page_module_test.go

@@ -7,19 +7,20 @@ import (
 	"time"
 
 	"github.com/gofiber/fiber/v3"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 type tester struct {
 	t    *testing.T
-	ctx  IKernelCtx
-	serv IKernelServerHttp
+	ctx  kspec.IKernelCtx
+	serv kspec.IKernelServerHttp
 	page *PageModule
 }
 
@@ -284,7 +285,7 @@ func (sf *tester) postModule1() {
 func (sf *tester) postModuleLog() {
 	sf.t.Log("postModuleLog")
 	monCtx := sf.ctx.Get("monolit").Hassert("postModuleLog()")
-	mon := monCtx.Val().(IKernelMonolit)
+	mon := monCtx.Val().(kspec.IKernelMonolit)
 	log := mon.Log()
 	log.Debug("test msg")
 	fiberApp := sf.serv.Fiber()

+ 5 - 5
v4/lev3/mod_serv_http/page_monolit/page_monolit.go

@@ -9,15 +9,15 @@ import (
 
 	"github.com/gofiber/fiber/v3"
 
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/btn_modules"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/btn_monolit"
 )
 
 // PageMonolit -- страница показа монолита.
 type PageMonolit struct {
-	kCtx       mKs.IKernelCtx
+	kCtx       kspec.IKernelCtx
 	btnMonolit *btn_monolit.BtnMonolit
 	btnModules *btn_modules.BtnModules
 }
@@ -66,7 +66,7 @@ func (sf *PageMonolit) postMonolitLog(ctx fiber.Ctx) error {
 		err := fmt.Errorf("PageMonolit.postMonolitLog(): mod='monolit', not found monolit in kernel ctx")
 		return err
 	}
-	mon := optMonolit.Some().Val().(mKs.IKernelMonolit)
+	mon := optMonolit.Some().Val().(kspec.IKernelMonolit)
 	_log := mon.Log()
 	strOut := ""
 	for i := range 100 {
@@ -93,7 +93,7 @@ func (sf *PageMonolit) postMonolitCtx(ctx fiber.Ctx) error {
 		err := fmt.Errorf("PageMonolit.postMonolitCtx(): mod='monolit', not found monolit in kernel ctx")
 		return err
 	}
-	mon := optMon.Some().Val().(mKs.IKernelMonolit)
+	mon := optMon.Some().Val().(kspec.IKernelMonolit)
 	chLst := mon.Ctx().SortedList()
 	strOut := ``
 	for _, val := range chLst {
@@ -124,7 +124,7 @@ func (sf *PageMonolit) postMonolitState(ctx fiber.Ctx) error {
 		return err
 	}
 	ctxMon := optMonolit.Some()
-	mon := ctxMon.Val().(mKs.IKernelMonolit)
+	mon := ctxMon.Val().(kspec.IKernelMonolit)
 	dictState["{.name}"] = mon.Name()
 	dictState["{.createAt}"] = ctxMon.CreateAt()
 	dictState["{.updateAt}"] = ctxMon.UpdateAt()

+ 4 - 4
v4/lev3/mod_serv_http/page_monolit/page_monolit_test.go

@@ -5,18 +5,18 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 type tester struct {
 	t    *testing.T
-	ctx  IKernelCtx
-	serv IKernelServerHttp
+	ctx  kspec.IKernelCtx
+	serv kspec.IKernelServerHttp
 	page *PageMonolit
 }
 
@@ -38,7 +38,7 @@ func (sf *tester) postMonolitLog() {
 	sf.t.Log("postMonolitCtx")
 	mon := sf.ctx.Get("monolit").
 		Hassert("postMonolitLog()").
-		Val().(IKernelMonolit)
+		Val().(kspec.IKernelMonolit)
 	log := mon.Log()
 	log.Debug("test msg")
 	fiberApp := sf.serv.Fiber()

+ 7 - 5
v4/lev3/mod_wui/mod_wui.go

@@ -13,9 +13,11 @@ import (
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui"
 	mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/http_api"
@@ -25,11 +27,11 @@ import (
 
 // ModuleWui -- модуль WUI.
 type ModuleWui struct {
-	mKs.IKernelModule
-	kCtx      mKs.IKernelCtx
+	kspec.IKernelModule
+	kCtx      kspec.IKernelCtx
 	wCtx      mWt.IWuiCtx
-	kServHttp mKs.IKernelServerHttp
-	log       mKs.ILogBuf
+	kServHttp kspec.IKernelServerHttp
+	log       comp_spec.ILogBuf
 }
 
 var (
@@ -71,7 +73,7 @@ func (sf *ModuleWui) Run() {
 }
 
 // Log -- возвращает буферный лог.
-func (sf *ModuleWui) Log() mKs.ILogBuf {
+func (sf *ModuleWui) Log() comp_spec.ILogBuf {
 	return sf.log
 }
 

+ 2 - 2
v4/lev3/mod_wui/mod_wui_test.go

@@ -11,10 +11,10 @@ import (
 	"github.com/gofiber/fiber/v3"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_button"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_label"
 )
@@ -27,7 +27,7 @@ const (
 type tester struct {
 	t        *testing.T
 	me       *mock_env.MockEnv
-	kCtx     IKernelCtx
+	kCtx     kspec.IKernelCtx
 	fiberApp *fiber.App
 	mod      *ModuleWui
 }