Explorar o código

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

SVI hai 4 meses
pai
achega
c93456357b
Modificáronse 95 ficheiros con 499 adicións e 393 borrados
  1. 3 3
      v4/lev0/core_spec/ikernel_int.go
  2. 2 2
      v4/lev0/core_spec/iresult.go
  3. 2 2
      v4/lev0/core_spec/isafe_string.go
  4. 3 3
      v4/lev0/core_spec/itime.go
  5. 8 3
      v4/lev0/defs/defs.go
  6. 2 2
      v4/lev0/defs/stream_name/stream_name.go
  7. 5 5
      v4/lev0/etypes/estr/estr.go
  8. 1 1
      v4/lev0/etypes/etypes.go
  9. 2 2
      v4/lev0/lev0.go
  10. 4 4
      v4/lev0/option/option.go
  11. 16 12
      v4/lev0/option/option_test.go
  12. 4 4
      v4/lev0/result/result.go
  13. 7 7
      v4/lev0/result/result_test.go
  14. 14 14
      v4/lev0/voc/etime/etime.go
  15. 4 2
      v4/lev0/voc/etime/etime_test.go
  16. 1 1
      v4/lev0/voc/voc.go
  17. 2 2
      v4/lev1/kint/kint.go
  18. 15 12
      v4/lev1/kint/kint_test.go
  19. 3 2
      v4/lev1/lev1_test.go
  20. 6 5
      v4/lev1/local_ctx/ctx_value/ctx_value_test.go
  21. 2 2
      v4/lev1/local_ctx/local_ctx.go
  22. 1 1
      v4/lev1/local_ctx/local_ctx_test.go
  23. 21 14
      v4/lev1/log_buf/log_buf.go
  24. 1 1
      v4/lev1/log_buf/log_buf_test.go
  25. 2 2
      v4/lev1/log_buf/log_msg/log_msg.go
  26. 8 6
      v4/lev1/log_buf/log_msg/log_msg_test.go
  27. 1 1
      v4/lev1/lst_sort/lst_sort.go
  28. 2 2
      v4/lev1/lst_sort/lst_sort_test.go
  29. 4 4
      v4/lev1/safe_bool/safe_bool.go
  30. 14 11
      v4/lev1/safe_bool/safe_bool_test.go
  31. 3 3
      v4/lev1/safe_bool_react/safe_bool_react.go
  32. 18 13
      v4/lev1/safe_bool_react/safe_bool_react_test.go
  33. 7 7
      v4/lev1/safe_int/safe_int.go
  34. 21 16
      v4/lev1/safe_int/safe_int_test.go
  35. 8 8
      v4/lev1/safe_string/safe_string.go
  36. 21 18
      v4/lev1/safe_string/safe_string_test.go
  37. 8 3
      v4/lev2/kchan/kchan.go
  38. 3 2
      v4/lev2/kctx/kctx.go
  39. 4 2
      v4/lev2/kctx/kctx_test.go
  40. 2 2
      v4/lev2/kernel_keeper/kernel_keeper.go
  41. 13 5
      v4/lev2/kmodule/kmodule.go
  42. 8 3
      v4/lev2/kmonolit/kmonolit.go
  43. 3 3
      v4/lev2/kmonolit/kmonolit_test.go
  44. 6 3
      v4/lev2/kserv_http/kserv_http.go
  45. 4 4
      v4/lev2/kserv_http_std/kserv_http_std.go
  46. 2 2
      v4/lev2/kwg/kwg.go
  47. 2 1
      v4/lev2/kwg/kwg_test.go
  48. 2 1
      v4/lev2/log_topic/log_topic_test.go
  49. 9 9
      v4/lev2/lsi/kstore_kv/kstore_kv.go
  50. 4 3
      v4/lev2/lsi/kstore_kv/kstore_kv_test.go
  51. 2 2
      v4/lev2/lsi/store_ent/rec_meta/rec_meta_test.go
  52. 3 3
      v4/lev2/lti/bus_ent/handler_name/handler_name.go
  53. 4 4
      v4/lev2/lti/dot/msg_serve/msg_serve.go
  54. 3 2
      v4/lev2/lti/dot/msg_serve/msg_serve_test.go
  55. 3 3
      v4/lev2/lti/dot/msg_unsub/msg_unsub.go
  56. 3 2
      v4/lev2/lti/dot/msg_unsub/msg_unsub_test.go
  57. 3 3
      v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go
  58. 3 2
      v4/lev2/lti/kbus/dict_topic_serve/dict_topic_serve_test.go
  59. 14 9
      v4/lev2/lti/kbus_base/kbus_base.go
  60. 2 1
      v4/lev2/lti/kbus_base/kbus_base_test.go
  61. 8 8
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go
  62. 3 2
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http_test.go
  63. 11 11
      v4/lev2/lti/kbus_http/kbus_http.go
  64. 13 12
      v4/lev2/lti/kbus_http/kbus_http_test.go
  65. 1 1
      v4/lev2/wui/hx_url/hx_url.go
  66. 3 1
      v4/lev2/wui/hx_url/hx_url_test.go
  67. 6 6
      v4/lev2/wui/hx_url_method/hx_url_method.go
  68. 5 3
      v4/lev2/wui/hx_url_method/hx_url_method_test.go
  69. 4 4
      v4/lev2/wui/hx_url_patch/hx_url_patch.go
  70. 6 4
      v4/lev2/wui/hx_url_patch/hx_url_patch_test.go
  71. 3 3
      v4/lev2/wui/wui_button/wui_button.go
  72. 3 2
      v4/lev2/wui/wui_button/wui_button_test.go
  73. 7 5
      v4/lev2/wui/wui_hx/wui_hx_test.go
  74. 2 2
      v4/lev2/wui/wui_label/wui_label.go
  75. 5 2
      v4/lev2/wui/wui_label/wui_label_test.go
  76. 2 1
      v4/lev2/wui/wui_test.go
  77. 3 3
      v4/lev2/wui/wui_text/wui_text.go
  78. 5 3
      v4/lev2/wui/wui_text/wui_text_test.go
  79. 2 2
      v4/lev2/wui/wui_types/ihx_url_method.go
  80. 2 2
      v4/lev2/wui/wui_types/ihx_url_patch.go
  81. 2 2
      v4/lev2/wui/wui_types/iwui_text.go
  82. 3 3
      v4/lev2/wui/wui_widget/wui_widget.go
  83. 2 2
      v4/lev2/wui/wui_widget/wui_widget_test.go
  84. 8 6
      v4/lev3/mod_ent/module_name/module_name.go
  85. 1 1
      v4/lev3/mod_serv_http/btn_modules/btn_modules.go
  86. 1 1
      v4/lev3/mod_serv_http/btn_modules/btn_modules_test.go
  87. 1 1
      v4/lev3/mod_serv_http/btn_monolit/btn_monolit.go
  88. 4 3
      v4/lev3/mod_serv_http/btn_monolit/btn_monolit_test.go
  89. 1 1
      v4/lev3/mod_serv_http/http_api/http_api.go
  90. 1 1
      v4/lev3/mod_serv_http/http_api/http_api_test.go
  91. 2 1
      v4/lev3/mod_serv_http/mod_serv_http_test.go
  92. 6 3
      v4/lev3/mod_serv_http/page_module/page_module.go
  93. 13 11
      v4/lev3/mod_serv_http/page_module/page_module_test.go
  94. 7 5
      v4/lev3/mod_wui/mod_wui.go
  95. 5 4
      v4/lev3/mod_wui/mod_wui_test.go

+ 3 - 3
v4/lev0/core_spec/ikernel_int.go

@@ -15,9 +15,9 @@ type Int interface {
 	// Dec -- уменьшает число на 1
 	Dec()
 	// FromStr -- устанавливает значение из строки
-	FromStr(defs.ATxt) IResult[defs.Int]
+	FromStr(defs.ITxtFix) IResult[defs.Int]
 	// ToStr -- возвращает как строку
-	ToStr() defs.ATxt
+	ToStr() defs.ITxtFix
 	// FromByte -- устанавливает значение из байтов
 	FromByte([]byte) IResult[defs.Int]
 	// ToByte -- возвращает как срез байт
@@ -27,5 +27,5 @@ type Int interface {
 	// ToBool -- возвращает как булево значение
 	ToBool() bool
 	// Getenv -- устанавливает значение из окружения
-	Getenv(defs.ATxt) IResult[defs.Int]
+	Getenv(defs.ITxtFix) IResult[defs.Int]
 }

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

@@ -19,7 +19,7 @@ type IResult[T any] interface {
 	// Error -- возвращает строковое представление ошибки, если она есть.
 	Error() string
 	// Hassert -- проверяет, что нет ошибки (с паникой).
-	Hassert(msgFormat defs.ATxt, args ...any) T
+	Hassert(msgFormat defs.ITxtFix, args ...any) T
 	// Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-	Assert(msgFormat defs.ATxt, args ...any) T
+	Assert(msgFormat defs.ITxtFix, args ...any) T
 }

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

@@ -5,9 +5,9 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 // ISafeString -- интерфейс к потокобезопасной переменной.
 type ISafeString interface {
 	// Get -- возвращает хранимое значение потокобезопасной переменной
-	Get() defs.ITxtFix
+	Get() defs.ITxtMut
 	// Set -- устанавливает хранимое потокобезопасное значение
-	Set(defs.ITxtFix)
+	Set(defs.ITxtMut)
 	// Reset -- сбрасывает хранимое потокобезопасное значение
 	Reset()
 	// Byte -- возвращает байтовое представление строки

+ 3 - 3
v4/lev0/core_spec/itime.go

@@ -7,8 +7,8 @@ import (
 // ITime -- интерфейс времени.
 // Вывод: "2006-01-02 15:04:05.000 -07 MST".
 type ITime interface {
-	// Get -- получить время.
-	Get() defs.Time
+	// Time -- получить время.
+	Time() defs.ITimeFix
 	// String -- получить строковое представление времени.
 	String() string
 	// MarshalJSON -- сериализация в JSON себя
@@ -21,5 +21,5 @@ type ITime interface {
 type ITimeMut interface {
 	ITime
 	// Set -- установить время.
-	Set(val defs.Time)
+	Set(val defs.ITimeFix)
 }

+ 8 - 3
v4/lev0/defs/defs.go

@@ -44,8 +44,13 @@ type KTxt struct {
 	val ATxt
 }
 
+// TxtConstraint -- разрешает string и любые типы на его основе (например, ATxt).
+type TxtConstraint interface {
+	~string
+}
+
 // Txt -- создать новую строку.
-func Txt(msg ATxt, arg ...any) *KTxt {
+func Txt[T TxtConstraint](msg T, arg ...any) *KTxt {
 	_msg := fmt.Sprintf(string(msg), arg...)
 	sf := &KTxt{
 		val: ATxt(_msg),
@@ -157,9 +162,9 @@ func (e *Err) Len() Int {
 	return Int(len(e.err.Error()))
 }
 
-// Time -- метка времени.
+// ITimeFix -- метка времени.
 // Вывод: "2006-01-02 15:04:05.000 -07 MST".
-type Time KTxt
+type ITimeFix ITxtFix
 
 // BucketName -- имя сущности.
 type BucketName KTxt

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

@@ -12,7 +12,7 @@ type AStreamName struct {
 
 // NewAStreamName -- создать новое имя потока.
 func NewAStreamName(val defs.ITxtFix) *AStreamName {
-	helpers.Hassert(val != "", "NewAStreamName(): val is empty")
+	helpers.Hassert(val.Get() != "", "NewAStreamName(): val is empty")
 	sf := &AStreamName{
 		val: val,
 	}
@@ -27,6 +27,6 @@ func (sf *AStreamName) String() string {
 }
 
 // Get -- получить значение.
-func (sf *AStreamName) Get() defs.ITxtFix {
+func (sf *AStreamName) Name() defs.ITxtFix {
 	return sf.val
 }

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

@@ -10,15 +10,15 @@ import (
 // EStr -- расширенная строка.
 type EStr struct {
 	val    defs.ITxtFix // Хранимое значение
-	lenMin defs.Int  // Минимальная длина строки
-	lenMax defs.Int  // Максимальная длина строки
-	isMut  bool      // Признак мутабельности
+	lenMin defs.Int     // Минимальная длина строки
+	lenMax defs.Int     // Максимальная длина строки
+	isMut  bool         // Признак мутабельности
 }
 
 // FnOptStr -- опции расширенной строки.
 type FnOptStr func(*EStr)
 
-var msg1 = defs.Txt("EStr.OptStrMinLen: мин длина строки должна быть >= 0")
+const msg1 = "EStr.OptStrMinLen: мин длина строки должна быть >= 0"
 
 // OptStrMinLen -- устанавливает минимальную длину строки.
 func OptStrMinLen(lenMin defs.Int) FnOptStr {
@@ -28,7 +28,7 @@ func OptStrMinLen(lenMin defs.Int) FnOptStr {
 	}
 }
 
-var msg2 = defs.Txt("EStr.OptStrMaxLen: макс длина строки должна быть >= 0")
+const msg2 = "EStr.OptStrMaxLen: макс длина строки должна быть >= 0"
 
 // OptStrMaxLen -- устанавливает максимальную длину строки.
 func OptStrMaxLen(lenMax defs.Int) FnOptStr {

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

@@ -28,7 +28,7 @@ func OptStrMaxLen(lenMax defs.Int) FnOptStr {
 
 // OptStr -- устанавливает начальное значение строки.
 func OptStr(val defs.ITxtFix) FnOptStr {
-	return estr.OptStr(val.Get())
+	return estr.OptStr(val)
 }
 
 // OptStrMut -- устанавливает признак мутабельности.

+ 2 - 2
v4/lev0/lev0.go

@@ -52,14 +52,14 @@ func NewNone[T any]() IOption[T] {
 //
 
 func Hassert(isCond bool, msgFormat defs.ITxtFix, args ...any) {
-	helpers.Hassert(isCond, msgFormat, args)
+	helpers.Hassert(isCond, msgFormat.Get(), args)
 }
 
 // Assert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
 //
 
 func Assert(isCond bool, msgFormat defs.ITxtFix, args ...any) {
-	helpers.Assert(isCond, msgFormat, args)
+	helpers.Assert(isCond, msgFormat.Get(), args)
 }
 
 // SleepMs -- задержка в миллисекундах.

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

@@ -67,13 +67,13 @@ func (sf *Option[T]) SomeOrFn(fn func() T) T {
 }
 
 // Hassert -- проверяет, что не пустое значение (с паникой).
-func (sf *Option[T]) Hassert(msgFormat defs.ATxt, args ...any) T {
-	mH.Hassert(sf.some != nil, msgFormat, args...)
+func (sf *Option[T]) Hassert(msgFormat defs.ITxtFix, args ...any) T {
+	mH.Hassert(sf.some != nil, msgFormat.Get(), args...)
 	return *sf.some
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-func (sf *Option[T]) Assert(msgFormat defs.ATxt, args ...any) T {
-	mH.Assert(sf.some != nil, msgFormat, args...)
+func (sf *Option[T]) Assert(msgFormat defs.ITxtFix, args ...any) T {
+	mH.Assert(sf.some != nil, msgFormat.Get(), args...)
 	return *sf.some
 }

+ 16 - 12
v4/lev0/option/option_test.go

@@ -40,10 +40,10 @@ func (sf *testerOption) createNoneGood1() {
 	if !opt.IsNone() {
 		sf.t.Fatalf("createNoneGood1(): not err")
 	}
-	if val := opt.SomeOr("test2"); val.Get() != "test2" {
+	if val := opt.SomeOr(defs.Txt("test2")); val.Get() != "test2" {
 		sf.t.Fatalf("createNoneGood1(): val bad")
 	}
-	if val := opt.SomeOr("test1"); val.Get() != "test1" {
+	if val := opt.SomeOr(defs.Txt("test1")); val.Get() != "test1" {
 		sf.t.Fatalf("createNoneGood1(): val bad")
 	}
 	if val := opt.SomeOrFn(sf.fnWrap2); val.Get() != "test5" {
@@ -62,9 +62,11 @@ func (sf *testerOption) assert(res *Option[defs.ITxtFix]) {
 			sf.t.Fatalf("assert(): panic==nil")
 		}
 	}()
-	res.Hassert("test assert")
+	res.Hassert(testAssert)
 }
 
+var testAssert = defs.Txt("test assert")
+
 func (sf *testerOption) hassert(res *Option[defs.ITxtFix]) {
 	sf.t.Log("hassert")
 	defer func() {
@@ -72,7 +74,7 @@ func (sf *testerOption) hassert(res *Option[defs.ITxtFix]) {
 			sf.t.Fatalf("hassert(): panic==nil")
 		}
 	}()
-	res.Hassert("test hassert")
+	res.Hassert(testAssert)
 }
 
 func (sf *testerOption) unwrapErr(res *Option[defs.ITxtFix]) {
@@ -86,7 +88,7 @@ func (sf *testerOption) unwrapErr(res *Option[defs.ITxtFix]) {
 }
 
 var (
-	str = defs.Txt("test val")
+	str = defs.TxtFix("test val")
 )
 
 func (sf *testerOption) createSomeGood2() {
@@ -106,28 +108,30 @@ func (sf *testerOption) createSomeGood2() {
 	if val := opt.Some(); val != str {
 		sf.t.Fatalf("createSomeGood2(): val bad")
 	}
-	strTest1 := defs.Txt("test1")
-	if val := opt.SomeOr(strTest1); val != str {
+	txtTest1 := defs.Txt("test1")
+	if val := opt.SomeOr(txtTest1); val != str {
 		sf.t.Fatalf("createSomeGood2(): val bad")
 	}
-	if val := opt.SomeOr(strTest1); val != "str" {
+	if val := opt.SomeOr(txtTest1); val.Get() != "str" {
 		sf.t.Fatalf("createSomeGood2(): val bad")
 	}
 	if val := opt.SomeOrFn(sf.fnWrap); val != str {
 		sf.t.Fatalf("createSomeGood2(): val bad")
 	}
-	opt.Hassert("test")
-	opt.Assert("test")
+	opt.Hassert(txtTest)
+	opt.Assert(txtTest)
 }
 
+var txtTest = defs.Txt("test")
+
 // Функция высшего порядка для замещения ошибки.
 func (sf *testerOption) fnWrap2() defs.ITxtFix {
-	return "test5"
+	return defs.Txt("test5")
 }
 
 // Функция высшего порядка для замещения ошибки.
 func (sf *testerOption) fnWrap() defs.ITxtFix {
-	return "test1"
+	return defs.Txt("test1")
 }
 
 func (sf *testerOption) createSomeGood1() {

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

@@ -141,24 +141,24 @@ func (sf *Result[T]) Error() string {
 }
 
 // Hassert -- проверяет, что нет ошибки (с паникой).
-func (sf *Result[T]) Hassert(msgFormat defs.ATxt, args ...any) T {
+func (sf *Result[T]) Hassert(msgFormat defs.ITxtFix, args ...any) T {
 	strErr := defs.Txt("")
 	if !sf.isCheck {
 		strErr = defs.Txt("Result[T].Hassert(): not check error, err=\n\t%v", sf.err)
 	}
-	strErr = defs.Txt(msgFormat+strErr.Get(), args...)
+	strErr = defs.Txt(msgFormat.Get()+strErr.Get(), args...)
 	mKh.Hassert(sf.err == nil, strErr.Get())
 	sf.isCheck = true
 	return sf.val
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-func (sf *Result[T]) Assert(msgFormat defs.ATxt, args ...any) T {
+func (sf *Result[T]) Assert(msgFormat defs.ITxtFix, args ...any) T {
 	strErr := defs.Txt("")
 	if !sf.isCheck {
 		strErr = defs.Txt("Result[T].Assert(): not check error, , err=\n\t%v", sf.err)
 	}
-	mKh.Assert(sf.err == nil, msgFormat+strErr.Get(), args...)
+	mKh.Assert(sf.err == nil, msgFormat.Get()+strErr.Get(), args...)
 	sf.isCheck = true
 	return sf.val
 }

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

@@ -102,8 +102,8 @@ func (sf *tester) createErrGood1() {
 	sf.assert2()
 }
 
-const (
-	str2 = defs.ATxt("test assert2")
+var (
+	str2 = defs.Txt("test assert2")
 )
 
 func (sf *tester) assert2() {
@@ -118,8 +118,8 @@ func (sf *tester) assert2() {
 	res.Assert(str2)
 }
 
-const (
-	str3 = "test hassert2"
+var (
+	str3 = defs.Txt("test hassert2")
 )
 
 func (sf *tester) hassert2(res mKs.IResult[string]) {
@@ -132,8 +132,8 @@ func (sf *tester) hassert2(res mKs.IResult[string]) {
 	res.Hassert(str3)
 }
 
-const (
-	str4 = "test assert"
+var (
+	str4 = defs.Txt("test assert")
 )
 
 func (sf *tester) hassert(res mKs.IResult[string]) {
@@ -202,7 +202,7 @@ func (sf *tester) createOkGood2() {
 	if err := res0.Err(); err == nil {
 		sf.t.Fatalf("createOkGood1(): err==nil")
 	}
-	str1 := defs.ATxt("test assert")
+	str1 := defs.Txt("test assert")
 	res.Hassert(str1)
 	res.Assert(str1)
 }

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

@@ -13,14 +13,14 @@ import (
 // ETime -- метка времени.
 // Вывод: "2006-01-02 15:04:05.000 -07 MST".
 type ETime struct {
-	val    defs.Time
+	val    defs.ITimeFix
 	isMut  bool // Мутабельность
 	isFill bool // Признак заполнения
 }
 
 // NewETime -- создает новый экземпляр ETime.
-func NewETime(val defs.Time) mKs.ITime {
-	helpers.Hassert(val != "", "NewETime(): val is empty")
+func NewETime(val defs.ITimeFix) mKs.ITime {
+	helpers.Hassert(val.Get() != "", "NewETime(): val is empty")
 	sf := &ETime{
 		val:    val,
 		isFill: true,
@@ -33,8 +33,8 @@ func NewETimeAuto() mKs.ITime {
 	sf := &ETime{
 		isFill: true,
 	}
-	val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")
-	sf.Set(defs.Time(val))
+	val := defs.Txt(time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST"))
+	sf.Set(defs.ITimeFix(val))
 	return sf
 }
 
@@ -44,27 +44,27 @@ func NewETimeAutoMut() mKs.ITimeMut {
 		isFill: true,
 		isMut:  true,
 	}
-	val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")
-	sf.Set(defs.Time(val))
+	val := defs.Txt(time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST"))
+	sf.Set(defs.ITimeFix(val))
 	return sf
 }
 
 // String -- возвращает строку.
 func (sf *ETime) String() string {
-	helpers.Hassert(sf.val != "", "ETime.String(): значение не инициализировано")
-	return string(sf.val)
+	helpers.Hassert(sf.val.Get() != "", "ETime.String(): значение не инициализировано")
+	return sf.val.String()
 }
 
-// Get -- возвращает типизированную строку.
-func (sf *ETime) Get() defs.Time {
-	helpers.Hassert(sf.val != "", "ETime.Get(): значение не инициализировано")
+// Time -- возвращает типизированную строку.
+func (sf *ETime) Time() defs.ITimeFix {
+	helpers.Hassert(sf.val.Get() != "", "ETime.Time(): значение не инициализировано")
 	return sf.val
 }
 
 // Set -- устанавливает типизированное значение.
-func (sf *ETime) Set(val defs.Time) {
+func (sf *ETime) Set(val defs.ITimeFix) {
 	helpers.Hassert(sf.isMut, "ETime.Set(): значение фиксировано")
-	helpers.Hassert(val != "", "ETime.Set(): val is empty")
+	helpers.Hassert(val.Get() != "", "ETime.Set(): val is empty")
 	sf.val = val
 }
 

+ 4 - 2
v4/lev0/voc/etime/etime_test.go

@@ -2,6 +2,8 @@ package etime
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type testTime struct {
@@ -17,7 +19,7 @@ func TestATime(t *testing.T) {
 
 // Получение времени.
 func (t *testTime) get() {
-	a := NewETime("123")
+	a := NewETime(defs.Txt("123"))
 	_ = a.String()
-	_ = a.Get()
+	_ = a.Time()
 }

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

@@ -10,7 +10,7 @@ import (
 // NewETime -- создать новую метку времени.
 //
 
-func NewETime(val defs.Time) mKs.ITime {
+func NewETime(val defs.ITimeFix) mKs.ITime {
 	return etime.NewETime(val)
 }
 

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

@@ -108,8 +108,8 @@ func (sf *KernInt) ToBool() bool {
 
 // Getenv -- устанавливает значение из окружения.
 func (sf *KernInt) Getenv(env defs.ITxtFix) core_spec.IResult[defs.Int] {
-	strVal := os.Getenv(env.String())
-	res := sf.FromStr(defs.ITxtFix(strVal))
+	strVal := defs.ATxt(os.Getenv(env.String()))
+	res := sf.FromStr(defs.Txt(strVal))
 	if res.IsErr() {
 		err := defs.NewErr("safeInt.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[defs.Int](err)

+ 15 - 12
v4/lev1/kint/kint_test.go

@@ -5,6 +5,7 @@ import (
 	"testing"
 
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -32,18 +33,20 @@ func (sf *tester) new() {
 	sf.new3(val)
 }
 
+var testVal = defs.Txt("TEST_VAL")
+
 func (sf *tester) new3(val Int) {
 	_ = os.Unsetenv("TEST_VAL")
 	_ = os.Setenv("TEST_VAL", "57")
-	resInt := val.Getenv("TEST_VAL")
-	resInt.Hassert("get env")
+	resInt := val.Getenv(testVal)
+	resInt.Hassert(defs.Txt("get env"))
 	if resInt.Ok() != 57 {
 		sf.t.Fatalf("new(): isVal==true")
 	}
 
-	_ = os.Unsetenv("TEST_VAL")
-	_ = os.Setenv("TEST_VAL", "u578")
-	resInt = val.Getenv("TEST_VAL")
+	_ = os.Unsetenv(testVal.String())
+	_ = os.Setenv(testVal.String(), "u578")
+	resInt = val.Getenv(testVal)
 	if resInt.IsOk() {
 		sf.t.Fatalf("new(): ok==true")
 	}
@@ -91,23 +94,23 @@ func (sf *tester) new2(val Int) {
 }
 
 func (sf *tester) new1(val Int) {
-	resStr := val.FromStr("k26")
+	resStr := val.FromStr(defs.Txt("k26"))
 	if val.Get() != 26 {
 		sf.t.Fatalf("new(): val=%v !26", val.Get())
 	}
 	if !resStr.IsErr() {
 		sf.t.Fatalf("new(): err==nil")
 	}
-	strVal := val.ToStr()
-	if strVal != "26" {
-		sf.t.Fatalf("new(): val=%v !26", strVal)
+	txtVal := val.ToStr()
+	if txtVal.Get() != "26" {
+		sf.t.Fatalf("new(): val=%v !26", txtVal.Get())
 	}
 	binData := val.ToByte()
 	if len(binData) != 8 {
 		sf.t.Fatalf("new(): len=%v !8", len(binData))
 	}
 	resInt := val.FromByte(binData)
-	resInt.Hassert("FromByte")
+	resInt.Hassert(defs.Txt("FromByte"))
 
 }
 
@@ -124,9 +127,9 @@ func (sf *tester) new0(val Int) {
 	if val.Get() != 0 {
 		sf.t.Fatalf("new(): val=%v !0", val.Get())
 	}
-	resStr := val.FromStr("26")
+	resStr := val.FromStr(defs.Txt("26"))
 	if val.Get() != 26 {
 		sf.t.Fatalf("new(): val=%v !26", val.Get())
 	}
-	resStr.Hassert("bad convert")
+	resStr.Hassert(defs.Txt("bad convert"))
 }

+ 3 - 2
v4/lev1/lev1_test.go

@@ -4,6 +4,7 @@ package lev1
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
 )
 
@@ -24,7 +25,7 @@ func TestLev1(t *testing.T) {
 
 func (sf *tester) newSafeIntGetenv() {
 	sf.t.Log("newSafeIntGetenv")
-	safeInt := NewSafeIntGetenv("test_env")
+	safeInt := NewSafeIntGetenv(defs.Txt("test_env"))
 	if safeInt == nil {
 		sf.t.Fatalf("newSafeIntGetenv(): safeInt==nil")
 	}
@@ -32,7 +33,7 @@ func (sf *tester) newSafeIntGetenv() {
 
 func (sf *tester) newSafeIntFromStr() {
 	sf.t.Log("newSafeIntFromStr")
-	safeInt := NewSafeIntFromStr("123")
+	safeInt := NewSafeIntFromStr(defs.Txt("123"))
 	if safeInt == nil {
 		sf.t.Fatalf("newSafeIntFromStr(): safeInt==nil")
 	}

+ 6 - 5
v4/lev1/local_ctx/ctx_value/ctx_value_test.go

@@ -4,6 +4,7 @@ import (
 	"testing"
 
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -22,7 +23,7 @@ func TestCtxValue(t *testing.T) {
 // Создаёт значение локального контекста.
 func (sf *tester) new() {
 	sf.t.Log("new")
-	sf.val = NewCtxValue("test_key", 5, "test_value")
+	sf.val = NewCtxValue(defs.Txt("test_key"), 5, "test_value")
 	if sf.val == nil {
 		sf.t.Fatalf("new(): val==nil")
 	}
@@ -30,17 +31,17 @@ func (sf *tester) new() {
 		sf.t.Fatalf("new(): val(%v)!=5", val)
 	}
 	create := sf.val.CreateAt()
-	if create.Get() == "" {
+	if create.Time().Get() == "" {
 		sf.t.Fatalf("new(): create is empty")
 	}
 	sf.createdAt = create
-	if comment := sf.val.Comment(); comment != "test_value" {
+	if comment := sf.val.Comment(); comment.Get() != "test_value" {
 		sf.t.Fatalf("new(): comment(%v)!='test_value'", comment)
 	}
-	if key := sf.val.Key(); key != "test_key" {
+	if key := sf.val.Key(); key.Get() != "test_key" {
 		sf.t.Fatalf("new(): key(%v)!='test_key'", key)
 	}
-	if update := sf.val.UpdateAt(); update.Get() != "" {
+	if update := sf.val.UpdateAt(); update.Time().Get() != "" {
 		sf.t.Fatalf("new(): update not empty")
 	}
 }

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

@@ -26,7 +26,7 @@ type ILocalCtx interface {
 	// Del -- удаляет значение из контекста
 	Del(key defs.ITxtFix)
 	// Set -- добавляет значение в контекст
-	Set(key defs.ITxtFix, val any, comment defs.ITxtFix)
+	Set(key defs.ITxtFix, val any, comment any)
 	// Size -- возвращает размер словаря контекста
 	Size() defs.Int
 	// SortedList -- возвращает сортированный список объектов контекста
@@ -58,7 +58,7 @@ func NewLocalCtx(ctx context.Context) ILocalCtx {
 	_ctx, fnCancel := context.WithCancel(ctx)
 	paramLogBuf := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: "LocalCtx",
+		Prefix_: defs.Txt("LocalCtx"),
 	}
 	sf := &LocalCtx{
 		ctx:      _ctx,

+ 1 - 1
v4/lev1/local_ctx/local_ctx_test.go

@@ -42,7 +42,7 @@ func (sf *tester) del() {
 func (sf *tester) get() {
 	sf.t.Log("get")
 	optRes := sf.lCtx.Get(defs.Txt("count"))
-	ctxVal := optRes.Hassert("get()")
+	ctxVal := optRes.Hassert(defs.Txt("get()"))
 	count := ctxVal.Val().(int)
 	if count == 15 {
 		return

+ 21 - 14
v4/lev1/log_buf/log_buf.go

@@ -42,7 +42,7 @@ var (
 
 // LogBufParam -- параметры логирующего буфера.
 type LogBufParam struct {
-	Prefix_ defs.ATxt           // Префикс для сообщений
+	Prefix_ defs.ITxtFix        // Префикс для сообщений
 	IsTerm_ core_spec.ISafeBool // Признак вывода в терминал
 }
 
@@ -68,7 +68,8 @@ func NewLogBuf(param *LogBufParam) ILogBuf {
 		lst:         []log_msg.ILogMsg{},
 		lstErr:      []log_msg.ILogMsg{},
 	}
-	sf.Prefix_ += "."
+	pref := sf.Prefix_.Get() + defs.ATxt(".")
+	sf.Prefix_ = defs.Txt(pref)
 	return sf
 }
 
@@ -82,7 +83,8 @@ func (sf *LogBuf) GetErr(num defs.Int) log_msg.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
 	if len(sf.lstErr) == 0 {
-		return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"not error msg")
+		msg := sf.Prefix_.Get() + "not error msg"
+		return log_msg.NewLogMsg(log_msg.DEBUG, defs.Txt(msg))
 	}
 	if num.Int() >= len(sf.lstErr) {
 		return sf.lstErr[len(sf.lstErr)-1]
@@ -97,14 +99,15 @@ func (sf *LogBuf) GetErr(num defs.Int) log_msg.ILogMsg {
 func (sf *LogBuf) Get(num defs.Int) log_msg.ILogMsg {
 	sf.RLock()
 	defer sf.RUnlock()
+	msg := sf.Prefix_.Get() + "*no msg*"
 	if len(sf.lst) == 0 {
-		return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
+		return log_msg.NewLogMsg(log_msg.DEBUG, defs.Txt(msg))
 	}
 	if num.Int() >= len(sf.lst) {
-		return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
+		return log_msg.NewLogMsg(log_msg.DEBUG, defs.Txt(msg))
 	}
 	if num <= 0 {
-		return log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+"*no msg*")
+		return log_msg.NewLogMsg(log_msg.DEBUG, defs.Txt(msg))
 	}
 	return sf.lst[num]
 }
@@ -114,29 +117,32 @@ func (sf *LogBuf) Debug(fTxt defs.ITxtFix, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
 	strMsg := fmt.Sprintf(fTxt.String(), args...)
-	_msg := log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+defs.ATxt(strMsg))
+	msg := sf.Prefix_.Get() + defs.ATxt(strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.DEBUG, defs.Txt(msg))
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
 }
 
 // Info -- информационные сообщения.
-func (sf *LogBuf) Info(fMsg defs.ATxt, args ...any) {
+func (sf *LogBuf) Info(fMsg defs.ITxtFix, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	strMsg := fmt.Sprintf(string(fMsg), args...)
-	_msg := log_msg.NewLogMsg(log_msg.INFO, sf.Prefix_+defs.ATxt(strMsg))
+	strMsg := fmt.Sprintf(fMsg.String(), args...)
+	msg := sf.Prefix_.Get() + defs.ATxt(strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.INFO, defs.Txt(msg))
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
 }
 
 // Warn -- предупреждающие сообщения.
-func (sf *LogBuf) Warn(fMsg defs.ATxt, args ...any) {
+func (sf *LogBuf) Warn(fMsg defs.ITxtFix, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	strMsg := fmt.Sprintf(string(fMsg), args...)
-	_msg := log_msg.NewLogMsg(log_msg.WARN, sf.Prefix_+defs.ATxt(strMsg))
+	strMsg := fmt.Sprintf(fMsg.String(), args...)
+	msg := sf.Prefix_.Get() + defs.ATxt(strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.WARN, defs.Txt(msg))
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
 	sf.printTerm(_msg)
@@ -147,7 +153,8 @@ func (sf *LogBuf) Err(err defs.IErr, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
 	strMsg := fmt.Sprintf(err.String(), args...)
-	_msg := log_msg.NewLogMsg(log_msg.ERROR, sf.Prefix_+defs.ATxt(strMsg))
+	msg := sf.Prefix_.Get() + defs.ATxt(strMsg)
+	_msg := log_msg.NewLogMsg(log_msg.ERROR, defs.Txt(msg))
 	sf.lst = append(sf.lst, _msg)
 	sf.lstErr = append(sf.lstErr, _msg)
 	sf.checkLen()

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

@@ -25,7 +25,7 @@ func (sf *tester) new() {
 	sf.t.Log("new")
 	param := &LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: "tester",
+		Prefix_: defs.Txt("tester"),
 	}
 	sf.log = NewLogBuf(param)
 	if sf.log == nil {

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

@@ -33,11 +33,11 @@ const (
 type logMsg struct {
 	level     defs.ITxtMut
 	createdAt core_spec.ITime
-	msg       defs.ATxt
+	msg       defs.ITimeFix
 }
 
 // NewLogMsg -- возвращает новое сообщение логгера.
-func NewLogMsg(level int, msg defs.ATxt) ILogMsg {
+func NewLogMsg(level int, msg defs.ITxtFix) ILogMsg {
 	sf := &logMsg{
 		createdAt: etime.NewETimeAuto(),
 		msg:       msg,

+ 8 - 6
v4/lev1/log_buf/log_msg/log_msg_test.go

@@ -3,6 +3,8 @@ package log_msg
 import (
 	"strings"
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -25,17 +27,17 @@ func (sf *tester) new() {
 
 func (sf *tester) newGood1() {
 	sf.t.Log("newGood1")
-	_ = NewLogMsg(-3, "test msg -3")
-	_ = NewLogMsg(-2, "test msg -2")
-	_ = NewLogMsg(-1, "test msg -1")
-	msg := NewLogMsg(0, "test msg 0")
+	_ = NewLogMsg(-3, defs.Txt("test msg -3"))
+	_ = NewLogMsg(-2, defs.Txt("test msg -2"))
+	_ = NewLogMsg(-1, defs.Txt("test msg -1"))
+	msg := NewLogMsg(0, defs.Txt("test msg 0"))
 	if msg := msg.Msg(); msg.Get() != "test msg 0" {
 		sf.t.Fatalf("newGood1(): msg(%v)!='test msg 0'", msg)
 	}
 	if lvl := msg.Level(); lvl.Get() != "ERRO" {
 		sf.t.Fatalf("newGood1(): lvl(%v)!='ERRO'", lvl)
 	}
-	if createAt := msg.CreateAt(); createAt.Get() == "" {
+	if createAt := msg.CreateAt(); createAt.Time().Get() == "" {
 		sf.t.Fatalf("newGood1(): createAt is empty")
 	}
 	if str := msg.String(); !strings.Contains(str, "ERRO   2") {
@@ -51,5 +53,5 @@ func (sf *tester) newBad1() {
 			sf.t.Fatalf("newBad1(): panic==nil")
 		}
 	}()
-	_ = NewLogMsg(-10, "test msg")
+	_ = NewLogMsg(-10, defs.Txt("test msg"))
 }

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

@@ -110,7 +110,7 @@ func (sf *LstSort) Swap(ind1, ind2 int) {
 
 // Less -- НЕ ИСПОЛЬЗОВАТЬ сравнивает элементы по индексам.
 func (sf *LstSort) Less(ind1, ind2 int) bool {
-	return sf.lstVal[ind1].Key() < sf.lstVal[ind2].Key()
+	return sf.lstVal[ind1].Key().Get() < sf.lstVal[ind2].Key().Get()
 }
 
 // Len -- НЕ ИСПОЛЬЗОВАТЬ возвращает длину списка.

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

@@ -40,7 +40,7 @@ func (sf *tester) del2() {
 		sf.t.Fatalf("del2(): len(%v)!=4", _len)
 	}
 	val4 := sf.lst.Get(3)
-	if val4.Key() != "val4" {
+	if val4.Key().Get() != "val4" {
 		sf.t.Fatalf("del2(): key(%v)!='val4'", val4.Key())
 	}
 	sf.lst.Add(val3)
@@ -60,7 +60,7 @@ func (sf *tester) del() {
 		sf.t.Fatalf("del(): len(%v)!=4", _len)
 	}
 	val3 := sf.lst.Get(3)
-	if val3.Key() != "val3" {
+	if val3.Key().Get() != "val3" {
 		sf.t.Fatalf("del(): key(%v)!='val3'", val3.Key())
 	}
 	sf.lst.Add(val4)

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

@@ -27,7 +27,7 @@ func NewSafeBool(val bool) core_spec.ISafeBool {
 }
 
 // NewSafeBoolFromStr -- возвращает новое потокобезопасное булево из строки.
-func NewSafeBoolFromStr(strVal defs.ATxt) mL0.IResult[core_spec.ISafeBool] {
+func NewSafeBoolFromStr(strVal defs.ITxtFix) mL0.IResult[core_spec.ISafeBool] {
 	sf := NewSafeBool(false)
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
@@ -38,7 +38,7 @@ func NewSafeBoolFromStr(strVal defs.ATxt) mL0.IResult[core_spec.ISafeBool] {
 }
 
 // NewSafeBoolGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeBoolGetenv(env defs.ATxt) core_spec.IResult[core_spec.ISafeBool] {
+func NewSafeBoolGetenv(env defs.ITxtFix) core_spec.IResult[core_spec.ISafeBool] {
 	sf := NewSafeBool(false)
 	res := sf.Getenv(env)
 	if res.IsErr() {
@@ -88,8 +88,8 @@ func (sf *safeBool) FromStr(strVal defs.ITxtFix) core_spec.IResult[core_spec.EBo
 
 // Getenv -- получает значение из окружения.
 func (sf *safeBool) Getenv(env defs.ITxtFix) mL0.IResult[core_spec.EBool] {
-	strVal := os.Getenv(env.String())
-	res := sf.FromStr(defs.ITxtFix(strVal))
+	strVal := defs.ATxt(os.Getenv(env.String()))
+	res := sf.FromStr(defs.Txt(strVal))
 	if res.IsErr() {
 		err := defs.NewErr("safeBool.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[core_spec.EBool](err)

+ 14 - 11
v4/lev1/safe_bool/safe_bool_test.go

@@ -5,6 +5,7 @@ import (
 	"testing"
 
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -32,7 +33,7 @@ func (sf *tester) newFromStr() {
 
 func (sf *tester) newFromStrGood1() {
 	sf.t.Log("newFromStrGood1")
-	res := NewSafeBoolFromStr("tRuE")
+	res := NewSafeBoolFromStr(defs.Txt("tRuE"))
 	if res.IsErr() {
 		sf.t.Fatalf("newFromStrGood1(): err=%v", res.Err())
 	}
@@ -45,7 +46,7 @@ func (sf *tester) newFromStrGood1() {
 // Кривое булево значение.
 func (sf *tester) newFromStrBad1() {
 	sf.t.Log("newFromStrBad1")
-	res := NewSafeBoolFromStr("0")
+	res := NewSafeBoolFromStr(defs.Txt("0"))
 	if res.IsOk() {
 		sf.t.Fatalf("newFromStrBad1(): err==nil")
 	}
@@ -59,11 +60,13 @@ func (sf *tester) newFromEnv() {
 	sf.newFromEnvGood2()
 }
 
+var testBool = defs.Txt("TEST_BOOL")
+
 func (sf *tester) newFromEnvGood2() {
 	sf.t.Log("newFromEnvGood2")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "false")
-	res := NewSafeBoolGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "false")
+	res := NewSafeBoolGetenv(testBool)
 	if res.IsErr() {
 		sf.t.Fatalf("newFromEnvGood2(): err=%v", res.Err())
 	}
@@ -75,9 +78,9 @@ func (sf *tester) newFromEnvGood2() {
 
 func (sf *tester) newFromEnvGood1() {
 	sf.t.Log("newFromEnvGood1")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "true")
-	res := NewSafeBoolGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "true")
+	res := NewSafeBoolGetenv(testBool)
 	if res.IsErr() {
 		sf.t.Fatalf("newFromEnvGood1(): err=%v", res.Err())
 	}
@@ -90,9 +93,9 @@ func (sf *tester) newFromEnvGood1() {
 // Кривое булево значение.
 func (sf *tester) newFromEnvBad1() {
 	sf.t.Log("newFromStrBad1")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "bad")
-	res := NewSafeBoolGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "bad")
+	res := NewSafeBoolGetenv(testBool)
 	if res.IsOk() {
 		sf.t.Fatalf("newFromStrBad1(): err==nil")
 	}

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

@@ -60,7 +60,7 @@ func (sf *safeBoolReact) Delete(key defs.ITxtFix) {
 func (sf *safeBoolReact) Add(key defs.ITxtFix, fn func(core_spec.EBoolMut)) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
-	if key == "" {
+	if key.Get() == "" {
 		err := defs.NewErr("safeBoolReact.Add(): key is empty")
 		return mL0.NewErr[core_spec.EBool](err)
 	}
@@ -119,8 +119,8 @@ func (sf *safeBoolReact) FromStr(strVal defs.ITxtFix) core_spec.IResult[core_spe
 
 // Getenv -- получает значение из окружения.
 func (sf *safeBoolReact) Getenv(env defs.ITxtFix) mL0.IResult[core_spec.EBool] {
-	strVal := os.Getenv(env.String())
-	res := sf.FromStr(defs.ITxtFix(strVal))
+	strVal := defs.ATxt(os.Getenv(env.String()))
+	res := sf.FromStr(defs.Txt(strVal))
 	if res.IsErr() {
 		err := defs.NewErr("safeBoolReact.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[core_spec.EBool](err)

+ 18 - 13
v4/lev1/safe_bool_react/safe_bool_react_test.go

@@ -5,6 +5,7 @@ import (
 	"testing"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -35,7 +36,7 @@ func (sf *tester) newFromStr() {
 
 func (sf *tester) newFromStrGood1() {
 	sf.t.Log("newFromStrGood1")
-	res := NewSafeBoolReactFromStr("tRuE")
+	res := NewSafeBoolReactFromStr(defs.Txt("tRuE"))
 	if res.IsErr() {
 		sf.t.Fatalf("newFromStrGood1(): err=%v", res.Err())
 	}
@@ -48,7 +49,7 @@ func (sf *tester) newFromStrGood1() {
 // Кривое булево значение.
 func (sf *tester) newFromStrBad1() {
 	sf.t.Log("newFromStrBad1")
-	res := NewSafeBoolReactFromStr("0")
+	res := NewSafeBoolReactFromStr(defs.Txt("0"))
 	if res.IsOk() {
 		sf.t.Fatalf("newFromStrBad1(): err==nil")
 	}
@@ -62,11 +63,13 @@ func (sf *tester) newFromEnv() {
 	sf.newFromEnvGood2()
 }
 
+var testBool = defs.Txt("TEST_BOOL")
+
 func (sf *tester) newFromEnvGood2() {
 	sf.t.Log("newFromEnvGood2")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "false")
-	res := NewSafeBoolGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "false")
+	res := NewSafeBoolGetenv(testBool)
 	if res.IsErr() {
 		sf.t.Fatalf("newFromEnvGood2(): err=%v", res.Err())
 	}
@@ -78,9 +81,9 @@ func (sf *tester) newFromEnvGood2() {
 
 func (sf *tester) newFromEnvGood1() {
 	sf.t.Log("newFromEnvGood1")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "true")
-	res := NewSafeBoolGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "true")
+	res := NewSafeBoolGetenv(testBool)
 	if res.IsErr() {
 		sf.t.Fatalf("newFromEnvGood1(): err=%v", res.Err())
 	}
@@ -93,18 +96,20 @@ func (sf *tester) newFromEnvGood1() {
 // Кривое булево значение.
 func (sf *tester) newFromEnvBad1() {
 	sf.t.Log("newFromStrBad1")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "bad")
-	res := NewSafeBoolGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "bad")
+	res := NewSafeBoolGetenv(testBool)
 	if res.IsOk() {
 		sf.t.Fatalf("newFromStrBad1(): err==nil")
 	}
 }
 
+var txtTest = defs.Txt("test")
+
 // Удаляет функцию обратного вызова.
 func (sf *tester) del() {
 	sf.t.Log("del")
-	sf.sbr.Delete("test")
+	sf.sbr.Delete(txtTest)
 	sf.val.Reset()
 	sf.sbr.Set()
 	if sf.val.IsOk() {
@@ -115,7 +120,7 @@ func (sf *tester) del() {
 // Добавляет функцию обратного вызова.
 func (sf *tester) add() {
 	sf.t.Log("add")
-	sf.sbr.Add("test", sf.fnBack).Hassert("add()")
+	sf.sbr.Add(txtTest, sf.fnBack).Hassert(defs.Txt("add()"))
 }
 
 // Функция обратного вызова для контроля.

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

@@ -25,11 +25,11 @@ func NewSafeInt(val defs.Int) mKs.ISafeInt {
 }
 
 // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
-func NewSafeIntFromStr(strVal defs.ITxtFix) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntFromStr(txtVal defs.ITxtFix) mL0.IResult[mKs.ISafeInt] {
 	sf := NewSafeInt(0)
-	res := sf.FromStr(strVal)
+	res := sf.FromStr(txtVal)
 	if res.IsErr() {
-		err := defs.NewErr("NewSafeIntFromStr(): in parse str(%v), err=\n\t%w", strVal, res.Err())
+		err := defs.NewErr("NewSafeIntFromStr(): in parse str(%v), err=\n\t%w", txtVal, res.Err())
 		return mL0.NewErr[mKs.ISafeInt](err)
 	}
 	return mL0.NewOk(sf)
@@ -93,10 +93,10 @@ func (sf *safeInt) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeInt) FromStr(strVal defs.ATxt) mL0.IResult[defs.Int] {
+func (sf *safeInt) FromStr(txtVal defs.ITxtFix) mL0.IResult[defs.Int] {
 	sf.Lock()
 	defer sf.Unlock()
-	return sf.val.FromStr(strVal)
+	return sf.val.FromStr(txtVal)
 }
 
 // FromByte -- получает число из среза байт.
@@ -121,14 +121,14 @@ func (sf *safeInt) ToBool() bool {
 }
 
 // ToStr -- конвертирует число в строку.
-func (sf *safeInt) ToStr() defs.ATxt {
+func (sf *safeInt) ToStr() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val.ToStr()
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeInt) Getenv(env defs.ATxt) mL0.IResult[defs.Int] {
+func (sf *safeInt) Getenv(env defs.ITxtFix) mL0.IResult[defs.Int] {
 	sf.Lock()
 	defer sf.Unlock()
 	return sf.val.Getenv(env)

+ 21 - 16
v4/lev1/safe_int/safe_int_test.go

@@ -5,6 +5,7 @@ import (
 	"testing"
 
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -43,7 +44,7 @@ func (sf *tester) byte() {
 		sf.t.Fatalf("byte(): len val(%v)!='123''", len(binData))
 	}
 	resVal := res.FromByte(binData)
-	resVal.Hassert("from []byte")
+	resVal.Hassert(defs.Txt("from []byte"))
 	val := resVal.Ok()
 	if val != 1234 {
 		sf.t.Fatalf("byte(): val(%v)!=1234", val)
@@ -54,7 +55,7 @@ func (sf *tester) toStr() {
 	sf.t.Log("toStr")
 	res := NewSafeInt(123)
 	val := res.ToStr()
-	if val != "123" {
+	if val.Get() != "123" {
 		sf.t.Fatalf("dec(): val(%v)!='123''", val)
 	}
 }
@@ -98,11 +99,11 @@ func (sf *tester) inc() {
 // Получает целое из строки.
 func (sf *tester) newFromStr() {
 	sf.t.Log("newFromStr")
-	res := NewSafeIntFromStr("-a52")
+	res := NewSafeIntFromStr(defs.Txt("-a52"))
 	if res.IsOk() {
 		sf.t.Fatalf("newFromStr(): err==nil")
 	}
-	res = NewSafeIntFromStr("-60")
+	res = NewSafeIntFromStr(defs.Txt("-60"))
 	if res.IsErr() {
 		sf.t.Fatalf("newFromStr(): err=%v", res.Err())
 	}
@@ -111,16 +112,18 @@ func (sf *tester) newFromStr() {
 	}
 }
 
+var testEnv2 = defs.Txt("TEST_ENV2")
+
 // Получает целое из окружения.
 func (sf *tester) newGetenv() {
 	sf.t.Log("newGetenv")
-	res := NewSafeIntGetenv("TEST_ENV2")
+	res := NewSafeIntGetenv(testEnv2)
 	if res.IsOk() {
 		sf.t.Fatalf("newGetenv(): err==nil")
 	}
-	_ = os.Unsetenv("TEST_ENV2")
-	_ = os.Setenv("TEST_ENV2", "-52")
-	res = NewSafeIntGetenv("TEST_ENV2")
+	_ = os.Unsetenv(testEnv2.String())
+	_ = os.Setenv(testEnv2.String(), "-52")
+	res = NewSafeIntGetenv(testEnv2)
 	if res.IsErr() {
 		sf.t.Fatalf("newGetenv(): err=%v", res.Err())
 	}
@@ -136,12 +139,14 @@ func (sf *tester) getEnv() {
 	sf.getEnvGood1()
 }
 
+var testVal = defs.Txt("TEST_VAL")
+
 func (sf *tester) getEnvGood1() {
 	sf.t.Log("getEnvGood1")
-	_ = os.Unsetenv("TEST_VAL")
-	_ = os.Setenv("TEST_VAL", "45")
+	_ = os.Unsetenv(testVal.String())
+	_ = os.Setenv(testVal.String(), "45")
 	val := NewSafeInt(0)
-	res := val.Getenv("TEST_VAL")
+	res := val.Getenv(testVal)
 	if res.IsErr() {
 		sf.t.Fatalf("getEnvGood1(): err=%v", res.Err())
 	}
@@ -153,10 +158,10 @@ func (sf *tester) getEnvGood1() {
 // Окружение не число.
 func (sf *tester) getEnvBad1() {
 	sf.t.Log("getEnvBad1")
-	_ = os.Unsetenv("TEST_VAL")
-	_ = os.Setenv("TEST_VAL", "")
+	_ = os.Unsetenv(testVal.String())
+	_ = os.Setenv(testVal.String(), "")
 	val := NewSafeInt(0)
-	res := val.Getenv("TEST_VAL")
+	res := val.Getenv(testVal)
 	if res.IsOk() {
 		sf.t.Fatalf("getEnvBad1(): res==ok")
 	}
@@ -172,7 +177,7 @@ func (sf *tester) fromStr() {
 func (sf *tester) fromStrGood1() {
 	sf.t.Log("fromStrGood1")
 	val := NewSafeInt(0)
-	res := val.FromStr("45")
+	res := val.FromStr(defs.Txt("45"))
 	if res.IsErr() {
 		sf.t.Fatalf("fromStrGood1(): err=%v", res.Err())
 	}
@@ -185,7 +190,7 @@ func (sf *tester) fromStrGood1() {
 func (sf *tester) fromStrBad1() {
 	sf.t.Log("fromStrBad1")
 	val := NewSafeInt(0)
-	res := val.FromStr(" ")
+	res := val.FromStr(defs.Txt(" "))
 	if res.IsOk() {
 		sf.t.Fatalf("fromStrBad1(): res==ok")
 	}

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

@@ -13,7 +13,7 @@ import (
 // safeString -- потокобезопасная строка.
 type safeString struct {
 	sync.RWMutex
-	val defs.ITxtFix
+	val defs.ITxtMut
 }
 
 // NewSafeString -- возвращает новую потокобезопасную строку.
@@ -41,14 +41,14 @@ func (sf *safeString) Byte() []byte {
 }
 
 // Get -- возвращает хранимую строку.
-func (sf *safeString) Get() defs.ITxtFix {
+func (sf *safeString) Get() defs.ITxtMut {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val
 }
 
 // Set -- устанавливает строку.
-func (sf *safeString) Set(val defs.ITxtFix) {
+func (sf *safeString) Set(val defs.ITxtMut) {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.val = val
@@ -58,16 +58,16 @@ func (sf *safeString) Set(val defs.ITxtFix) {
 func (sf *safeString) Reset() {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.val = ""
+	sf.val.Set("")
 }
 
 // Getenv -- получает значение из окружения.
 func (sf *safeString) Getenv(env defs.ITxtFix) mL0.IResult[defs.ITxtFix] {
-	strVal := os.Getenv(env.String())
-	if strVal == "" {
+	txtVal := defs.ATxt(os.Getenv(env.String()))
+	if txtVal == "" {
 		err := defs.NewErr("safeString.Getenv(): from env(%v), val is empty", env)
 		return mL0.NewErr[defs.ITxtFix](err)
 	}
-	sf.val = defs.ITxtFix(strVal)
-	return mL0.NewOk(sf.val)
+	sf.val = defs.Txt(txtVal)
+	return mL0.NewOk(defs.ITxtFix(sf.val))
 }

+ 21 - 18
v4/lev1/safe_string/safe_string_test.go

@@ -5,6 +5,7 @@ import (
 	"testing"
 
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -30,30 +31,32 @@ func (sf *tester) newFromEnv() {
 	sf.newFromEnvGood2()
 }
 
+var testBool = defs.Txt("TEST_BOOL")
+
 func (sf *tester) newFromEnvGood2() {
 	sf.t.Log("newFromEnvGood2")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "false")
-	res := NewSafeStringGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "false")
+	res := NewSafeStringGetenv(testBool)
 	if res.IsErr() {
 		sf.t.Fatalf("newFromEnvGood2(): err=%v", res.Err())
 	}
 	sb := res.Ok()
-	if val := sb.Get(); val != "false" {
+	if val := sb.Get(); val.Get() != "false" {
 		sf.t.Fatalf("newFromEnvGood2(): val==true")
 	}
 }
 
 func (sf *tester) newFromEnvGood1() {
 	sf.t.Log("newFromEnvGood1")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "true")
-	res := NewSafeStringGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "true")
+	res := NewSafeStringGetenv(testBool)
 	if res.IsErr() {
 		sf.t.Fatalf("newFromEnvGood1(): err=%v", res.Err())
 	}
 	sb := res.Ok()
-	if val := sb.Get(); val != "true" {
+	if val := sb.Get(); val.Get() != "true" {
 		sf.t.Fatalf("newFromEnvGood1(): val==false")
 	}
 }
@@ -61,9 +64,9 @@ func (sf *tester) newFromEnvGood1() {
 // Кривое булево значение.
 func (sf *tester) newFromEnvBad1() {
 	sf.t.Log("newFromEnvBad1")
-	_ = os.Unsetenv("TEST_BOOL")
-	_ = os.Setenv("TEST_BOOL", "")
-	res := NewSafeStringGetenv("TEST_BOOL")
+	_ = os.Unsetenv(testBool.String())
+	_ = os.Setenv(testBool.String(), "")
+	res := NewSafeStringGetenv(testBool)
 	if res.IsOk() {
 		sf.t.Fatalf("newFromEnvBad1(): err==nil")
 	}
@@ -73,11 +76,11 @@ func (sf *tester) newFromEnvBad1() {
 func (sf *tester) reset() {
 	sf.t.Log("reset")
 	sf.ss.Reset()
-	if sf.ss.Get() != "" {
+	if sf.ss.Get().Get() != "" {
 		sf.t.Fatalf("reset(): ISafeString!=''")
 	}
 	sf.ss.Reset()
-	if sf.ss.Get() != "" {
+	if sf.ss.Get().Get() != "" {
 		sf.t.Fatalf("reset(): ISafeString!=''")
 	}
 	_ = sf.ss.Byte()
@@ -86,12 +89,12 @@ func (sf *tester) reset() {
 // Установка хранимого значения.
 func (sf *tester) set() {
 	sf.t.Log("set")
-	sf.ss.Set("77")
-	if sf.ss.Get() != "77" {
+	sf.ss.Set(defs.Txt("77"))
+	if sf.ss.Get().Get() != "77" {
 		sf.t.Fatalf("set(): ISafeString!='77'")
 	}
-	sf.ss.Set("-56")
-	if sf.ss.Get() != "-56" {
+	sf.ss.Set(defs.Txt("-56"))
+	if sf.ss.Get().Get() != "-56" {
 		sf.t.Fatalf("set(): ISafeString!='-56'")
 	}
 }
@@ -103,7 +106,7 @@ func (sf *tester) new() {
 	if sf.ss == nil {
 		sf.t.Fatalf("new(): ISafeString==nil")
 	}
-	if sf.ss.Get() != "" {
+	if sf.ss.Get().Get() != "" {
 		sf.t.Fatalf("new(): ISafeString!=''")
 	}
 }

+ 8 - 3
v4/lev2/kchan/kchan.go

@@ -25,10 +25,13 @@ type KChanParam[T any] struct {
 	Ctx_     comp_spec.ILocalCtx // Локальный контекст для контроля создателя
 }
 
+var msg1 = defs.Txt("KChanParam[T]: ctx==nil")
+
 // SelfCheck -- проверка корректности правильности параметров умного канала.
 func (sf *KChanParam[T]) SelfCheck() {
-	hassert(sf.Limit_ > 0, "KChanParam[T].SelfCheck(): limit=%v, канал должен иметь положительный лимит")
-	hassert(sf.Ctx_ != nil, "KChanParam[T]: ctx==nil")
+	hassert(sf.Limit_ > 0, defs.Txt("KChanParam[T].SelfCheck(): limit=%v, канал должен иметь положительный лимит",
+		sf.Limit_))
+	hassert(sf.Ctx_ != nil, msg1)
 }
 
 // KChan -- умный потокобезопасный канал
@@ -49,9 +52,11 @@ type KChan[T any] struct {
 	lstMsg   []T
 }
 
+var msg2 = defs.Txt("NewKChan: param==nil")
+
 // NewKChan -- создаёт новый безопасный умный канал.
 func NewKChan[T any](param *KChanParam[T]) core_spec.IChan[T] {
-	hassert(param != nil, "NewKChan: param==nil")
+	hassert(param != nil, msg2)
 	param.SelfCheck()
 	sf := &KChan[T]{
 		KChanParam: param,

+ 3 - 2
v4/lev2/kctx/kctx.go

@@ -5,6 +5,7 @@ import (
 	"context"
 	"sync"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kernel_keeper"
@@ -65,7 +66,7 @@ func (sf *kCtx) Wg() kspec.IKernelWg {
 // Done -- блокирующий вызов ожидания отмены контекста ядра.
 func (sf *kCtx) Done() {
 	<-sf.ctx.Done()
-	sf.log.Debug("kCtx.Done()")
+	sf.log.Debug(defs.Txt("kCtx.Done()"))
 }
 
 // CtxBg -- возвращает неотменяемый контекст ядра (лучше не использовать).
@@ -76,5 +77,5 @@ func (sf *kCtx) CtxBg() context.Context {
 // Cancel -- отменяет контекст ядра.
 func (sf *kCtx) Cancel() {
 	sf.fnCancel()
-	sf.log.Debug("kCtx.Cancel()")
+	sf.log.Debug(defs.Txt("kCtx.Cancel()"))
 }

+ 4 - 2
v4/lev2/kctx/kctx_test.go

@@ -2,6 +2,8 @@ package kctx
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -15,7 +17,7 @@ func TestKernelCtx(t *testing.T) {
 	sf.new()
 }
 
-const counter = "counter"
+var counter = defs.Txt("counter")
 
 // Создание контекста ядра.
 func (sf *tester) new() {
@@ -35,7 +37,7 @@ func (sf *tester) new() {
 		sf.t.Fatalf("new(): counter==nil")
 	}
 	res := kCtx.Get(counter)
-	ctxVal := res.Hassert("new()")
+	ctxVal := res.Hassert(defs.Txt("new()"))
 	val := ctxVal.Val().(int)
 	if val != 5 {
 		sf.t.Fatalf("new(): counter(%v)!=5", val)

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

@@ -29,7 +29,7 @@ type kernelKeeper struct {
 var (
 	kernKeep *kernelKeeper
 	block    sync.Mutex
-	qName    = stream_name.NewAStreamName("kernel_keeper")
+	qName    = stream_name.NewAStreamName(defs.Txt("kernel_keeper"))
 )
 
 // GetKernelKeeper -- возвращает новый сторож системных сигналов.
@@ -47,7 +47,7 @@ func GetKernelKeeper(ctx context.Context, fnCancel func(),
 
 	paramLogBuf := &mL1.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: "kernelKeeper",
+		Prefix_: defs.Txt("kernelKeeper"),
 	}
 
 	sf := &kernelKeeper{

+ 13 - 5
v4/lev2/kmodule/kmodule.go

@@ -86,6 +86,13 @@ func (sf *kModule) Live() defs.ITxtFix {
 	return sf.strLive.Get()
 }
 
+var (
+	f0 = defs.Txt("|")
+	f1 = defs.Txt("/")
+	f2 = defs.Txt("-")
+	f3 = defs.Txt("\\")
+)
+
 // Сигнал жизни, каждые 5 сек публикует в шину метку.
 func (sf *kModule) sigLive() {
 	var (
@@ -101,20 +108,21 @@ func (sf *kModule) sigLive() {
 		default:
 			switch iPhase {
 			case 0:
-				sf.strLive.Set("|")
+				sf.strLive.Set(f0)
 				res = sf.bus.Publish(topic, sf.strLive.Byte())
 			case 1:
-				sf.strLive.Set("/")
+				sf.strLive.Set(f1)
 				res = sf.bus.Publish(topic, sf.strLive.Byte())
 			case 2:
-				sf.strLive.Set("-")
+				sf.strLive.Set(f2)
 				res = sf.bus.Publish(topic, sf.strLive.Byte())
 			case 3:
-				sf.strLive.Set("\\")
+				sf.strLive.Set(f3)
 				res = sf.bus.Publish(topic, sf.strLive.Byte())
 				iPhase = -1
 			}
-			res.Hassert("kModule.sigLive(): name=%v, in publish live", sf.Name())
+			msg := defs.Txt("kModule.sigLive(): name=%v, in publish live", sf.Name())
+			res.Hassert(msg)
 			iPhase++
 			sf.stat.Add(1)
 		}

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

@@ -33,6 +33,11 @@ var (
 	block sync.Mutex
 )
 
+var (
+	txtIsLocal = defs.Txt("isLocal")
+	msg1       = defs.Txt("GetMonolit(): in get from kernCtx isLocal -- not found")
+)
+
 // GetMonolit -- возвращает монолит.
 func GetMonolit(name mod_ent.AModuleName) *kMonolit {
 	block.Lock()
@@ -42,8 +47,8 @@ func GetMonolit(name mod_ent.AModuleName) *kMonolit {
 	}
 	mKh.Hassert(name != "", "NewMonolit(): name is empty")
 	kCtx := kctx.GetKernelCtx()
-	opt := kCtx.Get("isLocal")
-	opt.Hassert("GetMonolit(): in get from kernCtx isLocal -- not found")
+	opt := kCtx.Get(txtIsLocal)
+	opt.Hassert(msg1)
 	isLocalCtx := opt.Some()
 	isLocal := isLocalCtx.Val().(bool)
 	lCtx := mL1.NewLocalCtx(kCtx.Ctx())
@@ -94,7 +99,7 @@ func (sf *kMonolit) Add(module mod_spec.IKernelModule) {
 	}
 	key := defs.Txt("module_%v", len(sf.dict))
 	moduleName := module.Name()
-	comment := defs.ITxtFix("kMonolit.Add(): module=" + moduleName.Get())
+	comment := defs.Txt("kMonolit.Add(): module=" + moduleName.Txt().Get())
 	sf.lCtx.Set(key, module, comment)
 }
 

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

@@ -100,7 +100,7 @@ func (sf *tester) new() {
 	sf.newGood1()
 }
 
-const strIsLocal = "isLocal"
+var txIsLocal = defs.Txt("isLocal")
 
 func (sf *tester) newGood1() {
 	sf.t.Log("newGood1")
@@ -110,10 +110,10 @@ func (sf *tester) newGood1() {
 		}
 	}()
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set(strIsLocal, true, defs.Txt("type bus"))
+	kCtx.Set(txIsLocal, true, defs.Txt("type bus"))
 	for {
 		time.Sleep(time.Millisecond * 1)
-		if kCtx.Get(strIsLocal) != nil {
+		if kCtx.Get(txIsLocal) != nil {
 			break
 		}
 	}

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

@@ -29,7 +29,8 @@ import (
 )
 
 var (
-	streamName = stream_name.NewAStreamName("kernel_server_http") // Контрольная строка для ожидателя потока
+	msg0       = defs.Txt("kernel_server_http")
+	streamName = stream_name.NewAStreamName(msg0) // Контрольная строка для ожидателя потока
 )
 
 // kServHttp -- встроенный HTTP-сервер.
@@ -56,7 +57,7 @@ var (
 func getParams() (string, comp_spec.ILogBuf, kspec.IKernelCtx) {
 	param := &log_buf.LogBufParam{
 		IsTerm_: mL1.NewSafeBool(true),
-		Prefix_: "kServHttp",
+		Prefix_: defs.Txt("kServHttp"),
 	}
 	log := mL1.NewLogBuf(param)
 	log.Debug(defs.Txt("GetKernelServHttp(): first run"))
@@ -66,6 +67,8 @@ func getParams() (string, comp_spec.ILogBuf, kspec.IKernelCtx) {
 	return strLocalUrl, log, kCtx
 }
 
+var msg1 = defs.Txt("GetKernelServHttp(): not have monolit name from kCtx")
+
 // GetKernelServHttp -- возвращает  встроенный HTTP-сервер.
 func GetKernelServHttp() kspec.IKernelServerHttp {
 	block.Lock()
@@ -77,7 +80,7 @@ func GetKernelServHttp() kspec.IKernelServerHttp {
 	strLocalUrl, log, kCtx := getParams()
 
 	optMonolit := kCtx.Get(defs.Txt("monolitName"))
-	optMonolit.Hassert("GetKernelServHttp(): not have monolit name from kCtx")
+	optMonolit.Hassert(msg1)
 	strMonolit := optMonolit.Some().Val().(string)
 	confFiber := fiber.Config{
 		ServerHeader: strMonolit,

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

@@ -39,12 +39,12 @@ func GetKservHttpStd() mL0.IResult[*kServHttpStd] {
 	}
 	logBufParam := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: "kServHttpStd",
+		Prefix_: defs.Txt("kServHttpStd"),
 	}
 	log := mL1.NewLogBuf(logBufParam)
 	log.Debug(defs.Txt("GetKservHttpStd()"))
-	resPort := mL1.NewSafeIntGetenv("SERV_HTTP_STD_PORT")
-	resPort.Hassert("in get env SERV_HTTP_STD_PORT")
+	resPort := mL1.NewSafeIntGetenv(defs.Txt("SERV_HTTP_STD_PORT"))
+	resPort.Hassert(defs.Txt("in get env SERV_HTTP_STD_PORT"))
 	sf := &kServHttpStd{
 		kCtx: kctx.GetKernelCtx(),
 		log:  log,
@@ -78,7 +78,7 @@ func (sf *kServHttpStd) Run() {
 		sf.log.Debug(msgErr)
 	}
 
-	sf.log.Info("Сервер остановлен")
+	sf.log.Info(defs.Txt("Сервер остановлен"))
 }
 
 func (sf *kServHttpStd) close() {

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

@@ -45,7 +45,7 @@ func GetKernelWg(ctx context.Context) kspec.IKernelWg {
 	mKh.Hassert(ctx != nil, "GetKernelWg(): ctx==nil")
 	paramLogBuf := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: "kernelWg",
+		Prefix_: defs.Txt("kernelWg"),
 	}
 	sf := &kernelWg{
 		ctx:        ctx,
@@ -116,7 +116,7 @@ func (sf *kernelWg) Add(name *stream_name.AStreamName) {
 	msg := defs.Txt("Add(): stream('%v') done", name)
 	sf.log.Debug(msg)
 	mKh.Hassert(sf.isWork.Get(), "Add(): stream=%v, work end", []any{name})
-	mKh.Hassert(name.Get() != "", "Add(): name stream is empty")
+	mKh.Hassert(name.Name().Get() != "", "Add(): name stream is empty")
 	_, isOk := sf.dictStream[name]
 	mKh.Hassert(!isOk, "Add(): stream '%v' already exists", name)
 	sf.dictStream[name] = true

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

@@ -5,6 +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/lev2/kspec"
 )
@@ -33,7 +34,7 @@ func TestKernelWG(t *testing.T) {
 }
 
 var (
-	qName = stream_name.NewAStreamName("test_stream")
+	qName = stream_name.NewAStreamName(defs.Txt("test_stream"))
 )
 
 // Попытка добавления после закрытия ожидателя.

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

@@ -3,6 +3,7 @@ package log_topic
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
@@ -31,7 +32,7 @@ func (sf *tester) newGood1() {
 	sf.t.Log("newGood1")
 	busClient := client_bus_local.NewClientBusLocal()
 	qTopicTest := bus_ent.ITopicFix(topic.NewTopic("test_topic"))
-	client := NewLogTopic(qTopicTest, busClient).Hassert("newGood1()")
+	client := NewLogTopic(qTopicTest, busClient).Hassert(defs.Txt("newGood1()"))
 	res := client.Pub([]byte("test_msg"))
 	if res.IsErr() {
 		sf.t.Fatalf("newGood1(): err=%v", res.Err())

+ 9 - 9
v4/lev2/lsi/kstore_kv/kstore_kv.go

@@ -26,7 +26,7 @@ import (
 )
 
 var (
-	storeStreamName = stream_name.NewAStreamName("kstore_kv") // Имя потока для ожидателя потоков
+	storeStreamName = stream_name.NewAStreamName(defs.Txt("kstore_kv")) // Имя потока для ожидателя потоков
 )
 
 // kStoreKv -- локальное хранилище ядра.
@@ -51,12 +51,12 @@ func GetKernelStore() store_spec.IKernelStoreKv {
 	block.Lock()
 	defer block.Unlock()
 	if kernStore != nil {
-		kernStore.log.Debug("GetKernelStore()")
+		kernStore.log.Debug(defs.Txt("GetKernelStore()"))
 		return kernStore
 	}
 	kCtx := kctx.GetKernelCtx()
 	param := &log_buf.LogBufParam{
-		Prefix_: "kStoreKv",
+		Prefix_: defs.Txt("kStoreKv"),
 		IsTerm_: safe_bool.NewSafeBool(true),
 	}
 	log := mL1.NewLogBuf(param)
@@ -69,7 +69,7 @@ func GetKernelStore() store_spec.IKernelStoreKv {
 	}
 	sf.open()
 	kernStore = sf
-	kCtx.Set("kernStoreKV", kernStore, "fast KV store on Badger")
+	kCtx.Set(defs.Txt("kernStoreKV"), kernStore, "fast KV store on Badger")
 	return kernStore
 }
 
@@ -83,7 +83,7 @@ func (sf *kStoreKv) Set(rec store_ent.IRecKvFix) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	key := rec.Key()
-	sf.log.Debug("Set(): key='%v'", key.Get())
+	sf.log.Debug(defs.Txt("Set(): key='%v'", key.Get()))
 	fnSet := func(txn *badger.Txn) error {
 		err := txn.Set(key.Byte(), rec.Val().Byte())
 		return err
@@ -101,7 +101,7 @@ func (sf *kStoreKv) Set(rec store_ent.IRecKvFix) mL0.IResult[core_spec.EBool] {
 func (sf *kStoreKv) Get(key store_ent.IStoreKeyFix) mL0.IResult[[]byte] {
 	sf.RLock()
 	defer sf.RUnlock()
-	sf.log.Debug("Get(): key='%v'", key)
+	sf.log.Debug(defs.Txt("Get(): key='%v'", key))
 	var binVal []byte
 	fnGet := func(txn *badger.Txn) error {
 		item, err := txn.Get(key.Byte())
@@ -157,7 +157,7 @@ func (sf *kStoreKv) ByPrefix(prefix store_ent.IStoreKeyFix) core_spec.IResult[[]
 func (sf *kStoreKv) Delete(key store_ent.IStoreKeyFix) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.log.Debug("Delete(): key='%v'", key)
+	sf.log.Debug(defs.Txt("Delete(): key='%v'", key))
 	fnDelete := func(txn *badger.Txn) error {
 		err := txn.Delete(key.Byte())
 		return err
@@ -175,7 +175,7 @@ func (sf *kStoreKv) Delete(key store_ent.IStoreKeyFix) mL0.IResult[core_spec.EBo
 func (sf *kStoreKv) open() {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.log.Debug("open()")
+	sf.log.Debug(defs.Txt("open()"))
 	strPath := os.Getenv("LOCAL_STORE_PATH")
 	mKh.Hassert(strPath != "", "open(): env LOCAL_STORE_PATH not set")
 	pwd, err := os.Getwd()
@@ -238,5 +238,5 @@ func (sf *kStoreKv) close() {
 	err := sf.db.Close()
 	mKh.Assert(err == nil, "kStoreKv.close(): in close DB, err=\n\t%v", err)
 	sf.wg.Done(storeStreamName)
-	sf.log.Debug("close(): done")
+	sf.log.Debug(defs.Txt("close(): done"))
 }

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

@@ -5,6 +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/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
@@ -92,7 +93,7 @@ func (sf *tester) byPrefix() {
 	}
 	key = rec_key.NewRecKey("test")
 	res := kernStore.ByPrefix(key)
-	res.Hassert("byPrefix(): val == nil")
+	res.Hassert(defs.Txt("byPrefix(): val == nil"))
 	lstKey := res.Ok()
 	if len(lstKey) != 2 {
 		sf.t.Fatalf("byPrefix(): len(%v)!=2", len(lstKey))
@@ -104,7 +105,7 @@ func (sf *tester) get() {
 	sf.t.Log("get")
 	key := rec_key.NewRecKey("test_key")
 	res := kernStore.Get(key)
-	res.Hassert("get(): val==nil")
+	res.Hassert(defs.Txt("get(): val==nil"))
 	strVal := string(res.Ok())
 	if strVal != "test_val" {
 		sf.t.Fatalf("get(): strVal(%v)!='test_val'", strVal)
@@ -124,7 +125,7 @@ func (sf *tester) set() {
 }
 
 var (
-	qName = stream_name.NewAStreamName("123")
+	qName = stream_name.NewAStreamName(defs.Txt("123"))
 )
 
 // Закрытие хранилища.

+ 2 - 2
v4/lev2/lsi/store_ent/rec_meta/rec_meta_test.go

@@ -28,10 +28,10 @@ func (sf *tester) gets() {
 	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.Time().Get() == "" {
 		sf.t.Fatalf("gets(): createdAt is empty")
 	}
-	if updatedAt := sf.meta.updateAt_; updatedAt.Get() != "" {
+	if updatedAt := sf.meta.updateAt_; updatedAt.Time().Get() != "" {
 		sf.t.Fatalf("gets(): updatedAt is not empty")
 	}
 	if operation := sf.meta.Operation_; operation != "create" {

+ 3 - 3
v4/lev2/lti/bus_ent/handler_name/handler_name.go

@@ -28,7 +28,7 @@ type HandlerName struct {
 func NewHandlerName(val AHandlerName) *HandlerName {
 	helpers.Assert(val != "", "NewAHandlerName: val is empty")
 	sf := &HandlerName{
-		val: defs.ITxtFix(val),
+		val: defs.Txt(val),
 	}
 	_ = IHandlerNameFix(sf)
 	return sf
@@ -36,12 +36,12 @@ func NewHandlerName(val AHandlerName) *HandlerName {
 
 // Get -- получить значение.
 func (sf *HandlerName) Get() AHandlerName {
-	return AHandlerName(sf.val)
+	return AHandlerName(sf.val.Get())
 }
 
 // String -- строковое представление.
 func (sf *HandlerName) String() string {
-	return string(sf.val)
+	return sf.val.String()
 }
 
 // Txt -- внутренне представление имени функции обработчика.

+ 4 - 4
v4/lev2/lti/dot/msg_serve/msg_serve.go

@@ -10,24 +10,24 @@ import (
 // ServeReq -- входящий запрос на обслуживание.
 type ServeReq struct {
 	Topic_  bus_ent.ATopic `json:"topic"`
-	Uuid_   defs.ITxtFix      `json:"uuid"`
+	Uuid_   defs.ITxtFix   `json:"uuid"`
 	BinReq_ []byte         `json:"req"`
 }
 
 // SelfCheck -- проверяет структуру на правильность полей.
 func (sf *ServeReq) SelfCheck() {
 	mKh.Hassert(sf.Topic_ != "", "ServeReq.SelfCheck(): topic is empty")
-	mKh.Hassert(sf.Uuid_ != "", "ServeReq.SelfCheck(): uuid is empty")
+	mKh.Hassert(sf.Uuid_.Get() != "", "ServeReq.SelfCheck(): uuid is empty")
 }
 
 // ServeResp -- ответ на входящий запрос.
 type ServeResp struct {
 	Status_  defs.ITxtFix `json:"status"`
 	Uuid_    defs.ITxtFix `json:"uuid"`
-	BinResp_ []byte    `json:"resp"`
+	BinResp_ []byte       `json:"resp"`
 }
 
 // SelfCheck -- проверяет правильность своих полей.
 func (sf *ServeResp) SelfCheck() {
-	mKh.Hassert(sf.Status_ != "", "ServeResp.SelfCheck(): status is empty")
+	mKh.Hassert(sf.Status_.Get() != "", "ServeResp.SelfCheck(): status is empty")
 }

+ 3 - 2
v4/lev2/lti/dot/msg_serve/msg_serve_test.go

@@ -3,6 +3,7 @@ package msg_serve
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
 
@@ -23,7 +24,7 @@ func (sf *tester) resp() {
 	sf.t.Log("resp")
 	sf.respBad1()
 	resp := &ServeResp{
-		Status_: "test_ok",
+		Status_: defs.Txt("test_ok"),
 	}
 	resp.SelfCheck()
 }
@@ -50,7 +51,7 @@ func (sf *tester) req() {
 	sf.reqBad1()
 	req := &ServeReq{
 		Topic_:  qName,
-		Uuid_:   "test_uuid",
+		Uuid_:   defs.Txt("test_uuid"),
 		BinReq_: []byte("test msg"),
 	}
 	req.SelfCheck()

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

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

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

@@ -3,6 +3,7 @@ package msg_unsub
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 )
 
@@ -23,7 +24,7 @@ func (sf *tester) resp() {
 	sf.t.Log("resp")
 	sf.respBad1()
 	resp := &UnsubResp{
-		Status_: "test_ok",
+		Status_: defs.Txt("test_ok"),
 	}
 	resp.SelfCheck()
 }
@@ -46,7 +47,7 @@ func (sf *tester) req() {
 	sf.reqBad1()
 	req := &UnsubReq{
 		HandlerName_: bus_ent.AHandlerName("test_topic"),
-		Uuid_:        "test_uuid",
+		Uuid_:        defs.Txt("test_uuid"),
 	}
 	req.SelfCheck()
 }

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

@@ -39,7 +39,7 @@ func (sf *dictSubHook) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 	}
 	handlerName := handler.Name()
 	delete(sf.dict, handlerName.Get())
-	sf.kCtx.Del(defs.ITxtFix(handler.Name().Get()))
+	sf.kCtx.Del(defs.Txt(handler.Name().Get()))
 }
 
 // Subscribe -- добавляет в словарь подписки новый обработчик.
@@ -57,9 +57,9 @@ func (sf *dictSubHook) Read(binMsg []byte) {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
 	for handlerName := range sf.dict {
-		optHand := sf.kCtx.Get(defs.ITxtFix(handlerName))
+		optHand := sf.kCtx.Get(defs.Txt(handlerName))
 		if optHand.IsNone() {
-			sf.kCtx.Del(defs.ITxtFix(handlerName))
+			sf.kCtx.Del(defs.Txt(handlerName))
 			continue
 		}
 		handler := optHand.Some().Val().(bus_spec.IBusHandlerSubscribe)

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

@@ -3,6 +3,7 @@ package dict_topic_serve
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
@@ -42,7 +43,7 @@ func (sf *tester) callBad3() {
 	ctx := kctx.GetKernelCtx()
 	ctx.Cancel()
 	ctx.Wg().Wait()
-	sf.dict.Register(sf.hand).Hassert("callBad3()")
+	sf.dict.Register(sf.hand).Hassert(defs.Txt("callBad3()"))
 	res := sf.dict.SendRequest(sf.hand.Topic(), []byte("test"))
 	if res.IsOk() {
 		sf.t.Fatalf("callBad3(): err==nil")
@@ -101,7 +102,7 @@ func (sf *tester) addBad2() {
 // Правильное добавление обработчика подписки.
 func (sf *tester) addGood1() {
 	sf.t.Log("addGood1()")
-	sf.dict.Register(sf.hand).Hassert("addGood1()")
+	sf.dict.Register(sf.hand).Hassert(defs.Txt("addGood1()"))
 }
 
 // Вместо обработчика пустышка.

+ 14 - 9
v4/lev2/lti/kbus_base/kbus_base.go

@@ -21,7 +21,7 @@ import (
 )
 
 var (
-	busBaseStreamName = stream_name.NewAStreamName("bus_base")
+	busBaseStreamName = stream_name.NewAStreamName(defs.Txt("bus_base"))
 )
 
 // KBusBase -- базовая часть шины данных.
@@ -60,7 +60,7 @@ func GetKernelBusBase() *KBusBase {
 	go Bus_.run()
 	Bus_.IsWork_.Set()
 	Bus_.KCtx_.Wg().Add(busBaseStreamName)
-	Bus_.KCtx_.Set("kernBusBase", Bus_, "base of data bus")
+	Bus_.KCtx_.Set(defs.Txt("kernBusBase"), Bus_, "base of data bus")
 	_ = bus_spec.IKernelBus(Bus_)
 	return Bus_
 }
@@ -71,7 +71,7 @@ func (sf *KBusBase) Log() comp_spec.ILogBuf {
 }
 
 func (sf *KBusBase) run() {
-	sf.log.Debug("KBusBase.run()")
+	sf.log.Debug(defs.Txt("KBusBase.run()"))
 	for {
 		break
 	}
@@ -79,13 +79,15 @@ func (sf *KBusBase) run() {
 
 // Unsubscribe -- отписывает обработчик от топика.
 func (sf *KBusBase) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
-	sf.log.Debug("KBusBase.Unsubscribe(): handler='%v'", handler.Name())
+	msg := defs.Txt("KBusBase.Unsubscribe(): handler='%v'", handler.Name())
+	sf.log.Debug(msg)
 	sf.dictSub.Unsubscribe(handler)
 }
 
 // Subscribe -- подписывает обработчик на топик.
 func (sf *KBusBase) Subscribe(handler bus_spec.IBusHandlerSubscribe) core_spec.IResult[core_spec.EBool] {
-	sf.log.Debug("KBusBase.Subscribe(): handler='%v'", handler.Name())
+	msg := defs.Txt("KBusBase.Subscribe(): handler='%v'", handler.Name())
+	sf.log.Debug(msg)
 	helpers.Hassert(!sf.IsWork_.Get(), "KBusBase.Subscribe():  handler='%v', bus already closed", []any{handler.Name()})
 	sf.dictSub.Subscribe(handler)
 	return mL0.NewOk(ebool.NewEBool(true))
@@ -93,7 +95,8 @@ func (sf *KBusBase) Subscribe(handler bus_spec.IBusHandlerSubscribe) core_spec.I
 
 // SendRequest -- отправляет запрос в шину данных.
 func (sf *KBusBase) SendRequest(topic bus_ent.ITopicFix, binReq []byte) mL0.IResult[[]byte] {
-	sf.log.Debug("KBusBase.SendRequest(): topic='%v'", topic.Get())
+	msg := defs.Txt("KBusBase.SendRequest(): topic='%v'", topic.Get())
+	sf.log.Debug(msg)
 	if !sf.IsWork_.Get() {
 		err := defs.NewErr("KBusBase.SendRequest():  topic='%v', bus already closed", topic.Get())
 		sf.log.Err(err)
@@ -114,7 +117,8 @@ func (sf *KBusBase) RegisterServe(handler bus_spec.IBusHandlerServe) mL0.IResult
 		err := defs.NewErr("KBusBase.RegisterServe(): IBusHandlerServe==nil")
 		return mL0.NewErr[core_spec.EBool](err)
 	}
-	sf.log.Debug("KBusBase.RegisterServe(): handler='%v'", handler.Name())
+	msg := defs.Txt("KBusBase.RegisterServe(): handler='%v'", handler.Name())
+	sf.log.Debug(msg)
 	res := sf.dictServe.Register(handler)
 	if res.IsErr() {
 		err := defs.NewErr("KBusBase.RegisterServe(): handler='%v', err=\n\t%w", handler.Name(), res.Err())
@@ -126,7 +130,8 @@ func (sf *KBusBase) RegisterServe(handler bus_spec.IBusHandlerServe) mL0.IResult
 
 // Publish -- публикует сообщение в шину.
 func (sf *KBusBase) Publish(topic bus_ent.ITopicFix, binMsg []byte) mL0.IResult[core_spec.EBool] {
-	sf.log.Debug("KBusBase.Publish(): topic='%v'", topic)
+	msg := defs.Txt("KBusBase.Publish(): topic='%v'", topic)
+	sf.log.Debug(msg)
 	if !sf.IsWork_.Get() {
 		err := defs.NewErr("KBusBase.Publish(): topic='%v',bus already closed", topic)
 		sf.log.Err(err)
@@ -152,5 +157,5 @@ func (sf *KBusBase) close() {
 	}
 	sf.IsWork_.Reset()
 	sf.KCtx_.Wg().Done(busBaseStreamName)
-	sf.log.Debug("KBusBase.close(): done")
+	sf.log.Debug(defs.Txt("KBusBase.close(): done"))
 }

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

@@ -3,6 +3,7 @@ package kbus_base
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
@@ -77,7 +78,7 @@ func (sf *tester) reqGood1() {
 
 func (sf *tester) servGood1() {
 	sf.t.Log("servGood1")
-	sf.kBus.RegisterServe(sf.handServ).Hassert("servGood1()")
+	sf.kBus.RegisterServe(sf.handServ).Hassert(defs.Txt("servGood1()"))
 }
 
 // Нет обработчика для обслуживания запросов.

+ 8 - 8
v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go

@@ -40,14 +40,14 @@ type ClientBusHttp struct {
 func NewClientBusHttp(urlRemote string) bus_spec.IBusClient {
 	param := &log_buf.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: "ClientBusHttp",
+		Prefix_: defs.Txt("ClientBusHttp"),
 	}
 	log := mL1.NewLogBuf(param)
-	log.Debug("NewClientBusHttp()")
+	log.Debug(defs.Txt("NewClientBusHttp()"))
 	helpers.Hassert(urlRemote != "", "NewClientBusHttp(): urlRemote is empty", []any{})
 	kCtx := kctx.GetKernelCtx()
-	resLocal := safe_string.NewSafeStringGetenv("LOCAL_HTTP_URL")
-	resLocal.Hassert("NewClientBusHttp(): in get env LOCAL_HTTP_URL)")
+	resLocal := safe_string.NewSafeStringGetenv(defs.Txt("LOCAL_HTTP_URL"))
+	resLocal.Hassert(defs.Txt("NewClientBusHttp(): in get env LOCAL_HTTP_URL)"))
 	urlLocal := resLocal.Ok()
 	kBusHttp := kbus_http.GetKernelBusHttp()
 	sf := &ClientBusHttp{
@@ -68,7 +68,7 @@ func (sf *ClientBusHttp) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 
 	req := &dot.UnsubReq{
 		HandlerName_: handler.Name().Get(),
-		Uuid_:        defs.Txt(defs.ITxtFix(_uuid.String())),
+		Uuid_:        defs.Txt(_uuid.String()),
 	}
 	req.SelfCheck()
 	binReq, err := json.MarshalIndent(req, "", "  ")
@@ -90,7 +90,7 @@ func (sf *ClientBusHttp) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 		sf.log.Err(err)
 		return
 	}
-	if resp.Status_ != "ok" {
+	if resp.Status_.Get() != "ok" {
 		err := defs.NewErr("Unsubscribe(): resp!='ok', err=\n\t%v", resp.Status_)
 		sf.log.Err(err)
 	}
@@ -145,7 +145,7 @@ func (sf *ClientBusHttp) SendRequest(topic bus_ent.ITopicFix, binReq []byte) mL0
 	mL1.FnHassert(helpers.Hassert)(err == nil, "ClientBusHttp.SendRequest(): in generate UUID v6, err=\n\t%v", err)
 	req := &dot.ServeReq{
 		Topic_:  topic.Get(),
-		Uuid_:   defs.ITxtFix(_uuid.String()),
+		Uuid_:   defs.Txt(_uuid.String()),
 		BinReq_: binReq,
 	}
 	req.SelfCheck()
@@ -166,7 +166,7 @@ func (sf *ClientBusHttp) SendRequest(topic bus_ent.ITopicFix, binReq []byte) mL0
 		err := defs.NewErr("ClientBusHttp.SendRequest(): in unmarshal response, err=\n\t%v", err)
 		return mL0.NewErr[[]byte](err)
 	}
-	if resp.Status_ != "ok" {
+	if resp.Status_.Get() != "ok" {
 		err := defs.NewErr("ClientBusHttp.SendRequest(): resp!='ok', err=\n\t%v", resp.Status_)
 		return mL0.NewErr[[]byte](err)
 	}

+ 3 - 2
v4/lev2/lti/kbus_http/client_bus_http/client_bus_http_test.go

@@ -7,6 +7,7 @@ import (
 	"testing"
 	"time"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
@@ -136,7 +137,7 @@ func (sf *tester) reg() {
 func (sf *tester) regGood1() {
 	sf.t.Log("regGood1")
 	res := sf.cl.RegisterServe(sf.handServ)
-	res.Hassert("regGood1()")
+	res.Hassert(defs.Txt("regGood1()"))
 }
 
 // Нет серверного обработчика.
@@ -390,7 +391,7 @@ func (sf *tester) newGood1() {
 			sf.t.Fatalf("newGood1(): panic=%v", _panic)
 		}
 	}()
-	sf.kCtx.Set("monolitName", "test_client_bus_http", "comment")
+	sf.kCtx.Set(defs.Txt("monolitName"), "test_client_bus_http", "comment")
 	sf.cl = NewClientBusHttp(baseUrl).(*ClientBusHttp)
 	kServHttp := kserv_http.GetKernelServHttp()
 	kServHttp.Run()

+ 11 - 11
v4/lev2/lti/kbus_http/kbus_http.go

@@ -42,10 +42,10 @@ func GetKernelBusHttp() bus_spec.IKernelBus {
 	}
 	paramLogBuf := &mL1.LogBufParam{
 		IsTerm_: safe_bool.NewSafeBool(true),
-		Prefix_: "kBusHttp",
+		Prefix_: defs.Txt("kBusHttp"),
 	}
 	log := mL1.NewLogBuf(paramLogBuf)
-	log.Debug("GetKernelBusHttp(): new")
+	log.Debug(defs.Txt("GetKernelBusHttp(): new"))
 	kCtx := kctx.GetKernelCtx()
 	kBus := kbus_base.GetKernelBusBase()
 	sf := &kBusHttp{
@@ -58,18 +58,18 @@ func GetKernelBusHttp() bus_spec.IKernelBus {
 	fibApp.Post("/bus/unsub", sf.postUnsub)         // Топик отписки, IN
 	fibApp.Post("/bus/request", sf.postSendRequest) // Топик входящих запросов, IN
 	fibApp.Post("/bus/pub", sf.postPublish)         // Топик публикаций подписки, IN
-	kCtx.Set("kernBus", sf, "GetKernelBusHttp(): http data bus")
+	kCtx.Set(defs.Txt("kernBus"), sf, "GetKernelBusHttp(): http data bus")
 	Bus_ = sf
 	return Bus_
 }
 
 // Входящий запрос HTTP на подписку.
 func (sf *kBusHttp) postSub(ctx fiber.Ctx) error {
-	sf.log.Debug("postSub()")
+	sf.log.Debug(defs.Txt("postSub()"))
 	ctx.Set("Content-type", "text/html; charset=utf8")
 	ctx.Set("Content-type", "text/json")
 	ctx.Set("Cache-Control", "no-cache")
-	sf.log.Debug("postSub()")
+	sf.log.Debug(defs.Txt("postSub()"))
 	req := &dot.SubscribeReq{}
 	err := ctx.Bind().Body(req)
 	if err != nil {
@@ -108,7 +108,7 @@ func (sf *kBusHttp) processSubscribe(req *dot.SubscribeReq) *dot.SubscribeResp {
 
 // Входящая публикация.
 func (sf *kBusHttp) postPublish(ctx fiber.Ctx) error {
-	sf.log.Debug("postPublish()")
+	sf.log.Debug(defs.Txt("postPublish()"))
 	ctx.Set("Content-type", "text/html; charset=utf8")
 	ctx.Set("Content-type", "text/json")
 	ctx.Set("Cache-Control", "no-cache")
@@ -148,7 +148,7 @@ func (sf *kBusHttp) processPublish(req *dot.PublishReq) *dot.PublishResp {
 
 // Входящий запрос.
 func (sf *kBusHttp) postSendRequest(ctx fiber.Ctx) error {
-	sf.log.Debug("postSendRequest()")
+	sf.log.Debug(defs.Txt("postSendRequest()"))
 	ctx.Set("Content-type", "text/html; charset=utf8")
 	ctx.Set("Content-type", "text/json")
 	ctx.Set("Cache-Control", "no-cache")
@@ -176,7 +176,7 @@ func (sf *kBusHttp) processSendRequest(req *dot.ServeReq) *dot.ServeResp {
 	topic := bus_ent.ITopicFix(topic.NewTopic(req.Topic_))
 	res := sf.SendRequest(topic, req.BinReq_)
 	resp := &dot.ServeResp{
-		Status_: "ok",
+		Status_: defs.Txt("ok"),
 		Uuid_:   req.Uuid_,
 	}
 	if res.IsErr() {
@@ -189,7 +189,7 @@ func (sf *kBusHttp) processSendRequest(req *dot.ServeReq) *dot.ServeResp {
 
 // Входящая отписка от топика по HTTP.
 func (sf *kBusHttp) postUnsub(ctx fiber.Ctx) error {
-	sf.log.Debug("postUnsub()")
+	sf.log.Debug(defs.Txt("postUnsub()"))
 	ctx.Set("Content-type", "text/html; charset=utf8")
 	ctx.Set("Content-type", "text/json")
 	ctx.Set("Cache-Control", "no-cache")
@@ -215,10 +215,10 @@ func (sf *kBusHttp) postUnsub(ctx fiber.Ctx) error {
 func (sf *kBusHttp) processUnsubRequest(req *dot.UnsubReq) *dot.UnsubResp {
 	req.SelfCheck()
 	resp := &dot.UnsubResp{
-		Status_: "ok",
+		Status_: defs.Txt("ok"),
 		Uuid_:   req.Uuid_,
 	}
-	optHandler := sf.KCtx_.Get(defs.ITxtFix(req.HandlerName_))
+	optHandler := sf.KCtx_.Get(defs.Txt(req.HandlerName_))
 	if optHandler.IsNone() {
 		resp.Status_ = defs.Txt("kernelBusHttp.processUnsubRequest(): not get handler(%v) from kernel ctx",
 			req.HandlerName_)

+ 13 - 12
v4/lev2/lti/kbus_http/kbus_http_test.go

@@ -9,6 +9,7 @@ import (
 	"testing"
 	"time"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
@@ -41,7 +42,7 @@ func TestKernelBusHttp(t *testing.T) {
 		handServ: mock_hand_serve.NewMockHandlerServe(qNameServ, "name_serv"),
 	}
 	ctx := kctx.GetKernelCtx()
-	ctx.Set("monolitName", "test_monolit", "comment")
+	ctx.Set(defs.Txt("monolitName"), "test_monolit", "comment")
 	sf.get()
 	sf.req()
 	sf.sub()
@@ -67,7 +68,7 @@ func (sf *tester) unsubGood2() {
 	}
 	req := &dot.UnsubReq{
 		HandlerName_: sf.handSub.Name().Get(),
-		Uuid_:        test_uuid,
+		Uuid_:        defs.Txt(test_uuid),
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
 	body := strings.NewReader(string(binReq))
@@ -95,7 +96,7 @@ func (sf *tester) unsubGood2() {
 	if err != nil {
 		sf.t.Fatalf("unsubGood2(): err=%v", err)
 	}
-	if resp.Status_ != "ok" {
+	if resp.Status_.Get() != "ok" {
 		sf.t.Fatalf("unsubGood2(): resp(%v)!='ok'", resp.Status_)
 	}
 }
@@ -138,10 +139,10 @@ func (sf *tester) unsubGood1() {
 	}
 	req := &dot.UnsubReq{
 		HandlerName_: sf.handSub.Name().Get(),
-		Uuid_:        test_uuid,
+		Uuid_:        defs.Txt(test_uuid),
 	}
 	resp := Bus_.processUnsubRequest(req)
-	if resp.Status_ != "ok" {
+	if resp.Status_.Get() != "ok" {
 		sf.t.Fatalf("unsubGood1(): status(%v)!='ok'", resp.Status_)
 	}
 }
@@ -157,10 +158,10 @@ func (sf *tester) unsubBad2() {
 	}
 	req := &dot.UnsubReq{
 		HandlerName_: sf.handSub.Name().Get(),
-		Uuid_:        test_uuid,
+		Uuid_:        defs.Txt(test_uuid),
 	}
 	resp := Bus_.processUnsubRequest(req)
-	if resp.Status_ == "ok" {
+	if resp.Status_.Get() == "ok" {
 		sf.t.Fatalf("unsubBad2(): status(%v)=='ok'", resp.Status_)
 	}
 }
@@ -450,7 +451,7 @@ func (sf *tester) reqBad4() {
 	defer sf.handServ.IsBad_.Reset()
 	req := &dot.ServeReq{
 		Topic_:  sf.handServ.Topic().Get(),
-		Uuid_:   test_uuid,
+		Uuid_:   defs.Txt(test_uuid),
 		BinReq_: []byte("test_msg"),
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
@@ -478,7 +479,7 @@ func (sf *tester) reqBad4() {
 	if err != nil {
 		sf.t.Fatalf("reqBad4(): err=%v", err)
 	}
-	if resp.Status_ == "ok" {
+	if resp.Status_.Get() == "ok" {
 		sf.t.Fatalf("reqBad4(): status(%v)=='ok'", resp.Status_)
 	}
 }
@@ -487,7 +488,7 @@ func (sf *tester) reqGood1() {
 	sf.t.Log("reqGood1")
 	req := &dot.ServeReq{
 		Topic_:  sf.handServ.Topic().Get(),
-		Uuid_:   test_uuid,
+		Uuid_:   defs.Txt(test_uuid),
 		BinReq_: []byte("test_msg"),
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
@@ -529,7 +530,7 @@ func (sf *tester) reqBad3() {
 	sf.t.Log("reqBad3")
 	req := &dot.ServeReq{
 		Topic_:  qNameBad.Get(),
-		Uuid_:   test_uuid,
+		Uuid_:   defs.Txt(test_uuid),
 		BinReq_: []byte("test_msg"),
 	}
 	binReq, _ := json.MarshalIndent(req, "", "  ")
@@ -596,5 +597,5 @@ func (sf *tester) get() {
 		sf.t.Fatalf("get(): bus==nil")
 	}
 	_ = GetKernelBusHttp()
-	Bus_.RegisterServe(sf.handServ).Hassert("get()")
+	Bus_.RegisterServe(sf.handServ).Hassert(defs.Txt("get()"))
 }

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

@@ -26,7 +26,7 @@ func NewHxUrl(patch defs.ITxtFix) *HxUrl {
 
 // String -- возвращает строковое представление тэга.
 func (sf *HxUrl) String() string {
-	return string(sf.method.Get() + `="` + sf.patch.Get() + `"`)
+	return string(sf.method.Method().Get() + `="` + sf.patch.Patch().Get() + `"`)
 }
 
 // Method -- возвращает метод запроса.

+ 3 - 1
v4/lev2/wui/hx_url/hx_url_test.go

@@ -2,10 +2,12 @@ package hx_url
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 func TestHxUrl(t *testing.T) {
-	swap := NewHxUrl("/wui/click/abc")
+	swap := NewHxUrl(defs.Txt("/wui/click/abc"))
 	if swap == nil {
 		t.Fatalf("swap==nil")
 	}

+ 6 - 6
v4/lev2/wui/hx_url_method/hx_url_method.go

@@ -11,28 +11,28 @@ import (
 // HxSwap -- атрибут HTMX (метод запроса, внеполосная замена).
 type HxSwap struct {
 	sync.RWMutex
-	val defs.ITxtFix
+	method defs.ITxtFix
 }
 
 // NewHxUrlMethod -- возвращает новый метод запроса.
 func NewHxUrlMethod() *HxSwap {
 	sf := &HxSwap{
-		val: "hx-post",
+		method: defs.Txt("hx-post"),
 	}
 	_ = mWt.IHxUrlMethod(sf)
 	return sf
 }
 
-// Get -- возвращает хранимое значение метода запроса.
-func (sf *HxSwap) Get() defs.ITxtFix {
+// Method -- возвращает хранимое значение метода запроса.
+func (sf *HxSwap) Method() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
-	return sf.val
+	return sf.method
 }
 
 // Set -- устанавливает значение метода запроса.
 func (sf *HxSwap) Set(val defs.ITxtFix) {
 	sf.Lock()
 	defer sf.Unlock()
-	sf.val = val
+	sf.method = val
 }

+ 5 - 3
v4/lev2/wui/hx_url_method/hx_url_method_test.go

@@ -2,6 +2,8 @@ package hx_url_method
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 func TestHxUrlMethod(t *testing.T) {
@@ -9,11 +11,11 @@ func TestHxUrlMethod(t *testing.T) {
 	if swap == nil {
 		t.Fatalf("swap==nil")
 	}
-	if tag := swap.Get(); tag != "hx-post" {
+	if method := swap.Method(); method.Get() != "hx-post" {
 		t.Fatalf("tag not empty")
 	}
-	swap.Set("hx-get")
-	if tag := swap.Get(); tag != "hx-get" {
+	swap.Set(defs.Txt("hx-get"))
+	if method := swap.Method(); method.Get() != "hx-get" {
 		t.Fatalf("tag bad")
 	}
 }

+ 4 - 4
v4/lev2/wui/hx_url_patch/hx_url_patch.go

@@ -17,16 +17,16 @@ type HxUrlPatch struct {
 
 // NewHxUrlPatch -- возвращает новый путь запроса.
 func NewHxUrlPatch(patch defs.ITxtFix) *HxUrlPatch {
-	mKh.Hassert(patch != "", "NewHxUrlPatch(): patch isempty")
+	mKh.Hassert(patch.Get() != "", "NewHxUrlPatch(): patch isempty")
 	sf := &HxUrlPatch{
 		val: patch,
 	}
-	_ = mWt.IHxUrlMethod(sf)
+	_ = mWt.IHxUrlPatch(sf)
 	return sf
 }
 
-// Get -- возвращает хранимое значение пути запроса.
-func (sf *HxUrlPatch) Get() defs.ITxtFix {
+// Patch -- возвращает хранимое значение пути запроса.
+func (sf *HxUrlPatch) Patch() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val

+ 6 - 4
v4/lev2/wui/hx_url_patch/hx_url_patch_test.go

@@ -2,18 +2,20 @@ package hx_url_patch
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 func TestHxUrlPatch(t *testing.T) {
-	swap := NewHxUrlPatch("/wui/form/123")
+	swap := NewHxUrlPatch(defs.Txt("/wui/form/123"))
 	if swap == nil {
 		t.Fatalf("swap==nil")
 	}
-	if patch := swap.Get(); patch != "/wui/form/123" {
+	if patch := swap.Patch(); patch.Get() != "/wui/form/123" {
 		t.Fatalf("patch bad")
 	}
-	swap.Set("/wui/click/abc")
-	if patch := swap.Get(); patch != "/wui/click/abc" {
+	swap.Set(defs.Txt("/wui/click/abc"))
+	if patch := swap.Patch(); patch.Get() != "/wui/click/abc" {
 		t.Fatalf("patch bad")
 	}
 }

+ 3 - 3
v4/lev2/wui/wui_button/wui_button.go

@@ -33,7 +33,7 @@ func NewWuiButton(text defs.ITxtFix, fnBack FnBtnBack) *WuiButton {
 		text:       wui_text.NewWuiText(text),
 		fnBack:     fnBack,
 	}
-	sf.hx = wui_hx.NewWuiHx("/wui/click/" + sf.Id())
+	sf.hx = wui_hx.NewWuiHx(defs.Txt("/wui/click/" + sf.Id().Get()))
 	wCtx := wui_ctx.GetWuiCtx()
 	wCtx.Set(sf.Id(), sf, "WUI-кнопка")
 	_ = mWt.IWuiButton(sf)
@@ -62,7 +62,7 @@ const (
 // Html -- возвращает HTML-представление текста.
 func (sf *WuiButton) Html() defs.ITxtFix {
 	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id().String())
-	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.Get().String())
+	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.String())
 	strRes = strings.ReplaceAll(strRes, "{.hx}", sf.hx.String())
-	return defs.ITxtFix(strRes)
+	return defs.Txt(strRes)
 }

+ 3 - 2
v4/lev2/wui/wui_button/wui_button_test.go

@@ -4,6 +4,7 @@ import (
 	"testing"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -22,7 +23,7 @@ func TestWuiButton(t *testing.T) {
 // Создание кнопки.
 func (sf *tester) new() {
 	sf.t.Log("new")
-	btn := NewWuiButton("test_val", sf.fnBack)
+	btn := NewWuiButton(defs.Txt("test_val"), sf.fnBack)
 	if btn == nil {
 		sf.t.Fatalf("new(): WuiButton==nil")
 	}
@@ -35,7 +36,7 @@ func (sf *tester) new() {
 	if hx := btn.Hx(); hx == nil {
 		sf.t.Fatalf("new(): IWuiHx==nil")
 	}
-	btn.Click(map[string]string{}).Hassert("new()")
+	btn.Click(map[string]string{}).Hassert(defs.Txt("new()"))
 	if str := <-sf.chCall; str != "test" {
 		sf.t.Fatalf("new(): bad called")
 	}

+ 7 - 5
v4/lev2/wui/wui_hx/wui_hx_test.go

@@ -2,6 +2,8 @@ package wui_hx
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -20,7 +22,7 @@ func TestWhx(t *testing.T) {
 // Получает строку атрибутов.
 func (sf *tester) str() {
 	sf.t.Log("str")
-	sf.hx.Url().Method().Set("hx-put")
+	sf.hx.Url().Method().Set(defs.Txt("hx-put"))
 	sf.hx.Trigger().Set("load")
 	sf.hx.Target().Set("#main")
 	sf.hx.Swap().Set("before")
@@ -29,9 +31,9 @@ func (sf *tester) str() {
 	str := sf.hx.String()
 	_str := `hx-put="/wui/click/123"
 			hx-trigger="load"
-			hx-target="#main" 
-			hx-swap="before" 
-			hx-swap-oob="true" 
+			hx-target="#main"
+			hx-swap="before"
+			hx-swap-oob="true"
 			hx-vals='{"test":3}'`
 	if str != _str {
 		sf.t.Fatalf("str(): \n\t%v\n\t%v", str, _str)
@@ -41,7 +43,7 @@ func (sf *tester) str() {
 // Создаёт новые тэги HTMX.
 func (sf *tester) new() {
 	sf.t.Log("new")
-	hx := NewWuiHx("/wui/click/123")
+	hx := NewWuiHx(defs.Txt("/wui/click/123"))
 	if hx == nil {
 		sf.t.Fatalf("new(): IWuiHx==nil")
 	}

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

@@ -42,6 +42,6 @@ const (
 // Html -- возвращает HTML-представление текста.
 func (sf *WuiLabel) Html() defs.ITxtFix {
 	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id().String())
-	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.Get().String())
-	return defs.ITxtFix(strRes)
+	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.String())
+	return defs.Txt(strRes)
 }

+ 5 - 2
v4/lev2/wui/wui_label/wui_label_test.go

@@ -2,6 +2,8 @@ package wui_label
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -18,11 +20,12 @@ func TestWuiLabel(t *testing.T) {
 // Создаёт новую метку.
 func (sf *tester) new() {
 	sf.t.Log("new")
-	lbl := NewWuiLabel("test_lbl").Hassert("new()")
+	lbl := NewWuiLabel(defs.Txt("test_lbl")).
+		Hassert(defs.Txt("new()"))
 	if txt := lbl.Text(); txt == nil {
 		sf.t.Fatalf("new(): txt==nil")
 	}
-	if html := lbl.Html(); html == "" {
+	if html := lbl.Html(); html.Get() == "" {
 		sf.t.Fatalf("new(): html is empty")
 	}
 }

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

@@ -4,6 +4,7 @@ import (
 	"testing"
 
 	mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -24,7 +25,7 @@ func (sf *tester) get() {
 	if wCtx == nil {
 		sf.t.Fatalf("get(): IWuiCtx==nil")
 	}
-	wBtn := NewWuiButton("test_btn", sf.fnClick)
+	wBtn := NewWuiButton(defs.Txt("test_btn"), sf.fnClick)
 	if wBtn == nil {
 		sf.t.Fatalf("get(): IWuiButton==nil")
 	}

+ 3 - 3
v4/lev2/wui/wui_text/wui_text.go

@@ -37,7 +37,7 @@ func (sf *WuiText) Html() defs.ITxtFix {
 	defer sf.RUnlock()
 	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id().String())
 	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.val.String())
-	return defs.ITxtFix(strRes)
+	return defs.Txt(strRes)
 }
 
 // Set -- устанавливает хранимое значение.
@@ -47,8 +47,8 @@ func (sf *WuiText) Set(val defs.ITxtFix) {
 	sf.val = val
 }
 
-// Get -- возвращает хранимое значение.
-func (sf *WuiText) Get() defs.ITxtFix {
+// Caption -- возвращает хранимое значение.
+func (sf *WuiText) Caption() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val

+ 5 - 3
v4/lev2/wui/wui_text/wui_text_test.go

@@ -2,6 +2,8 @@ package wui_text
 
 import (
 	"testing"
+
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 )
 
 type tester struct {
@@ -21,7 +23,7 @@ func TestWuiText(t *testing.T) {
 // Получает HTML.
 func (sf *tester) html() {
 	sf.t.Log("html")
-	if txt := sf.txt.Html(); txt == "" {
+	if txt := sf.txt.Html(); txt.Get() == "" {
 		sf.t.Fatalf("set(): html is empty")
 	}
 }
@@ -29,7 +31,7 @@ func (sf *tester) html() {
 // Устанавливает новый текст.
 func (sf *tester) set() {
 	sf.t.Log("set")
-	sf.txt.Set("test_val2")
+	sf.txt.Set(defs.Txt("test_val2"))
 	if txt := sf.txt.Get(); txt != "test_val2" {
 		sf.t.Fatalf("set(): text is bad")
 	}
@@ -38,7 +40,7 @@ func (sf *tester) set() {
 // Получение нового WuiText.
 func (sf *tester) new() {
 	sf.t.Log("new")
-	sf.txt = NewWuiText("test_text")
+	sf.txt = NewWuiText(defs.Txt("test_text"))
 	if txt := sf.txt.Get(); txt != "test_text" {
 		sf.t.Fatalf("new(): text is bad")
 	}

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

@@ -10,8 +10,8 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 // hx-put    // UPDATE PARTIAL
 // hx-delete // DELETE.
 type IHxUrlMethod interface {
-	// Get -- возвращает метод атрибута
-	Get() defs.ITxtFix
+	// Method -- возвращает метод атрибута
+	Method() defs.ITxtFix
 	// Set -- устанавливает метод атрибута
 	Set(defs.ITxtFix)
 }

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

@@ -4,8 +4,8 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 
 // IHxUrlPatch -- атрибут пути HTMX.
 type IHxUrlPatch interface {
-	// Get -- возвращает путь атрибута
-	Get() defs.ITxtFix
+	// Patch -- возвращает путь атрибута
+	Patch() defs.ITxtFix
 	// Set -- устанавливает путь атрибута
 	Set(defs.ITxtFix)
 }

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

@@ -5,8 +5,8 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 // IWuiText -- текст WUI.
 type IWuiText interface {
 	IWuiWidget
-	// Get -- возвращает текст
-	Get() defs.ITxtFix
+	// Caption -- возвращает текст
+	Caption() defs.ITxtFix
 	// Set -- устанавливает текст
 	Set(defs.ITxtFix)
 }

+ 3 - 3
v4/lev2/wui/wui_widget/wui_widget.go

@@ -17,7 +17,7 @@ type WuiWidget struct {
 // NewWuiWidget -- возвращает новый базовый виджет WUI.
 func NewWuiWidget() *WuiWidget {
 	sf := &WuiWidget{
-		KTxt: "wui_" + defs.ITxtFix(rand.Text()),
+		ITxtFix: defs.Txt("wui_" + rand.Text()),
 	}
 	_ = mWt.IWuiWidget(sf)
 	return sf
@@ -25,7 +25,7 @@ func NewWuiWidget() *WuiWidget {
 
 // Id - возвращает ID виджета.
 func (sf *WuiWidget) Id() defs.ITxtFix {
-	return sf.KTxt
+	return sf.ITxtFix
 }
 
 const (
@@ -35,5 +35,5 @@ const (
 // Html -- возвращает HTML представление виджета.
 func (sf *WuiWidget) Html() defs.ITxtFix {
 	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.String())
-	return defs.ITxtFix(strRes)
+	return defs.Txt(strRes)
 }

+ 2 - 2
v4/lev2/wui/wui_widget/wui_widget_test.go

@@ -6,10 +6,10 @@ import (
 
 func TestWuiWidget(t *testing.T) {
 	w := NewWuiWidget()
-	if id := w.Id(); id == "" {
+	if id := w.Id(); id.Get() == "" {
 		t.Fatalf("ID is empty")
 	}
-	if strHtml := w.Html(); strHtml == "" {
+	if txtHtml := w.Html(); txtHtml.Get() == "" {
 		t.Fatalf("strHtml is empty")
 	}
 }

+ 8 - 6
v4/lev3/mod_ent/module_name/module_name.go

@@ -15,6 +15,8 @@ type IModuleNameFix interface {
 	Get() AModuleName
 	// String -- строковое представление имени модуля
 	String() string
+	// Txt -- внутренне представление имени модуля
+	Txt() defs.ITxtFix
 }
 
 type ModuleName struct {
@@ -25,7 +27,7 @@ type ModuleName struct {
 func NewModuleName(val AModuleName) *ModuleName {
 	helpers.Hassert(val != "", "NewAModuleName(): val is empty")
 	sf := &ModuleName{
-		name: defs.ITxtFix(val),
+		name: defs.Txt(val),
 	}
 	_ = IModuleNameFix(sf)
 	return sf
@@ -38,25 +40,25 @@ func (sf *ModuleName) Txt() defs.ITxtFix {
 
 // String -- строковое представление.
 func (sf *ModuleName) String() string {
-	return string(sf.name)
+	return sf.name.String()
 }
 
 // Get -- возвращает имя модуля.
 func (sf *ModuleName) Get() AModuleName {
-	return AModuleName(sf.name)
+	return AModuleName(sf.name.Get())
 }
 
 // Byte -- возвращает байты.
 func (sf *ModuleName) Byte() []byte {
-	return []byte(sf.name)
+	return sf.name.Byte()
 }
 
 // Rune -- возвращает руны.
 func (sf *ModuleName) Rune() []rune {
-	return []rune(sf.name)
+	return sf.name.Rune()
 }
 
 // Len -- длина строки.
 func (sf *ModuleName) Len() defs.Int {
-	return defs.Int(len(sf.name))
+	return sf.name.Len()
 }

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

@@ -43,7 +43,7 @@ var strBlockRow string
 
 // Событие клика по кнопке.
 func (sf *BtnModules) clickMonolit(dict map[string]string) mL0.IResult[string] {
-	optMonolit := sf.kCtx.Get("monolit")
+	optMonolit := sf.kCtx.Get(defs.Txt("monolit"))
 	if optMonolit.IsNone() {
 		err := defs.NewErr("clickMonolit(): monolit module not found")
 		return mL0.NewErr[string](err)

+ 1 - 1
v4/lev3/mod_serv_http/btn_modules/btn_modules_test.go

@@ -22,7 +22,7 @@ func TestBtnModules(t *testing.T) {
 	mod := kmodule.NewKernelModule(modName)
 	kMon.Add(mod)
 	if str := btn.clickMonolit(map[string]string{}).
-		Hassert("TestBtnModules()"); str == "" {
+		Hassert(defs.Txt("TestBtnModules()")); str == "" {
 		t.Fatalf("strOut is empty")
 	}
 }

+ 1 - 1
v4/lev3/mod_serv_http/btn_monolit/btn_monolit.go

@@ -17,7 +17,7 @@ type BtnMonolit struct {
 // NewBtnMonolit -- возвращает новую кнопку монолита.
 func NewBtnMonolit() *BtnMonolit {
 	sf := &BtnMonolit{}
-	sf.btn = wui.NewWuiButton("Monolit", sf.clickMonolit)
+	sf.btn = wui.NewWuiButton(defs.Txt("Monolit"), sf.clickMonolit)
 	sf.btn.Hx().Target().Set("#monolit")
 	return sf
 }

+ 4 - 3
v4/lev3/mod_serv_http/btn_monolit/btn_monolit_test.go

@@ -3,6 +3,7 @@ package btn_monolit
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
@@ -11,17 +12,17 @@ import (
 
 func TestBtnModules(t *testing.T) {
 	btn := NewBtnMonolit()
-	if html := btn.Html(); html == "" {
+	if html := btn.Html(); html.Get() == "" {
 		t.Fatalf("html is empty")
 	}
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set("isLocal", true, "test")
+	kCtx.Set(defs.Txt("isLocal"), true, "test")
 	kMon := kmonolit.GetMonolit("test")
 	modName := module_name.IModuleNameFix(module_name.NewModuleName("test"))
 	mod := kmodule.NewKernelModule(modName)
 	kMon.Add(mod)
 	if str := btn.clickMonolit(map[string]string{}).
-		Hassert("TestBtnModules()"); str == "" {
+		Hassert(defs.Txt("TestBtnModules()")); str == "" {
 		t.Fatalf("strOut is empty")
 	}
 }

+ 1 - 1
v4/lev3/mod_serv_http/http_api/http_api.go

@@ -18,7 +18,7 @@ type HttpApi struct{}
 func NewHttpApi() mL0.IResult[*HttpApi] {
 	sf := &HttpApi{}
 	kCtx := kctx.GetKernelCtx()
-	optFiber := kCtx.Get("fiberApp")
+	optFiber := kCtx.Get(defs.Txt("fiberApp"))
 	if optFiber.IsNone() {
 		err := defs.NewErr("NewHttpApi(): not found fiberApp in kernel ctx")
 		return mL0.NewErr[*HttpApi](err)

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

@@ -67,7 +67,7 @@ func (sf *tester) new() {
 	_ = kmonolit.GetMonolit("test_monolit")
 	sf.serv = kserv_http.GetKernelServHttp()
 
-	sf.api = NewHttpApi().Hassert("new()")
+	sf.api = NewHttpApi().Hassert(defs.Txt("new()"))
 	if sf.api == nil {
 		sf.t.Fatalf("new(): page==nil")
 	}

+ 2 - 1
v4/lev3/mod_serv_http/mod_serv_http_test.go

@@ -5,6 +5,7 @@ import (
 	"testing"
 	"time"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
@@ -44,7 +45,7 @@ func TestModServHttp(t *testing.T) {
 	}
 	fnClear()
 	defer fnClear()
-	sf.ctx.Set("monolitName", "test_monolit", "test")
+	sf.ctx.Set(defs.Txt("monolitName"), "test_monolit", "test")
 	sf.new()
 	sf.done()
 }

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

@@ -22,7 +22,10 @@ type PageModule struct {
 	ctx kspec.IKernelCtx
 }
 
-var page *PageModule
+var (
+	page        *PageModule
+	txtFiberApp = defs.Txt("fiberApp")
+)
 
 // GetPageModule -- возвращает страницу модуля.
 func GetPageModule() mL0.IResult[*PageModule] {
@@ -30,13 +33,13 @@ func GetPageModule() mL0.IResult[*PageModule] {
 		return mL0.NewOk(page)
 	}
 	kCtx := kctx.GetKernelCtx()
-	optFiber := kCtx.Get("fiberApp")
+	optFiber := kCtx.Get(txtFiberApp)
 	if optFiber.IsNone() {
 		err := defs.NewErr("GetPageModule(): not found fiberApp in kernel ctx")
 		return mL0.NewErr[*PageModule](err)
 	}
 	fiberApp := optFiber.Some().Val().(*fiber.App)
-	kCtx.Set("fiberApp", fiberApp, "fiberApp in GetPageModule()")
+	kCtx.Set(txtFiberApp, fiberApp, "fiberApp in GetPageModule()")
 	sf := &PageModule{
 		ctx: kCtx,
 	}

+ 13 - 11
v4/lev3/mod_serv_http/page_module/page_module_test.go

@@ -131,11 +131,11 @@ func (sf *tester) postSvgMinBad1() {
 	ctxMon := mon.Ctx()
 	modName := module_name.IModuleNameFix(module_name.NewModuleName("kCtx"))
 	kMod := kmodule.NewKernelModule(modName)
-	kMod.Log().Debug("test msg")
+	kMod.Log().Debug(defs.Txt("test msg"))
 	ctxMod := kMod.Ctx()
-	ctxMod.Set("demo_key", "demo value", "for demo comment")
+	ctxMod.Set(defs.Txt("demo_key"), "demo value", "for demo comment")
 	time.Sleep(time.Millisecond * 20)
-	ctxMon.Set("module_1", kMod, "test_module")
+	ctxMon.Set(defs.Txt("module_1"), kMod, "test_module")
 	fiberApp := sf.serv.Fiber()
 	req, err := http.NewRequest(http.MethodPost, "/module_svg_min/svg_min_20.svg", nil)
 	if err != nil {
@@ -253,6 +253,8 @@ func (sf *tester) postModuleState() {
 	}
 }
 
+var testMsg = defs.Txt("test msg")
+
 // Возвращает состояние модуля 1 (теперь добавлен).
 func (sf *tester) postModule1() {
 	sf.t.Log("postModule1")
@@ -260,12 +262,12 @@ func (sf *tester) postModule1() {
 	ctxMon := mon.Ctx()
 	modName := module_name.IModuleNameFix(module_name.NewModuleName("kCtx"))
 	module := kmodule.NewKernelModule(modName)
-	module.Log().Debug("test msg")
-	module.Log().Debug("test msg")
+	module.Log().Debug(testMsg)
+	module.Log().Debug(testMsg)
 	ctxMod := module.Ctx()
-	ctxMod.Set("demo_key", "demo value", "for demo comment")
+	ctxMod.Set(defs.Txt("demo_key"), "demo value", "for demo comment")
 	time.Sleep(time.Millisecond * 20)
-	ctxMon.Set("module_1", module, "test_module")
+	ctxMon.Set(defs.Txt("module_1"), module, "test_module")
 	fiberApp := sf.serv.Fiber()
 	req, err := http.NewRequest(http.MethodPost, "/module/1", nil)
 	if err != nil {
@@ -286,10 +288,10 @@ func (sf *tester) postModule1() {
 // Возвращает состояние лога модуля.
 func (sf *tester) postModuleLog() {
 	sf.t.Log("postModuleLog")
-	monCtx := sf.ctx.Get("monolit").Hassert("postModuleLog()")
+	monCtx := sf.ctx.Get(defs.Txt("monolit")).Hassert(defs.Txt("postModuleLog()"))
 	mon := monCtx.Val().(mod_spec.IKernelMonolit)
 	log := mon.Log()
-	log.Debug("test msg")
+	log.Debug(testMsg)
 	fiberApp := sf.serv.Fiber()
 	req, err := http.NewRequest(http.MethodPost, "/module_log/1", nil)
 	if err != nil {
@@ -360,11 +362,11 @@ func (sf *tester) new() {
 	_ = mock_env.MakeEnv()
 	_ = os.Unsetenv("LOCAL_HTTP_URL")
 	_ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18322/")
-	sf.ctx.Set("isLocal", true, "testing")
+	sf.ctx.Set(defs.Txt("isLocal"), true, "testing")
 	_ = kmonolit.GetMonolit("test_monolit")
 	sf.serv = kserv_http.GetKernelServHttp()
 
-	sf.page = GetPageModule().Hassert("new()")
+	sf.page = GetPageModule().Hassert(defs.Txt("new()"))
 	if sf.page == nil {
 		sf.t.Fatalf("new(): page==nil")
 	}

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

@@ -60,8 +60,9 @@ func GetModuleWui() *ModuleWui {
 	_ = page_module.GetPageModule()
 
 	_ = http_api.NewHttpApi()
-	optFiber := sf.kCtx.Get("fiberApp")
-	optFiber.Hassert("GetModuleWui(): mod='wui', not found fiberApp in kernel ctx")
+	optFiber := sf.kCtx.Get(defs.Txt("fiberApp"))
+	msg := defs.Txt("GetModuleWui(): mod='wui', not found fiberApp in kernel ctx")
+	optFiber.Hassert(msg)
 	fibApp := optFiber.Some().Val().(*fiber.App)
 	fibApp.Post("/wui/click/:id", adaptor.HTTPHandlerFunc(sf.wuiClick)) // adaptor.HTTPHandlerFunc(greet)
 	mod = sf
@@ -70,7 +71,8 @@ func GetModuleWui() *ModuleWui {
 
 // Run -- запускает модуль в работу.
 func (sf *ModuleWui) Run() {
-	sf.log.Info("ModuleWui.Run(): module=%v, is run", sf.Name())
+	msg := defs.Txt("ModuleWui.Run(): module=%v, is run", sf.Name())
+	sf.log.Info(msg)
 	sf.kServHttp.Run()
 }
 
@@ -86,9 +88,9 @@ func (sf *ModuleWui) IsWork() mKs.EBool {
 
 // Получает событие из сети.
 func (sf *ModuleWui) wuiClick(resp http.ResponseWriter, req *http.Request) {
-	url := defs.ITxtFix(req.RequestURI)
+	url := defs.Txt(req.RequestURI)
 	id := strings.TrimPrefix(url.String(), "/wui/click/")
-	optWidget := sf.wCtx.Get(defs.ITxtFix(id))
+	optWidget := sf.wCtx.Get(defs.Txt(id))
 	if optWidget == nil {
 		err := defs.NewErr("ModuleWui.wuiClick(): id(%v), widget not exists", id)
 		sf.log.Err(err)

+ 5 - 4
v4/lev3/mod_wui/mod_wui_test.go

@@ -72,7 +72,7 @@ func (sf *tester) click() {
 // С кривой POST-формой.
 func (sf *tester) clickBad3() {
 	sf.t.Log("clickBad3")
-	btn := wui_button.NewWuiButton("test_btn", sf.fnClick)
+	btn := wui_button.NewWuiButton(defs.Txt("test_btn"), sf.fnClick)
 	// Данные формы
 	reader := strings.NewReader("tra-ta-ta")
 	req, err := http.NewRequest(http.MethodPost, "/wui/click/"+btn.Id().String(), reader)
@@ -134,7 +134,7 @@ func (sf *tester) clickGood2() {
 // Без POST-формы.
 func (sf *tester) clickGood1() {
 	sf.t.Log("clickGood1")
-	btn := wui_button.NewWuiButton("test_btn", sf.fnClick)
+	btn := wui_button.NewWuiButton(defs.Txt("test_btn"), sf.fnClick)
 	req, err := http.NewRequest(http.MethodPost, "/wui/click/"+btn.Id().String(), nil)
 
 	if err != nil {
@@ -162,7 +162,8 @@ func (sf *tester) fnClick(dict map[string]string) mL0.IResult[string] {
 // Неправильный тип объекта.
 func (sf *tester) clickBad2() {
 	sf.t.Log("clickBad2")
-	lbl := wui_label.NewWuiLabel("test_lbl").Hassert("clickBad2()")
+	lbl := wui_label.NewWuiLabel(defs.Txt("test_lbl")).
+		Hassert(defs.Txt("clickBad2()"))
 	req, err := http.NewRequest(http.MethodPost, "/wui/click/"+lbl.Id().String(), nil)
 
 	if err != nil {
@@ -233,7 +234,7 @@ func (sf *tester) newGood1() {
 
 	sf.mod = GetModuleWui()
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set("isLocal", true, "type msg bus")
+	kCtx.Set(defs.Txt("isLocal"), true, "type msg bus")
 
 	_ = kmonolit.GetMonolit("test_monolit")
 	_ = GetModuleWui()