Browse Source

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

SVI 4 tháng trước cách đây
mục cha
commit
8fd3e8ce4d
100 tập tin đã thay đổi với 507 bổ sung và 480 xóa
  1. 1 1
      v4/cmd/demo/main.go
  2. 17 13
      v4/kern.go
  3. 2 2
      v4/kern_test.go
  4. 2 0
      v4/lev0/core_spec/core_spec.go
  5. 1 1
      v4/lev0/core_spec/core_spec_test.go
  6. 1 1
      v4/lev0/core_spec/ebool.go
  7. 1 1
      v4/lev0/core_spec/eint.go
  8. 1 1
      v4/lev0/core_spec/estr.go
  9. 1 1
      v4/lev0/core_spec/ibucket_base.go
  10. 1 1
      v4/lev0/core_spec/ichan.go
  11. 1 1
      v4/lev0/core_spec/idict_kv.go
  12. 1 1
      v4/lev0/core_spec/ikernel_int.go
  13. 1 1
      v4/lev0/core_spec/imodule_stat.go
  14. 1 1
      v4/lev0/core_spec/ioption.go
  15. 1 1
      v4/lev0/core_spec/irec_kv.go
  16. 1 1
      v4/lev0/core_spec/irec_meta.go
  17. 1 1
      v4/lev0/core_spec/irec_val.go
  18. 1 1
      v4/lev0/core_spec/iresult.go
  19. 1 1
      v4/lev0/core_spec/irw_mutex.go
  20. 1 1
      v4/lev0/core_spec/isafe_bool.go
  21. 1 1
      v4/lev0/core_spec/isafe_bool_react.go
  22. 1 1
      v4/lev0/core_spec/isafe_int.go
  23. 1 1
      v4/lev0/core_spec/isafe_string.go
  24. 1 1
      v4/lev0/core_spec/itime.go
  25. 0 18
      v4/lev0/defs/defs.go
  26. 0 32
      v4/lev0/defs/handler_name/handler_name.go
  27. 0 32
      v4/lev0/defs/topic/topic.go
  28. 1 1
      v4/lev0/etypes/ebool/ebool.go
  29. 1 1
      v4/lev0/etypes/estr/estr.go
  30. 1 1
      v4/lev0/etypes/etypes.go
  31. 0 91
      v4/lev0/kspec/ikernel_bus.go
  32. 0 48
      v4/lev0/kspec/ilog_buf.go
  33. 0 2
      v4/lev0/kspec/spec.go
  34. 1 1
      v4/lev0/lev0.go
  35. 1 1
      v4/lev0/option/option.go
  36. 1 1
      v4/lev0/result/result.go
  37. 1 1
      v4/lev0/result/result_test.go
  38. 1 1
      v4/lev0/voc/etime/etime.go
  39. 1 1
      v4/lev0/voc/voc.go
  40. 8 6
      v4/lev1/comp_spec/ilocal_ctx.go
  41. 23 0
      v4/lev1/comp_spec/ilog_buf.go
  42. 0 2
      v4/lev1/dot/dot.go
  43. 1 1
      v4/lev1/kint/kint.go
  44. 1 1
      v4/lev1/kint/kint_test.go
  45. 4 3
      v4/lev1/lev1.go
  46. 3 2
      v4/lev1/local_ctx/ctx_value/ctx_value.go
  47. 3 2
      v4/lev1/local_ctx/ctx_value/ctx_value_test.go
  48. 5 4
      v4/lev1/local_ctx/local_ctx.go
  49. 35 10
      v4/lev1/log_buf/log_buf.go
  50. 2 2
      v4/lev1/log_buf/log_buf_test.go
  51. 16 5
      v4/lev1/log_buf/log_msg/log_msg.go
  52. 0 0
      v4/lev1/log_buf/log_msg/log_msg_test.go
  53. 4 4
      v4/lev1/log_dict_topic/log_dict_topic.go
  54. 12 12
      v4/lev1/lst_sort/lst_sort.go
  55. 1 1
      v4/lev1/lst_sort/lst_sort_test.go
  56. 6 6
      v4/lev1/safe_bool/safe_bool.go
  57. 1 1
      v4/lev1/safe_bool/safe_bool_test.go
  58. 11 11
      v4/lev1/safe_bool_react/safe_bool_react.go
  59. 4 4
      v4/lev1/safe_bool_react/safe_bool_react_test.go
  60. 1 1
      v4/lev1/safe_int/safe_int.go
  61. 1 1
      v4/lev1/safe_int/safe_int_test.go
  62. 1 1
      v4/lev1/safe_string/safe_string.go
  63. 1 1
      v4/lev1/safe_string/safe_string_test.go
  64. 6 5
      v4/lev2/kchan/kchan.go
  65. 12 11
      v4/lev2/kctx/kctx.go
  66. 7 6
      v4/lev2/kernel_keeper/kernel_keeper.go
  67. 2 2
      v4/lev2/kernel_keeper/kernel_keeper_test.go
  68. 14 11
      v4/lev2/kmodule/kmodule.go
  69. 2 2
      v4/lev2/kmodule/kmodule_test.go
  70. 1 1
      v4/lev2/kmodule/mod_stat/mod_stat.go
  71. 16 14
      v4/lev2/kmonolit/kmonolit.go
  72. 4 4
      v4/lev2/kmonolit/kmonolit_test.go
  73. 1 1
      v4/lev2/kserv_http/kserv_http.go
  74. 1 1
      v4/lev2/kserv_http/kserv_http_test.go
  75. 1 1
      v4/lev2/kserv_http_std/kserv_http_std.go
  76. 6 2
      v4/lev2/kspec/ikernel_ctx.go
  77. 5 1
      v4/lev2/kspec/ikernel_keeper.go
  78. 0 0
      v4/lev2/kspec/ikernel_module.go
  79. 9 4
      v4/lev2/kspec/ikernel_monolit.go
  80. 0 0
      v4/lev2/kspec/ikernel_server_http.go
  81. 10 5
      v4/lev2/kspec/ikernel_store_kv.go
  82. 4 2
      v4/lev2/kspec/ikernel_wg.go
  83. 7 5
      v4/lev2/kwg/kwg.go
  84. 2 2
      v4/lev2/kwg/kwg_test.go
  85. 6 5
      v4/lev2/log_topic/log_topic.go
  86. 2 1
      v4/lev2/log_topic/log_topic_test.go
  87. 14 12
      v4/lev2/lsi/kstore_kv/kstore_kv.go
  88. 3 3
      v4/lev2/lsi/kstore_kv/kstore_kv_test.go
  89. 4 4
      v4/lev2/lsi/kstore_kv_std/kv_bucket_base/dict_rec/dict_rec.go
  90. 1 1
      v4/lev2/lsi/kstore_kv_std/kv_bucket_base/dict_rec/dict_rec_test.go
  91. 5 5
      v4/lev2/lsi/kstore_kv_std/kv_bucket_base/kv_bucket_base.go
  92. 7 7
      v4/lev2/lsi/kstore_kv_std/rec_kv/rec_kv.go
  93. 6 6
      v4/lev2/lsi/kstore_kv_std/rec_meta/rec_meta.go
  94. 2 2
      v4/lev2/lsi/kstore_kv_std/rec_val/rec_val.go
  95. 43 0
      v4/lev2/lti/bus_ent/bus_ent.go
  96. 0 0
      v4/lev2/lti/bus_ent/handler_name/README.md
  97. 44 0
      v4/lev2/lti/bus_ent/handler_name/handler_name.go
  98. 5 5
      v4/lev2/lti/bus_ent/handler_name/handler_name_test.go
  99. 0 0
      v4/lev2/lti/bus_ent/topic/README.md
  100. 60 0
      v4/lev2/lti/bus_ent/topic/topic.go

+ 1 - 1
v4/cmd/demo/main.go

@@ -3,7 +3,7 @@ package main
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 var app mKs.IKernelMonolit // Вынесено для тестов

+ 17 - 13
v4/kern.go

@@ -5,14 +5,18 @@ import (
 	"context"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/module_name"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"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/kmonolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/kstore_kv"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_http/client_bus_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_local"
@@ -56,7 +60,7 @@ func GetKernelServerHttp() mKs.IKernelServerHttp {
 	return kernServHttp
 }
 
-type ISafeBool = mKs.ISafeBool
+type ISafeBool = core_spec.ISafeBool
 
 // NewSafeBool -- возвращает новый потокобезопасный булевый признак.
 func NewSafeBool(val bool) ISafeBool {
@@ -65,7 +69,7 @@ func NewSafeBool(val bool) ISafeBool {
 }
 
 // GetKernelBusLocal -- возвращает локальную шину данных.
-func GetKernelBusLocal() mKs.IKernelBus {
+func GetKernelBusLocal() bus_spec.IKernelBus {
 	kCtx := kctx.GetKernelCtx()
 	kCtx.Set("monolitName", "unknown monolit", "GetKernelBusLocal()")
 	lBus := kbus_local.GetKernelBusLocal()
@@ -73,7 +77,7 @@ func GetKernelBusLocal() mKs.IKernelBus {
 }
 
 // GetKernelBusHttp -- возвращает HTTP шину данных.
-func GetKernelBusHttp() mKs.IKernelBus {
+func GetKernelBusHttp() bus_spec.IKernelBus {
 	bus := kbus_http.GetKernelBusHttp()
 	return bus
 }
@@ -122,19 +126,19 @@ func NewKernelModule(name *module_name.AModuleName) mKs.IKernelModule {
 }
 
 // NewClientBusLocal -- возвращает клиент для работы с локальной шиной.
-func NewClientBusLocal() mKs.IBusClient {
+func NewClientBusLocal() bus_spec.IBusClient {
 	lClient := client_bus_local.NewClientBusLocal()
 	return lClient
 }
 
 // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP.
-func NewClientBusHttp(url string) mKs.IBusClient {
+func NewClientBusHttp(url string) bus_spec.IBusClient {
 	client := client_bus_http.NewClientBusHttp(url)
 	return client
 }
 
 // GetModuleServHttp -- возвращает модуль для IKernelServHttp.
-func GetModuleServHttp() mKs.IKernelModule {
+func GetModuleServHttp() kspec.IKernelModule {
 	modServHttp := mod_serv_http.GetModuleServHttp()
 	return modServHttp
 }
@@ -158,7 +162,7 @@ func GetModuleWui() mKs.IKernelModule {
 }
 
 // ILogBuf -- буферизованный лог
-type ILogBuf = mKs.ILogBuf
+type ILogBuf = comp_spec.ILogBuf
 
 // LogBufParam -- параметры для создания нового буферизованного лога.
 type LogBufParam = mL1.LogBufParam
@@ -170,31 +174,31 @@ func NewLogBuf(param *LogBufParam) ILogBuf {
 }
 
 // NewSafeBoolReact -- возвращает новую потокобезопасную реактивную булеву переменную.
-func NewSafeBoolReact() mKs.ISafeBoolReact {
+func NewSafeBoolReact() core_spec.ISafeBoolReact {
 	val := mL1.NewSafeBoolReact()
 	return val
 }
 
 // NewSafeInt -- возвращает новую потокобезопасную целочисленную переменную.
-func NewSafeInt(val int) mKs.ISafeInt {
+func NewSafeInt(val int) core_spec.ISafeInt {
 	val_ := mL1.NewSafeInt(val)
 	return val_
 }
 
 // NewInt -- возвращает новую целочисленную переменную.
-func NewInt(val int) mKs.Int {
+func NewInt(val int) core_spec.Int {
 	val_ := mL1.NewInt(val)
 	return val_
 }
 
 // NewLocalCtx -- возвращает новый локальный контекст.
-func NewLocalCtx(ctx context.Context) mKs.ILocalCtx {
+func NewLocalCtx(ctx context.Context) comp_spec.ILocalCtx {
 	lCtx := mL1.NewLocalCtx(ctx)
 	return lCtx
 }
 
 // NewSafeString -- возвращает новую потокобезопасную строку.
-func NewSafeString() mKs.ISafeString {
+func NewSafeString() core_spec.ISafeString {
 	str := mL1.NewSafeString()
 	return str
 }

+ 2 - 2
v4/kern_test.go

@@ -5,8 +5,8 @@ import (
 	"os"
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
@@ -52,7 +52,7 @@ func (sf *tester) new() {
 	sf.new3()
 
 	_ = NewOk("test ok")
-	_ = NewErr[kspec.EBool](fmt.Errorf("test err"))
+	_ = NewErr[core_spec.EBool](fmt.Errorf("test err"))
 	_ = NewSome("test err")
 	_ = NewNone[int64]()
 

+ 2 - 0
v4/lev0/core_spec/core_spec.go

@@ -0,0 +1,2 @@
+// package core_spec -- типы ядра
+package core_spec

+ 1 - 1
v4/lev0/kspec/spec_test.go → v4/lev0/core_spec/core_spec_test.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 import (
 	"testing"

+ 1 - 1
v4/lev0/kspec/ebool.go → v4/lev0/core_spec/ebool.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // EBool -- расширенный бул.
 type EBool interface {

+ 1 - 1
v4/lev0/kspec/eint.go → v4/lev0/core_spec/eint.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // EInt -- расширенное целочисленное значение.
 type EInt interface {

+ 1 - 1
v4/lev0/kspec/estr.go → v4/lev0/core_spec/estr.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // EStr -- расширенная строка.
 type EStr interface {

+ 1 - 1
v4/lev0/kspec/ibucket_base.go → v4/lev0/core_spec/ibucket_base.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"

+ 1 - 1
v4/lev0/kspec/ichan.go → v4/lev0/core_spec/ichan.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // IChan -- умный канал
 type IChan[T any] interface {

+ 1 - 1
v4/lev0/kspec/idict_kv.go → v4/lev0/core_spec/idict_kv.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"

+ 1 - 1
v4/lev0/kspec/ikernel_int.go → v4/lev0/core_spec/ikernel_int.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // Int -- целочисленный тип ядра.
 type Int interface {

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

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

+ 1 - 1
v4/lev0/kspec/ioption.go → v4/lev0/core_spec/ioption.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // IOption -- интерфейс опции.
 type IOption[T any] interface {

+ 1 - 1
v4/lev0/kspec/irec_kv.go → v4/lev0/core_spec/irec_kv.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // IRecKv -- интерфейс записи KV-хранилища.
 type IRecKv interface {

+ 1 - 1
v4/lev0/kspec/irec_meta.go → v4/lev0/core_spec/irec_meta.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 

+ 1 - 1
v4/lev0/kspec/irec_val.go → v4/lev0/core_spec/irec_val.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 

+ 1 - 1
v4/lev0/kspec/iresult.go → v4/lev0/core_spec/iresult.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // IResult -- возвращаемый результат.
 type IResult[T any] interface {

+ 1 - 1
v4/lev0/kspec/irw_mutex.go → v4/lev0/core_spec/irw_mutex.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // IRWMutex -- интерфейс RW-мьютекса.
 type IRWMutex interface {

+ 1 - 1
v4/lev0/kspec/isafe_bool.go → v4/lev0/core_spec/isafe_bool.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // ISafeBool -- интерфейс к потокобезопасной переменной.
 type ISafeBool interface {

+ 1 - 1
v4/lev0/kspec/isafe_bool_react.go → v4/lev0/core_spec/isafe_bool_react.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // ISafeBoolReact -- реактивный потокобезопасный булевый признак.
 type ISafeBoolReact interface {

+ 1 - 1
v4/lev0/kspec/isafe_int.go → v4/lev0/core_spec/isafe_int.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // ISafeInt -- интерфейс к потокобезопасной переменной.
 type ISafeInt interface {

+ 1 - 1
v4/lev0/kspec/isafe_string.go → v4/lev0/core_spec/isafe_string.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 // ISafeString -- интерфейс к потокобезопасной переменной.
 type ISafeString interface {

+ 1 - 1
v4/lev0/kspec/itime.go → v4/lev0/core_spec/itime.go

@@ -1,4 +1,4 @@
-package kspec
+package core_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"

+ 0 - 18
v4/lev0/defs/defs.go

@@ -2,11 +2,9 @@
 package defs
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/module_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 )
 
 // Time -- метка времени.
@@ -28,22 +26,6 @@ func NewStreamName(val string) *stream_name.AStreamName {
 	return stream_name.NewAStreamName(val)
 }
 
-// Topic -- имя топика.
-type Topic = topic.ATopic
-
-// NewTopic -- создать новое имя топика.
-//
-//go:fix inline
-var NewTopic = topic.NewATopic
-
-// HandlerName -- имя функции обработчика.
-type HandlerName = handler_name.AHandlerName
-
-// NewHandlerName -- создать новое имя функции обработчика.
-//
-//go:fix inline
-var NewHandlerName = handler_name.NewAHandlerName
-
 // StoreKey -- ключ хранилища.
 type StoreKey = store_key.AStoreKey
 

+ 0 - 32
v4/lev0/defs/handler_name/handler_name.go

@@ -1,32 +0,0 @@
-// package handler_name -- имя функции обработчика
-package handler_name
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark"
-)
-
-// AHandlerName -- имя функции обработчика.
-type AHandlerName struct {
-	val *quark.QStr[quark.Fix]
-}
-
-// NewAHandlerName -- создать новое имя функции обработчика.
-func NewAHandlerName(val string) *AHandlerName {
-	helpers.Assert(val != "", "NewAHandlerName: val is empty")
-	return &AHandlerName{
-		val: quark.NewQStr(val),
-	}
-}
-
-// String -- строковое представление.
-//
-//go:fix inline
-func (sf *AHandlerName) String() string {
-	return sf.val.Get()
-}
-
-// Get -- получить значение.
-func (sf *AHandlerName) Get() string {
-	return sf.val.Get()
-}

+ 0 - 32
v4/lev0/defs/topic/topic.go

@@ -1,32 +0,0 @@
-package topic
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark"
-)
-
-// ATopic -- имя топика в шине.
-type ATopic struct {
-	val *quark.QStr[quark.Fix]
-}
-
-// NewATopic -- создает новый топик.
-func NewATopic(val string) *ATopic {
-	helpers.Hassert(val != "", "NewTopic(): val is empty")
-	sf := &ATopic{
-		val: quark.NewQStr(val),
-	}
-	return sf
-}
-
-// String -- строковое представление топика.
-//
-//go:fix inline
-func (sf *ATopic) String() string {
-	return sf.val.Get()
-}
-
-// Get -- получить строковое представление топика.
-func (sf *ATopic) Get() string {
-	return sf.val.Get()
-}

+ 1 - 1
v4/lev0/etypes/ebool/ebool.go

@@ -2,8 +2,8 @@
 package ebool
 
 import (
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // EBool -- расширенное булево.

+ 1 - 1
v4/lev0/etypes/estr/estr.go

@@ -2,8 +2,8 @@
 package estr
 
 import (
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	mHp "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // EStr -- расширенная строка.

+ 1 - 1
v4/lev0/etypes/etypes.go

@@ -2,8 +2,8 @@
 package etypes
 
 import (
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/estr"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // EStr - расширенная строка.

+ 0 - 91
v4/lev0/kspec/ikernel_bus.go

@@ -1,91 +0,0 @@
-package kspec
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
-)
-
-// IBusBaseHandler -- базовый обработчик обратного вызова.
-type IBusBaseHandler interface {
-	// Topic -- топик подписки обработчика
-	Topic() *topic.ATopic
-	// Name -- уникальное имя обработчика
-	Name() *handler_name.AHandlerName
-}
-
-// IBusHandlerSubscribe -- объект обработчика подписки.
-type IBusHandlerSubscribe interface {
-	IBusBaseHandler
-	// FnBack -- функция обратного вызова
-	FnBack([]byte)
-}
-
-// IBusHandlerServe -- обработчик входящих запросов.
-type IBusHandlerServe interface {
-	IBusBaseHandler
-	// FnBack -- функция обратного вызова
-	FnBack(binReq []byte) IResult[[]byte]
-}
-
-// IDictSubHook -- словарь обработчиков по единственному топику.
-type IDictSubHook interface {
-	// Subscribe -- подписывает обработчик
-	Subscribe(IBusHandlerSubscribe)
-	// Read -- все локальные обработчики читают сообщение по его приходу
-	Read(binMsg []byte)
-	// Unsubscribe -- отписывает обработчик
-	Unsubscribe(IBusHandlerSubscribe)
-}
-
-// IDictTopicSub -- интерфейс к словарю обработчиков подписки на словарь топиков.
-//
-//	При подписке потребителей топика может быть НЕСКОЛЬКО на КАЖДЫЙ топик.
-type IDictTopicSub interface {
-	// Subscribe -- подписывает подписчиков на любой из топиков
-	Subscribe(IBusHandlerSubscribe)
-	// Read -- читает сообщение для всех обработчиков подписки по приходу на любой из топиков
-	Read(topic *topic.ATopic, binMsg []byte)
-	// Unsubscribe -- отписывает подписчиков от любого из топиков
-	Unsubscribe(IBusHandlerSubscribe)
-}
-
-// IDictTopicServe -- интерфейс к обработчику входящих запросов на словарь топиков.
-//
-// При обслуживании входящих запросов обработчик может быть только ОДИН на КАЖДЫЙ топик.
-// Но обработчик вызывается конкурентно.
-type IDictTopicServe interface {
-	// Register -- регистрирует единственный обработчик на единственный топик
-	Register(IBusHandlerServe) IResult[EBool]
-	// SendRequest -- выполняет запрос по указанному топику
-	SendRequest(topic *topic.ATopic, binReq []byte) IResult[[]byte]
-	// Unregister -- удаляет единственный обработчик с единственного топика
-	Unregister(IBusHandlerServe)
-}
-
-// IKernelBus -- шина сообщений ядра.
-//
-//	Публикация и запрос требуют параметров на _передачу_.
-//	Подписка и обслуживание входящих запросов требует _обработчиков_.
-type IKernelBus interface {
-	// Publish -- публикует сообщение в шину
-	Publish(topic *topic.ATopic, binMsg []byte) IResult[EBool]
-	// SendRequest -- выполняет запрос по указанному топику
-	SendRequest(topic *topic.ATopic, binReq []byte) IResult[[]byte]
-
-	// Subscribe -- подписывает обработчик на топик
-	Subscribe(IBusHandlerSubscribe) IResult[EBool]
-	// Unsubscribe -- отписывается от топика
-	Unsubscribe(IBusHandlerSubscribe)
-	// RegisterServe -- Регистрирует обработчик на обслуживание входящих запросов
-	RegisterServe(IBusHandlerServe) IResult[EBool]
-
-	// IsWork -- возвращает признак работы шины
-	IsWork() EBool
-	// Log -- возвращает буферный лог
-	Log() ILogBuf
-}
-
-// IBusClient -- интерфейс клиента к шину.
-type IBusClient interface {
-	IKernelBus
-}

+ 0 - 48
v4/lev0/kspec/ilog_buf.go

@@ -1,48 +0,0 @@
-package kspec
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark"
-)
-
-// ILogMsg -- сообщение лога.
-type ILogMsg interface {
-	// CreateAt -- когда создано
-	CreateAt() ITime
-	// Level -- уровень сообщения
-	Level() *quark.QStr[quark.Mut]
-	// Msg -- текст сообщения
-	Msg() *quark.QStr[quark.Fix]
-	// String -- форматированная строка
-	String() string
-}
-
-// ILogBus -- публикует в топики логи.
-type ILogBus interface {
-	// DebugAdd -- добавляет топик для отладочного сообщения
-	DebugAdd(topic topic.ATopic, bus IBusClient) IResult[EBool]
-}
-
-// ILogBuf -- буферизованный лог для диагностики.
-//
-//	Буфер для Error -- отдельный.
-type ILogBuf interface {
-	// Debug -- сообщение отладки
-	Debug(fMsg string, args ...any)
-	// LogBus -- возвращает объект публикации в шину
-	// LogBus()ILogBus
-	// Info -- информационные сообщения
-	Info(fMsg string, args ...any)
-	// Warn -- предупреждающие сообщения
-	Warn(fMsg string, args ...any)
-	// Err -- сообщения об ошибках
-	Err(fMsg string, args ...any)
-	// Get -- возвращает сообщение по номеру (0..99)
-	Get(num int) ILogMsg
-	// GetErr -- возвращает сообщение ошибки по номеру (0..99)
-	GetErr(num int) ILogMsg
-	// Size -- возвращает размер лога
-	Size() int
-	// IsTerm -- возвращает признак логирования в терминал
-	IsTerm() ISafeBool
-}

+ 0 - 2
v4/lev0/kspec/spec.go

@@ -1,2 +0,0 @@
-// package kspec -- типы ядра
-package kspec

+ 1 - 1
v4/lev0/lev0.go

@@ -2,9 +2,9 @@
 package lev0
 
 import (
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	mEt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
 	mRes "gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )

+ 1 - 1
v4/lev0/option/option.go

@@ -3,8 +3,8 @@ package option
 import (
 	"reflect"
 
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	mH "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // Option -- результат возможно содержащий nil.

+ 1 - 1
v4/lev0/result/result.go

@@ -5,8 +5,8 @@ import (
 	"reflect"
 	"runtime"
 
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // Result — обёртка вокруг результата с возможной ошибкой.

+ 1 - 1
v4/lev0/result/result_test.go

@@ -5,7 +5,7 @@ import (
 	"runtime"
 	"testing"
 
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 type tester struct {

+ 1 - 1
v4/lev0/voc/etime/etime.go

@@ -5,9 +5,9 @@ import (
 	"fmt"
 	"time"
 
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // ETime -- метка времени.

+ 1 - 1
v4/lev0/voc/voc.go

@@ -2,8 +2,8 @@
 package voc
 
 import (
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 

+ 8 - 6
v4/lev0/kspec/ilocal_ctx.go → v4/lev1/comp_spec/ilocal_ctx.go

@@ -1,29 +1,31 @@
-package kspec
+package comp_spec
 
 import (
 	"context"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 // ICtxValue -- интерфейс к значению локального контекста.
 type ICtxValue interface {
-	IRWMutex
+	core_spec.IRWMutex
 	// Key -- возвращает ключ значения
 	Key() string
 	// Val -- возвращает хранимое значение
 	Val() any
 	// CreateAt -- возвращает метку времени создания
-	CreateAt() ITime
+	CreateAt() core_spec.ITime
 	// UpdateAt -- возвращает метку времени обновления
-	UpdateAt() ITimeMut
+	UpdateAt() core_spec.ITimeMut
 	// Comment -- возвращает комментарий значения
 	Comment() string
 }
 
 // ILocalCtx -- локальный контекст.
 type ILocalCtx interface {
-	IRWMutex
+	core_spec.IRWMutex
 	// Get -- извлекает значение из контекста
-	Get(key string) IOption[ICtxValue]
+	Get(key string) core_spec.IOption[ICtxValue]
 	// Del -- удаляет значение из контекста
 	Del(key string)
 	// Set -- добавляет значение в контекст

+ 23 - 0
v4/lev1/comp_spec/ilog_buf.go

@@ -0,0 +1,23 @@
+package comp_spec
+
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf/log_msg"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
+)
+
+// ILogMsg -- сообщение лога.
+type ILogMsg = log_msg.ILogMsg
+
+// ILogBus -- публикует в топики логи.
+type ILogBus interface {
+	// DebugAdd -- добавляет топик для отладочного сообщения
+	DebugAdd(topic bus_ent.ITopicFix, bus bus_spec.IBusClient) core_spec.IResult[core_spec.EBool]
+}
+
+// ILogBuf -- буферизованный лог для диагностики.
+//
+//	Буфер для Error -- отдельный.
+type ILogBuf = log_buf.ILogBuf

+ 0 - 2
v4/lev1/dot/dot.go

@@ -1,2 +0,0 @@
-// package dot -- Data object of transport
-package dot

+ 1 - 1
v4/lev1/kint/kint.go

@@ -9,7 +9,7 @@ import (
 	"strconv"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 // Целочисленная переменная ядра.

+ 1 - 1
v4/lev1/kint/kint_test.go

@@ -4,7 +4,7 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 type tester struct {

+ 4 - 3
v4/lev1/lev1.go

@@ -5,9 +5,10 @@ import (
 	"context"
 
 	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/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kint"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
@@ -30,7 +31,7 @@ func MakeEnv() IMockEnv {
 type LogBufParam = log_buf.LogBufParam
 
 // NewLogBuf -- возвращает новый буферизованный лог.
-func NewLogBuf(param *LogBufParam) mKs.ILogBuf {
+func NewLogBuf(param *LogBufParam) comp_spec.ILogBuf {
 	log := log_buf.NewLogBuf(param)
 	return log
 }
@@ -97,7 +98,7 @@ func NewInt(val int) mKs.Int {
 }
 
 // NewLocalCtx -- возвращает новый локальный контекст.
-func NewLocalCtx(ctx context.Context) mKs.ILocalCtx {
+func NewLocalCtx(ctx context.Context) comp_spec.ILocalCtx {
 	lCtx := local_ctx.NewLocalCtx(ctx)
 	return lCtx
 }

+ 3 - 2
v4/lev1/ctx_value/ctx_value.go → v4/lev1/local_ctx/ctx_value/ctx_value.go

@@ -5,8 +5,9 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	mKs "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"
 )
 
 // CtxValue -- потокобезопасное значение локального контекста.
@@ -20,7 +21,7 @@ type CtxValue struct {
 }
 
 // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
-func NewCtxValue(key string, val any, comment string) mKs.ICtxValue {
+func NewCtxValue(key string, val any, comment string) comp_spec.ICtxValue {
 	mL0.Hassert(key != "", "NewCtxValue(): key is empty")
 	sf := &CtxValue{
 		key:       key,

+ 3 - 2
v4/lev1/ctx_value/ctx_value_test.go → v4/lev1/local_ctx/ctx_value/ctx_value_test.go

@@ -3,12 +3,13 @@ package ctx_value
 import (
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	. "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       ICtxValue
+	val       comp_spec.ICtxValue
 	createdAt ITime
 }
 

+ 5 - 4
v4/lev1/local_ctx/local_ctx.go

@@ -6,9 +6,10 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	mKs "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/ctx_value"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/lst_sort"
@@ -21,13 +22,13 @@ type LocalCtx struct {
 	ctx      context.Context // Отменяемый контекст
 	fnCancel func()          // Функция отмены контекста
 
-	dictVal map[string]mKs.ICtxValue // Словарь различных значений
+	dictVal map[string]comp_spec.ICtxValue // Словарь различных значений
 	lstSort *lst_sort.LstSort        // Сортированный список значений
-	log     mKs.ILogBuf              // Локальный буфер
+	log     comp_spec.ILogBuf              // Локальный буфер
 }
 
 // NewLocalCtx -- возвращает новый локальный контекст.
-func NewLocalCtx(ctx context.Context) mKs.ILocalCtx {
+func NewLocalCtx(ctx context.Context) comp_spec.ILocalCtx {
 	mL0.Hassert(ctx != nil, "NewLocalCtx(): ctx==nil")
 	_ctx, fnCancel := context.WithCancel(ctx)
 	paramLogBuf := &log_buf.LogBufParam{

+ 35 - 10
v4/lev1/log_buf/log_buf.go

@@ -6,11 +6,36 @@ import (
 	"log"
 	"sync"
 
+	"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/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_msg"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf/log_msg"
 )
 
+// ILogBuf -- буферизованный лог для диагностики.
+//
+//	Буфер для Error -- отдельный.
+type ILogBuf interface {
+	// Debug -- сообщение отладки
+	Debug(fMsg string, args ...any)
+	// LogBus -- возвращает объект публикации в шину
+	// LogBus()ILogBus
+	// Info -- информационные сообщения
+	Info(fMsg string, args ...any)
+	// Warn -- предупреждающие сообщения
+	Warn(fMsg string, args ...any)
+	// Err -- сообщения об ошибках
+	Err(fMsg string, args ...any)
+	// Get -- возвращает сообщение по номеру (0..99)
+	Get(num int) log_msg.ILogMsg
+	// GetErr -- возвращает сообщение ошибки по номеру (0..99)
+	GetErr(num int) log_msg.ILogMsg
+	// Size -- возвращает размер лога
+	Size() int
+	// IsTerm -- возвращает признак логирования в терминал
+	IsTerm() core_spec.ISafeBool
+}
+
 var (
 	hassert = helpers.Hassert
 )
@@ -30,18 +55,18 @@ func (sf *LogBufParam) SelfCheck() {
 type LogBuf struct {
 	sync.RWMutex
 	*LogBufParam
-	lst    []mKs.ILogMsg
-	lstErr []mKs.ILogMsg
+	lst    []comp_spec.ILogMsg
+	lstErr []comp_spec.ILogMsg
 }
 
 // NewLogBuf -- возвращает новый потокобезопасный буфер лога.
-func NewLogBuf(param *LogBufParam) mKs.ILogBuf {
+func NewLogBuf(param *LogBufParam) comp_spec.ILogBuf {
 	hassert(param != nil, "NewLogBuf(): param=nil")
 	param.SelfCheck()
 	sf := &LogBuf{
 		LogBufParam: param,
-		lst:         []mKs.ILogMsg{},
-		lstErr:      []mKs.ILogMsg{},
+		lst:         []comp_spec.ILogMsg{},
+		lstErr:      []comp_spec.ILogMsg{},
 	}
 	sf.Prefix_ += "."
 	return sf
@@ -53,7 +78,7 @@ func (sf *LogBuf) IsTerm() mKs.ISafeBool {
 }
 
 // GetErr -- возвращает сообщение ошибки по номеру.
-func (sf *LogBuf) GetErr(num int) mKs.ILogMsg {
+func (sf *LogBuf) GetErr(num int) comp_spec.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	if len(sf.lstErr) == 0 {
@@ -69,7 +94,7 @@ func (sf *LogBuf) GetErr(num int) mKs.ILogMsg {
 }
 
 // Get -- возвращает сообщение по номеру.
-func (sf *LogBuf) Get(num int) mKs.ILogMsg {
+func (sf *LogBuf) Get(num int) comp_spec.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	if len(sf.lst) == 0 {
@@ -173,7 +198,7 @@ func (sf *LogBuf) checkLenErr() {
 }
 
 // Печатает сообщение в терминал, если разрешено.
-func (sf *LogBuf) printTerm(msg mKs.ILogMsg) {
+func (sf *LogBuf) printTerm(msg comp_spec.ILogMsg) {
 	if !sf.IsTerm_.Get() {
 		return
 	}

+ 2 - 2
v4/lev1/log_buf/log_buf_test.go

@@ -4,13 +4,13 @@ import (
 	"testing"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
 type tester struct {
 	t   *testing.T
-	log ILogBuf
+	log comp_spec.ILogBuf
 }
 
 func TestLogBuf(t *testing.T) {

+ 16 - 5
v4/lev1/log_msg/log_msg.go → v4/lev1/log_buf/log_msg/log_msg.go

@@ -5,13 +5,24 @@ import (
 	"fmt"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
-
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 
+// ILogMsg -- сообщение лога.
+type ILogMsg interface {
+	// CreateAt -- когда создано
+	CreateAt() core_spec.ITime
+	// Level -- уровень сообщения
+	Level() *quark.QStr[quark.Mut]
+	// Msg -- текст сообщения
+	Msg() *quark.QStr[quark.Fix]
+	// String -- форматированная строка
+	String() string
+}
+
 const (
 	DEBUG = -3
 	INFO  = -2
@@ -22,12 +33,12 @@ const (
 // logMsg -- сообщение логгера.
 type logMsg struct {
 	level     *quark.QStr[quark.Mut]
-	createdAt kspec.ITime
+	createdAt core_spec.ITime
 	msg       *quark.QStr[quark.Fix]
 }
 
 // NewLogMsg -- возвращает новое сообщение логгера.
-func NewLogMsg(level int, msg string) kspec.ILogMsg {
+func NewLogMsg(level int, msg string) ILogMsg {
 	sf := &logMsg{
 		createdAt: etime.NewETimeAuto(),
 		msg:       quark.NewQStr(msg),
@@ -53,7 +64,7 @@ func (sf *logMsg) Level() *quark.QStr[quark.Mut] {
 }
 
 // CreateAt -- когда сообщение создано.
-func (sf *logMsg) CreateAt() kspec.ITime {
+func (sf *logMsg) CreateAt() core_spec.ITime {
 	return sf.createdAt
 }
 

+ 0 - 0
v4/lev1/log_msg/log_msg_test.go → v4/lev1/log_buf/log_msg/log_msg_test.go


+ 4 - 4
v4/lev1/log_dict_topic/log_dict_topic.go

@@ -6,18 +6,18 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
 
 type LogDictTopic struct {
 	sync.RWMutex
 	dict   map[topic.ATopic]struct{}
-	client mKs.IBusClient
+	client bus_spec.IBusClient
 }
 
 // NewLogDictTopic -- возвращает новый словарь топиков для логирования.
-func NewLogDictTopic(clientBus mKs.IBusClient) mL0.IResult[*LogDictTopic] {
+func NewLogDictTopic(clientBus bus_spec.IBusClient) mL0.IResult[*LogDictTopic] {
 	if clientBus == nil {
 		err := fmt.Errorf("NewLogDictTopic(): clientBus == nil")
 		return mL0.NewErr[*LogDictTopic](err)

+ 12 - 12
v4/lev1/lst_sort/lst_sort.go

@@ -6,25 +6,25 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 )
 
 // LstSort -- сортированный список значений контекста.
 type LstSort struct {
 	sync.RWMutex
-	lstVal []mKs.ICtxValue // Сортированный список значений
+	lstVal []comp_spec.ICtxValue // Сортированный список значений
 }
 
 // NewLstSort -- возвращает новый сортированный список значений контекста.
 func NewLstSort() *LstSort {
 	sf := &LstSort{
-		lstVal: []mKs.ICtxValue{},
+		lstVal: []comp_spec.ICtxValue{},
 	}
 	return sf
 }
 
 // Add -- добавляет значение в список.
-func (sf *LstSort) Add(val mKs.ICtxValue) {
+func (sf *LstSort) Add(val comp_spec.ICtxValue) {
 	sf.Lock()
 	defer sf.Unlock()
 	mL0.Hassert(val != nil, "LstSort.Add(): ICtxValue==nil")
@@ -33,7 +33,7 @@ func (sf *LstSort) Add(val mKs.ICtxValue) {
 }
 
 // Del -- удаляет элемент из списка.
-func (sf *LstSort) Del(val mKs.ICtxValue) {
+func (sf *LstSort) Del(val comp_spec.ICtxValue) {
 	sf.Lock()
 	defer sf.Unlock()
 	if val == nil {
@@ -43,7 +43,7 @@ func (sf *LstSort) Del(val mKs.ICtxValue) {
 }
 
 // List -- возвращает сортированный список.
-func (sf *LstSort) List() []mKs.ICtxValue {
+func (sf *LstSort) List() []comp_spec.ICtxValue {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.list()
@@ -57,7 +57,7 @@ func (sf *LstSort) Size() int {
 }
 
 // Get -- возвращает по индексу.
-func (sf *LstSort) Get(ind int) mKs.ICtxValue {
+func (sf *LstSort) Get(ind int) comp_spec.ICtxValue {
 	sf.RLock()
 	defer sf.RUnlock()
 	mL0.Hassert(ind >= 0, "LstSort.Get(): ind(%v)<0", ind)
@@ -66,10 +66,10 @@ func (sf *LstSort) Get(ind int) mKs.ICtxValue {
 }
 
 // удаляет элемент из списка.
-func (sf *LstSort) del(val mKs.ICtxValue) {
+func (sf *LstSort) del(val comp_spec.ICtxValue) {
 	var (
 		ind  int
-		_val mKs.ICtxValue
+		_val comp_spec.ICtxValue
 	)
 	for ind, _val = range sf.lstVal {
 		if val == _val {
@@ -81,7 +81,7 @@ func (sf *LstSort) del(val mKs.ICtxValue) {
 		return
 	}
 	lst0 := sf.lstVal[:ind]
-	lst1 := []mKs.ICtxValue{}
+	lst1 := []comp_spec.ICtxValue{}
 	if ind < len(sf.lstVal)-1 {
 		lst1 = sf.lstVal[ind+1:]
 	}
@@ -92,8 +92,8 @@ func (sf *LstSort) del(val mKs.ICtxValue) {
 }
 
 // возвращает сортированный список.
-func (sf *LstSort) list() []mKs.ICtxValue {
-	lst := make([]mKs.ICtxValue, 0, len(sf.lstVal))
+func (sf *LstSort) list() []comp_spec.ICtxValue {
+	lst := make([]comp_spec.ICtxValue, 0, len(sf.lstVal))
 	lst = append(lst, sf.lstVal...)
 	return lst
 }

+ 1 - 1
v4/lev1/lst_sort/lst_sort_test.go

@@ -3,7 +3,7 @@ package lst_sort
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/ctx_value"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx/ctx_value"
 )
 
 type tester struct {

+ 6 - 6
v4/lev1/safe_bool/safe_bool.go

@@ -8,9 +8,9 @@ import (
 	"sync"
 
 	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/lev0/kspec"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // safeBool -- потокобезопасный булевый признак.
@@ -71,7 +71,7 @@ func (sf *safeBool) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBool) FromStr(strVal string) mL0.IResult[kspec.EBool] {
+func (sf *safeBool) FromStr(strVal string) mL0.IResult[core_spec.EBool] {
 	strVal = strings.ToLower(strVal)
 	sf.Lock()
 	defer sf.Unlock()
@@ -81,18 +81,18 @@ func (sf *safeBool) FromStr(strVal string) mL0.IResult[kspec.EBool] {
 	case "false":
 		sf.val = false
 	default:
-		return mL0.NewErr[kspec.EBool](fmt.Errorf("safeBool.FromStr(): val(%v) bad", strVal))
+		return mL0.NewErr[core_spec.EBool](fmt.Errorf("safeBool.FromStr(): val(%v) bad", strVal))
 	}
 	return mL0.NewOk(ebool.NewEBool(sf.val))
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBool) Getenv(env string) mL0.IResult[kspec.EBool] {
+func (sf *safeBool) Getenv(env string) mL0.IResult[core_spec.EBool] {
 	strVal := os.Getenv(env)
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
 		err := fmt.Errorf("safeBool.Getenv(): from env %v, err=\n\t%w", env, res.Err())
-		return mL0.NewErr[kspec.EBool](err)
+		return mL0.NewErr[core_spec.EBool](err)
 	}
 	return res
 }

+ 1 - 1
v4/lev1/safe_bool/safe_bool_test.go

@@ -4,7 +4,7 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 type tester struct {

+ 11 - 11
v4/lev1/safe_bool_react/safe_bool_react.go

@@ -8,22 +8,22 @@ import (
 	"sync"
 
 	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/lev0/kspec"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // safeBoolReact -- потокобезопасный булевый признак с реакцией на своё изменение.
 type safeBoolReact struct {
 	sync.RWMutex
-	dict map[string]func(kspec.EBoolMut) // Словарь обратных вызовов
+	dict map[string]func(core_spec.EBoolMut) // Словарь обратных вызовов
 	val  bool
 }
 
 // NewSafeBoolReact -- возвращает новый потокобезопасный булевый признак с реакцией на своё изменение.
 func NewSafeBoolReact() mKs.ISafeBoolReact {
 	sf := &safeBoolReact{
-		dict: map[string]func(kspec.EBoolMut){},
+		dict: map[string]func(core_spec.EBoolMut){},
 	}
 	return sf
 }
@@ -58,15 +58,15 @@ func (sf *safeBoolReact) Delete(key string) {
 }
 
 // Add -- добавляет функцию обратного вызова.
-func (sf *safeBoolReact) Add(key string, fn func(kspec.EBoolMut)) mL0.IResult[kspec.EBool] {
+func (sf *safeBoolReact) Add(key string, fn func(core_spec.EBoolMut)) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	if key == "" {
-		return mL0.NewErr[kspec.EBool](fmt.Errorf("safeBoolReact.Add(): key is empty"))
+		return mL0.NewErr[core_spec.EBool](fmt.Errorf("safeBoolReact.Add(): key is empty"))
 	}
 	_, isOk := sf.dict[key]
 	if isOk {
-		return mL0.NewErr[kspec.EBool](fmt.Errorf("safeBoolReact.Add(): key(%v) already exists", key))
+		return mL0.NewErr[core_spec.EBool](fmt.Errorf("safeBoolReact.Add(): key(%v) already exists", key))
 	}
 	sf.dict[key] = fn
 	return mL0.NewOk(ebool.NewEBool(true))
@@ -100,7 +100,7 @@ func (sf *safeBoolReact) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBoolReact) FromStr(strVal string) mL0.IResult[kspec.EBool] {
+func (sf *safeBoolReact) FromStr(strVal string) mL0.IResult[core_spec.EBool] {
 	strVal = strings.ToLower(strVal)
 	sf.Lock()
 	defer sf.Unlock()
@@ -110,18 +110,18 @@ func (sf *safeBoolReact) FromStr(strVal string) mL0.IResult[kspec.EBool] {
 	case "false":
 		sf.val = false
 	default:
-		return mL0.NewErr[kspec.EBool](fmt.Errorf("safeBoolReact.FromStr(): val(%v) bad", strVal))
+		return mL0.NewErr[core_spec.EBool](fmt.Errorf("safeBoolReact.FromStr(): val(%v) bad", strVal))
 	}
 	return mL0.NewOk(ebool.NewEBool(sf.val))
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBoolReact) Getenv(env string) mL0.IResult[kspec.EBool] {
+func (sf *safeBoolReact) Getenv(env string) mL0.IResult[core_spec.EBool] {
 	strVal := os.Getenv(env)
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
 		err := fmt.Errorf("safeBoolReact.Getenv(): from env %v, err=\n\t%w", env, res.Err())
-		return mL0.NewErr[kspec.EBool](err)
+		return mL0.NewErr[core_spec.EBool](err)
 	}
 	return res
 }

+ 4 - 4
v4/lev1/safe_bool_react/safe_bool_react_test.go

@@ -4,14 +4,14 @@ import (
 	"os"
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 type tester struct {
 	t   *testing.T
 	sbr ISafeBoolReact
-	val kspec.EBoolMut
+	val core_spec.EBoolMut
 }
 
 func TestSafeBoolReact(t *testing.T) {
@@ -120,7 +120,7 @@ func (sf *tester) add() {
 }
 
 // Функция обратного вызова для контроля.
-func (sf *tester) fnBack(val kspec.EBoolMut) {
+func (sf *tester) fnBack(val core_spec.EBoolMut) {
 	sf.val = val
 }
 

+ 1 - 1
v4/lev1/safe_int/safe_int.go

@@ -6,7 +6,7 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kint"
 )
 

+ 1 - 1
v4/lev1/safe_int/safe_int_test.go

@@ -4,7 +4,7 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 type tester struct {

+ 1 - 1
v4/lev1/safe_string/safe_string.go

@@ -7,7 +7,7 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 // safeString -- потокобезопасная строка.

+ 1 - 1
v4/lev1/safe_string/safe_string_test.go

@@ -4,7 +4,7 @@ import (
 	"os"
 	"testing"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 )
 
 type tester struct {

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

@@ -6,7 +6,8 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
@@ -21,7 +22,7 @@ type KChanParam[T any] struct {
 	OnRead_  func(T)         // Обратный вызов при чтении из канала
 	OnClose_ func()          // Обратный вызов при закрытии канала
 	OnLimit_ func()          // Обратный вызов при достижении лимита
-	Ctx_     kspec.ILocalCtx // Локальный контекст для контроля создателя
+	Ctx_     comp_spec.ILocalCtx // Локальный контекст для контроля создателя
 }
 
 // SelfCheck -- проверка корректности правильности параметров умного канала
@@ -44,12 +45,12 @@ func (sf *KChanParam[T]) SelfCheck() {
 type KChan[T any] struct {
 	*KChanParam[T]
 	block    sync.RWMutex
-	isClosed kspec.ISafeBool
+	isClosed core_spec.ISafeBool
 	lstMsg   []T
 }
 
 // NewKChan -- создаёт новый безопасный умный канал
-func NewKChan[T any](param *KChanParam[T]) kspec.IChan[T] {
+func NewKChan[T any](param *KChanParam[T]) core_spec.IChan[T] {
 	hassert(param != nil, "NewKChan: param==nil")
 	param.SelfCheck()
 	sf := &KChan[T]{
@@ -61,7 +62,7 @@ func NewKChan[T any](param *KChanParam[T]) kspec.IChan[T] {
 }
 
 // Read -- возвращает первый элемент очереди (если есть)
-func (sf *KChan[T]) Read() kspec.IResult[T] {
+func (sf *KChan[T]) Read() core_spec.IResult[T] {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	if len(sf.lstMsg) == 0 {

+ 12 - 11
v4/lev2/kctx/kctx.go

@@ -5,21 +5,22 @@ import (
 	"context"
 	"sync"
 
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kernel_keeper"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kwg"
 )
 
 // kCtx -- контекст ядра.
 type kCtx struct {
-	mKs.ILocalCtx
-	log        mKs.ILogBuf
-	ctxBg      context.Context   // Неотменяемый контекст ядра
-	ctx        context.Context   // Отменяемый контекст ядра
-	fnCancel   func()            // Функция отмены контекста ядра
-	kernKeeper mKs.IKernelKeeper // Встроенный сторож отмены контекста системным сигналом
-	kernWg     mKs.IKernelWg     // Встроенный ожидатель потока
+	comp_spec.ILocalCtx
+	log        comp_spec.ILogBuf
+	ctxBg      context.Context     // Неотменяемый контекст ядра
+	ctx        context.Context     // Отменяемый контекст ядра
+	fnCancel   func()              // Функция отмены контекста ядра
+	kernKeeper kspec.IKernelKeeper // Встроенный сторож отмены контекста системным сигналом
+	kernWg     kspec.IKernelWg     // Встроенный ожидатель потока
 }
 
 var (
@@ -28,7 +29,7 @@ var (
 )
 
 // GetKernelCtx -- возвращает контекст ядра.
-func GetKernelCtx() mKs.IKernelCtx {
+func GetKernelCtx() kspec.IKernelCtx {
 	block.Lock()
 	defer block.Unlock()
 	if kernCtx != nil {
@@ -52,12 +53,12 @@ func GetKernelCtx() mKs.IKernelCtx {
 }
 
 // Keeper -- возвращает сторож системных сигналов.
-func (sf *kCtx) Keeper() mKs.IKernelKeeper {
+func (sf *kCtx) Keeper() kspec.IKernelKeeper {
 	return sf.kernKeeper
 }
 
 // Wg -- возвращает ожидатель потоков.
-func (sf *kCtx) Wg() mKs.IKernelWg {
+func (sf *kCtx) Wg() kspec.IKernelWg {
 	return sf.kernWg
 }
 

+ 7 - 6
v4/lev2/kernel_keeper/kernel_keeper.go

@@ -10,17 +10,18 @@ import (
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	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/kspec"
 )
 
 // kernelKeeper -- сторож системных сигналов.
 type kernelKeeper struct {
 	ctx      context.Context
 	fnCancel func()
-	wg       mKs.IKernelWg
-	log      mKs.ILogBuf
+	wg       kspec.IKernelWg
+	log      comp_spec.ILogBuf
 	chSys_   chan os.Signal
 }
 
@@ -32,7 +33,7 @@ var (
 
 // GetKernelKeeper -- возвращает новый сторож системных сигналов.
 func GetKernelKeeper(ctx context.Context, fnCancel func(),
-	wg mKs.IKernelWg) *kernelKeeper {
+	wg kspec.IKernelWg) *kernelKeeper {
 	block.Lock()
 	defer block.Unlock()
 	if kernKeep != nil {
@@ -60,12 +61,12 @@ func GetKernelKeeper(ctx context.Context, fnCancel func(),
 
 	go sf.run(sf.chSys_)
 	kernKeep = sf
-	_ = mKs.IKernelKeeper(sf)
+	_ = kspec.IKernelKeeper(sf)
 	return sf
 }
 
 // Log -- возвращает лог сторожа системных сигналов.
-func (sf *kernelKeeper) Log() mKs.ILogBuf {
+func (sf *kernelKeeper) Log() comp_spec.ILogBuf {
 	return sf.log
 }
 

+ 2 - 2
v4/lev2/kernel_keeper/kernel_keeper_test.go

@@ -6,7 +6,7 @@ import (
 	"testing"
 	"time"
 
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kwg"
 )
 
@@ -14,7 +14,7 @@ type tester struct {
 	t        *testing.T
 	ctx      context.Context
 	fnCancel func()
-	wg       IKernelWg
+	wg       kspec.IKernelWg
 }
 
 func TestKernelKeeper(t *testing.T) {

+ 14 - 11
v4/lev2/kmodule/kmodule.go

@@ -5,30 +5,33 @@ import (
 	"time"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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/defs/module_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"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/mod_stat"
+	"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"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_local"
 )
 
 // kModule -- модуль на основе ядра.
 type kModule struct {
-	kCtx      mKs.IKernelCtx
-	ctx       mKs.ILocalCtx
+	kCtx      kspec.IKernelCtx
+	ctx       comp_spec.ILocalCtx
 	name      *module_name.AModuleName
-	bus       mKs.IKernelBus
+	bus       bus_spec.IKernelBus
 	timePhase mKs.ISafeInt
 	strLive   mKs.ISafeString
 	stat      mKs.IModuleStat
 }
 
 // NewKernelModule -- возвращает новый модуль на основе ядра.
-func NewKernelModule(name *module_name.AModuleName) mKs.IKernelModule {
+func NewKernelModule(name *module_name.AModuleName) kspec.IKernelModule {
 	mL0.Hassert(name != nil, "NewKernelModule(): name==nil")
 	kCtx := kctx.GetKernelCtx()
 	sf := &kModule{
@@ -50,12 +53,12 @@ func (sf *kModule) Stat() mKs.IModuleStat {
 }
 
 // Log -- возвращает буферный лог.
-func (sf *kModule) Log() mKs.ILogBuf {
+func (sf *kModule) Log() comp_spec.ILogBuf {
 	return sf.ctx.Log()
 }
 
 // Ctx -- возвращает контекст модуля.
-func (sf *kModule) Ctx() mKs.ILocalCtx {
+func (sf *kModule) Ctx() comp_spec.ILocalCtx {
 	return sf.ctx
 }
 
@@ -83,9 +86,9 @@ func (sf *kModule) Live() string {
 // Сигнал жизни, каждые 5 сек публикует в шину метку.
 func (sf *kModule) sigLive() {
 	var (
-		topic  = mKd.NewTopic(sf.name.Get() + "_live")
+		topic  = bus_ent.NewTopicFix(bus_ent.ATopic(sf.name.Get()) + "_live")
 		iPhase = 0
-		res    mL0.IResult[kspec.EBool]
+		res    mL0.IResult[core_spec.EBool]
 	)
 	fnPhase := func() {
 		time.Sleep(time.Millisecond * time.Duration(sf.timePhase.Get()))

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

@@ -6,14 +6,14 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"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"
 )
 
 type tester struct {
 	t   *testing.T
-	mod IKernelModule
+	mod kspec.IKernelModule
 	me  *mock_env.MockEnv
 }
 

+ 1 - 1
v4/lev2/kmodule/mod_stat/mod_stat.go

@@ -11,9 +11,9 @@ package mod_stat
 import (
 	"time"
 
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/module_name"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule/mod_stat/mod_stat_day"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule/mod_stat/mod_stat_sec"

+ 16 - 14
v4/lev2/kmonolit/kmonolit.go

@@ -6,25 +6,27 @@ import (
 	"sync"
 
 	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/defs/module_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"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"
 )
 
 // kMonolit -- объект модульного монолита.
 type kMonolit struct {
-	kCtx    mKs.IKernelCtx
-	lCtx    mKs.ILocalCtx
-	log     mKs.ILogBuf
+	kCtx    kspec.IKernelCtx
+	lCtx    comp_spec.ILocalCtx
+	log     comp_spec.ILogBuf
 	name    string
-	isLocal kspec.EBool
+	isLocal core_spec.EBool
 	isWork  mKs.ISafeBool
 	isEnd   mKs.ISafeBool
-	dict    map[*module_name.AModuleName]mKs.IKernelModule // Словарь модулей монолита
+	dict    map[*module_name.AModuleName]kspec.IKernelModule // Словарь модулей монолита
 }
 
 var (
@@ -50,7 +52,7 @@ func GetMonolit(name string) *kMonolit {
 		kCtx:    kCtx,
 		lCtx:    lCtx,
 		name:    name,
-		dict:    map[*module_name.AModuleName]mKs.IKernelModule{},
+		dict:    map[*module_name.AModuleName]kspec.IKernelModule{},
 		isWork:  mL1.NewSafeBool(false),
 		isEnd:   mL1.NewSafeBool(false),
 		isLocal: ebool.NewEBool(isLocal),
@@ -59,17 +61,17 @@ func GetMonolit(name string) *kMonolit {
 	sf.kCtx.Set("monolitName", name, "name of monolit")
 	sf.kCtx.Set("monolit", sf, "monolit-app")
 	mon = sf
-	_ = mKs.IKernelMonolit(sf)
+	_ = kspec.IKernelMonolit(sf)
 	return sf
 }
 
 // Ctx -- возвращает контекст монолита.
-func (sf *kMonolit) Ctx() mKs.ILocalCtx {
+func (sf *kMonolit) Ctx() comp_spec.ILocalCtx {
 	return sf.lCtx
 }
 
 // Log -- возвращает лог монолита.
-func (sf *kMonolit) Log() mKs.ILogBuf {
+func (sf *kMonolit) Log() comp_spec.ILogBuf {
 	return sf.lCtx.Log()
 }
 
@@ -79,7 +81,7 @@ func (sf *kMonolit) Name() string {
 }
 
 // Add -- добавляет модуль в монолит.
-func (sf *kMonolit) Add(module mKs.IKernelModule) {
+func (sf *kMonolit) Add(module kspec.IKernelModule) {
 	sf.kCtx.RLock()
 	defer sf.kCtx.RUnlock()
 	mL0.Hassert(module != nil, "kMonolit.Add(): module==nil")
@@ -114,12 +116,12 @@ func (sf *kMonolit) Run() {
 }
 
 // IsLocal -- возвращает признак локальной шины.
-func (sf *kMonolit) IsLocal() kspec.EBool {
+func (sf *kMonolit) IsLocal() core_spec.EBool {
 	return sf.isLocal
 }
 
 // IsWork -- возвращает признак работы монолита.
-func (sf *kMonolit) IsWork() kspec.EBool {
+func (sf *kMonolit) IsWork() core_spec.EBool {
 	res := sf.isWork.Get()
 	return ebool.NewEBool(res)
 }

+ 4 - 4
v4/lev2/kmonolit/kmonolit_test.go

@@ -7,10 +7,10 @@ import (
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/module_name"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"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/kspec"
 )
 
 const (
@@ -21,7 +21,7 @@ const (
 type tester struct {
 	t   *testing.T
 	me  *mock_env.MockEnv
-	mon mKs.IKernelMonolit
+	mon kspec.IKernelMonolit
 }
 
 func TestKernMono(t *testing.T) {
@@ -61,10 +61,10 @@ func (sf *tester) add() {
 }
 
 type mod struct {
-	mKs.IKernelModule
+	kspec.IKernelModule
 }
 
-func newMod(name *module_name.AModuleName) mKs.IKernelModule {
+func newMod(name *module_name.AModuleName) kspec.IKernelModule {
 	sf := &mod{
 		IKernelModule: kmodule.NewKernelModule(name),
 	}

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

@@ -15,10 +15,10 @@ import (
 	"github.com/gofiber/fiber/v3/middleware/compress"
 	"github.com/gofiber/fiber/v3/middleware/static"
 
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"

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

@@ -4,8 +4,8 @@ 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/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 )

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

@@ -8,7 +8,7 @@ import (
 	"time"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	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/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"

+ 6 - 2
v4/lev0/kspec/ikernel_ctx.go → v4/lev2/kspec/ikernel_ctx.go

@@ -1,11 +1,15 @@
 // package kernel_types -- интерфейсы проекта
 package kspec
 
-import "context"
+import (
+	"context"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+)
 
 // IKernelCtx -- интерфейс к контексту ядра.
 type IKernelCtx interface {
-	ILocalCtx
+	comp_spec.ILocalCtx
 	// CtxBg -- возвращает неотменяемый контекст ядра
 	CtxBg() context.Context
 	// Wg -- возвращает ожидатель потоков

+ 5 - 1
v4/lev0/kspec/ikernel_keeper.go → v4/lev2/kspec/ikernel_keeper.go

@@ -1,7 +1,11 @@
 package kspec
 
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+)
+
 // IKernelKeeper -- сторож ядра.
 type IKernelKeeper interface {
 	// Log -- возвращает лог сторожа
-	Log() ILogBuf
+	Log() comp_spec.ILogBuf
 }

+ 0 - 0
v4/lev0/kspec/ikernel_module.go → v4/lev2/kspec/ikernel_module.go


+ 9 - 4
v4/lev0/kspec/ikernel_monolit.go → v4/lev2/kspec/ikernel_monolit.go

@@ -1,13 +1,18 @@
 package kspec
 
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+)
+
 // IKernelMonolit -- интерфейс к монолиту на основе ядра.
 type IKernelMonolit interface {
 	// Name -- возвращает имя монолита
 	Name() string
 	// IsLocal -- возвращает признак локальной шины
-	IsLocal() EBool
+	IsLocal() core_spec.EBool
 	// IsWork -- возвращает признак работы монолита
-	IsWork() EBool
+	IsWork() core_spec.EBool
 	// Run -- запускает монолит в работу
 	Run()
 	// Wait -- ожидание окончания работы
@@ -15,7 +20,7 @@ type IKernelMonolit interface {
 	// Add -- добавляет модуль в монолит
 	Add(IKernelModule)
 	// Log -- возвращает лог монолита
-	Log() ILogBuf
+	Log() comp_spec.ILogBuf
 	// Ctx -- возвращает контекст монолита
-	Ctx() ILocalCtx
+	Ctx() comp_spec.ILocalCtx
 }

+ 0 - 0
v4/lev0/kspec/ikernel_server_http.go → v4/lev2/kspec/ikernel_server_http.go


+ 10 - 5
v4/lev0/kspec/ikernel_store_kv.go → v4/lev2/kspec/ikernel_store_kv.go

@@ -1,15 +1,20 @@
 package kspec
 
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+)
+
 // IKernelStoreKv -- интерфейс к локальному быстрому key-value хранилищу ядра.
 type IKernelStoreKv interface {
 	// Get -- возвращает значение по ключу
-	Get(key string) IResult[[]byte]
+	Get(key string) core_spec.IResult[[]byte]
 	// ByPrefix -- возвращает список ключей по префиксу
-	ByPrefix(prefix string) IResult[[]string]
+	ByPrefix(prefix string) core_spec.IResult[[]string]
 	// Set -- устанавливает значение по ключу
-	Set(key string, val []byte) IResult[EBool]
+	Set(key string, val []byte) core_spec.IResult[core_spec.EBool]
 	// Delete -- удаляет значение по ключу
-	Delete(key string) IResult[EBool]
+	Delete(key string) core_spec.IResult[core_spec.EBool]
 	// Log -- возвращает локальный лог
-	Log() ILogBuf
+	Log() comp_spec.ILogBuf
 }

+ 4 - 2
v4/lev0/kspec/ikernel_wg.go → v4/lev2/kspec/ikernel_wg.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/stream_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 )
 
 // IKernelWg -- интерфейс к именованному ожидателю потоков.
@@ -13,11 +15,11 @@ type IKernelWg interface {
 	// Wait -- ожидает завершения работы всех потоков
 	Wait()
 	// IsWork -- признак работы ожидателя потоков (после закрытия добавлять нельзя)
-	IsWork() EBool
+	IsWork() core_spec.EBool
 	// List -- возвращает список имён потоков на ожидании
 	List() []*stream_name.AStreamName
 	// Len -- возвращает размер списка потоков ожидания
 	Len() int
 	// Log -- возвращает логгер ожидателя групп
-	Log() ILogBuf
+	Log() comp_spec.ILogBuf
 }

+ 7 - 5
v4/lev2/kwg/kwg.go

@@ -8,14 +8,16 @@ import (
 	"sync"
 
 	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/defs/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	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/kspec"
 )
 
 // kernelWg -- именованный ожидатель потоков ядра.
@@ -24,7 +26,7 @@ type kernelWg struct {
 	ctx        context.Context
 	dictStream map[*stream_name.AStreamName]bool // Словарь имён потоков с признаком работы
 	isWork     mKs.ISafeBool
-	log        mKs.ILogBuf
+	log        comp_spec.ILogBuf
 }
 
 var (
@@ -33,7 +35,7 @@ var (
 )
 
 // GetKernelWg -- возвращает новый именованный ожидатель потоков ядра.
-func GetKernelWg(ctx context.Context) mKs.IKernelWg {
+func GetKernelWg(ctx context.Context) kspec.IKernelWg {
 	block.Lock()
 	defer block.Unlock()
 	if kernWg != nil {
@@ -71,7 +73,7 @@ func (sf *kernelWg) Len() int {
 }
 
 // IsWork -- возвращает признак работы ядра.
-func (sf *kernelWg) IsWork() kspec.EBool {
+func (sf *kernelWg) IsWork() core_spec.EBool {
 	res := sf.isWork.Get()
 	return ebool.NewEBool(res)
 }

+ 2 - 2
v4/lev2/kwg/kwg_test.go

@@ -6,14 +6,14 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 type tester struct {
 	t        *testing.T
 	ctx      context.Context
 	fnCancel func()
-	wg       IKernelWg
+	wg       kspec.IKernelWg
 }
 
 func TestKernelWG(t *testing.T) {

+ 6 - 5
v4/lev2/log_topic/log_topic.go

@@ -5,18 +5,19 @@ import (
 	"fmt"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
 
 // LogTopic -- элемент лога шины.
 type LogTopic struct {
-	topic  *topic.ATopic  // Топик, куда публиковать лог
-	client mKs.IBusClient // С помощью чего публиковать лог
+	topic  topic.ITopicFix  // Топик, куда публиковать лог
+	client bus_spec.IBusClient // С помощью чего публиковать лог
 }
 
 // NewLogTopic -- возвращает новый элемент лога.
-func NewLogTopic(topic *topic.ATopic, client mKs.IBusClient) mL0.IResult[*LogTopic] {
+func NewLogTopic(topic topic.ITopicFix, client bus_spec.IBusClient) mL0.IResult[*LogTopic] {
 	mL0.Hassert(topic != nil, "NewLogTopic(): topic==nil")
 	if client == nil {
 		err := fmt.Errorf("NewLogTopic(): IBusClient==nil")

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

@@ -5,6 +5,7 @@ import (
 
 	"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"
 )
 
@@ -26,7 +27,7 @@ func (sf *tester) new() {
 }
 
 var (
-	qTopicTest = defs.NewTopic("test_topic")
+	qTopicTest = bus_ent.ATopic("test_topic")
 )
 
 // Правильное создание топика.

+ 14 - 12
v4/lev2/lsi/kstore_kv/kstore_kv.go

@@ -10,15 +10,17 @@ import (
 	"github.com/dgraph-io/badger/v4"
 
 	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/defs/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	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"
 )
 
 var (
@@ -28,10 +30,10 @@ var (
 // kStoreKv -- локальное хранилище ядра.
 type kStoreKv struct {
 	sync.RWMutex
-	kCtx      mKs.IKernelCtx
-	lCtx      mKs.ILocalCtx
-	log       mKs.ILogBuf
-	wg        mKs.IKernelWg
+	kCtx      kspec.IKernelCtx
+	lCtx      comp_spec.ILocalCtx
+	log       comp_spec.ILogBuf
+	wg        kspec.IKernelWg
 	storePath string
 	db        *badger.DB
 	isWork    mKs.ISafeBool
@@ -43,7 +45,7 @@ var (
 )
 
 // GetKernelStore -- возвращает новое локальное хранилище ядра.
-func GetKernelStore() mKs.IKernelStoreKv {
+func GetKernelStore() kspec.IKernelStoreKv {
 	block.Lock()
 	defer block.Unlock()
 	if kernStore != nil {
@@ -70,12 +72,12 @@ func GetKernelStore() mKs.IKernelStoreKv {
 }
 
 // Log -- возвращает локальный лог.
-func (sf *kStoreKv) Log() mKs.ILogBuf {
+func (sf *kStoreKv) Log() comp_spec.ILogBuf {
 	return sf.log
 }
 
 // Set -- устанавливает значение по ключу.
-func (sf *kStoreKv) Set(key string, val []byte) mL0.IResult[kspec.EBool] {
+func (sf *kStoreKv) Set(key string, val []byte) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("Set(): key='%v'", key)
@@ -87,7 +89,7 @@ func (sf *kStoreKv) Set(key string, val []byte) mL0.IResult[kspec.EBool] {
 	if err != nil {
 		err := fmt.Errorf("Set(): key=%v, err=\n\t%w", key, err)
 		sf.log.Err(err.Error())
-		return mL0.NewErr[kspec.EBool](err)
+		return mL0.NewErr[core_spec.EBool](err)
 	}
 	return mL0.NewOk(ebool.NewEBool(true))
 }
@@ -149,7 +151,7 @@ func (sf *kStoreKv) ByPrefix(prefix string) mL0.IResult[[]string] {
 }
 
 // Delete -- удалить ключ из хранилища.
-func (sf *kStoreKv) Delete(key string) mL0.IResult[kspec.EBool] {
+func (sf *kStoreKv) Delete(key string) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("Delete(): key='%v'", key)
@@ -161,7 +163,7 @@ func (sf *kStoreKv) Delete(key string) mL0.IResult[kspec.EBool] {
 	if err != nil {
 		err := fmt.Errorf("Delete(): key=%v, err=\n\t%w", key, err)
 		sf.log.Err(err.Error())
-		return mL0.NewErr[kspec.EBool](err)
+		return mL0.NewErr[core_spec.EBool](err)
 	}
 	return mL0.NewOk(ebool.NewEBool(true))
 }

+ 3 - 3
v4/lev2/lsi/kstore_kv/kstore_kv_test.go

@@ -6,16 +6,16 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"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"
 )
 
 type tester struct {
 	t   *testing.T
 	me  *mock_env.MockEnv
-	ctx IKernelCtx
-	wg  IKernelWg
+	ctx kspec.IKernelCtx
+	wg  kspec.IKernelWg
 }
 
 func TestKernelStore(t *testing.T) {

+ 4 - 4
v4/lev2/lsi/kstore_kv_std/kv_bucket_base/dict_rec/dict_rec.go

@@ -6,10 +6,10 @@ import (
 	"sync"
 
 	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/defs/store_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/etypes/ebool"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // DictRec -- потокобезопасный словарь KV-бакета.
@@ -39,9 +39,9 @@ func (sf *DictRec) Get(key *store_key.AStoreKey) mL0.IOption[mKs.IRecKv] {
 }
 
 // Set -- установка значения по ключу.
-func (sf *DictRec) Set(rec mKs.IRecKv) mL0.IResult[kspec.EBool] {
+func (sf *DictRec) Set(rec mKs.IRecKv) mL0.IResult[core_spec.EBool] {
 	if rec == nil {
-		return mL0.NewErr[kspec.EBool](fmt.Errorf("DictRec.Set(): rec is nil"))
+		return mL0.NewErr[core_spec.EBool](fmt.Errorf("DictRec.Set(): rec is nil"))
 	}
 	sf.block.Lock()
 	defer sf.block.Unlock()

+ 1 - 1
v4/lev2/lsi/kstore_kv_std/kv_bucket_base/dict_rec/dict_rec_test.go

@@ -3,8 +3,8 @@ package dict_rec
 import (
 	"testing"
 
+	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
-	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/kstore_kv_std/rec_kv"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/kstore_kv_std/rec_meta"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/kstore_kv_std/rec_val"

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

@@ -3,8 +3,8 @@ package kv_bucket_base
 
 import (
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 
@@ -25,10 +25,10 @@ type KvBucketBase struct {
 	Number_    int                                  `json:"num"`        // Номер бакета
 	Size_      int64                                `json:"size"`       // Размер бакета
 	SizeLimit_ int64                                `json:"size_limit"` // Лимит размера бакета
-	CreatedAt_ kspec.ITime                          `json:"created_at"` // Время создания бакета
-	UpdatedAt_ kspec.ITimeMut                       `json:"updated_at"` // Время обновления бакета
+	CreatedAt_ core_spec.ITime                          `json:"created_at"` // Время создания бакета
+	UpdatedAt_ core_spec.ITimeMut                       `json:"updated_at"` // Время обновления бакета
 	Vers_      int                                  `json:"vers"`       // Версия бакета
-	dictRec    map[store_key.AStoreKey]kspec.IRecKv // Словарь для хранения данных
+	dictRec    map[store_key.AStoreKey]core_spec.IRecKv // Словарь для хранения данных
 }
 
 // NewKvBucketBase -- создание нового базового бакета хранилища KV.
@@ -40,7 +40,7 @@ func NewKvBucketBase(name string, level int, number int) *KvBucketBase {
 		Name_:      name,
 		Level_:     level,
 		Number_:    number,
-		dictRec:    map[store_key.AStoreKey]kspec.IRecKv{},
+		dictRec:    map[store_key.AStoreKey]core_spec.IRecKv{},
 		CreatedAt_: etime.NewETimeAuto(),
 		UpdatedAt_: etime.NewETimeAutoMut(),
 	}

+ 7 - 7
v4/lev2/lsi/kstore_kv_std/rec_kv/rec_kv.go

@@ -2,8 +2,8 @@
 package rec_kv
 
 import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 var (
@@ -12,28 +12,28 @@ var (
 
 // RecKv -- запись KV-хранилища.
 type RecKv struct {
-	meta kspec.IRecMeta // Метаданные записи
-	val  kspec.IRecVal  // Значение записи
+	meta core_spec.IRecMeta // Метаданные записи
+	val  core_spec.IRecVal  // Значение записи
 }
 
 // NewRecKv -- создает новую запись.
-func NewRecKv(meta kspec.IRecMeta, val kspec.IRecVal) *RecKv {
+func NewRecKv(meta core_spec.IRecMeta, val core_spec.IRecVal) *RecKv {
 	hassert(meta != nil, "NewRecKv(): meta==nil")
 	hassert(val != nil, "NewRecKv(): val==nil")
 	sf := &RecKv{
 		meta: meta,
 		val:  val,
 	}
-	_ = kspec.IRecKv(sf)
+	_ = core_spec.IRecKv(sf)
 	return sf
 }
 
 // Meta -- метаданные записи.
-func (sf *RecKv) Meta() kspec.IRecMeta {
+func (sf *RecKv) Meta() core_spec.IRecMeta {
 	return sf.meta
 }
 
 // Val -- значение записи.
-func (sf *RecKv) Val() kspec.IRecVal {
+func (sf *RecKv) Val() core_spec.IRecVal {
 	return sf.val
 }

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

@@ -2,9 +2,9 @@
 package rec_meta
 
 import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 
@@ -22,8 +22,8 @@ type RecMeta struct {
 	Key_       *store_key.AStoreKey `json:"key"`       // Ключ
 	Vers_      int64                `json:"vers"`      // Версия записи
 	Operation_ string               `json:"operation"` // Тип операции над записью
-	createdAt_ kspec.ITime          `voc:"created_at"` // Дата создания записи
-	updateAt_  kspec.ITimeMut       `voc:"update_at"`  // Дата последнего обновления
+	createdAt_ core_spec.ITime          `voc:"created_at"` // Дата создания записи
+	updateAt_  core_spec.ITimeMut       `voc:"update_at"`  // Дата последнего обновления
 
 	// Хеш мета-информации записи (вместе с значением, но без этого поля разумеется)
 	Sha_    string `json:"sha"`
@@ -40,7 +40,7 @@ func NewRecMeta(key *store_key.AStoreKey) *RecMeta {
 		createdAt_: etime.NewETimeAuto(),
 		updateAt_:  etime.NewETimeAutoMut(),
 	}
-	_ = kspec.IRecMeta(sf)
+	_ = core_spec.IRecMeta(sf)
 	return sf
 }
 
@@ -68,13 +68,13 @@ func (sf *RecMeta) Operation() string {
 // CreatedAt -- дата создания записи.
 //
 //go:fix inline
-func (sf *RecMeta) CreatedAt() kspec.ITime {
+func (sf *RecMeta) CreatedAt() core_spec.ITime {
 	return sf.createdAt_
 }
 
 // UpdateAt -- дата последнего обновления.
 //
 //go:fix inline
-func (sf *RecMeta) UpdateAt() kspec.ITimeMut {
+func (sf *RecMeta) UpdateAt() core_spec.ITimeMut {
 	return sf.updateAt_
 }

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

@@ -2,9 +2,9 @@
 package rec_val
 
 import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 var (
@@ -31,7 +31,7 @@ func NewRecVal(key *store_key.AStoreKey, val []byte) *RecVal {
 		Key_: key,
 		Val_: val,
 	}
-	_ = kspec.IRecVal(sf)
+	_ = core_spec.IRecVal(sf)
 	return sf
 }
 

+ 43 - 0
v4/lev2/lti/bus_ent/bus_ent.go

@@ -0,0 +1,43 @@
+// package bus_ent -- сущности шины данных
+package bus_ent
+
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/handler_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
+)
+
+// ATopic -- имя топика.
+type ATopic = topic.ATopic
+
+// ITopicFix -- неизменяемое имя топика в шине.
+type ITopicFix = topic.ITopicFix
+
+// ITopicMut -- изменяемое имя топика в шине.
+type ITopicMut = topic.ITopicMut
+
+// NewTopicFix -- создать новое имя топика.
+//
+//go:fix inline
+func NewTopicFix(name topic.ATopic) ITopicFix {
+	return topic.NewTopic(name)
+}
+
+// NewTopicMut -- создать новое изменяемое имя топика.
+//
+//go:fix inline
+func NewTopicMut(name topic.ATopic) ITopicMut {
+	return topic.NewTopic(name)
+}
+
+// AHandlerName -- имя функции обработчика.
+type AHandlerName = handler_name.AHandlerName
+
+// IHandlerNameFix -- неизменяемое имя функции обработчика.
+type IHandlerNameFix = handler_name.IHandlerNameFix
+
+// NewHandlerNameFix -- создать новое неизменяемое имя функции обработчика.
+//
+//go:fix inline
+func NewHandlerNameFix(name AHandlerName) IHandlerNameFix {
+	return handler_name.NewHandlerName(name)
+}

+ 0 - 0
v4/lev0/defs/handler_name/README.md → v4/lev2/lti/bus_ent/handler_name/README.md


+ 44 - 0
v4/lev2/lti/bus_ent/handler_name/handler_name.go

@@ -0,0 +1,44 @@
+// package handler_name -- имя функции обработчика
+package handler_name
+
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+)
+
+// AHandlerName -- имя функции обработчика.
+type AHandlerName string
+
+// IHandlerNameFix -- неизменяемое имя функции обработчика.
+type IHandlerNameFix interface {
+	// String -- строковое представление имени функции обработчика.
+	String() string
+	// Get -- возвращает имя функции обработчика.
+	Get() AHandlerName
+}
+
+// HandlerName -- имя функции обработчика.
+type HandlerName struct {
+	val AHandlerName
+}
+
+// NewHandlerName -- создать новое имя функции обработчика.
+func NewHandlerName(val AHandlerName) *HandlerName {
+	helpers.Assert(val != "", "NewAHandlerName: val is empty")
+	sf := &HandlerName{
+		val: val,
+	}
+	_ = IHandlerNameFix(sf)
+	return sf
+}
+
+// String -- строковое представление.
+//
+//go:fix inline
+func (sf *HandlerName) String() string {
+	return string(sf.val)
+}
+
+// Get -- получить значение.
+func (sf *HandlerName) Get() AHandlerName {
+	return sf.val
+}

+ 5 - 5
v4/lev0/defs/handler_name/handler_name_test.go → v4/lev2/lti/bus_ent/handler_name/handler_name_test.go

@@ -17,14 +17,14 @@ func TestNewAHandlerName_ok(t *testing.T) {
 		t.Run(tc, func(t *testing.T) {
 			t.Parallel()
 
-			hn := NewAHandlerName(tc)
+			hn := NewHandlerName(AHandlerName(tc))
 			if hn == nil {
 				t.Fatalf("NewAHandlerName(): nil")
 			}
-			if got := hn.val.Get(); got != tc {
-				t.Fatalf("Get(): got=%q want=%q", got, tc)
+			if hn.String() != tc {
+				t.Fatalf("Get(): got=%q want=%q", hn.Get(), tc)
 			}
-			if got := hn.val.Get(); got != tc {
+			if got := hn.Get(); string(got) != tc {
 				t.Fatalf("String(): got=%q want=%q", got, tc)
 			}
 		})
@@ -40,5 +40,5 @@ func TestNewAHandlerName_empty_panics(t *testing.T) {
 		}
 	}()
 
-	_ = NewAHandlerName("")
+	_ = NewHandlerName("")
 }

+ 0 - 0
v4/lev0/defs/topic/README.md → v4/lev2/lti/bus_ent/topic/README.md


+ 60 - 0
v4/lev2/lti/bus_ent/topic/topic.go

@@ -0,0 +1,60 @@
+package topic
+
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+)
+
+// ATopic -- имя топика в шине
+type ATopic string
+
+// ITopicFix -- неизменяемое имя топика в шине
+type ITopicFix interface {
+	// Get -- возвращает имя топика
+	Get() ATopic
+	// String -- строковое представление топика
+	String() string
+}
+
+// ITopicMut -- изменяемое имя топика в шине
+type ITopicMut interface {
+	ITopicFix
+	// Set -- устанавливает имя топика
+	Set(val ATopic)
+}
+
+// Topic -- имя топика в шине.
+type Topic struct {
+	val ATopic
+}
+
+// NewTopic -- создает новый топик.
+func NewTopic(val ATopic) *Topic {
+	helpers.Hassert(val != "", "NewTopic(): val is empty")
+	sf := &Topic{
+		val: val,
+	}
+	_ = ITopicMut(sf)
+	return sf
+}
+
+// String -- строковое представление топика.
+//
+//go:fix inline
+func (sf *Topic) String() string {
+	return string(sf.val)
+}
+
+// Get -- получить строковое представление топика.
+//
+//go:fix inline
+func (sf *Topic) Get() ATopic {
+	return sf.val
+}
+
+// Set -- установить строковое представление топика.
+//
+//go:fix inline
+func (sf *Topic) Set(val ATopic) {
+	helpers.Hassert(val != "", "Topic.Set(): val is empty")
+	sf.val = val
+}

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác