Sfoglia il codice sorgente

SVI Исправления, вендоринг

SVI 4 giorni fa
parent
commit
fd13e03090
100 ha cambiato i file con 614 aggiunte e 491 eliminazioni
  1. 2 2
      v4/Taskfile.yml
  2. 1 1
      v4/go.mod
  3. 20 22
      v4/kern.go
  4. 10 5
      v4/kern_test.go
  5. 7 11
      v4/lev0/defs/defs.go
  6. 0 2
      v4/lev0/defs/handler_name/handler_name.go
  7. 2 2
      v4/lev0/defs/handler_name/handler_name_test.go
  8. 0 2
      v4/lev0/defs/module_name/module_name.go
  9. 2 2
      v4/lev0/defs/module_name/module_name_test.go
  10. 0 2
      v4/lev0/defs/store_key/store_key.go
  11. 2 2
      v4/lev0/defs/store_key/store_key_test.go
  12. 0 2
      v4/lev0/defs/stream_name/stream_name.go
  13. 0 2
      v4/lev0/defs/topic/topic.go
  14. 56 0
      v4/lev0/etypes/ebool/ebool.go
  15. 4 4
      v4/lev0/etypes/estr/estr.go
  16. 2 2
      v4/lev0/etypes/etypes.go
  17. 17 0
      v4/lev0/kspec/ebool.go
  18. 4 4
      v4/lev0/kspec/idict_kv.go
  19. 12 11
      v4/lev0/kspec/ikernel_bus.go
  20. 3 3
      v4/lev0/kspec/ikernel_module.go
  21. 2 2
      v4/lev0/kspec/ikernel_monolit.go
  22. 1 1
      v4/lev0/kspec/ikernel_server_http.go
  23. 2 2
      v4/lev0/kspec/ikernel_store_kv.go
  24. 5 5
      v4/lev0/kspec/ikernel_wg.go
  25. 2 2
      v4/lev0/kspec/ilog_buf.go
  26. 2 2
      v4/lev0/kspec/irec_meta.go
  27. 2 2
      v4/lev0/kspec/irec_val.go
  28. 3 3
      v4/lev0/kspec/isafe_bool.go
  29. 1 1
      v4/lev0/kspec/isafe_bool_react.go
  30. 1 1
      v4/lev0/kspec/spec.go
  31. 5 5
      v4/lev0/lev0.go
  32. 1 1
      v4/lev0/option/option.go
  33. 5 5
      v4/lev0/quark/quark.go
  34. 1 3
      v4/lev0/quark/quark_base/quark_base.go
  35. 3 2
      v4/lev0/quark/quark_bool/quark_bool_test.go
  36. 2 3
      v4/lev0/quark/quark_byte/quark_byte.go
  37. 10 3
      v4/lev0/quark/quark_byte/quark_byte_test.go
  38. 0 2
      v4/lev0/quark/quark_float/quark_float.go
  39. 10 1
      v4/lev0/quark/quark_float/quark_float_test.go
  40. 11 2
      v4/lev0/quark/quark_int/quark_int_test.go
  41. 3 1
      v4/lev0/quark/quark_str/quark_str_test.go
  42. 0 2
      v4/lev0/quark/quark_val/quark_val.go
  43. 1 1
      v4/lev0/result/result.go
  44. 2 2
      v4/lev0/result/result_test.go
  45. 11 11
      v4/lev0/voc/vmask/vmask.go
  46. 3 3
      v4/lev1/ctx_value/ctx_value.go
  47. 2 2
      v4/lev1/kbus_msg/msg_pub/msg_pub.go
  48. 2 2
      v4/lev1/kbus_msg/msg_serve/msg_serve.go
  49. 6 5
      v4/lev1/kbus_msg/msg_sub/msg_sub.go
  50. 3 3
      v4/lev1/kbus_msg/msg_unsub/msg_unsub.go
  51. 3 3
      v4/lev1/kint/kint.go
  52. 6 16
      v4/lev1/lev1.go
  53. 6 19
      v4/lev1/lev1_test.go
  54. 10 6
      v4/lev1/local_ctx/local_ctx.go
  55. 33 40
      v4/lev1/log_buf/log_buf.go
  56. 6 1
      v4/lev1/log_buf/log_buf_test.go
  57. 4 4
      v4/lev1/log_dict_topic/log_dict_topic.go
  58. 3 2
      v4/lev1/log_msg/log_msg.go
  59. 6 6
      v4/lev1/mock_env/mock_env.go
  60. 15 11
      v4/lev1/safe_bool/safe_bool.go
  61. 1 1
      v4/lev1/safe_bool/safe_bool_test.go
  62. 17 15
      v4/lev1/safe_bool_react/safe_bool_react.go
  63. 8 7
      v4/lev1/safe_bool_react/safe_bool_react_test.go
  64. 2 2
      v4/lev1/safe_int/safe_int.go
  65. 2 2
      v4/lev1/safe_string/safe_string.go
  66. 3 3
      v4/lev2/kbus/dict_sub_hook/dict_sub_hook.go
  67. 12 8
      v4/lev2/kbus/dict_topic_serve/dict_topic_serve.go
  68. 5 5
      v4/lev2/kbus/dict_topic_sub/dict_topic_sub.go
  69. 18 15
      v4/lev2/kbus_base/kbus_base.go
  70. 2 2
      v4/lev2/kbus_base/kbus_base_test.go
  71. 15 9
      v4/lev2/kbus_http/client_bus_http/client_bus_http.go
  72. 3 1
      v4/lev2/kbus_http/client_bus_http/client_bus_http_test.go
  73. 16 12
      v4/lev2/kbus_http/kbus_http_test.go
  74. 2 2
      v4/lev2/kernel_keeper/kernel_keeper.go
  75. 4 3
      v4/lev2/kmodule/kmodule.go
  76. 3 3
      v4/lev2/kmodule/mod_stat/mod_stat.go
  77. 11 8
      v4/lev2/kmonolit/kmonolit.go
  78. 2 1
      v4/lev2/kmonolit/kmonolit_test.go
  79. 9 7
      v4/lev2/kserv_http/kserv_http.go
  80. 2 2
      v4/lev2/kserv_http_std/kserv_http_std.go
  81. 19 11
      v4/lev2/kstore_kv/kstore_kv.go
  82. 2 2
      v4/lev2/kstore_kv/kstore_kv_test.go
  83. 11 9
      v4/lev2/kstore_kv_std/kv_bucket_base/dict_rec/dict_rec.go
  84. 3 3
      v4/lev2/kstore_kv_std/kv_bucket_base/dict_rec/dict_rec_test.go
  85. 14 14
      v4/lev2/kstore_kv_std/kv_bucket_base/kv_bucket_base.go
  86. 3 3
      v4/lev2/kstore_kv_std/rec_kv/rec_kv_test.go
  87. 11 11
      v4/lev2/kstore_kv_std/rec_meta/rec_meta.go
  88. 7 7
      v4/lev2/kstore_kv_std/rec_meta/rec_meta_test.go
  89. 5 5
      v4/lev2/kstore_kv_std/rec_val/rec_val.go
  90. 2 2
      v4/lev2/kstore_kv_std/rec_val/rec_val_test.go
  91. 19 10
      v4/lev2/kwg/kwg.go
  92. 4 4
      v4/lev2/kwg/kwg_test.go
  93. 6 6
      v4/lev2/log_topic/log_topic.go
  94. 11 9
      v4/lev2/mock_hand_serve/mock_hand_serve.go
  95. 10 8
      v4/lev2/mock_hand_sub_http/mock_hand_sub_http.go
  96. 8 6
      v4/lev2/mock_hand_sub_local/mock_hand_sub.go
  97. 1 1
      v4/lev2/wui/wui_button/wui_button_test.go
  98. 1 1
      v4/lev2/wui/wui_label/wui_label.go
  99. 1 1
      v4/lev2/wui/wui_test.go
  100. 1 1
      v4/lev3/mod_kctx/mod_kctx.go

+ 2 - 2
v4/Taskfile.yml

@@ -25,7 +25,7 @@ tasks:
     cmds:
       - clear
       - go fmt ./...
-      - go mod tidy -compat=1.24.2
+      - go mod tidy -compat=1.26.3
       - go mod vendor
       - go fmt ./...
   test:
@@ -47,7 +47,7 @@ tasks:
       # - go install github.com/MakeNowJust/enumcase/cmd/enumcase@latest
       # - enumcase ./...
       # - go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
-      # - go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2
+      - go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2
       - golangci-lint run ./...
       # - go install github.com/fzipp/gocyclo/cmd/gocyclo@latest
       # - gocyclo -over 11 .

+ 1 - 1
v4/go.mod

@@ -1,6 +1,6 @@
 module gitp78su.ipnodns.ru/svi/kern/v4
 
-go 1.25.0
+go 1.26.3
 
 require (
 	github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b

+ 20 - 22
v4/kern.go

@@ -5,7 +5,7 @@ import (
 	"context"
 
 	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"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kbus_http"
@@ -34,9 +34,9 @@ func NewErr[T any](err error) mL0.IResult[T] {
 	return mL0.NewErr[T](err)
 }
 
-// NewRes -- возвращает успешный Result с значением.
-func NewRes[T any](res T) mL0.IResult[T] {
-	return mL0.NewRes(res)
+// NewOk -- возвращает успешный Result с значением.
+func NewOk[T any](res T) mL0.IResult[T] {
+	return mL0.NewOk(res)
 }
 
 // WrapErr -- оборачивает существующий Result с ошибкой с новой ошибкой.
@@ -56,9 +56,11 @@ func GetKernelServerHttp() mKs.IKernelServerHttp {
 	return kernServHttp
 }
 
+type ISafeBool = mKs.ISafeBool
+
 // NewSafeBool -- возвращает новый потокобезопасный булевый признак.
-func NewSafeBool() mKs.ISafeBool {
-	sb := mL1.NewSafeBool()
+func NewSafeBool(val bool) ISafeBool {
+	sb := mL1.NewSafeBool(val)
 	return sb
 }
 
@@ -114,7 +116,7 @@ func GetMonolitHttp(name string) mKs.IKernelMonolit {
 }
 
 // NewKernelModule -- возвращает новый модуль на ядре.
-func NewKernelModule(name *mKd.ModuleName) mKs.IKernelModule {
+func NewKernelModule(name *module_name.AModuleName) mKs.IKernelModule {
 	resMod := kmodule.NewKernelModule(name)
 	return resMod
 }
@@ -155,9 +157,15 @@ func GetModuleWui() mKs.IKernelModule {
 	return modWui
 }
 
+// ILogBuf -- буферизованный лог
+type ILogBuf = mKs.ILogBuf
+
+// LogBufParam -- параметры для создания нового буферизованного лога.
+type LogBufParam = mL1.LogBufParam
+
 // NewLogBuf -- возвращает новый буферизованный лог.
-func NewLogBuf(opts ...mL1.OptionLogBuf) mKs.ILogBuf {
-	log := mL1.NewLogBuf(opts...)
+func NewLogBuf(param *LogBufParam) ILogBuf {
+	log := mL1.NewLogBuf(param)
 	return log
 }
 
@@ -191,19 +199,9 @@ func NewSafeString() mKs.ISafeString {
 	return str
 }
 
-// MakeOk -- возвращает новый положительный результат операции.
-func MakeOk[T any](res T) mL0.IResult[T] {
-	return NewRes(res)
-}
-
-// MakeErr -- возвращает новую ошибку результат операции.
-func MakeErr[T any](err error) mL0.IResult[T] {
-	return NewErr[T](err)
-}
-
-// NewOpt -- возвращает новый не пустой результат операции.
-func NewOpt[T any](some T) mL0.IOption[T] {
-	return mL0.NewOpt(some)
+// NewSome -- возвращает новый не пустой результат операции.
+func NewSome[T any](some T) mL0.IOption[T] {
+	return mL0.NewSome(some)
 }
 
 // NewNone -- возвращает новый пустой результат операции.

+ 10 - 5
v4/kern_test.go

@@ -6,8 +6,10 @@ import (
 	"testing"
 
 	"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"
 )
 
 const (
@@ -49,9 +51,9 @@ func (sf *tester) new() {
 	sf.new2()
 	sf.new3()
 
-	_ = MakeOk("test ok")
-	_ = MakeErr[bool](fmt.Errorf("test err"))
-	_ = NewOpt("test err")
+	_ = NewOk("test ok")
+	_ = NewErr[kspec.EBool](fmt.Errorf("test err"))
+	_ = NewSome("test err")
 	_ = NewNone[int64]()
 
 	valInt := NewInt(28)
@@ -107,7 +109,10 @@ func (sf *tester) new2() {
 		sf.t.Fatalf("new2(): modWui==nil")
 	}
 
-	logBuf := NewLogBuf(log_buf.OptIsTerm(true))
+	param := &log_buf.LogBufParam{
+		IsTerm_: safe_bool.NewSafeBool(true),
+	}
+	logBuf := NewLogBuf(param)
 	if logBuf == nil {
 		sf.t.Fatalf("new2(): ILogBuf==nil")
 	}
@@ -157,7 +162,7 @@ func (sf *tester) new0() {
 	if res.IsErr() {
 		sf.t.Fatalf("new0(): get empty key, store, err=%v", res.Err())
 	}
-	safeBool := NewSafeBool()
+	safeBool := NewSafeBool(true)
 	if safeBool == nil {
 		sf.t.Fatalf("new0(): ISafeBool==nil")
 	}

+ 7 - 11
v4/lev0/defs/defs.go

@@ -17,12 +17,14 @@ type Time string
 type BucketName string
 
 // StreamName -- имя потока для ожидания.
+//
+//go:fix inline
 type StreamName = stream_name.AStreamName
 
 // NewStreamName -- создать новое имя потока.
 //
 //go:fix inline
-func NewStreamName(val string) *StreamName {
+func NewStreamName(val string) *stream_name.AStreamName {
 	return stream_name.NewAStreamName(val)
 }
 
@@ -32,9 +34,7 @@ type Topic = topic.ATopic
 // NewTopic -- создать новое имя топика.
 //
 //go:fix inline
-func NewTopic(val string) *Topic {
-	return topic.NewATopic(val)
-}
+var NewTopic = topic.NewATopic
 
 // HandlerName -- имя функции обработчика.
 type HandlerName = handler_name.AHandlerName
@@ -42,9 +42,7 @@ type HandlerName = handler_name.AHandlerName
 // NewHandlerName -- создать новое имя функции обработчика.
 //
 //go:fix inline
-func NewHandlerName(val string) *HandlerName {
-	return handler_name.NewAHandlerName(val)
-}
+var NewHandlerName = handler_name.NewAHandlerName
 
 // StoreKey -- ключ хранилища.
 type StoreKey = store_key.AStoreKey
@@ -52,7 +50,7 @@ type StoreKey = store_key.AStoreKey
 // NewStoreKey -- создать новый ключ хранилища.
 //
 //go:fix inline
-func NewStoreKey(val string) *StoreKey {
+func NewStoreKey(val string) *store_key.AStoreKey {
 	return store_key.NewAStoreKey(val)
 }
 
@@ -62,6 +60,4 @@ type ModuleName = module_name.AModuleName
 // NewModuleName -- создать новое уникальное имя модуля.
 //
 //go:fix inline
-func NewModuleName(val string) *ModuleName {
-	return module_name.NewAModuleName(val)
-}
+var NewModuleName = module_name.NewAModuleName

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

@@ -27,8 +27,6 @@ func (sf *AHandlerName) String() string {
 }
 
 // Get -- получить значение.
-//
-//go:fix inline
 func (sf *AHandlerName) Get() string {
 	return sf.val.Get()
 }

+ 2 - 2
v4/lev0/defs/handler_name/handler_name_test.go

@@ -21,10 +21,10 @@ func TestNewAHandlerName_ok(t *testing.T) {
 			if hn == nil {
 				t.Fatalf("NewAHandlerName(): nil")
 			}
-			if got := hn.Get(); got != tc {
+			if got := hn.val.Get(); got != tc {
 				t.Fatalf("Get(): got=%q want=%q", got, tc)
 			}
-			if got := hn.String(); got != tc {
+			if got := hn.val.Get(); got != tc {
 				t.Fatalf("String(): got=%q want=%q", got, tc)
 			}
 		})

+ 0 - 2
v4/lev0/defs/module_name/module_name.go

@@ -29,8 +29,6 @@ func (a *AModuleName) String() string {
 }
 
 // Get -- получить строковое представление.
-//
-//go:fix inline
 func (a *AModuleName) Get() string {
 	return a.val.Get()
 }

+ 2 - 2
v4/lev0/defs/module_name/module_name_test.go

@@ -19,10 +19,10 @@ func TestNewAModuleName_ok(t *testing.T) {
 			if mn == nil {
 				t.Fatalf("NewAModuleName(): nil")
 			}
-			if got := mn.Get(); got != tc {
+			if got := mn.val.Get(); got != tc {
 				t.Fatalf("Get(): got=%q want=%q", got, tc)
 			}
-			if got := mn.String(); got != tc {
+			if got := mn.val.Get(); got != tc {
 				t.Fatalf("String(): got=%q want=%q", got, tc)
 			}
 		})

+ 0 - 2
v4/lev0/defs/store_key/store_key.go

@@ -25,8 +25,6 @@ func (a *AStoreKey) String() string {
 }
 
 // Get -- получить значение.
-//
-//go:fix inline
 func (a *AStoreKey) Get() string {
 	return a.val.Get()
 }

+ 2 - 2
v4/lev0/defs/store_key/store_key_test.go

@@ -20,10 +20,10 @@ func TestNewAStoreKey_ok(t *testing.T) {
 			if k == nil {
 				t.Fatalf("NewAStoreKey(): nil")
 			}
-			if got := k.Get(); got != tc {
+			if got := k.val.Get(); got != tc {
 				t.Fatalf("Get(): got=%q want=%q", got, tc)
 			}
-			if got := k.String(); got != tc {
+			if got := k.val.Get(); got != tc {
 				t.Fatalf("String(): got=%q want=%q", got, tc)
 			}
 		})

+ 0 - 2
v4/lev0/defs/stream_name/stream_name.go

@@ -28,8 +28,6 @@ func (sf *AStreamName) String() string {
 }
 
 // Get -- получить значение.
-//
-//go:fix inline
 func (sf *AStreamName) Get() string {
 	return sf.val.Get()
 }

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

@@ -27,8 +27,6 @@ func (sf *ATopic) String() string {
 }
 
 // Get -- получить строковое представление топика.
-//
-//go:fix inline
 func (sf *ATopic) Get() string {
 	return sf.val.Get()
 }

+ 56 - 0
v4/lev0/etypes/ebool/ebool.go

@@ -0,0 +1,56 @@
+// package ebool -- расширенное булево значение
+package ebool
+
+import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+)
+
+// EBool -- расширенное булево.
+type EBool struct {
+	val   bool // Хранимое значение.
+	isMut bool // Признак мутабельности.
+}
+
+// NewEBool -- возвращает новый расширенный бул.
+func NewEBool(val bool) mKs.EBool {
+	sf := &EBool{
+		val: val,
+	}
+	return sf
+}
+
+// NewEBoolMut -- возвращает новый расширенный мутируемый бул.
+func NewEBoolMut(val bool) mKs.EBoolMut {
+	sf := &EBool{
+		val:   val,
+		isMut: true,
+	}
+	return sf
+}
+
+// Get -- возвращает хранимое значение.
+func (sf *EBool) Get() bool {
+	return sf.val
+}
+
+// IsMut -- возвращает признак мутабельности.
+func (sf *EBool) IsMut() bool {
+	return sf.isMut
+}
+
+var (
+	hassert = helpers.Hassert
+)
+
+// Set -- устанавливает новое значение.
+func (sf *EBool) Set() {
+	hassert(sf.isMut, "EBool.Set(): not mutable")
+	sf.val = true
+}
+
+// Reset -- сбрасывает новое значение.
+func (sf *EBool) Reset() {
+	hassert(sf.isMut, "EBool.Reset(): not mutable")
+	sf.val = false
+}

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

@@ -49,8 +49,8 @@ func OptStrMut() FnOptStr {
 	}
 }
 
-// StrNew -- возвращает новую расширенную строку.
-func StrNew(opt ...FnOptStr) mKs.EStr {
+// NewStr -- возвращает новую расширенную строку.
+func NewStr(opt ...FnOptStr) mKs.EStr {
 	sf := &EStr{
 		lenMin: 0,
 		lenMax: 2_000_000_000,
@@ -62,8 +62,8 @@ func StrNew(opt ...FnOptStr) mKs.EStr {
 	return sf
 }
 
-// StrMutNew -- возвращает новую мутабельную расширенную строку.
-func StrMutNew(opt ...FnOptStr) mKs.EStrMut {
+// NewStrMut -- возвращает новую мутабельную расширенную строку.
+func NewStrMut(opt ...FnOptStr) mKs.EStrMut {
 	sf := &EStr{
 		lenMin: 0,
 		lenMax: 2_000_000_000,

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

@@ -37,10 +37,10 @@ func OptStrMut() FnOptStr {
 
 // StrNew -- возвращает новую расширенную строку.
 func StrNew(opt ...FnOptStr) EStr {
-	return estr.StrNew(opt...)
+	return estr.NewStr(opt...)
 }
 
 // StrMutNew -- возвращает новую расширенную строку с признаком мутабельности.
 func StrMutNew(opt ...FnOptStr) EStrMut {
-	return estr.StrMutNew(opt...)
+	return estr.NewStrMut(opt...)
 }

+ 17 - 0
v4/lev0/kspec/ebool.go

@@ -0,0 +1,17 @@
+package kspec
+
+// EBool -- расширенный бул.
+type EBool interface {
+	// Get -- возвращает булево.
+	Get() bool
+	// IsMut -- возвращает признак мутабельности.
+}
+
+// EBoolMut -- мутабельный расширенный бул.
+type EBoolMut interface {
+	EBool
+	// Set -- устанавливает булево.
+	Set()
+	// Reset -- сбрасывает булево.
+	Reset()
+}

+ 4 - 4
v4/lev0/kspec/idict_kv.go

@@ -1,17 +1,17 @@
 package kspec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 )
 
 // IDictRec -- интерфейс потокобезопасного словаря KV-бакета.
 type IDictRec interface {
 	// Get -- возвращает значение по ключу
-	Get(key *defs.StoreKey) IOption[IRecKv]
+	Get(key *store_key.AStoreKey) IOption[IRecKv]
 	// Set -- устанавливает значение по ключу
-	Set(val IRecKv) IResult[bool]
+	Set(val IRecKv) IResult[EBool]
 	// Del -- удаляет значение по ключу
-	Del(key *defs.StoreKey)
+	Del(key *store_key.AStoreKey)
 	// Len -- возвращает количество записей
 	Len() int
 }

+ 12 - 11
v4/lev0/kspec/ikernel_bus.go

@@ -1,15 +1,16 @@
 package kspec
 
 import (
-	mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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() *mKd.Topic
+	Topic() *topic.ATopic
 	// Name -- уникальное имя обработчика
-	Name() *mKd.HandlerName
+	Name() *handler_name.AHandlerName
 }
 
 // IBusHandlerSubscribe -- объект обработчика подписки.
@@ -43,7 +44,7 @@ type IDictTopicSub interface {
 	// Subscribe -- подписывает подписчиков на любой из топиков
 	Subscribe(IBusHandlerSubscribe)
 	// Read -- читает сообщение для всех обработчиков подписки по приходу на любой из топиков
-	Read(topic *mKd.Topic, binMsg []byte)
+	Read(topic *topic.ATopic, binMsg []byte)
 	// Unsubscribe -- отписывает подписчиков от любого из топиков
 	Unsubscribe(IBusHandlerSubscribe)
 }
@@ -54,9 +55,9 @@ type IDictTopicSub interface {
 // Но обработчик вызывается конкурентно.
 type IDictTopicServe interface {
 	// Register -- регистрирует единственный обработчик на единственный топик
-	Register(IBusHandlerServe) IResult[bool]
+	Register(IBusHandlerServe) IResult[EBool]
 	// SendRequest -- выполняет запрос по указанному топику
-	SendRequest(topic *mKd.Topic, binReq []byte) IResult[[]byte]
+	SendRequest(topic *topic.ATopic, binReq []byte) IResult[[]byte]
 	// Unregister -- удаляет единственный обработчик с единственного топика
 	Unregister(IBusHandlerServe)
 }
@@ -67,19 +68,19 @@ type IDictTopicServe interface {
 //	Подписка и обслуживание входящих запросов требует _обработчиков_.
 type IKernelBus interface {
 	// Publish -- публикует сообщение в шину
-	Publish(topic *mKd.Topic, binMsg []byte) IResult[bool]
+	Publish(topic *topic.ATopic, binMsg []byte) IResult[EBool]
 	// SendRequest -- выполняет запрос по указанному топику
-	SendRequest(topic *mKd.Topic, binReq []byte) IResult[[]byte]
+	SendRequest(topic *topic.ATopic, binReq []byte) IResult[[]byte]
 
 	// Subscribe -- подписывает обработчик на топик
-	Subscribe(IBusHandlerSubscribe) IResult[bool]
+	Subscribe(IBusHandlerSubscribe) IResult[EBool]
 	// Unsubscribe -- отписывается от топика
 	Unsubscribe(IBusHandlerSubscribe)
 	// RegisterServe -- Регистрирует обработчик на обслуживание входящих запросов
-	RegisterServe(IBusHandlerServe) IResult[bool]
+	RegisterServe(IBusHandlerServe) IResult[EBool]
 
 	// IsWork -- возвращает признак работы шины
-	IsWork() bool
+	IsWork() EBool
 	// Log -- возвращает буферный лог
 	Log() ILogBuf
 }

+ 3 - 3
v4/lev0/kspec/ikernel_module.go

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

+ 2 - 2
v4/lev0/kspec/ikernel_monolit.go

@@ -5,9 +5,9 @@ type IKernelMonolit interface {
 	// Name -- возвращает имя монолита
 	Name() string
 	// IsLocal -- возвращает признак локальной шины
-	IsLocal() bool
+	IsLocal() EBool
 	// IsWork -- возвращает признак работы монолита
-	IsWork() bool
+	IsWork() EBool
 	// Run -- запускает монолит в работу
 	Run()
 	// Wait -- ожидание окончания работы

+ 1 - 1
v4/lev0/kspec/ikernel_server_http.go

@@ -11,5 +11,5 @@ type IKernelServerHttp interface {
 	// Log -- возвращает локальный лог
 	Log() ILogBuf
 	// IsWork -- возвращает признак работы
-	IsWork() bool
+	IsWork() EBool
 }

+ 2 - 2
v4/lev0/kspec/ikernel_store_kv.go

@@ -7,9 +7,9 @@ type IKernelStoreKv interface {
 	// ByPrefix -- возвращает список ключей по префиксу
 	ByPrefix(prefix string) IResult[[]string]
 	// Set -- устанавливает значение по ключу
-	Set(key string, val []byte) IResult[bool]
+	Set(key string, val []byte) IResult[EBool]
 	// Delete -- удаляет значение по ключу
-	Delete(key string) IResult[bool]
+	Delete(key string) IResult[EBool]
 	// Log -- возвращает локальный лог
 	Log() ILogBuf
 }

+ 5 - 5
v4/lev0/kspec/ikernel_wg.go

@@ -1,21 +1,21 @@
 package kspec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
 )
 
 // IKernelWg -- интерфейс к именованному ожидателю потоков.
 type IKernelWg interface {
 	// Add -- добавляет имя потока в ожидатель потоков
-	Add(*defs.StreamName)
+	Add(*stream_name.AStreamName)
 	// Done -- удаляет имя потока из ожидания
-	Done(*defs.StreamName)
+	Done(*stream_name.AStreamName)
 	// Wait -- ожидает завершения работы всех потоков
 	Wait()
 	// IsWork -- признак работы ожидателя потоков (после закрытия добавлять нельзя)
-	IsWork() bool
+	IsWork() EBool
 	// List -- возвращает список имён потоков на ожидании
-	List() []*defs.StreamName
+	List() []*stream_name.AStreamName
 	// Len -- возвращает размер списка потоков ожидания
 	Len() int
 	// Log -- возвращает логгер ожидателя групп

+ 2 - 2
v4/lev0/kspec/ilog_buf.go

@@ -1,7 +1,7 @@
 package kspec
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark"
 )
 
@@ -20,7 +20,7 @@ type ILogMsg interface {
 // ILogBus -- публикует в топики логи.
 type ILogBus interface {
 	// DebugAdd -- добавляет топик для отладочного сообщения
-	DebugAdd(topic defs.Topic, bus IBusClient) IResult[bool]
+	DebugAdd(topic topic.ATopic, bus IBusClient) IResult[EBool]
 }
 
 // ILogBuf -- буферизованный лог для диагностики.

+ 2 - 2
v4/lev0/kspec/irec_meta.go

@@ -1,11 +1,11 @@
 package kspec
 
-import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 
 // IRecMeta -- интерфейс мета-информации записи KV-хранилища.
 type IRecMeta interface {
 	// Key -- ключ записи
-	Key() *defs.StoreKey
+	Key() *store_key.AStoreKey
 	// Vers -- версия записи
 	Vers() int64
 	// Operation -- тип операции над записью

+ 2 - 2
v4/lev0/kspec/irec_val.go

@@ -1,11 +1,11 @@
 package kspec
 
-import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 
 // IRecVal -- значение записи.
 type IRecVal interface {
 	// Key -- возвращает ключ
-	Key() *defs.StoreKey
+	Key() *store_key.AStoreKey
 	// Val -- возвращает значение
 	Val() []byte
 }

+ 3 - 3
v4/lev0/kspec/isafe_bool.go

@@ -9,7 +9,7 @@ type ISafeBool interface {
 	// Reset -- сбрасывает хранимое потокобезопасное значение
 	Reset()
 	// FromStr -- устанавливает значение из строки
-	FromStr(string) IResult[bool]
-	// Getenv -- устанавливает значение из окружения
-	Getenv(string) IResult[bool]
+	FromStr(string) IResult[EBool]
+	// Getenv -- получает значение из окружения
+	Getenv(string) IResult[EBool]
 }

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

@@ -4,7 +4,7 @@ package kspec
 type ISafeBoolReact interface {
 	ISafeBool
 	// Add -- добавляет функцию обратного вызова
-	Add(key string, fn func(bool)) IResult[bool]
+	Add(key string, fn func(EBoolMut)) IResult[EBool]
 	// Delete -- удаляет функцию обратного вызова по ключу
 	Delete(key string)
 }

+ 1 - 1
v4/lev0/kspec/spec.go

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

+ 5 - 5
v4/lev0/lev0.go

@@ -9,7 +9,7 @@ import (
 	mRes "gitp78su.ipnodns.ru/svi/kern/v4/lev0/result"
 )
 
-// ETime -- расширенное время
+// ETime -- расширенное время.
 type ETime = mKs.ITime
 
 // EStr -- расширенная строка.
@@ -54,8 +54,8 @@ func StrMutNew(opt ...FnOptStr) EStrMut {
 // Result — обёртка вокруг результата с возможной ошибкой.
 type IResult[T any] = mKs.IResult[T]
 
-// NewRes -- возвращает успешный Result с значением.
-func NewRes[T any](res T) IResult[T] {
+// NewOk -- возвращает успешный Result с значением.
+func NewOk[T any](res T) IResult[T] {
 	return mRes.NewOk(res)
 }
 
@@ -72,8 +72,8 @@ func WrapErr[T any](res IResult[T], err error) IResult[T] {
 // IOption — обёртка вокруг результата с возможной пустотой.
 type IOption[T any] = mKs.IOption[T]
 
-// NewOpt -- возвращает новый не пустой результат операции.
-func NewOpt[T any](some T) IOption[T] {
+// NewSome -- возвращает новый не пустой результат операции.
+func NewSome[T any](some T) IOption[T] {
 	return option.NewSome(some)
 }
 

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

@@ -17,7 +17,7 @@ func NewSome[T any](value T) mKs.IOption[T] {
 	// Для некоторых типов нужна дополнительная проверка через reflect
 	v := reflect.ValueOf(value)
 	switch v.Kind() {
-	case reflect.Ptr, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface:
+	case reflect.Pointer, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface:
 		mH.Hassert(!v.IsNil(), "NewSome[T any](): value==nil")
 	}
 	sf := &Option[T]{some: &value}

+ 5 - 5
v4/lev0/quark/quark.go

@@ -6,24 +6,24 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
 )
 
-// Fix -- фиксированное значение
+// Fix -- фиксированное значение.
 type Fix = quark_val.Fix
 
-// Mut -- мутабельное значение
+// Mut -- мутабельное значение.
 type Mut = quark_val.Mut
 
-// CMod -- ограничитель модификации
+// CMod -- ограничитель модификации.
 type CMod = quark_val.CMod
 
 type QStr[M CMod] = quark_str.QStr[M]
 
-// NewQStr -- создает новый экземпляр QStr
+// NewQStr -- создает новый экземпляр QStr.
 func NewQStr(val string) *QStr[Fix] {
 	val_ := quark_str.NewQStr(val)
 	return val_
 }
 
-// NewQStrMut -- создает новый экземпляр QStrMut
+// NewQStrMut -- создает новый экземпляр QStrMut.
 func NewQStrMut(val string) *QStr[Mut] {
 	val_ := quark_str.NewQStrMut(val)
 	return val_

+ 1 - 3
v4/lev0/quark/quark_base/quark_base.go

@@ -2,7 +2,7 @@
 package quark_base
 
 import (
-	// mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	// mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers".
 	"fmt"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
@@ -73,8 +73,6 @@ func (sf *QBase[M, T]) Mass() int {
 }
 
 // Val -- возвращает хранимое значение.
-//
-//go:fix inline
 func (sf *QBase[M, T]) Val() *quark_val.Val[M, T] {
 	return sf.val
 }

+ 3 - 2
v4/lev0/quark/quark_bool/quark_bool_test.go

@@ -1,6 +1,7 @@
 package quark_bool
 
 import (
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
 	"testing"
 )
 
@@ -59,12 +60,12 @@ func (sf *tester) setValue() {
 		sf.t.Fatalf("setValue(): начальное значение некорректно, ожидается false")
 	}
 
-	Set(qb, true)
+	quark_val.Set(qb.Val(), true)
 	if !qb.Get() {
 		sf.t.Fatalf("setValue(): значение после Set(true) некорректно, ожидается true")
 	}
 
-	Set(qb, false)
+	quark_val.Set(qb.Val(), false)
 	if qb.Get() {
 		sf.t.Fatalf("setValue(): значение после Set(false) некорректно, ожидается false")
 	}

+ 2 - 3
v4/lev0/quark/quark_byte/quark_byte.go

@@ -64,8 +64,6 @@ func (sf *QByte[T]) ToStr() string {
 }
 
 // FromInt -- установить значение из int.
-//
-//go:fix inline
 func FromInt(sf *QByte[quark_val.Mut], v int) {
 	mKh.Hassert(v >= 0 && v <= 255, "QByte.FromInt(): значение вне диапазона байта")
 	quark_val.Set(sf.Val(), byte(v))
@@ -78,5 +76,6 @@ func FromStr(sf *QByte[quark_val.Mut], s string) {
 	// Конвертируем строку в int и используем FromInt для всех проверок
 	v, err := strconv.Atoi(s)
 	mKh.Hassert(err == nil, "QByte.FromStr(): не удалось преобразовать строку в int, err=\n\t%v", err)
-	FromInt(sf, v)
+	mKh.Hassert(v >= 0 && v <= 255, "QByte.FromInt(): значение вне диапазона байта")
+	quark_val.Set(sf.Val(), byte(v))
 }

+ 10 - 3
v4/lev0/quark/quark_byte/quark_byte_test.go

@@ -1,6 +1,9 @@
 package quark_byte
 
 import (
+	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
+	"strconv"
 	"testing"
 )
 
@@ -36,7 +39,7 @@ func (sf *tester) newMut() {
 
 	// Проверяем, что Set меняет значение для мутируемого кварка
 	const newVal byte = 7
-	Set(qb, newVal)
+	quark_val.Set(qb.Val(), newVal)
 	if qb.Get() != newVal {
 		sf.t.Fatalf("newMut(): значение после Set() некорректно, получили %d, ожидали %d", qb.Get(), newVal)
 	}
@@ -74,7 +77,8 @@ func (sf *tester) convertInt() {
 	}
 
 	const newIntVal = 200
-	FromInt(qb, newIntVal)
+	mKh.Hassert(newIntVal >= 0 && newIntVal <= 255, "QByte.FromInt(): значение вне диапазона байта")
+	quark_val.Set(qb.Val(), byte(newIntVal))
 	if qb.Get() != byte(newIntVal) {
 		sf.t.Fatalf("convertInt(): FromInt() установил %d, ожидали %d", qb.Get(), byte(newIntVal))
 	}
@@ -98,7 +102,10 @@ func (sf *tester) convertStr() {
 
 	// FromStr использует StrToInt, поэтому передаём числовую строку
 	const newIntVal = 13
-	FromStr(qb, "13")
+	v, err := strconv.Atoi("13")
+	mKh.Hassert(err == nil, "QByte.FromStr(): не удалось преобразовать строку в int, err=\n\t%v", err)
+	//go:fix inline
+	FromInt(qb, v)
 	if qb.Get() != byte(newIntVal) {
 		sf.t.Fatalf("convertStr(): FromStr() установил %d, ожидали %d", qb.Get(), byte(newIntVal))
 	}

+ 0 - 2
v4/lev0/quark/quark_float/quark_float.go

@@ -36,13 +36,11 @@ func NewQFloatMut(val float64) *QFloat[quark_val.Mut] {
 }
 
 // Get -- возвращает хранимое значение.
-// /go:fix inline
 func (sf *QFloat[M]) Get() float64 {
 	return sf.Val().Get()
 }
 
 // Set -- устанавливает хранимое значение.
-// /go:fix inline
 func Set(sf *QFloat[quark_val.Mut], val float64) {
 	quark_val.Set(sf.Val(), val)
 }

+ 10 - 1
v4/lev0/quark/quark_float/quark_float_test.go

@@ -1,5 +1,11 @@
 package quark_float
 
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
+
+import "strconv"
+
+import mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+
 import "testing"
 
 type tester struct {
@@ -25,7 +31,10 @@ func (sf *tester) newMut() {
 	if qf.Get() != 12.34 {
 		sf.t.Fatalf("Set(qf, 12.34): qf.Get()=%v", qf.Get())
 	}
-	FromStr(qf, "12.1")
+	var str = "12.1"
+	fVal, err := strconv.ParseFloat(str, 64)
+	mKh.Hassert(err == nil, "QFloat.FromStr(): str=%q, err=\n\t%v", str, err)
+	quark_val.Set(qf.Val(), fVal)
 	if qf.Get() != 12.1 {
 		sf.t.Fatalf("FromStr(qf, \"12.1\"): qf.Get()=%v", qf.Get())
 	}

+ 11 - 2
v4/lev0/quark/quark_int/quark_int_test.go

@@ -1,5 +1,11 @@
 package quark_int
 
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
+
+import "strconv"
+
+import mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
+
 import "testing"
 
 type tester struct {
@@ -21,11 +27,14 @@ func (sf *tester) newMut() {
 	if qi.Get() != 100 {
 		sf.t.Fatalf("newMut(): qi.Get()=%d", qi.Get())
 	}
-	Set(qi, 200)
+	quark_val.Set(qi.Val(), 200)
 	if qi.Get() != 200 {
 		sf.t.Fatalf("newMut(): qi.Get()=%d", qi.Get())
 	}
-	FromStr(qi, "300")
+	var s = "300"
+	iVal, err := strconv.Atoi(s)
+	mKh.Hassert(err == nil, "QInt.FromStr(): не удалось преобразовать строку(%v) в int, err=\n\t%v", s, err)
+	quark_val.Set(qi.Val(), iVal)
 	if qi.Get() != 300 {
 		sf.t.Fatalf("newMut(): qi.Get()=%d", qi.Get())
 	}

+ 3 - 1
v4/lev0/quark/quark_str/quark_str_test.go

@@ -1,5 +1,7 @@
 package quark_str
 
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
+
 import "testing"
 
 type tester struct {
@@ -18,7 +20,7 @@ func TestQStr(t *testing.T) {
 func (sf *tester) newMut() {
 	sf.t.Log("newMut")
 	qs := NewQStrMut("test")
-	Set(qs, "test2")
+	quark_val.Set(qs.Val(), "test2")
 	if qs.Get() != "test2" {
 		sf.t.Fatalf("newMut(): bad value")
 	}

+ 0 - 2
v4/lev0/quark/quark_val/quark_val.go

@@ -41,8 +41,6 @@ func (sf *Val[M, T]) Get() T {
 }
 
 // Set -- установить мутабельное значение.
-//
-//go:fix inline
 func Set[T any](sf *Val[Mut, T], val T) {
 	sf.val = val
 }

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

@@ -23,7 +23,7 @@ func NewOk[T any](result T) mKs.IResult[T] {
 	// Для некоторых типов нужна дополнительная проверка через reflect
 	v := reflect.ValueOf(result)
 	switch v.Kind() {
-	case reflect.Ptr, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface:
+	case reflect.Pointer, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface:
 		mKh.Hassert(!v.IsNil(), "NewOk(): result==nil")
 	}
 	sf := &Result[T]{

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

@@ -101,7 +101,7 @@ func (sf *tester) createErrGood1() {
 func (sf *tester) assert2() {
 	sf.t.Log("assert2")
 	err := fmt.Errorf("test_error")
-	res := NewErr[bool](err)
+	res := NewErr[mKs.EBool](err)
 	defer func() {
 		if _panic := recover(); _panic == nil {
 			sf.t.Fatalf("assert2(): panic==nil")
@@ -149,7 +149,7 @@ func (sf *tester) createErrBad1() {
 		}
 	}()
 	var err error
-	_ = NewErr[bool](err)
+	_ = NewErr[mKs.EBool](err)
 }
 
 const (

+ 11 - 11
v4/lev0/voc/vmask/vmask.go

@@ -5,15 +5,15 @@ import (
 	"encoding/json"
 )
 
-// AMask -- маска значения-объекта
+// AMask -- маска значения-объекта.
 type AMask byte
 
-// Mask -- маска для защиты "снизу"
+// Mask -- маска для защиты "снизу".
 type Mask struct {
 	Val AMask // `json:"mask"` Набор признаков.
 }
 
-// VMask -- обёртка маски для защиты "снизу"
+// VMask -- обёртка маски для защиты "снизу".
 type VMask struct {
 	val Mask // Набор признаков.
 }
@@ -24,7 +24,7 @@ const (
 	IsAuto     = AMask(2) // Признак авто-инициализации
 )
 
-// NewVMask -- создать маску для защиты "снизу"
+// NewVMask -- создать маску для защиты "снизу".
 func NewVMask(mask AMask) VMask {
 	sf := VMask{
 		val: Mask{
@@ -34,33 +34,33 @@ func NewVMask(mask AMask) VMask {
 	return sf
 }
 
-// IsAuto -- возвращает признак авто-инициализации
+// IsAuto -- возвращает признак авто-инициализации.
 func (sf *VMask) IsAuto() bool {
 	return sf.val.Val&IsAuto != 0
 }
 
-// CanDefault -- возвращает признак значения по умолчанию
+// CanDefault -- возвращает признак значения по умолчанию.
 func (sf *VMask) CanDefault() bool {
 	return sf.val.Val&CanDefault != 0
 }
 
-// CanMut -- возвращает признак мутабельности
+// CanMut -- возвращает признак мутабельности.
 func (sf *VMask) CanMut() bool {
 	return sf.val.Val&CanMut != 0
 }
 
-// Get -- возвращает маску значения
+// Get -- возвращает маску значения.
 func (sf *VMask) Get() AMask {
 	return sf.val.Val
 }
 
-// MarshalJSON -- реализация интерфейса Marshaler
+// MarshalJSON -- реализация интерфейса Marshaler.
 func (sf *VMask) MarshalJSON() ([]byte, error) {
 	// Возвращаем кастомную строку JSON
 	return json.Marshal(sf.val)
 }
 
-// UnmarshalJSON -- реализация интерфейса Unmarshaler
+// UnmarshalJSON -- реализация интерфейса Unmarshaler.
 func (sf *VMask) UnmarshalJSON(binData []byte) error {
 	var mask Mask
 	if err := json.Unmarshal(binData, &mask); err != nil {
@@ -70,7 +70,7 @@ func (sf *VMask) UnmarshalJSON(binData []byte) error {
 	return nil
 }
 
-// String -- строковое представление маски
+// String -- строковое представление маски.
 func (sf *VMask) String() string {
 	out := ""
 	if sf.CanMut() {

+ 3 - 3
v4/lev1/ctx_value/ctx_value.go

@@ -6,7 +6,7 @@ import (
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 
 // CtxValue -- потокобезопасное значение локального контекста.
@@ -24,8 +24,8 @@ func NewCtxValue(key string, val any, comment string) mKs.ICtxValue {
 	mL0.Hassert(key != "", "NewCtxValue(): key is empty")
 	sf := &CtxValue{
 		key:       key,
-		createAt:  voc.NewETimeAuto(),
-		UpdateAt_: voc.NewETimeAutoMut(),
+		createAt:  etime.NewETimeAuto(),
+		UpdateAt_: etime.NewETimeAutoMut(),
 		Val_:      val,
 		Comment_:  comment,
 	}

+ 2 - 2
v4/lev1/kbus_msg/msg_pub/msg_pub.go

@@ -2,13 +2,13 @@
 package msg_pub
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
 // PublishReq -- запрос на публикацию.
 type PublishReq struct {
-	Topic_  *defs.Topic `json:"topic"`
+	Topic_  *topic.ATopic `json:"topic"`
 	Uuid_   string        `json:"uuid"`
 	BinMsg_ []byte        `json:"msg"`
 }

+ 2 - 2
v4/lev1/kbus_msg/msg_serve/msg_serve.go

@@ -2,13 +2,13 @@
 package msg_serve
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
 // ServeReq -- входящий запрос на обслуживание.
 type ServeReq struct {
-	Topic_  *defs.Topic `json:"topic"`
+	Topic_  *topic.ATopic `json:"topic"`
 	Uuid_   string        `json:"uuid"`
 	BinReq_ []byte        `json:"req"`
 }

+ 6 - 5
v4/lev1/kbus_msg/msg_sub/msg_sub.go

@@ -2,13 +2,14 @@
 package msg_sub
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
 // SubscribeReq -- входящий запрос на подписку.
 type SubscribeReq struct {
-	Topic_   *defs.Topic `json:"topic"` // Топик, на который надо подписаться
+	Topic_   *topic.ATopic `json:"topic"` // Топик, на который надо подписаться
 	Uuid_    string        `json:"uuid"`
 	WebHook_ string        `json:"web_hook"` // Веб-хук для обратного вызова
 }
@@ -22,9 +23,9 @@ func (sf *SubscribeReq) SelfCheck() {
 
 // SubscribeResp -- ответ на запрос подписки.
 type SubscribeResp struct {
-	Status_ string              `json:"status"`
-	Uuid_   string              `json:"uuid"`
-	Name_   *defs.HandlerName `json:"name"` // Уникальное имя подписки
+	Status_ string                     `json:"status"`
+	Uuid_   string                     `json:"uuid"`
+	Name_   *handler_name.AHandlerName `json:"name"` // Уникальное имя подписки
 }
 
 // SelfCheck -- проверяет правильность своих полей.

+ 3 - 3
v4/lev1/kbus_msg/msg_unsub/msg_unsub.go

@@ -2,14 +2,14 @@
 package msg_unsub
 
 import (
-	mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 )
 
 // UnsubReq -- запрос на отписку от топика.
 type UnsubReq struct {
-	Name_ *mKd.HandlerName `json:"name"` // Уникальная метка подписки
-	Uuid_ string            `json:"uuid"`
+	Name_ *handler_name.AHandlerName `json:"name"` // Уникальная метка подписки
+	Uuid_ string                     `json:"uuid"`
 }
 
 // SelfCheck -- проверка запроса на правильность полей.

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

@@ -57,7 +57,7 @@ func (sf *KernInt) FromStr(strVal string) mL0.IResult[int] {
 		return mL0.NewErr[int](fmt.Errorf("KInt.FromStr(): vak(%v) bad, err=\n\t%w", strVal, err))
 	}
 	sf.val = iVal
-	return mL0.NewRes(iVal)
+	return mL0.NewOk(iVal)
 }
 
 // ToStr -- возвращает как строку.
@@ -78,7 +78,7 @@ func (sf *KernInt) FromByte(binData []byte) mL0.IResult[int] {
 		return mL0.NewErr[int](fmt.Errorf("KInt.FromByte(): in read []byte, err=\n\t%w", err))
 	}
 	sf.val = int(signed)
-	return mL0.NewRes(sf.val)
+	return mL0.NewOk(sf.val)
 }
 
 // ToByte -- возвращает как срез байт.
@@ -111,5 +111,5 @@ func (sf *KernInt) Getenv(env string) mL0.IResult[int] {
 		err := fmt.Errorf("safeInt.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[int](err)
 	}
-	return mL0.NewRes(sf.val)
+	return mL0.NewOk(sf.val)
 }

+ 6 - 16
v4/lev1/lev1.go

@@ -26,22 +26,12 @@ func MakeEnv() IMockEnv {
 	return sf
 }
 
-// OptionLogBuf -- опция для конфигурирования ILogBuf.
-type OptionLogBuf = log_buf.OptionLogBuf
-
-// OptPrefix -- устанавливает префикс в сообщениях.
-func OptPrefix(prefix string) OptionLogBuf {
-	return log_buf.OptPrefix(prefix)
-}
-
-// OptIsTerm -- устанавливает признак вывода в терминал.
-func OptIsTerm(isTerm bool) OptionLogBuf {
-	return log_buf.OptIsTerm(isTerm)
-}
+// LogBufParam -- параметры ILogBuf.
+type LogBufParam = log_buf.LogBufParam
 
 // NewLogBuf -- возвращает новый буферизованный лог.
-func NewLogBuf(opts ...log_buf.OptionLogBuf) mKs.ILogBuf {
-	log := log_buf.NewLogBuf(opts...)
+func NewLogBuf(param *LogBufParam) mKs.ILogBuf {
+	log := log_buf.NewLogBuf(param)
 	return log
 }
 
@@ -74,8 +64,8 @@ func NewSafeBoolReact() mKs.ISafeBoolReact {
 }
 
 // NewSafeBool -- возвращает новый потокобезопасный булевый признак.
-func NewSafeBool() mKs.ISafeBool {
-	sb := safe_bool.NewSafeBool()
+func NewSafeBool(val bool) mKs.ISafeBool {
+	sb := safe_bool.NewSafeBool(val)
 	return sb
 }
 

+ 6 - 19
v4/lev1/lev1_test.go

@@ -3,6 +3,8 @@ package lev1
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
 type tester struct {
@@ -14,8 +16,6 @@ func TestLev1(t *testing.T) {
 		t: t,
 	}
 	sf.makeEnv()
-	sf.optPrefix()
-	sf.optIsTerm()
 	sf.newLogBuf()
 	sf.newSafeString()
 	sf.newSafeIntFromStr()
@@ -48,28 +48,15 @@ func (sf *tester) newSafeString() {
 
 func (sf *tester) newLogBuf() {
 	sf.t.Log("newLogBuf")
-	logBuf := NewLogBuf()
+	param := &LogBufParam{
+		IsTerm_: safe_bool.NewSafeBool(true),
+	}
+	logBuf := NewLogBuf(param)
 	if logBuf == nil {
 		sf.t.Fatalf("newLogBuf(): logBuf==nil")
 	}
 }
 
-func (sf *tester) optIsTerm() {
-	sf.t.Log("optIsTerm")
-	optIsTerm := OptIsTerm(true)
-	if optIsTerm == nil {
-		sf.t.Fatalf("optIsTerm(): optIsTerm==nil")
-	}
-}
-
-func (sf *tester) optPrefix() {
-	sf.t.Log("optPrefix")
-	optPref := OptPrefix("test_prefix")
-	if optPref == nil {
-		sf.t.Fatalf("optPrefix(): optPref==nil")
-	}
-}
-
 func (sf *tester) makeEnv() {
 	sf.t.Log("makeEnv")
 	env := MakeEnv()

+ 10 - 6
v4/lev1/local_ctx/local_ctx.go

@@ -7,10 +7,12 @@ import (
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 	"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"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
 // LocalCtx -- локальный контекст.
@@ -28,14 +30,16 @@ type LocalCtx struct {
 func NewLocalCtx(ctx context.Context) mKs.ILocalCtx {
 	mL0.Hassert(ctx != nil, "NewLocalCtx(): ctx==nil")
 	_ctx, fnCancel := context.WithCancel(ctx)
+	paramLogBuf := &log_buf.LogBufParam{
+		IsTerm_: safe_bool.NewSafeBool(true),
+		Prefix_: "LocalCtx",
+	}
 	sf := &LocalCtx{
 		ctx:      _ctx,
 		fnCancel: fnCancel,
 		dictVal:  map[string]mKs.ICtxValue{},
 		lstSort:  lst_sort.NewLstSort(),
-		log: log_buf.NewLogBuf(
-			log_buf.OptIsTerm(true),
-			log_buf.OptPrefix("LocalCtx")),
+		log:      log_buf.NewLogBuf(paramLogBuf),
 	}
 	return sf
 }
@@ -74,7 +78,7 @@ func (sf *LocalCtx) Get(key string) mL0.IOption[mKs.ICtxValue] {
 	if !isOk {
 		return mL0.NewNone[mKs.ICtxValue]()
 	}
-	return mL0.NewOpt(val)
+	return mL0.NewSome(val)
 }
 
 // Del -- удаляет значение из контекста.
@@ -96,7 +100,7 @@ func (sf *LocalCtx) Set(key string, val any, comment string) {
 	if isOk {
 		val0 := _val.(*ctx_value.CtxValue)
 		val0.Lock()
-		val0.UpdateAt_ = voc.NewETimeAutoMut()
+		val0.UpdateAt_ = etime.NewETimeAutoMut()
 		val0.Val_ = val
 		val0.Unlock()
 		return

+ 33 - 40
v4/lev1/log_buf/log_buf.go

@@ -9,54 +9,47 @@ import (
 	"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/safe_bool"
 )
 
+var (
+	hassert = helpers.Hassert
+)
+
+// LogBufParam -- параметры логирующего буфера
+type LogBufParam struct {
+	Prefix_ string        // Префикс для сообщений
+	IsTerm_ mKs.ISafeBool // Признак вывода в терминал
+}
+
+// SelfCheck -- проверяет корректность параметров.
+func (sf *LogBufParam) SelfCheck() {
+	hassert(sf.IsTerm_ != nil, "LogBufParam.SelfCheck(): IsTerm_==nil")
+}
+
 // LogBuf -- потокобезопасный буфер лога.
 type LogBuf struct {
 	sync.RWMutex
-	isTerm mKs.ISafeBool // Признак вывода в стандартный поток
-	prefix string        // Префикс для сообщений
+	*LogBufParam
 	lst    []mKs.ILogMsg
 	lstErr []mKs.ILogMsg
 }
 
-// OptionLogBuf -- опция для конфигурирования ILogBuf.
-type OptionLogBuf func(logBuf *LogBuf)
-
-// OptIsTerm -- устанавливает признак вывода в терминал.
-func OptIsTerm(isTerm bool) OptionLogBuf {
-	return func(sf *LogBuf) {
-		if isTerm {
-			sf.IsTerm().Set()
-		}
-	}
-}
-
-// OptPrefix -- устанавливает префикс в сообщениях.
-func OptPrefix(prefix string) OptionLogBuf {
-	return func(sf *LogBuf) {
-		sf.prefix = prefix + "."
-	}
-}
-
 // NewLogBuf -- возвращает новый потокобезопасный буфер лога.
-func NewLogBuf(opts ...OptionLogBuf) mKs.ILogBuf {
+func NewLogBuf(param *LogBufParam) mKs.ILogBuf {
+	hassert(param != nil, "NewLogBuf(): param=nil")
+	param.SelfCheck()
 	sf := &LogBuf{
-		isTerm: safe_bool.NewSafeBool(),
-		lst:    []mKs.ILogMsg{},
-		lstErr: []mKs.ILogMsg{},
-	}
-
-	for _, opt := range opts {
-		opt(sf)
+		LogBufParam: param,
+		lst:         []mKs.ILogMsg{},
+		lstErr:      []mKs.ILogMsg{},
 	}
+	sf.Prefix_ += "."
 	return sf
 }
 
 // IsTerm -- возвращает признак логирования.
 func (sf *LogBuf) IsTerm() mKs.ISafeBool {
-	return sf.isTerm
+	return sf.IsTerm_
 }
 
 // GetErr -- возвращает сообщение ошибки по номеру.
@@ -64,7 +57,7 @@ func (sf *LogBuf) GetErr(num int) mKs.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	if len(sf.lstErr) == 0 {
-		return log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+"not error msg")
+		return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"not error msg")
 	}
 	if num >= len(sf.lstErr) {
 		return sf.lstErr[len(sf.lstErr)-1]
@@ -80,13 +73,13 @@ func (sf *LogBuf) Get(num int) mKs.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	if len(sf.lst) == 0 {
-		return log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+"*no msg*")
+		return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
 	}
 	if num >= len(sf.lst) {
-		return log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+"*no msg*")
+		return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
 	}
 	if num <= 0 {
-		return log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+"*no msg*")
+		return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
 	}
 	return sf.lst[num]
 }
@@ -105,7 +98,7 @@ func (sf *LogBuf) Debug(fMsg string, args ...any) {
 		args: args,
 	}
 	strMsg := fmt.Sprintf(msg.text, msg.args...)
-	_msg := log_msg.NewLogMsg(log_msg.DEBUG, sf.prefix+strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+strMsg)
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
@@ -120,7 +113,7 @@ func (sf *LogBuf) Info(fMsg string, args ...any) {
 		args: args,
 	}
 	strMsg := fmt.Sprintf(msg.text, msg.args...)
-	_msg := log_msg.NewLogMsg(log_msg.INFO, sf.prefix+strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.INFO, sf.Prefix_+strMsg)
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
@@ -135,7 +128,7 @@ func (sf *LogBuf) Warn(fMsg string, args ...any) {
 		args: args,
 	}
 	strMsg := fmt.Sprintf(msg.text, msg.args...)
-	_msg := log_msg.NewLogMsg(log_msg.WARN, sf.prefix+strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.WARN, sf.Prefix_+strMsg)
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
@@ -150,7 +143,7 @@ func (sf *LogBuf) Err(fMsg string, args ...any) {
 		args: args,
 	}
 	strMsg := fmt.Sprintf(msg.text, msg.args...)
-	_msg := log_msg.NewLogMsg(log_msg.ERROR, sf.prefix+strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.ERROR, sf.Prefix_+strMsg)
 	sf.lst = append(sf.lst, _msg)
 	sf.lstErr = append(sf.lstErr, _msg)
 	sf.checkLen()
@@ -181,7 +174,7 @@ func (sf *LogBuf) checkLenErr() {
 
 // Печатает сообщение в терминал, если разрешено.
 func (sf *LogBuf) printTerm(msg mKs.ILogMsg) {
-	if !sf.isTerm.Get() {
+	if !sf.IsTerm_.Get() {
 		return
 	}
 	level := msg.Level()

+ 6 - 1
v4/lev1/log_buf/log_buf_test.go

@@ -5,6 +5,7 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
 type tester struct {
@@ -22,7 +23,11 @@ func TestLogBuf(t *testing.T) {
 // Создаёт новый буферный лог.
 func (sf *tester) new() {
 	sf.t.Log("new")
-	sf.log = NewLogBuf(OptIsTerm(true), OptPrefix("tester"))
+	param := &LogBufParam{
+		IsTerm_: safe_bool.NewSafeBool(true),
+		Prefix_: "tester",
+	}
+	sf.log = NewLogBuf(param)
 	if sf.log == nil {
 		sf.t.Fatalf("new(): log==nil")
 	}

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

@@ -6,13 +6,13 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 type LogDictTopic struct {
 	sync.RWMutex
-	dict   map[defs.Topic]bool
+	dict   map[topic.ATopic]struct{}
 	client mKs.IBusClient
 }
 
@@ -23,8 +23,8 @@ func NewLogDictTopic(clientBus mKs.IBusClient) mL0.IResult[*LogDictTopic] {
 		return mL0.NewErr[*LogDictTopic](err)
 	}
 	sf := &LogDictTopic{
-		dict:   map[defs.Topic]bool{},
+		dict:   map[topic.ATopic]struct{}{},
 		client: clientBus,
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }

+ 3 - 2
v4/lev1/log_msg/log_msg.go

@@ -8,7 +8,8 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"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"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 
 const (
@@ -28,7 +29,7 @@ type logMsg struct {
 // NewLogMsg -- возвращает новое сообщение логгера.
 func NewLogMsg(level int, msg string) kspec.ILogMsg {
 	sf := &logMsg{
-		createdAt: voc.NewETimeAuto(),
+		createdAt: etime.NewETimeAuto(),
 		msg:       quark.NewQStr(msg),
 	}
 	sf.check(level)

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

@@ -36,8 +36,8 @@ func MakeEnv() *MockEnv {
 
 // Парсит полученный текст .env для установки переменных окружения.
 func (sf *MockEnv) parseEnv() {
-	lstStr := strings.Split(sf.strEnv, "\n")
-	for _, val := range lstStr {
+	lstStr := strings.SplitSeq(sf.strEnv, "\n")
+	for val := range lstStr {
 		pair := strings.TrimSuffix(val, "\r")
 		if pair == "" {
 			continue
@@ -79,12 +79,12 @@ func (sf *MockEnv) setPath() {
 	dir, err := os.Getwd()
 	mL0.Hassert(err == nil, "MockEnv.setPath(): in get PWD, err=\n\t%v", err)
 	lstDir := strings.Split(dir, "/")
-	pwd := ""
+	var pwd strings.Builder
 	fileName := ""
 	isFind := false
 	for _, point := range lstDir {
-		pwd += point + "/"
-		fileName = pwd + ".env"
+		pwd.WriteString(point + "/")
+		fileName = pwd.String() + ".env"
 		_, err := os.ReadFile(fileName)
 		if err == nil {
 			isFind = true
@@ -92,7 +92,7 @@ func (sf *MockEnv) setPath() {
 		}
 	}
 	mL0.Hassert(isFind, "MockEnv.setPath(): not find file .env")
-	sf.pwd = pwd + "/bin_dev"
+	sf.pwd = pwd.String() + "/bin_dev"
 	err = os.MkdirAll(sf.pwd, 0750)
 	mL0.Hassert(err == nil, "MockEnv.setPath(): in create PWD, err=\n\t%v", err)
 	err = os.Chdir(sf.pwd)

+ 15 - 11
v4/lev1/safe_bool/safe_bool.go

@@ -8,6 +8,8 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
+	"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"
 )
 
@@ -18,31 +20,33 @@ type safeBool struct {
 }
 
 // NewSafeBool -- возвращает новый потокобезопасный булевый признак.
-func NewSafeBool() mKs.ISafeBool {
-	sf := &safeBool{}
+func NewSafeBool(val bool) mKs.ISafeBool {
+	sf := &safeBool{
+		val: val,
+	}
 	return sf
 }
 
 // NewSafeBoolFromStr -- возвращает новое потокобезопасное булево из строки.
 func NewSafeBoolFromStr(strVal string) mL0.IResult[mKs.ISafeBool] {
-	sf := NewSafeBool()
+	sf := NewSafeBool(false)
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
 		err := fmt.Errorf("NewSafeBoolFromStr(): in parse str(%v), err=\n\t%w", strVal, res.Err())
 		return mL0.NewErr[mKs.ISafeBool](err)
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // NewSafeBoolGetenv -- возвращает новое потокобезопасное целое из окружения.
 func NewSafeBoolGetenv(env string) mL0.IResult[mKs.ISafeBool] {
-	sf := NewSafeBool()
+	sf := NewSafeBool(false)
 	res := sf.Getenv(env)
 	if res.IsErr() {
 		err := fmt.Errorf("NewSafeBoolGetenv(): in parse env(%v), err=\n\t%w", env, res.Err())
 		return mL0.NewErr[mKs.ISafeBool](err)
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // Get -- возвращает хранимый булевый признак.
@@ -67,7 +71,7 @@ func (sf *safeBool) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBool) FromStr(strVal string) mL0.IResult[bool] {
+func (sf *safeBool) FromStr(strVal string) mL0.IResult[kspec.EBool] {
 	strVal = strings.ToLower(strVal)
 	sf.Lock()
 	defer sf.Unlock()
@@ -77,18 +81,18 @@ func (sf *safeBool) FromStr(strVal string) mL0.IResult[bool] {
 	case "false":
 		sf.val = false
 	default:
-		return mL0.NewErr[bool](fmt.Errorf("safeBool.FromStr(): val(%v) bad", strVal))
+		return mL0.NewErr[kspec.EBool](fmt.Errorf("safeBool.FromStr(): val(%v) bad", strVal))
 	}
-	return mL0.NewRes(sf.val)
+	return mL0.NewOk(ebool.NewEBool(sf.val))
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBool) Getenv(env string) mL0.IResult[bool] {
+func (sf *safeBool) Getenv(env string) mL0.IResult[kspec.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[bool](err)
+		return mL0.NewErr[kspec.EBool](err)
 	}
 	return res
 }

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

@@ -127,7 +127,7 @@ func (sf *tester) set() {
 // Создаёт потокобезопасный булевый признак.
 func (sf *tester) create() {
 	sf.t.Log("create")
-	sf.sb = NewSafeBool()
+	sf.sb = NewSafeBool(false)
 	if sf.sb == nil {
 		sf.t.Fatalf("create(): SafeBool==nil")
 	}

+ 17 - 15
v4/lev1/safe_bool_react/safe_bool_react.go

@@ -8,20 +8,22 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
+	"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(bool) // Словарь обратных вызовов
+	dict map[string]func(kspec.EBoolMut) // Словарь обратных вызовов
 	val  bool
 }
 
 // NewSafeBoolReact -- возвращает новый потокобезопасный булевый признак с реакцией на своё изменение.
 func NewSafeBoolReact() mKs.ISafeBoolReact {
 	sf := &safeBoolReact{
-		dict: map[string]func(bool){},
+		dict: map[string]func(kspec.EBoolMut){},
 	}
 	return sf
 }
@@ -34,7 +36,7 @@ func NewSafeBoolReactFromStr(strVal string) mL0.IResult[mKs.ISafeBoolReact] {
 		err := fmt.Errorf("NewSafeBoolReactFromStr(): in parse str(%v), err=\n\t%w", strVal, res.Err())
 		return mL0.NewErr[mKs.ISafeBoolReact](err)
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // NewSafeBoolGetenv -- возвращает новое потокобезопасное целое с реакцией из окружения.
@@ -45,7 +47,7 @@ func NewSafeBoolGetenv(env string) mL0.IResult[mKs.ISafeBoolReact] {
 		err := fmt.Errorf("NewSafeBoolGetenv(): in parse env(%v), err=\n\t%w", env, res.Err())
 		return mL0.NewErr[mKs.ISafeBoolReact](err)
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // Delete -- удаляет функцию обратного вызова из наблюдения.
@@ -56,18 +58,18 @@ func (sf *safeBoolReact) Delete(key string) {
 }
 
 // Add -- добавляет функцию обратного вызова.
-func (sf *safeBoolReact) Add(key string, fn func(bool)) mL0.IResult[bool] {
+func (sf *safeBoolReact) Add(key string, fn func(kspec.EBoolMut)) mL0.IResult[kspec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	if key == "" {
-		return mL0.NewErr[bool](fmt.Errorf("safeBoolReact.Add(): key is empty"))
+		return mL0.NewErr[kspec.EBool](fmt.Errorf("safeBoolReact.Add(): key is empty"))
 	}
 	_, isOk := sf.dict[key]
 	if isOk {
-		return mL0.NewErr[bool](fmt.Errorf("safeBoolReact.Add(): key(%v) already exists", key))
+		return mL0.NewErr[kspec.EBool](fmt.Errorf("safeBoolReact.Add(): key(%v) already exists", key))
 	}
 	sf.dict[key] = fn
-	return mL0.NewRes(true)
+	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // Get -- возвращает хранимый булевый признак.
@@ -83,7 +85,7 @@ func (sf *safeBoolReact) Set() {
 	defer sf.Unlock()
 	sf.val = true
 	for _, fn := range sf.dict {
-		fn(true)
+		fn(ebool.NewEBoolMut(true))
 	}
 }
 
@@ -93,12 +95,12 @@ func (sf *safeBoolReact) Reset() {
 	defer sf.Unlock()
 	sf.val = false
 	for _, fn := range sf.dict {
-		fn(false)
+		fn(ebool.NewEBoolMut(false))
 	}
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBoolReact) FromStr(strVal string) mL0.IResult[bool] {
+func (sf *safeBoolReact) FromStr(strVal string) mL0.IResult[kspec.EBool] {
 	strVal = strings.ToLower(strVal)
 	sf.Lock()
 	defer sf.Unlock()
@@ -108,18 +110,18 @@ func (sf *safeBoolReact) FromStr(strVal string) mL0.IResult[bool] {
 	case "false":
 		sf.val = false
 	default:
-		return mL0.NewErr[bool](fmt.Errorf("safeBoolReact.FromStr(): val(%v) bad", strVal))
+		return mL0.NewErr[kspec.EBool](fmt.Errorf("safeBoolReact.FromStr(): val(%v) bad", strVal))
 	}
-	return mL0.NewRes(sf.val)
+	return mL0.NewOk(ebool.NewEBool(sf.val))
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBoolReact) Getenv(env string) mL0.IResult[bool] {
+func (sf *safeBoolReact) Getenv(env string) mL0.IResult[kspec.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[bool](err)
+		return mL0.NewErr[kspec.EBool](err)
 	}
 	return res
 }

+ 8 - 7
v4/lev1/safe_bool_react/safe_bool_react_test.go

@@ -4,13 +4,14 @@ import (
 	"os"
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 type tester struct {
 	t   *testing.T
 	sbr ISafeBoolReact
-	val bool
+	val kspec.EBoolMut
 }
 
 func TestSafeBoolReact(t *testing.T) {
@@ -105,9 +106,9 @@ func (sf *tester) newFromEnvBad1() {
 func (sf *tester) del() {
 	sf.t.Log("del")
 	sf.sbr.Delete("test")
-	sf.val = false
+	sf.val.Reset()
 	sf.sbr.Set()
-	if sf.val {
+	if sf.val.Get() {
 		sf.t.Fatalf("del(): val==true")
 	}
 }
@@ -119,7 +120,7 @@ func (sf *tester) add() {
 }
 
 // Функция обратного вызова для контроля.
-func (sf *tester) fnBack(val bool) {
+func (sf *tester) fnBack(val kspec.EBoolMut) {
 	sf.val = val
 }
 
@@ -130,12 +131,12 @@ func (sf *tester) reset() {
 	if sf.sbr.Get() {
 		sf.t.Fatalf("reset(): SafeBool==true")
 	}
-	sf.val = true
+	sf.val.Set()
 	sf.sbr.Reset()
 	if sf.sbr.Get() {
 		sf.t.Fatalf("reset(): SafeBool==true")
 	}
-	if sf.val {
+	if sf.val.Get() {
 		sf.t.Fatalf("reset(): val==true")
 	}
 }
@@ -151,7 +152,7 @@ func (sf *tester) set() {
 	if !sf.sbr.Get() {
 		sf.t.Fatalf("set(): SafeBool==true")
 	}
-	if !sf.val {
+	if !sf.val.Get() {
 		sf.t.Fatalf("set(): val==false")
 	}
 }

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

@@ -32,7 +32,7 @@ func NewSafeIntFromStr(strVal string) mL0.IResult[mKs.ISafeInt] {
 		err := fmt.Errorf("NewSafeIntFromStr(): in parse str(%v), err=\n\t%w", strVal, res.Err())
 		return mL0.NewErr[mKs.ISafeInt](err)
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
@@ -43,7 +43,7 @@ func NewSafeIntGetenv(env string) mL0.IResult[mKs.ISafeInt] {
 		err := fmt.Errorf("NewSafeIntGetenv(): in parse env(%v), err=\n\t%w", env, res.Err())
 		return mL0.NewErr[mKs.ISafeInt](err)
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // FromBool -- устанавливает значение из булева значения.

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

@@ -30,7 +30,7 @@ func NewSafeStringGetenv(env string) mL0.IResult[mKs.ISafeString] {
 		err := fmt.Errorf("NewSafeStringGetenv(): in get from env(%v), err=\n\t%w", env, res.Err())
 		return mL0.NewErr[mKs.ISafeString](err)
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // Byte -- возвращает байтовое представление строки.
@@ -69,5 +69,5 @@ func (sf *safeString) Getenv(env string) mL0.IResult[string] {
 		return mL0.NewErr[string](err)
 	}
 	sf.val = strVal
-	return mL0.NewRes(strVal)
+	return mL0.NewOk(strVal)
 }

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

@@ -5,7 +5,7 @@ import (
 	"sync"
 
 	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/handler_name"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 )
@@ -13,7 +13,7 @@ import (
 // dictSubHook -- словарь потребителей топика по подписке.
 type dictSubHook struct {
 	kCtx  mKs.IKernelCtx
-	dict  map[*mKd.HandlerName]bool // В качестве ключа -- URL веб-хука
+	dict  map[*handler_name.AHandlerName]struct{} // В качестве ключа -- URL веб-хука
 	block sync.RWMutex
 }
 
@@ -21,7 +21,7 @@ type dictSubHook struct {
 func NewDictSubHook() mKs.IDictSubHook {
 	sf := &dictSubHook{
 		kCtx: kctx.GetKernelCtx(),
-		dict: map[*mKd.HandlerName]bool{},
+		dict: map[*handler_name.AHandlerName]struct{}{},
 	}
 	return sf
 }

+ 12 - 8
v4/lev2/kbus/dict_topic_serve/dict_topic_serve.go

@@ -8,7 +8,9 @@ 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/defs/topic"
+	"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"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 )
@@ -19,31 +21,33 @@ import (
 type dictServe struct {
 	sync.RWMutex
 	kCtx      mKs.IKernelCtx
-	dictServe map[*mKd.Topic]mKs.IBusHandlerServe
+	dictServe map[*topic.ATopic]mKs.IBusHandlerServe
 }
 
 // NewDictServe -- возвращает потокобезопасный словарь обработчиков запросов.
 func NewDictServe() *dictServe {
 	sf := &dictServe{
 		kCtx:      kctx.GetKernelCtx(),
-		dictServe: map[*mKd.Topic]mKs.IBusHandlerServe{},
+		dictServe: map[*topic.ATopic]mKs.IBusHandlerServe{},
 	}
 	return sf
 }
 
 // Register -- регистрирует обработчик запросов.
-func (sf *dictServe) Register(handler mKs.IBusHandlerServe) mL0.IResult[bool] {
+func (sf *dictServe) Register(handler mKs.IBusHandlerServe) mL0.IResult[kspec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	if handler == nil {
-		return mL0.NewErr[bool](fmt.Errorf("dictServe.Register(): IBusHandlerSubscribe==nil"))
+		err := fmt.Errorf("dictServe.Register(): IBusHandlerSubscribe==nil")
+		return mL0.NewErr[kspec.EBool](err)
 	}
 	topic := handler.Topic()
 	isTwinRegister := sf.register(handler)
 	if isTwinRegister {
-		return mL0.NewErr[bool](fmt.Errorf("dictServe.Register(): handler of topic (%v) already register", topic))
+		err := fmt.Errorf("dictServe.Register(): handler of topic (%v) already register", topic)
+		return mL0.NewErr[kspec.EBool](err)
 	}
-	return mL0.NewRes(true)
+	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // Unregister -- удаляет обработчик запросов из словаря.
@@ -58,7 +62,7 @@ func (sf *dictServe) Unregister(handler mKs.IBusHandlerServe) {
 }
 
 // SendRequest -- вызывает обработчик при поступлении запроса.
-func (sf *dictServe) SendRequest(topic *mKd.Topic, binReq []byte) mL0.IResult[[]byte] {
+func (sf *dictServe) SendRequest(topic *topic.ATopic, binReq []byte) mL0.IResult[[]byte] {
 	sf.RLock()
 	defer sf.RUnlock()
 	handler, isOk := sf.dictServe[topic]

+ 5 - 5
v4/lev2/kbus/dict_topic_sub/dict_topic_sub.go

@@ -5,14 +5,14 @@ import (
 	"sync"
 
 	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/topic"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kbus/dict_sub_hook"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 )
 
 type tReadReq struct {
-	topic  *mKd.Topic
+	topic  *topic.ATopic
 	binMsg []byte
 }
 
@@ -20,20 +20,20 @@ type tReadReq struct {
 type dictTopicSub struct {
 	sync.RWMutex
 	kCtx          mKs.IKernelCtx
-	dictTopicHook map[*mKd.Topic]mKs.IDictSubHook
+	dictTopicHook map[*topic.ATopic]mKs.IDictSubHook
 }
 
 // NewDictTopicSub -- возвращает потокобезопасный словарь подписчиков.
 func NewDictTopicSub() *dictTopicSub {
 	sf := &dictTopicSub{
 		kCtx:          kctx.GetKernelCtx(),
-		dictTopicHook: map[*mKd.Topic]mKs.IDictSubHook{},
+		dictTopicHook: map[*topic.ATopic]mKs.IDictSubHook{},
 	}
 	return sf
 }
 
 // Read -- вызывает обработчики при поступлении события.
-func (sf *dictTopicSub) Read(topic *mKd.Topic, binMsg []byte) {
+func (sf *dictTopicSub) Read(topic *topic.ATopic, binMsg []byte) {
 	sf.RLock()
 	defer sf.RUnlock()
 	msg := &tReadReq{

+ 18 - 15
v4/lev2/kbus_base/kbus_base.go

@@ -6,7 +6,10 @@ import (
 	"sync"
 
 	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/stream_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
+	"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/lev2/kbus/dict_topic_serve"
@@ -15,7 +18,7 @@ import (
 )
 
 var (
-	busBaseStreamName = mKd.NewStreamName("bus_base")
+	busBaseStreamName = stream_name.NewAStreamName("bus_base")
 )
 
 // KBusBase -- базовая часть шины данных.
@@ -44,7 +47,7 @@ func GetKernelBusBase() *KBusBase {
 	lCtx := mL1.NewLocalCtx(kCtx.Ctx())
 	Bus_ = &KBusBase{
 		KCtx_:     kCtx,
-		IsWork_:   mL1.NewSafeBool(),
+		IsWork_:   mL1.NewSafeBool(false),
 		dictSub:   dict_topic_sub.NewDictTopicSub(),
 		dictServe: dict_topic_serve.NewDictServe(),
 		lCtx:      lCtx,
@@ -78,15 +81,15 @@ func (sf *KBusBase) Unsubscribe(handler mKs.IBusHandlerSubscribe) {
 }
 
 // Subscribe -- подписывает обработчик на топик.
-func (sf *KBusBase) Subscribe(handler mKs.IBusHandlerSubscribe) mKs.IResult[bool] {
+func (sf *KBusBase) Subscribe(handler mKs.IBusHandlerSubscribe) mKs.IResult[kspec.EBool] {
 	sf.log.Debug("KBusBase.Subscribe(): handler='%v'", handler.Name())
 	mL0.Hassert(!sf.IsWork_.Get(), "KBusBase.Subscribe():  handler='%v', bus already closed", handler.Name())
 	sf.dictSub.Subscribe(handler)
-	return mL0.NewRes(true)
+	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // SendRequest -- отправляет запрос в шину данных.
-func (sf *KBusBase) SendRequest(topic *mKd.Topic, binReq []byte) mL0.IResult[[]byte] {
+func (sf *KBusBase) SendRequest(topic *topic.ATopic, binReq []byte) mL0.IResult[[]byte] {
 	sf.log.Debug("KBusBase.SendRequest(): topic='%v'", topic)
 	if !sf.IsWork_.Get() {
 		err := fmt.Errorf("KBusBase.SendRequest():  topic='%v', bus already closed", topic)
@@ -103,36 +106,36 @@ func (sf *KBusBase) SendRequest(topic *mKd.Topic, binReq []byte) mL0.IResult[[]b
 }
 
 // RegisterServe -- регистрирует обработчики входящих запросов.
-func (sf *KBusBase) RegisterServe(handler mKs.IBusHandlerServe) mL0.IResult[bool] {
+func (sf *KBusBase) RegisterServe(handler mKs.IBusHandlerServe) mL0.IResult[kspec.EBool] {
 	if handler == nil {
-		return mL0.NewErr[bool](fmt.Errorf("KBusBase.RegisterServe(): IBusHandlerServe==nil"))
+		return mL0.NewErr[kspec.EBool](fmt.Errorf("KBusBase.RegisterServe(): IBusHandlerServe==nil"))
 	}
 	sf.log.Debug("KBusBase.RegisterServe(): handler='%v'", handler.Name())
 	res := sf.dictServe.Register(handler)
 	if res.IsErr() {
 		err := fmt.Errorf("KBusBase.RegisterServe(): handler='%v', err=\n\t%w", handler.Name(), res.Err())
 		sf.log.Err(err.Error())
-		return mL0.NewErr[bool](err)
+		return mL0.NewErr[kspec.EBool](err)
 	}
-	return mL0.NewRes(true)
+	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // Publish -- публикует сообщение в шину.
-func (sf *KBusBase) Publish(topic *mKd.Topic, binMsg []byte) mL0.IResult[bool] {
+func (sf *KBusBase) Publish(topic *topic.ATopic, binMsg []byte) mL0.IResult[kspec.EBool] {
 	sf.log.Debug("KBusBase.Publish(): topic='%v'", topic)
 	if !sf.IsWork_.Get() {
 		err := fmt.Errorf("KBusBase.Publish(): topic='%v',bus already closed", topic)
 		sf.log.Err(err.Error())
-		return mL0.NewErr[bool](err)
+		return mL0.NewErr[kspec.EBool](err)
 	}
 	// Асинхронный запуск чтения
 	go sf.dictSub.Read(topic, binMsg)
-	return mL0.NewRes(true)
+	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // IsWork -- возвращает признак работы шины.
-func (sf *KBusBase) IsWork() bool {
-	return sf.IsWork_.Get()
+func (sf *KBusBase) IsWork() kspec.EBool {
+	return ebool.NewEBool(sf.IsWork_.Get())
 }
 
 // Ожидает закрытия шины в отдельном потоке.

+ 2 - 2
v4/lev2/kbus_base/kbus_base_test.go

@@ -150,7 +150,7 @@ func (sf *tester) close() {
 	kCtx.Cancel()
 	kCtx.Wg().Wait()
 	sf.kBus.(*KBusBase).close()
-	if sf.kBus.IsWork() {
+	if sf.kBus.IsWork().Get() {
 		sf.t.Fatalf("close(): bus work")
 	}
 	res := sf.kBus.Subscribe(sf.handSub)
@@ -176,7 +176,7 @@ func (sf *tester) newGood1() {
 	}()
 	sf.kBus = GetKernelBusBase()
 	sf.kBus = GetKernelBusBase()
-	if !sf.kBus.IsWork() {
+	if !sf.kBus.IsWork().Get() {
 		sf.t.Fatalf("newGood1(): bus not work")
 	}
 	if log := sf.kBus.Log(); log == nil {

+ 15 - 9
v4/lev2/kbus_http/client_bus_http/client_bus_http.go

@@ -11,13 +11,15 @@ import (
 	"github.com/google/uuid"
 
 	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/topic"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kbus_msg/msg_pub"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kbus_msg/msg_serve"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kbus_msg/msg_sub"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/kbus_msg/msg_unsub"
+	"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/kbus_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
@@ -35,7 +37,11 @@ type ClientBusHttp struct {
 
 // NewClientBusHttp - -возвращает новый клиент HTTP-шины.
 func NewClientBusHttp(urlRemote string) mKs.IBusClient {
-	log := mL1.NewLogBuf(mL1.OptIsTerm(true), mL1.OptPrefix("ClientBusHttp"))
+	param := &log_buf.LogBufParam{
+		IsTerm_: safe_bool.NewSafeBool(true),
+		Prefix_: "ClientBusHttp",
+	}
+	log := mL1.NewLogBuf(param)
 	log.Debug("NewClientBusHttp()")
 	mL0.Hassert(urlRemote != "", "NewClientBusHttp(): urlRemote is empty")
 	kCtx := kctx.GetKernelCtx()
@@ -129,7 +135,7 @@ func (sf *ClientBusHttp) Subscribe(handler mKs.IBusHandlerSubscribe) mKs.IResult
 }
 
 // SendRequest -- отправляет в дистанционную шину запрос.
-func (sf *ClientBusHttp) SendRequest(topic *mKd.Topic, binReq []byte) mL0.IResult[[]byte] {
+func (sf *ClientBusHttp) SendRequest(topic *topic.ATopic, 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 := &msg_serve.ServeReq{
@@ -163,7 +169,7 @@ func (sf *ClientBusHttp) SendRequest(topic *mKd.Topic, binReq []byte) mL0.IResul
 		err := fmt.Errorf("ClientBusHttp.SendRequest(): resp uuid(%v) bad", resp.Uuid_)
 		return mL0.NewErr[[]byte](err)
 	}
-	return mL0.NewRes(resp.BinResp_)
+	return mL0.NewOk(resp.BinResp_)
 }
 
 // RegisterServe -- регистрирует в локальной шине обработчик.
@@ -176,11 +182,11 @@ func (sf *ClientBusHttp) RegisterServe(handler mKs.IBusHandlerServe) mL0.IResult
 		err := fmt.Errorf("ClientBusHttp.RegisterServe(): in register serve to bus, err=\n\t%v", res.Err())
 		return mL0.NewErr[bool](err)
 	}
-	return mL0.NewRes(true)
+	return mL0.NewOk(true)
 }
 
 // Publish -- публикует сообщение в дистанционной шину.
-func (sf *ClientBusHttp) Publish(topic *mKd.Topic, binMsg []byte) mL0.IResult[bool] {
+func (sf *ClientBusHttp) Publish(topic *topic.ATopic, binMsg []byte) mL0.IResult[bool] {
 	_uuid, err := uuid.NewV6()
 	mL1.Hassert()(err == nil, "ClientBusHttp.Publish(): in generate UUID v6, err=\n\t%v", err)
 	req := &msg_pub.PublishReq{
@@ -214,7 +220,7 @@ func (sf *ClientBusHttp) Publish(topic *mKd.Topic, binMsg []byte) mL0.IResult[bo
 		err := fmt.Errorf("ClientBusHttp.Publish(): resp uuid(%v) bad", resp.Uuid_)
 		return mL0.NewErr[bool](err)
 	}
-	return mL0.NewRes(true)
+	return mL0.NewOk(true)
 }
 
 // Единый обработчик запросов.
@@ -240,7 +246,7 @@ func (sf *ClientBusHttp) makePost(hReq *http.Request) mKs.IResult[[]byte] {
 			err)
 		return mL0.NewErr[[]byte](err)
 	}
-	return mL0.NewRes(binBody)
+	return mL0.NewOk(binBody)
 }
 
 // Log -- возвращает локальный лог клиента.
@@ -249,6 +255,6 @@ func (sf *ClientBusHttp) Log() mKs.ILogBuf {
 }
 
 // IsWork -- возвращает признак работы.
-func (sf *ClientBusHttp) IsWork() bool {
+func (sf *ClientBusHttp) IsWork() mKs.EBool {
 	return sf.bus.IsWork()
 }

+ 3 - 1
v4/lev2/kbus_http/client_bus_http/client_bus_http_test.go

@@ -34,7 +34,9 @@ type tester struct {
 }
 
 var (
-	qNameSub  = defs.NewTopic("test_topic_sub")
+	//go:fix inline
+	qNameSub = defs.NewTopic("test_topic_sub")
+	//go:fix inline
 	qNameServ = defs.NewTopic("test_topic_serv")
 )
 

+ 16 - 12
v4/lev2/kbus_http/kbus_http_test.go

@@ -26,6 +26,10 @@ type tester struct {
 	handServ *mock_hand_serve.MockHandlerServe
 }
 
+const (
+	test_uuid = "test_uuid"
+)
+
 var (
 	qNameSub  = defs.NewTopic("topic_sub")
 	qNameServ = defs.NewTopic("topic_serv")
@@ -64,7 +68,7 @@ func (sf *tester) unsubGood2() {
 	}
 	req := &msg_unsub.UnsubReq{
 		Name_: sf.handSub.Name_,
-		Uuid_: "test_uuid",
+		Uuid_: test_uuid,
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
 	body := strings.NewReader(string(binReq))
@@ -135,7 +139,7 @@ func (sf *tester) unsubGood1() {
 	}
 	req := &msg_unsub.UnsubReq{
 		Name_: sf.handSub.Name_,
-		Uuid_: "test_uuid",
+		Uuid_: test_uuid,
 	}
 	resp := Bus_.processUnsubRequest(req)
 	if resp.Status_ != "ok" {
@@ -154,7 +158,7 @@ func (sf *tester) unsubBad2() {
 	}
 	req := &msg_unsub.UnsubReq{
 		Name_: sf.handSub.Name_,
-		Uuid_: "test_uuid",
+		Uuid_: test_uuid,
 	}
 	resp := Bus_.processUnsubRequest(req)
 	if resp.Status_ == "ok" {
@@ -188,7 +192,7 @@ func (sf *tester) pubGood2() {
 	sf.t.Log("pubGood2")
 	req := &msg_pub.PublishReq{
 		Topic_:  qNameSub,
-		Uuid_:   "test_uuid",
+		Uuid_:   test_uuid,
 		BinMsg_: []byte("http_pub"),
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
@@ -254,7 +258,7 @@ func (sf *tester) pubBad2() {
 
 	req := &msg_pub.PublishReq{
 		Topic_:  qNameSub,
-		Uuid_:   "test_uuid",
+		Uuid_:   test_uuid,
 		BinMsg_: []byte("test_pub"),
 	}
 	resp := Bus_.processPublish(req)
@@ -272,7 +276,7 @@ func (sf *tester) pubGood1() {
 	}
 	req := &msg_pub.PublishReq{
 		Topic_:  qNameSub,
-		Uuid_:   "test_uuid",
+		Uuid_:   test_uuid,
 		BinMsg_: []byte("test_pub"),
 	}
 	_ = Bus_.processPublish(req)
@@ -316,7 +320,7 @@ func (sf *tester) subGood2() {
 	sf.t.Log("subGood2")
 	req := &msg_sub.SubscribeReq{
 		Topic_:   qNameServ,
-		Uuid_:    "test_uuid",
+		Uuid_:    test_uuid,
 		WebHook_: "http://localhost:18200/bus/pub/",
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
@@ -354,7 +358,7 @@ func (sf *tester) subBad3() {
 	sf.t.Log("subBad3")
 	req := &msg_sub.SubscribeReq{
 		Topic_:   qNameServ,
-		Uuid_:    "test_uuid",
+		Uuid_:    test_uuid,
 		WebHook_: "http://localhost:18200/bus/pub/",
 	}
 	defer func() {
@@ -376,7 +380,7 @@ func (sf *tester) subGood1() {
 	sf.t.Log("subGood1")
 	req := &msg_sub.SubscribeReq{
 		Topic_:   qNameServ,
-		Uuid_:    "test_uuid",
+		Uuid_:    test_uuid,
 		WebHook_: "http://localhost:18200/bus/",
 	}
 	defer func() {
@@ -447,7 +451,7 @@ func (sf *tester) reqBad4() {
 	defer sf.handServ.IsBad_.Reset()
 	req := &msg_serve.ServeReq{
 		Topic_:  sf.handServ.Topic_,
-		Uuid_:   "test_uuid",
+		Uuid_:   test_uuid,
 		BinReq_: []byte("test_msg"),
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
@@ -484,7 +488,7 @@ func (sf *tester) reqGood1() {
 	sf.t.Log("reqGood1")
 	req := &msg_serve.ServeReq{
 		Topic_:  sf.handServ.Topic_,
-		Uuid_:   "test_uuid",
+		Uuid_:   test_uuid,
 		BinReq_: []byte("test_msg"),
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
@@ -526,7 +530,7 @@ func (sf *tester) reqBad3() {
 	sf.t.Log("reqBad3")
 	req := &msg_serve.ServeReq{
 		Topic_:  qNameBad,
-		Uuid_:   "test_uuid",
+		Uuid_:   test_uuid,
 		BinReq_: []byte("test_msg"),
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")

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

@@ -9,7 +9,7 @@ import (
 	"syscall"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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"
 )
@@ -26,7 +26,7 @@ type kernelKeeper struct {
 var (
 	kernKeep *kernelKeeper
 	block    sync.Mutex
-	qName    = defs.NewStreamName("kernel_keeper")
+	qName    = stream_name.NewAStreamName("kernel_keeper")
 )
 
 // GetKernelKeeper -- возвращает новый сторож системных сигналов.

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

@@ -6,6 +6,7 @@ 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"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kbus_local"
@@ -17,7 +18,7 @@ import (
 type kModule struct {
 	kCtx      mKs.IKernelCtx
 	ctx       mKs.ILocalCtx
-	name      *mKd.ModuleName
+	name      *module_name.AModuleName
 	bus       mKs.IKernelBus
 	timePhase mKs.ISafeInt
 	strLive   mKs.ISafeString
@@ -25,7 +26,7 @@ type kModule struct {
 }
 
 // NewKernelModule -- возвращает новый модуль на основе ядра.
-func NewKernelModule(name *mKd.ModuleName) mKs.IKernelModule {
+func NewKernelModule(name *module_name.AModuleName) mKs.IKernelModule {
 	mL0.Hassert(name != nil, "NewKernelModule(): name==nil")
 	kCtx := kctx.GetKernelCtx()
 	sf := &kModule{
@@ -62,7 +63,7 @@ func (sf *kModule) Run() {
 }
 
 // Name -- возвращает уникальное имя модуля.
-func (sf *kModule) Name() *mKd.ModuleName {
+func (sf *kModule) Name() *module_name.AModuleName {
 	return sf.name
 }
 

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

@@ -11,7 +11,7 @@ package mod_stat
 import (
 	"time"
 
-	mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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"
@@ -25,11 +25,11 @@ type ModStat struct {
 	timeMinute mKs.ISafeInt             // Интервал ожидания минутного таймера, мсек
 	statMin    *mod_stat_day.ModStatDay // Объект статистики 60 минут
 	statDay    *mod_stat_day.ModStatDay // Объект статистики за последние 24 часа
-	name       *mKd.ModuleName
+	name       *module_name.AModuleName
 }
 
 // NewModStat -- возвращает новую статистику модуля.
-func NewModStat(name *mKd.ModuleName) *ModStat {
+func NewModStat(name *module_name.AModuleName) *ModStat {
 	mKh.Hassert(name != nil, "NewModuleStat(): name==nil")
 	sf := &ModStat{
 		statSec:    mod_stat_sec.NewModStatSec(),

+ 11 - 8
v4/lev2/kmonolit/kmonolit.go

@@ -6,8 +6,10 @@ import (
 	"sync"
 
 	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"
+	"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/lev2/kctx"
@@ -19,10 +21,10 @@ type kMonolit struct {
 	lCtx    mKs.ILocalCtx
 	log     mKs.ILogBuf
 	name    string
-	isLocal bool
+	isLocal kspec.EBool
 	isWork  mKs.ISafeBool
 	isEnd   mKs.ISafeBool
-	dict    map[*mKd.ModuleName]mKs.IKernelModule // Словарь модулей монолита
+	dict    map[*module_name.AModuleName]mKs.IKernelModule // Словарь модулей монолита
 }
 
 var (
@@ -48,10 +50,10 @@ func GetMonolit(name string) *kMonolit {
 		kCtx:    kCtx,
 		lCtx:    lCtx,
 		name:    name,
-		dict:    map[*mKd.ModuleName]mKs.IKernelModule{},
+		dict:    map[*module_name.AModuleName]mKs.IKernelModule{},
 		isWork:  mL1.NewSafeBool(),
 		isEnd:   mL1.NewSafeBool(),
-		isLocal: isLocal,
+		isLocal: ebool.NewEBool(isLocal),
 	}
 	sf.log = sf.lCtx.Log()
 	sf.kCtx.Set("monolitName", name, "name of monolit")
@@ -112,13 +114,14 @@ func (sf *kMonolit) Run() {
 }
 
 // IsLocal -- возвращает признак локальной шины.
-func (sf *kMonolit) IsLocal() bool {
+func (sf *kMonolit) IsLocal() kspec.EBool {
 	return sf.isLocal
 }
 
 // IsWork -- возвращает признак работы монолита.
-func (sf *kMonolit) IsWork() bool {
-	return sf.isWork.Get()
+func (sf *kMonolit) IsWork() kspec.EBool {
+	res := sf.isWork.Get()
+	return ebool.NewEBool(res)
 }
 
 // Ожидание завершения работы монолита.

+ 2 - 1
v4/lev2/kmonolit/kmonolit_test.go

@@ -6,6 +6,7 @@ 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"
@@ -63,7 +64,7 @@ type mod struct {
 	mKs.IKernelModule
 }
 
-func newMod(name *mKd.ModuleName) mKs.IKernelModule {
+func newMod(name *module_name.AModuleName) mKs.IKernelModule {
 	sf := &mod{
 		IKernelModule: kmodule.NewKernelModule(name),
 	}

+ 9 - 7
v4/lev2/kserv_http/kserv_http.go

@@ -10,12 +10,13 @@ import (
 	"sync"
 	"time"
 
-	"github.com/gofiber/fiber/v2/middleware/compress"
-	"github.com/gofiber/fiber/v2/middleware/filesystem"
-	"github.com/gofiber/fiber/v2/middleware/monitor"
 	"github.com/gofiber/fiber/v3"
+	"github.com/gofiber/fiber/v3/middleware/compress"
+	"github.com/gofiber/fiber/v3/middleware/filesystem"
+	"github.com/gofiber/fiber/v3/middleware/monitor"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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"
@@ -23,7 +24,7 @@ import (
 )
 
 var (
-	streamName = defs.NewStreamName("kernel_server_http") // Контрольная строка для ожидателя потока
+	streamName = stream_name.NewAStreamName("kernel_server_http") // Контрольная строка для ожидателя потока
 )
 
 // kServHttp -- встроенный HTTP-сервер.
@@ -103,8 +104,9 @@ func GetKernelServHttp() mKs.IKernelServerHttp {
 }
 
 // IsWork -- возвращает признак работы.
-func (sf *kServHttp) IsWork() bool {
-	return sf.isWork.Get()
+func (sf *kServHttp) IsWork() mKs.EBool {
+	res := sf.isWork.Get()
+	return ebool.NewEBool(res)
 }
 
 // Log -- возвращает локальный лог.

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

@@ -31,7 +31,7 @@ func GetKservHttpStd() mL0.IResult[*kServHttpStd] {
 	mu.Lock()
 	defer mu.Unlock()
 	if kServ != nil {
-		return mL0.NewRes(kServ)
+		return mL0.NewOk(kServ)
 	}
 	log := mL1.NewLogBuf(mL1.OptIsTerm(true), mL1.OptPrefix("kServHttpStd"))
 	log.Debug("GetKservHttpStd()")
@@ -43,7 +43,7 @@ func GetKservHttpStd() mL0.IResult[*kServHttpStd] {
 		port: resPort.Ok().Get(),
 	}
 	kServ = sf
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // Run -- запускает сервер вы работу.

+ 19 - 11
v4/lev2/kstore_kv/kstore_kv.go

@@ -10,15 +10,19 @@ import (
 	"github.com/dgraph-io/badger/v4"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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/log_buf"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 )
 
 var (
-	storeStreamName = defs.NewStreamName("kstore_kv") // Имя потока для ожидателя потоков
+	storeStreamName = stream_name.NewAStreamName("kstore_kv") // Имя потока для ожидателя потоков
 )
 
 // kStoreKv -- локальное хранилище ядра.
@@ -47,7 +51,11 @@ func GetKernelStore() mKs.IKernelStoreKv {
 		return kernStore
 	}
 	kCtx := kctx.GetKernelCtx()
-	log := mL1.NewLogBuf(mL1.OptIsTerm(true), mL1.OptPrefix("kStoreKv"))
+	param := &log_buf.LogBufParam{
+		Prefix_: "kStoreKv",
+		IsTerm_: safe_bool.NewSafeBool(true),
+	}
+	log := mL1.NewLogBuf(param)
 	sf := &kStoreKv{
 		kCtx:   kCtx,
 		lCtx:   mL1.NewLocalCtx(kCtx.Ctx()),
@@ -67,7 +75,7 @@ func (sf *kStoreKv) Log() mKs.ILogBuf {
 }
 
 // Set -- устанавливает значение по ключу.
-func (sf *kStoreKv) Set(key string, val []byte) mL0.IResult[bool] {
+func (sf *kStoreKv) Set(key string, val []byte) mL0.IResult[kspec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("Set(): key='%v'", key)
@@ -79,9 +87,9 @@ func (sf *kStoreKv) Set(key string, val []byte) mL0.IResult[bool] {
 	if err != nil {
 		err := fmt.Errorf("Set(): key=%v, err=\n\t%w", key, err)
 		sf.log.Err(err.Error())
-		return mL0.NewErr[bool](err)
+		return mL0.NewErr[kspec.EBool](err)
 	}
-	return mL0.NewRes(true)
+	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // Get -- возвращает значение по ключу.
@@ -104,7 +112,7 @@ func (sf *kStoreKv) Get(key string) mL0.IResult[[]byte] {
 		sf.log.Err(err.Error())
 		return mL0.NewErr[[]byte](err)
 	}
-	return mL0.NewRes(binVal)
+	return mL0.NewOk(binVal)
 }
 
 // ByPrefix -- фильтрует ключи по префиксу.
@@ -137,11 +145,11 @@ func (sf *kStoreKv) ByPrefix(prefix string) mL0.IResult[[]string] {
 		err := fmt.Errorf("ByPrefix(): in find, err=\n\t%w", err)
 		return mL0.NewErr[[]string](err)
 	}
-	return mL0.NewRes(lstKey)
+	return mL0.NewOk(lstKey)
 }
 
 // Delete -- удалить ключ из хранилища.
-func (sf *kStoreKv) Delete(key string) mL0.IResult[bool] {
+func (sf *kStoreKv) Delete(key string) mL0.IResult[kspec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("Delete(): key='%v'", key)
@@ -153,9 +161,9 @@ func (sf *kStoreKv) Delete(key string) mL0.IResult[bool] {
 	if err != nil {
 		err := fmt.Errorf("Delete(): key=%v, err=\n\t%w", key, err)
 		sf.log.Err(err.Error())
-		return mL0.NewErr[bool](err)
+		return mL0.NewErr[kspec.EBool](err)
 	}
-	return mL0.NewRes(true)
+	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // Открывает базу при создании.

+ 2 - 2
v4/lev2/kstore_kv/kstore_kv_test.go

@@ -5,7 +5,7 @@ import (
 	"testing"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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"
@@ -109,7 +109,7 @@ func (sf *tester) set() {
 }
 
 var (
-	qName = defs.NewStreamName("123")
+	qName = stream_name.NewAStreamName("123")
 )
 
 // Закрытие хранилища.

+ 11 - 9
v4/lev2/kstore_kv_std/kv_bucket_base/dict_rec/dict_rec.go

@@ -6,49 +6,51 @@ import (
 	"sync"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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-бакета.
 type DictRec struct {
-	dict  map[*defs.StoreKey]mKs.IRecKv
+	dict  map[*store_key.AStoreKey]mKs.IRecKv
 	block sync.RWMutex
 }
 
 // NewDictRec -- создание нового потокобезопасного словаря KV.
 func NewDictRec() *DictRec {
 	sf := &DictRec{
-		dict: map[*defs.StoreKey]mKs.IRecKv{},
+		dict: map[*store_key.AStoreKey]mKs.IRecKv{},
 	}
 	_ = mKs.IDictRec(sf)
 	return sf
 }
 
 // Get -- получение значения по ключу.
-func (sf *DictRec) Get(key *defs.StoreKey) mL0.IOption[mKs.IRecKv] {
+func (sf *DictRec) Get(key *store_key.AStoreKey) mL0.IOption[mKs.IRecKv] {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
 	rec, isOk := sf.dict[key]
 	if !isOk {
 		return mL0.NewNone[mKs.IRecKv]()
 	}
-	return mL0.NewOpt(rec)
+	return mL0.NewSome(rec)
 }
 
 // Set -- установка значения по ключу.
-func (sf *DictRec) Set(rec mKs.IRecKv) mL0.IResult[bool] {
+func (sf *DictRec) Set(rec mKs.IRecKv) mL0.IResult[kspec.EBool] {
 	if rec == nil {
-		return mL0.NewErr[bool](fmt.Errorf("DictRec.Set(): rec is nil"))
+		return mL0.NewErr[kspec.EBool](fmt.Errorf("DictRec.Set(): rec is nil"))
 	}
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	sf.dict[rec.Meta().Key()] = rec
-	return mL0.NewRes(true)
+	return mL0.NewOk(ebool.NewEBool(true))
 }
 
 // Del -- удаление значения по ключу.
-func (sf *DictRec) Del(key *defs.StoreKey) {
+func (sf *DictRec) Del(key *store_key.AStoreKey) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	delete(sf.dict, key)

+ 3 - 3
v4/lev2/kstore_kv_std/kv_bucket_base/dict_rec/dict_rec_test.go

@@ -3,7 +3,7 @@ package dict_rec
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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/kstore_kv_std/rec_kv"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kstore_kv_std/rec_meta"
@@ -53,9 +53,9 @@ func (sf *tester) set_good1() {
 
 // Возвращает новую запись для тестов.
 func (sf *tester) new_rec(key string) IRecKv {
-	_key := defs.NewStoreKey(key)
+	_key := store_key.NewAStoreKey(key)
 	meta := rec_meta.NewRecMeta(_key)
-	val := rec_val.NewRecVal(meta.Key(), []byte(key+"_val"))
+	val := rec_val.NewRecVal(meta.Key_, []byte(key+"_val"))
 	rec := rec_kv.NewRecKv(meta, val)
 	return rec
 }

+ 14 - 14
v4/lev2/kstore_kv_std/kv_bucket_base/kv_bucket_base.go

@@ -3,9 +3,9 @@ package kv_bucket_base
 
 import (
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 
 // KvBucketBase -- базовый бакет хранилища KV.
@@ -20,15 +20,15 @@ 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"` // Лимит размера бакета
-	CreatedAt_ kspec.ITime                      `json:"created_at"` // Время создания бакета
-	UpdatedAt_ kspec.ITimeMut                   `json:"updated_at"` // Время обновления бакета
-	Vers_      int                               `json:"vers"`       // Версия бакета
-	dictRec    map[defs.StoreKey]kspec.IRecKv // Словарь для хранения данных
+	Name_      string                               `json:"name"`       // Имя бакета
+	Level_     int                                  `json:"level"`      // Уровень бакета
+	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"` // Время обновления бакета
+	Vers_      int                                  `json:"vers"`       // Версия бакета
+	dictRec    map[store_key.AStoreKey]kspec.IRecKv // Словарь для хранения данных
 }
 
 // NewKvBucketBase -- создание нового базового бакета хранилища KV.
@@ -40,9 +40,9 @@ func NewKvBucketBase(name string, level int, number int) *KvBucketBase {
 		Name_:      name,
 		Level_:     level,
 		Number_:    number,
-		dictRec:    map[defs.StoreKey]kspec.IRecKv{},
-		CreatedAt_: voc.NewETimeAuto(),
-		UpdatedAt_: voc.NewETimeAutoMut(),
+		dictRec:    map[store_key.AStoreKey]kspec.IRecKv{},
+		CreatedAt_: etime.NewETimeAuto(),
+		UpdatedAt_: etime.NewETimeAutoMut(),
 	}
 	return sf
 }

+ 3 - 3
v4/lev2/kstore_kv_std/rec_kv/rec_kv_test.go

@@ -3,7 +3,7 @@ package rec_kv
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kstore_kv_std/rec_meta"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kstore_kv_std/rec_val"
 )
@@ -34,9 +34,9 @@ func (sf *tester) new_good1() {
 			sf.t.Fatalf("new_good1(): panic!=nil")
 		}
 	}()
-	key := defs.NewStoreKey("test_key")
+	key := store_key.NewAStoreKey("test_key")
 	meta := rec_meta.NewRecMeta(key)
-	val := rec_val.NewRecVal(meta.Key(), []byte("test_val"))
+	val := rec_val.NewRecVal(meta.Key_, []byte("test_val"))
 	rec := NewRecKv(meta, val)
 	if rec.Meta() != meta {
 		sf.t.Fatalf("new_good1(): rec.Meta()!=meta")

+ 11 - 11
v4/lev2/kstore_kv_std/rec_meta/rec_meta.go

@@ -2,10 +2,10 @@
 package rec_meta
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
 )
 
 var (
@@ -19,11 +19,11 @@ var (
 // Даже если ключ содержит пробелы или экранированное форматирование
 // JSON их экранирует внутри.
 type RecMeta struct {
-	Key_       *defs.StoreKey `json:"key"`       // Ключ
-	Vers_      int64            `json:"vers"`      // Версия записи
-	Operation_ string           `json:"operation"` // Тип операции над записью
-	createdAt_ kspec.ITime     `voc:"created_at"` // Дата создания записи
-	updateAt_  kspec.ITimeMut  `voc:"update_at"`  // Дата последнего обновления
+	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"`  // Дата последнего обновления
 
 	// Хеш мета-информации записи (вместе с значением, но без этого поля разумеется)
 	Sha_    string `json:"sha"`
@@ -31,14 +31,14 @@ type RecMeta struct {
 }
 
 // NewRecMeta -- создание новой мета-информации записи KV-хранилища.
-func NewRecMeta(key *defs.StoreKey) *RecMeta {
+func NewRecMeta(key *store_key.AStoreKey) *RecMeta {
 	hassert(key != nil, "NewRecMeta: key==nil")
 	sf := &RecMeta{
 		Key_:       key,
 		Vers_:      1,
 		Operation_: "create",
-		createdAt_: voc.NewETimeAuto(),
-		updateAt_:  voc.NewETimeAutoMut(),
+		createdAt_: etime.NewETimeAuto(),
+		updateAt_:  etime.NewETimeAutoMut(),
 	}
 	_ = kspec.IRecMeta(sf)
 	return sf
@@ -47,7 +47,7 @@ func NewRecMeta(key *defs.StoreKey) *RecMeta {
 // Key -- ключ записи.
 //
 //go:fix inline
-func (sf *RecMeta) Key() *defs.StoreKey {
+func (sf *RecMeta) Key() *store_key.AStoreKey {
 	return sf.Key_
 }
 

+ 7 - 7
v4/lev2/kstore_kv_std/rec_meta/rec_meta_test.go

@@ -3,7 +3,7 @@ package rec_meta
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 )
 
 type tester struct {
@@ -22,19 +22,19 @@ func TestRecMeta(t *testing.T) {
 // Проверка методов мета-информации.
 func (sf *tester) gets() {
 	sf.t.Log("gets")
-	if key := sf.meta.Key(); key.Get() != "test" {
+	if key := sf.meta.Key_; key.Get() != "test" {
 		sf.t.Fatalf("gets(): key=%s", key)
 	}
-	if vers := sf.meta.Vers(); vers != 1 {
+	if vers := sf.meta.Vers_; vers != 1 {
 		sf.t.Fatalf("gets(): vers=%d", vers)
 	}
-	if createdAt := sf.meta.CreatedAt(); createdAt.Get() == "" {
+	if createdAt := sf.meta.createdAt_; createdAt.Get() == "" {
 		sf.t.Fatalf("gets(): createdAt is empty")
 	}
-	if updatedAt := sf.meta.UpdateAt(); updatedAt.Get() != "" {
+	if updatedAt := sf.meta.updateAt_; updatedAt.Get() != "" {
 		sf.t.Fatalf("gets(): updatedAt is not empty")
 	}
-	if operation := sf.meta.Operation(); operation != "create" {
+	if operation := sf.meta.Operation_; operation != "create" {
 		sf.t.Fatalf("gets(): operation(%v)!='create'", operation)
 	}
 	if sf.meta.Offset_ != 0 {
@@ -59,7 +59,7 @@ func (sf *tester) newBad1() {
 			sf.t.Fatalf("newBad1(): panic!=nil")
 		}
 	}()
-	key := defs.NewStoreKey("test")
+	key := store_key.NewAStoreKey("test")
 	sf.meta = NewRecMeta(key)
 	if sf.meta == nil {
 		sf.t.Fatalf("newBad1(): sf.meta==nil")

+ 5 - 5
v4/lev2/kstore_kv_std/rec_val/rec_val.go

@@ -2,7 +2,7 @@
 package rec_val
 
 import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"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"
 )
@@ -17,12 +17,12 @@ var (
 // в виде JSON-строки, без форматирования для того,
 // чтобы можно было файл значений бакета писать построчно.
 type RecVal struct {
-	Key_ *defs.StoreKey `json:"key"` // Ключ
-	Val_ []byte           `json:"val"` // Значение
+	Key_ *store_key.AStoreKey `json:"key"` // Ключ
+	Val_ []byte               `json:"val"` // Значение
 }
 
 // NewRecVal -- создание нового значения KV-хранилища.
-func NewRecVal(key *defs.StoreKey, val []byte) *RecVal {
+func NewRecVal(key *store_key.AStoreKey, val []byte) *RecVal {
 	hassert(key != nil, "NewRecVal: key is empty")
 	if val == nil {
 		val = []byte{}
@@ -36,7 +36,7 @@ func NewRecVal(key *defs.StoreKey, val []byte) *RecVal {
 }
 
 // Key -- ключ.
-func (sf *RecVal) Key() *defs.StoreKey {
+func (sf *RecVal) Key() *store_key.AStoreKey {
 	return sf.Key_
 }
 

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

@@ -3,7 +3,7 @@ package rec_val
 import (
 	"testing"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/store_key"
 )
 
 type tester struct {
@@ -27,7 +27,7 @@ func (sf *tester) new() {
 // Ключ -- не пустая строка.
 func (sf *tester) newGood1() {
 	sf.t.Log("newGood1")
-	key := defs.NewStoreKey("key")
+	key := store_key.NewAStoreKey("key")
 	sf.recVal = NewRecVal(key, nil)
 	if sf.recVal == nil {
 		sf.t.Fatalf("newGood1(): recVal==nil")

+ 19 - 10
v4/lev2/kwg/kwg.go

@@ -8,17 +8,21 @@ import (
 	"sync"
 
 	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/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/log_buf"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
 // kernelWg -- именованный ожидатель потоков ядра.
 type kernelWg struct {
 	sync.RWMutex
 	ctx        context.Context
-	dictStream map[*mKd.StreamName]bool // Словарь имён потоков с признаком работы
+	dictStream map[*stream_name.AStreamName]bool // Словарь имён потоков с признаком работы
 	isWork     mKs.ISafeBool
 	log        mKs.ILogBuf
 }
@@ -37,11 +41,15 @@ func GetKernelWg(ctx context.Context) mKs.IKernelWg {
 		return kernWg
 	}
 	mKh.Hassert(ctx != nil, "GetKernelWg(): ctx==nil")
+	paramLogBuf := &log_buf.LogBufParam{
+		IsTerm_: safe_bool.NewSafeBool(true),
+		Prefix_: "kernelWg",
+	}
 	sf := &kernelWg{
 		ctx:        ctx,
-		dictStream: map[*mKd.StreamName]bool{},
+		dictStream: map[*stream_name.AStreamName]bool{},
 		isWork:     mL1.NewSafeBool(),
-		log:        mL1.NewLogBuf(mL1.OptIsTerm(true), mL1.OptPrefix("kernelWg")),
+		log:        mL1.NewLogBuf(paramLogBuf),
 	}
 	sf.log.Debug("GetKernelWg(): run")
 	go sf.close()
@@ -63,15 +71,16 @@ func (sf *kernelWg) Len() int {
 }
 
 // IsWork -- возвращает признак работы ядра.
-func (sf *kernelWg) IsWork() bool {
-	return sf.isWork.Get()
+func (sf *kernelWg) IsWork() kspec.EBool {
+	res := sf.isWork.Get()
+	return ebool.NewEBool(res)
 }
 
 // List -- возвращает список имён потоков на ожидании.
-func (sf *kernelWg) List() []*mKd.StreamName {
+func (sf *kernelWg) List() []*stream_name.AStreamName {
 	sf.RLock()
 	defer sf.RUnlock()
-	lst := make([]*mKd.StreamName, 0, len(sf.dictStream))
+	lst := make([]*stream_name.AStreamName, 0, len(sf.dictStream))
 	for name := range sf.dictStream {
 		lst = append(lst, name)
 	}
@@ -79,7 +88,7 @@ func (sf *kernelWg) List() []*mKd.StreamName {
 }
 
 // Done -- удаляет поток из ожидания.
-func (sf *kernelWg) Done(name *mKd.StreamName) {
+func (sf *kernelWg) Done(name *stream_name.AStreamName) {
 	sf.Lock()
 	defer sf.Unlock()
 	delete(sf.dictStream, name)
@@ -98,7 +107,7 @@ func (sf *kernelWg) Wait() {
 }
 
 // Add -- добавляет поток в ожидание.
-func (sf *kernelWg) Add(name *mKd.StreamName) {
+func (sf *kernelWg) Add(name *stream_name.AStreamName) {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("Add(): stream='%v'", name)

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

@@ -5,7 +5,7 @@ import (
 	"testing"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
@@ -33,7 +33,7 @@ func TestKernelWG(t *testing.T) {
 }
 
 var (
-	qName = defs.NewStreamName("test_stream")
+	qName = stream_name.NewAStreamName("test_stream")
 )
 
 // Попытка добавления после закрытия ожидателя.
@@ -93,7 +93,7 @@ func (sf *tester) wait() {
 	sf.fnCancel()
 	for {
 		time.Sleep(time.Millisecond * 10)
-		if !sf.wg.IsWork() {
+		if !sf.wg.IsWork().Get() {
 			break
 		}
 	}
@@ -117,7 +117,7 @@ func (sf *tester) newGood1() {
 	if sf.wg == nil {
 		sf.t.Fatalf("newGood1(): KernelWg==nil")
 	}
-	if !sf.wg.IsWork() {
+	if !sf.wg.IsWork().Get() {
 		sf.t.Fatalf("wait(): isWork==false")
 	}
 	wg := GetKernelWg(sf.ctx)

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

@@ -5,18 +5,18 @@ import (
 	"fmt"
 
 	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/topic"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // LogTopic -- элемент лога шины.
 type LogTopic struct {
-	topic  *mKd.Topic    // Топик, куда публиковать лог
+	topic  *topic.ATopic  // Топик, куда публиковать лог
 	client mKs.IBusClient // С помощью чего публиковать лог
 }
 
 // NewLogTopic -- возвращает новый элемент лога.
-func NewLogTopic(topic *mKd.Topic, client mKs.IBusClient) mL0.IResult[*LogTopic] {
+func NewLogTopic(topic *topic.ATopic, client mKs.IBusClient) mL0.IResult[*LogTopic] {
 	mL0.Hassert(topic != nil, "NewLogTopic(): topic==nil")
 	if client == nil {
 		err := fmt.Errorf("NewLogTopic(): IBusClient==nil")
@@ -26,15 +26,15 @@ func NewLogTopic(topic *mKd.Topic, client mKs.IBusClient) mL0.IResult[*LogTopic]
 		topic:  topic,
 		client: client,
 	}
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // Pub -- публикует сообщение в топик.
-func (sf *LogTopic) Pub(binMsg []byte) mL0.IResult[bool] {
+func (sf *LogTopic) Pub(binMsg []byte) mL0.IResult[mKs.EBool] {
 	res := sf.client.Publish(sf.topic, binMsg)
 	if res.IsErr() {
 		err := fmt.Errorf("LogTopic.Pub(): in pub with client, err=\n\t%v", res.Err())
-		return mL0.NewErr[bool](err)
+		return mL0.NewErr[mKs.EBool](err)
 	}
 	return res
 }

+ 11 - 9
v4/lev2/mock_hand_serve/mock_hand_serve.go

@@ -7,6 +7,8 @@ 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/handler_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
@@ -14,21 +16,21 @@ import (
 
 // MockHandlerServe -- мок-обработчик входящих запросов.
 type MockHandlerServe struct {
-	IsBad_ mKs.ISafeBool     // Признак сбоя при вызове
-	Msg_   []byte            // Для обратного вызова
-	Name_  *mKd.HandlerName // Уникальное имя мок-обработчика подписки
-	Topic_ *mKd.Topic       // Имя топика подписки
+	IsBad_ mKs.ISafeBool              // Признак сбоя при вызове
+	Msg_   []byte                     // Для обратного вызова
+	Name_  *handler_name.AHandlerName // Уникальное имя мок-обработчика подписки
+	Topic_ *topic.ATopic              // Имя топика подписки
 	block  sync.Mutex
 }
 
 // NewMockHandlerServe -- возвращает новый обработчик подписки.
-func NewMockHandlerServe(topic *mKd.Topic, name string) *MockHandlerServe {
+func NewMockHandlerServe(topic *topic.ATopic, name string) *MockHandlerServe {
 	mKh.Hassert(topic.Get() != "", "NewMockHandlerServe(): topic is empty")
 	mKh.Hassert(name != "", "NewMockHandlerServe(): name is empty")
 	sf := &MockHandlerServe{
 		Topic_: topic,
 		Name_:  mKd.NewHandlerName(name),
-		IsBad_: safe_bool.NewSafeBool(),
+		IsBad_: safe_bool.NewSafeBool(false),
 	}
 	_ = mKs.IBusHandlerServe(sf)
 	return sf
@@ -43,15 +45,15 @@ func (sf *MockHandlerServe) FnBack(binMsg []byte) mL0.IResult[[]byte] {
 		return mL0.NewErr[[]byte](err)
 	}
 	sf.Msg_ = binMsg
-	return mL0.NewRes(binMsg)
+	return mL0.NewOk(binMsg)
 }
 
 // Возвращает уникальное имя обработчика подписки.
-func (sf *MockHandlerServe) Topic() *mKd.Topic {
+func (sf *MockHandlerServe) Topic() *topic.ATopic {
 	return sf.Topic_
 }
 
 // Возвращает топик для обработчика подписки.
-func (sf *MockHandlerServe) Name() *mKd.HandlerName {
+func (sf *MockHandlerServe) Name() *handler_name.AHandlerName {
 	return sf.Name_
 }

+ 10 - 8
v4/lev2/mock_hand_sub_http/mock_hand_sub_http.go

@@ -7,21 +7,23 @@ import (
 	"sync"
 
 	mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 // MockHandSubHttp -- обработчик подписки по HTTP.
 type MockHandSubHttp struct {
-	Name_    *mKd.HandlerName // Уникальное имя обработчика
-	Topic_   *mKd.Topic       // Имя топика, на который подписан обработчик
-	WebHook_ string            // Куда обращаться при запросах
-	BinMsg_  []byte            // Последнее бинарное сообщение
+	Name_    *handler_name.AHandlerName // Уникальное имя обработчика
+	Topic_   *topic.ATopic              // Имя топика, на который подписан обработчик
+	WebHook_ string                     // Куда обращаться при запросах
+	BinMsg_  []byte                     // Последнее бинарное сообщение
 	block    sync.RWMutex
 }
 
 // NewMockHandSubHttp -- возвращает новый обработчик подписки по HTTP.
-func NewMockHandSubHttp(topic *mKd.Topic, webHook string) mKs.IBusHandlerSubscribe {
+func NewMockHandSubHttp(topic *topic.ATopic, webHook string) mKs.IBusHandlerSubscribe {
 	mKh.Hassert(topic.Get() != "", "NewHandlerHttpSub(): topic is empty")
 	mKh.Hassert(webHook != "", "NewHandlerHttpSub(): webHook is empty")
 	sf := &MockHandSubHttp{
@@ -33,12 +35,12 @@ func NewMockHandSubHttp(topic *mKd.Topic, webHook string) mKs.IBusHandlerSubscri
 }
 
 // Topic -- возвращает имя топика, на который подписан обработчик.
-func (sf *MockHandSubHttp) Topic() *mKd.Topic {
+func (sf *MockHandSubHttp) Topic() *topic.ATopic {
 	return sf.Topic_
 }
 
 // SetName -- устанавливает имя обработчика.
-func (sf *MockHandSubHttp) SetName(name *mKd.HandlerName) {
+func (sf *MockHandSubHttp) SetName(name *handler_name.AHandlerName) {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	mKh.Hassert(name != nil, "HandlerHttpSub.SetName(): name is empty")
@@ -46,7 +48,7 @@ func (sf *MockHandSubHttp) SetName(name *mKd.HandlerName) {
 }
 
 // Name -- возвращает уникальное имя обработчика.
-func (sf *MockHandSubHttp) Name() *mKd.HandlerName {
+func (sf *MockHandSubHttp) Name() *handler_name.AHandlerName {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
 	return sf.Name_

+ 8 - 6
v4/lev2/mock_hand_sub_local/mock_hand_sub.go

@@ -6,19 +6,21 @@ import (
 	"sync"
 
 	mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
 	mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
 )
 
 type MockHandlerSub struct {
-	Msg_   []byte            // Для обратного вызова
-	Name_  *mKd.HandlerName // Уникальное имя мок-обработчика подписки
-	Topic_ *mKd.Topic       // Имя топика подписки
+	Msg_   []byte                     // Для обратного вызова
+	Name_  *handler_name.AHandlerName // Уникальное имя мок-обработчика подписки
+	Topic_ *topic.ATopic              // Имя топика подписки
 	block  sync.RWMutex
 }
 
 // NewMockHandlerSub -- возвращает новый обработчик подписки.
-func NewMockHandlerSub(topic *mKd.Topic, localHook string) *MockHandlerSub {
+func NewMockHandlerSub(topic *topic.ATopic, localHook string) *MockHandlerSub {
 	mKh.Hassert(topic.Get() != "", "NewMockHandlerSub(): topic is empty")
 	mKh.Hassert(localHook != "", "NewMockHandlerSub(): name is empty")
 	sf := &MockHandlerSub{
@@ -44,11 +46,11 @@ func (sf *MockHandlerSub) FnBack(binMsg []byte) {
 }
 
 // Возвращает уникальное имя обработчика подписки.
-func (sf *MockHandlerSub) Topic() *mKd.Topic {
+func (sf *MockHandlerSub) Topic() *topic.ATopic {
 	return sf.Topic_
 }
 
 // Возвращает топик для обработчика подписки.
-func (sf *MockHandlerSub) Name() *mKd.HandlerName {
+func (sf *MockHandlerSub) Name() *handler_name.AHandlerName {
 	return sf.Name_
 }

+ 1 - 1
v4/lev2/wui/wui_button/wui_button_test.go

@@ -44,5 +44,5 @@ func (sf *tester) new() {
 // Функция обратного вызова.
 func (sf *tester) fnBack(dict map[string]string) mL0.IResult[string] {
 	sf.chCall <- "test"
-	return mL0.NewRes("test_click")
+	return mL0.NewOk("test_click")
 }

+ 1 - 1
v4/lev2/wui/wui_label/wui_label.go

@@ -26,7 +26,7 @@ func NewWuiLabel(text string) mL0.IResult[*WuiLabel] {
 	wCtx := wui_ctx.GetWuiCtx()
 	wCtx.Set(sf.Id(), sf, "WUI-метка")
 	_ = mWt.IWuiLabel(sf)
-	return mL0.NewRes(sf)
+	return mL0.NewOk(sf)
 }
 
 // Text -- возвращает текст метки.

+ 1 - 1
v4/lev2/wui/wui_test.go

@@ -33,5 +33,5 @@ func (sf *tester) get() {
 // Функция обратного вызова.
 func (sf *tester) fnClick(dict map[string]string) mL0.IResult[string] {
 	sf.t.Log("fnClick")
-	return mL0.NewRes("test_click")
+	return mL0.NewOk("test_click")
 }

+ 1 - 1
v4/lev3/mod_kctx/mod_kctx.go

@@ -56,6 +56,6 @@ func (sf *ModuleKernelCtx) Run() {
 }
 
 // IsWork -- признак работы модуля.
-func (sf *ModuleKernelCtx) IsWork() bool {
+func (sf *ModuleKernelCtx) IsWork() mKs.EBool {
 	return sf.kCtx.Wg().IsWork()
 }

Some files were not shown because too many files changed in this diff