Преглед на файлове

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

SVI преди 1 месец
родител
ревизия
b38abd1bc9
променени са 51 файла, в които са добавени 285 реда и са изтрити 323 реда
  1. 36 24
      v4/kern.go
  2. 3 3
      v4/kern_test.go
  3. 1 1
      v4/lev0/lev0.go
  4. 0 23
      v4/lev1/comp_spec/ilog_buf.go
  5. 7 4
      v4/lev1/lev1.go
  6. 19 15
      v4/lev1/local_ctx/local_ctx.go
  7. 1 1
      v4/lev1/local_ctx/local_ctx_test.go
  8. 1 1
      v4/lev1/log_buf/log_buf.go
  9. 10 11
      v4/lev2/kern_ctx/kern_ctx.go
  10. 1 1
      v4/lev2/kern_ctx/kern_ctx_test.go
  11. 11 13
      v4/lev2/kernel_keeper/kernel_keeper.go
  12. 9 11
      v4/lev2/kmodule/kmodule.go
  13. 7 9
      v4/lev2/kmonolit/kmonolit.go
  14. 9 11
      v4/lev2/kserv_http/kserv_http.go
  15. 1 1
      v4/lev2/kserv_http/kserv_http_test.go
  16. 4 7
      v4/lev2/kserv_http_std/kserv_http_std.go
  17. 0 11
      v4/lev2/kspec/ikernel_keeper.go
  18. 2 2
      v4/lev2/kspec/ikernel_server_http.go
  19. 2 2
      v4/lev2/kspec/ikernel_wg.go
  20. 18 21
      v4/lev2/kwg/kwg.go
  21. 8 9
      v4/lev2/lsi/kstore_kv/kstore_kv.go
  22. 1 1
      v4/lev2/lsi/kstore_kv/kstore_kv_test.go
  23. 2 2
      v4/lev2/lsi/store_spec/ikernel_store_kv.go
  24. 7 8
      v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http_test.go
  25. 2 2
      v4/lev2/lti/bus_spec/ikernel_bus.go
  26. 1 2
      v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go
  27. 2 3
      v4/lev2/lti/kbus/dict_topic_serve/dict_topic_serve.go
  28. 4 3
      v4/lev2/lti/kbus/dict_topic_sub/dict_topic_sub.go
  29. 6 8
      v4/lev2/lti/kbus_base/kbus_base.go
  30. 6 7
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go
  31. 4 5
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http_test.go
  32. 4 5
      v4/lev2/lti/kbus_http/kbus_http.go
  33. 7 4
      v4/lev2/wui/wui.go
  34. 8 6
      v4/lev2/wui/wui_ctx/wui_ctx.go
  35. 0 11
      v4/lev2/wui/wui_types/iwui_ctx.go
  36. 7 0
      v4/lev3/lev3.go
  37. 3 3
      v4/lev3/mod_ent/module_name/module_name.go
  38. 2 2
      v4/lev3/mod_kctx/mod_kctx.go
  39. 1 1
      v4/lev3/mod_keeper/mod_keeper.go
  40. 3 4
      v4/lev3/mod_serv_http/btn_modules/btn_modules.go
  41. 3 3
      v4/lev3/mod_serv_http/http_api/http_api_test.go
  42. 2 2
      v4/lev3/mod_serv_http/mod_serv_http.go
  43. 11 11
      v4/lev3/mod_serv_http/mod_serv_http_test.go
  44. 10 11
      v4/lev3/mod_serv_http/page_module/page_module.go
  45. 7 7
      v4/lev3/mod_serv_http/page_module/page_module_test.go
  46. 3 4
      v4/lev3/mod_serv_http/page_monolit/page_monolit.go
  47. 8 7
      v4/lev3/mod_serv_http/page_monolit/page_monolit_test.go
  48. 3 3
      v4/lev3/mod_spec/imod_base.go
  49. 3 3
      v4/lev3/mod_spec/imod_monolit.go
  50. 11 9
      v4/lev3/mod_wui/mod_wui.go
  51. 4 5
      v4/lev3/mod_wui/mod_wui_test.go

+ 36 - 24
v4/kern.go

@@ -6,10 +6,8 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
@@ -21,8 +19,8 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_http/client_bus_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_local"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus_local/client_bus_local"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev3"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent/module_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_keeper"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http"
@@ -30,11 +28,12 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_wui"
 )
 
-// GetKernelCtx -- возвращает контекст ядра.
-//
+// KernCtx — контекст ядра.
+type KernCtx = lev2.KernCtx
 
-func GetKernelCtx() kspec.IKernelCtx {
-	ctx := kern_ctx.GetKernCtx()
+// GetKernelCtx -- возвращает контекст ядра.
+func GetKernelCtx() *KernCtx {
+	ctx := lev2.GetKernCtx()
 	return ctx
 }
 
@@ -82,7 +81,7 @@ func MutSafeBool(val Bool) *MSafeBool {
 
 // GetKernelBusLocal -- возвращает локальную шину данных.
 func GetKernelBusLocal() bus_spec.IKernelBus {
-	kCtx := kern_ctx.GetKernCtx()
+	kCtx := lev2.GetKernCtx()
 	kCtx.Set(lev0.LetTxt("monolitName"), "unknown monolit", "GetKernelBusLocal()")
 	lBus := kbus_local.GetKernelBusLocal()
 	return lBus
@@ -103,9 +102,12 @@ func SleepMs() {
 	time.Sleep(time.Millisecond * 1)
 }
 
+// AModuleName -- уникальное имя модуля.
+type AModuleName = mod_ent.AModuleName
+
 // GetMonolitLocal -- возвращает монолит с локальной шиной.
-func GetMonolitLocal(name mod_ent.AModuleName) mod_spec.IKernelMonolit {
-	kCtx := kern_ctx.GetKernCtx()
+func GetMonolitLocal(name AModuleName) mod_spec.IKernelMonolit {
+	kCtx := lev2.GetKernCtx()
 	kCtx.Set(lev0.LetTxt("isLocal"), true, "bus type")
 	for {
 		time.Sleep(time.Millisecond * 1)
@@ -120,8 +122,8 @@ func GetMonolitLocal(name mod_ent.AModuleName) mod_spec.IKernelMonolit {
 }
 
 // GetMonolitHttp -- возвращает монолит с локальной шиной поверх HTTP.
-func GetMonolitHttp(name mod_ent.AModuleName) mod_spec.IKernelMonolit {
-	kCtx := kern_ctx.GetKernCtx()
+func GetMonolitHttp(name AModuleName) mod_spec.IKernelMonolit {
+	kCtx := lev2.GetKernCtx()
 	_ = kbus_http.GetKernelBusHttp()
 	kCtx.Set(lev0.LetTxt("isLocal"), false, "bus type")
 	for {
@@ -135,10 +137,10 @@ func GetMonolitHttp(name mod_ent.AModuleName) mod_spec.IKernelMonolit {
 	return kMon
 }
 
-// NewKernelModule -- возвращает новый модуль на ядре.
-//
+type LModuleName = lev3.LModuleName
 
-func NewKernelModule(name *module_name.LModuleName) mod_spec.IKernelModule {
+// NewKernelModule -- возвращает новый модуль на ядре.
+func NewKernelModule(name *LModuleName) mod_spec.IKernelModule {
 	resMod := kmodule.NewKernelModule(name)
 	return resMod
 }
@@ -184,21 +186,19 @@ func GetModuleKernelKeeper() mod_spec.IKernelModule {
 }
 
 // GetModuleWui -- возвращает модуль для WUI.
-//
-
 func GetModuleWui() mod_spec.IKernelModule {
 	modWui := mod_wui.GetModuleWui()
 	return modWui
 }
 
-// ILogBuf -- буферизованный лог.
-type ILogBuf = comp_spec.ILogBuf
+// LogBuf -- буферизованный лог.
+type LogBuf = lev1.LogBuf
 
 // LogBufParam -- параметры для создания нового буферизованного лога.
 type LogBufParam = lev1.LogBufParam
 
 // NewLogBuf -- возвращает новый буферизованный лог.
-func NewLogBuf(param *LogBufParam) ILogBuf {
+func NewLogBuf(param *LogBufParam) *LogBuf {
 	log := lev1.NewLogBuf(param)
 	return log
 }
@@ -212,20 +212,32 @@ func MutSafeBoolReact() *MSafeBoolReact {
 	return val
 }
 
+// Num -- внутренне представление числа.
+type Num = lev0.Num
+
+// MSafeNum -- потокобезопасное число.
+type MSafeNum = lev0.MSafeNum
+
 // MutSafeNum -- возвращает новую потокобезопасную целочисленную переменную.
-func MutSafeNum(val defs.Num) *lev0.MSafeNum {
+func MutSafeNum(val Num) *MSafeNum {
 	val_ := lev0.MutSafeNum(val)
 	return val_
 }
 
+// LNum -- внутреннее неизменяемое число.
+type LNum = lev0.LNum
+
 // LetNum -- возвращает новую целочисленную переменную.
-func LetNum(val lev0.Num) *lev0.LNum {
+func LetNum(val lev0.Num) *LNum {
 	val_ := lev0.LetNum(val)
 	return val_
 }
 
+// LocalCtx -- локальный контекст.
+type LocalCtx = lev1.LocalCtx
+
 // NewLocalCtx -- возвращает новый локальный контекст.
-func NewLocalCtx(ctx context.Context) comp_spec.ILocalCtx {
+func NewLocalCtx(ctx context.Context) *LocalCtx {
 	lCtx := lev1.NewLocalCtx(ctx)
 	return lCtx
 }

+ 3 - 3
v4/kern_test.go

@@ -81,8 +81,8 @@ func (sf *tester) new3() {
 }
 
 func (sf *tester) new2() {
-	ctx := GetKernelCtx()
-	if ctx == nil {
+	kCtx := GetKernelCtx()
+	if kCtx == nil {
 		sf.t.Fatalf("new(): IKernelCtx==nil")
 	}
 	modServHttp := GetModuleServHttp()
@@ -118,7 +118,7 @@ func (sf *tester) new2() {
 	if safeInt == nil {
 		sf.t.Fatalf("new2(): ISafeInt==nil")
 	}
-	lCtx := NewLocalCtx(ctx.Ctx())
+	lCtx := NewLocalCtx(kCtx.SelfCtx())
 	if lCtx == nil {
 		sf.t.Fatalf("new2(): ILocalCtx==nil")
 	}

+ 1 - 1
v4/lev0/lev0.go

@@ -56,7 +56,7 @@ func MutTimeAuto() *MTime {
 // Num -- внутренне представление числа.
 type Num = defs.Num
 
-// LNum -- внутренне неизменяемое число.
+// LNum -- внутреннее неизменяемое число.
 type LNum = defs.LNum
 
 // LetNum -- возвращает новое внутреннее неизменяемое число.

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

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

+ 7 - 4
v4/lev1/lev1.go

@@ -5,8 +5,8 @@ import (
 	"context"
 	"time"
 
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx/ctx_value"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 )
@@ -22,11 +22,11 @@ func MakeEnv() IMockEnv {
 // LogBufParam -- параметры ILogBuf.
 type LogBufParam = log_buf.LogBufParam
 
-// ILogBuf -- буферизованный лог для диагностики.
-type ILogBuf = log_buf.ILogBuf
+// LogBuf -- буферизованный лог для диагностики.
+type LogBuf = log_buf.LogBuf
 
 // NewLogBuf -- возвращает новый буферизованный лог.
-func NewLogBuf(param *LogBufParam) ILogBuf {
+func NewLogBuf(param *LogBufParam) *LogBuf {
 	log := log_buf.NewLogBuf(param)
 	return log
 }
@@ -36,6 +36,9 @@ func SleepMs() {
 	time.Sleep(time.Millisecond * 1)
 }
 
+// CtxValue -- потокобезопасное значение локального контекста.
+type CtxValue = ctx_value.CtxValue
+
 // LocalCtx -- локальный контекст.
 type LocalCtx = local_ctx.LocalCtx
 

+ 19 - 15
v4/lev1/local_ctx/local_ctx.go

@@ -5,7 +5,6 @@ import (
 	"context"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx/ctx_value"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/lst_sort"
@@ -14,36 +13,36 @@ import (
 // LocalCtx -- локальный контекст.
 type LocalCtx struct {
 	*lev0.MSafeMutex
-	ctx      context.Context // Отменяемый контекст
+	lCtx     context.Context // Отменяемый контекст
 	fnCancel func()          // Функция отмены контекста
 
 	dictVal map[lev0.Txt]*ctx_value.CtxValue // Словарь различных значений
-	lstSort *lst_sort.LstSort                 // Сортированный список значений
-	log     comp_spec.ILogBuf                 // Локальный буфер
+	lstSort *lst_sort.LstSort                // Сортированный список значений
+	log     *log_buf.LogBuf                  // Локальный буфер
 }
 
 // NewLocalCtx -- возвращает новый локальный контекст.
 func NewLocalCtx(ctx context.Context) *LocalCtx {
 	lev0.If(ctx == nil).Hassert("NewLocalCtx(): ctx==nil")
-	_ctx, fnCancel := context.WithCancel(ctx)
+	lCtx, fnCancel := context.WithCancel(ctx)
 	paramLogBuf := &log_buf.LogBufParam{
 		IsTerm_: lev0.MutSafeBool(true),
 		Prefix_: lev0.LetTxt("LocalCtx"),
 	}
 	sf := &LocalCtx{
 		MSafeMutex: lev0.MutSafeMutex(),
-		ctx:      _ctx,
-		fnCancel: fnCancel,
-		dictVal:  map[lev0.Txt]*ctx_value.CtxValue{},
-		lstSort:  lst_sort.NewLstSort(),
-		log:      log_buf.NewLogBuf(paramLogBuf),
+		lCtx:       lCtx,
+		fnCancel:   fnCancel,
+		dictVal:    map[lev0.Txt]*ctx_value.CtxValue{},
+		lstSort:    lst_sort.NewLstSort(),
+		log:        log_buf.NewLogBuf(paramLogBuf),
 	}
 	return sf
 }
 
-// Ctx -- возвращает отменяемый контекст.
-func (sf *LocalCtx) Ctx() context.Context {
-	return sf.ctx
+// SelfCtx -- возвращает отменяемый контекст.
+func (sf *LocalCtx) SelfCtx() context.Context {
+	return sf.lCtx
 }
 
 // Size -- возвращает размер контекста.
@@ -59,7 +58,7 @@ func (sf *LocalCtx) SortedList() []*ctx_value.CtxValue {
 }
 
 // Log -- возвращает локальный буферный лог.
-func (sf *LocalCtx) Log() comp_spec.ILogBuf {
+func (sf *LocalCtx) Log() *log_buf.LogBuf {
 	return sf.log
 }
 
@@ -111,7 +110,7 @@ func (sf *LocalCtx) Set(key *lev0.LTxt, val any, comment lev0.Txt) {
 
 // Wait -- блокирующий вызов ожидания отмены контекста.
 func (sf *LocalCtx) Wait() {
-	<-sf.ctx.Done()
+	<-sf.lCtx.Done()
 }
 
 // Cancel -- отменяет контекст.
@@ -119,3 +118,8 @@ func (sf *LocalCtx) Cancel() {
 	sf.log.Warn("Cancel()")
 	sf.fnCancel()
 }
+
+// Done -- готовность локального контекста
+func (sf *LocalCtx) Done() <-chan struct{}{
+	return sf.lCtx.Done()
+}

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

@@ -71,7 +71,7 @@ func (sf *tester) newGood1() {
 	if lst := sf.lCtx.SortedList(); lst == nil {
 		sf.t.Fatalf("newGood1(): lst==nil")
 	}
-	if ctx := sf.lCtx.Ctx(); ctx == nil {
+	if ctx := sf.lCtx.SelfCtx(); ctx == nil {
 		sf.t.Fatalf("newGood1(): ctx==nil")
 	}
 }

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

@@ -55,7 +55,7 @@ type LogBuf struct {
 }
 
 // NewLogBuf -- возвращает новый потокобезопасный буфер лога.
-func NewLogBuf(param *LogBufParam) ILogBuf {
+func NewLogBuf(param *LogBufParam) *LogBuf {
 	lev0.If(param == nil).Hassert("NewLogBuf(): param==nil")
 	param.SelfCheck()
 	sf := &LogBuf{

+ 10 - 11
v4/lev2/kern_ctx/kern_ctx.go

@@ -6,7 +6,6 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/local_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kernel_keeper"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
@@ -16,12 +15,12 @@ import (
 // KernCtx -- контекст ядра.
 type KernCtx struct {
 	*lev1.LocalCtx
-	log        comp_spec.ILogBuf
-	ctxBg      context.Context     // Неотменяемый контекст ядра
-	ctx        context.Context     // Отменяемый контекст ядра
-	fnCancel   func()              // Функция отмены контекста ядра
-	kernKeeper kspec.IKernelKeeper // Встроенный сторож отмены контекста системным сигналом
-	kernWg     kspec.IKernelWg     // Встроенный ожидатель потока
+	log        *lev1.LogBuf
+	ctxBg      context.Context           // Неотменяемый контекст ядра
+	ctx        context.Context           // Отменяемый контекст ядра
+	fnCancel   func()                    // Функция отмены контекста ядра
+	kernKeeper *kernel_keeper.KernKeeper // Встроенный сторож отмены контекста системным сигналом
+	kernWg     kspec.IKernelWg           // Встроенный ожидатель потока
 }
 
 var (
@@ -56,7 +55,7 @@ func GetKernCtx() *KernCtx {
 		return kernCtx
 	}
 	sf := &KernCtx{
-		LocalCtx: local_ctx.NewLocalCtx(ctx),
+		LocalCtx: local_ctx.NewLocalCtx(internalCtx),
 		ctxBg:    ctxBg,
 		ctx:      internalCtx,
 		fnCancel: internalFnCancel,
@@ -70,7 +69,7 @@ func GetKernCtx() *KernCtx {
 }
 
 // Keeper -- возвращает сторож системных сигналов.
-func (sf *KernCtx) Keeper() kspec.IKernelKeeper {
+func (sf *KernCtx) Keeper() *kernel_keeper.KernKeeper {
 	return sf.kernKeeper
 }
 
@@ -79,8 +78,8 @@ func (sf *KernCtx) Wg() kspec.IKernelWg {
 	return sf.kernWg
 }
 
-// Done -- блокирующий вызов ожидания отмены контекста ядра.
-func (sf *KernCtx) Done() {
+// AllDone -- блокирующий вызов ожидания отмены контекста ядра.
+func (sf *KernCtx) AllDone() {
 	<-sf.ctx.Done()
 	sf.log.Debug("kCtx.Done()")
 }

+ 1 - 1
v4/lev2/kern_ctx/kern_ctx_test.go

@@ -29,7 +29,7 @@ func (sf *tester) new() {
 	if ctx := kCtx.CtxBg(); ctx != kernCtx.ctxBg {
 		sf.t.Fatalf("new(): ctx!=ctxBg")
 	}
-	if ctx := kCtx.Ctx(); ctx == nil {
+	if ctx := kCtx.SelfCtx(); ctx == nil {
 		sf.t.Fatalf("new(): ctx==nil")
 	}
 	kCtx.Set(counter, 5, "test_counter")

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

@@ -9,30 +9,29 @@ import (
 	"syscall"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
-// kernelKeeper -- сторож системных сигналов.
-type kernelKeeper struct {
+// KernKeeper -- сторож системных сигналов.
+type KernKeeper struct {
 	ctx      context.Context
 	fnCancel func()
 	wg       kspec.IKernelWg
-	log      comp_spec.ILogBuf
+	log      *lev1.LogBuf
 	chSys_   chan os.Signal
 }
 
 var (
-	kernKeep *kernelKeeper
+	kernKeep *KernKeeper
 	block    sync.Mutex
 	qName    = stream_name.NewAStreamName("kernel_keeper")
 )
 
 // GetKernelKeeper -- возвращает новый сторож системных сигналов.
 func GetKernelKeeper(ctx context.Context, fnCancel func(),
-	wg kspec.IKernelWg) *kernelKeeper {
+	wg kspec.IKernelWg) *KernKeeper {
 	block.Lock()
 	defer block.Unlock()
 	if kernKeep != nil {
@@ -43,16 +42,16 @@ func GetKernelKeeper(ctx context.Context, fnCancel func(),
 	lev0.If(wg == nil).Hassert("NewKernelCtx(): IKernelWg==nil", []any{})
 	lev0.If(fnCancel == nil).Hassert("NewKernelCtx(): fnCancel==nil", []any{})
 
-	paramLogBuf := &mL1.LogBufParam{
+	paramLogBuf := &lev1.LogBufParam{
 		IsTerm_: lev0.MutSafeBool(true),
 		Prefix_: lev0.LetTxt("kernelKeeper"),
 	}
 
-	sf := &kernelKeeper{
+	sf := &KernKeeper{
 		ctx:      ctx,
 		fnCancel: fnCancel,
 		wg:       wg,
-		log:      mL1.NewLogBuf(paramLogBuf),
+		log:      lev1.NewLogBuf(paramLogBuf),
 		chSys_:   make(chan os.Signal, 2),
 	}
 	sf.log.Debug("GetKernelKeeper(): first run")
@@ -60,17 +59,16 @@ func GetKernelKeeper(ctx context.Context, fnCancel func(),
 
 	go sf.run(sf.chSys_)
 	kernKeep = sf
-	_ = kspec.IKernelKeeper(sf)
 	return sf
 }
 
 // Log -- возвращает лог сторожа системных сигналов.
-func (sf *kernelKeeper) Log() comp_spec.ILogBuf {
+func (sf *KernKeeper) Log() *lev1.LogBuf {
 	return sf.log
 }
 
 // Работает в отдельном потоке и ждёт сигналов прерываний работы.
-func (sf *kernelKeeper) run(chSys chan os.Signal) {
+func (sf *KernKeeper) run(chSys chan os.Signal) {
 	sf.log.Debug("run()")
 
 	// Регистрируем сигналы SIGINT (Ctrl+C) и SIGTERM (завершение процесса)

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

@@ -6,10 +6,8 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule/mod_stat"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
@@ -20,8 +18,8 @@ import (
 
 // kModule -- модуль на основе ядра.
 type kModule struct {
-	kCtx      kspec.IKernelCtx
-	ctx       comp_spec.ILocalCtx
+	kCtx      *kern_ctx.KernCtx
+	lCtx      *lev1.LocalCtx
 	name      *module_name.LModuleName
 	bus       bus_spec.IKernelBus
 	timePhase *lev0.MSafeNum
@@ -35,7 +33,7 @@ func NewKernelModule(name *module_name.LModuleName) mod_spec.IKernelModule {
 	kCtx := kern_ctx.GetKernCtx()
 	sf := &kModule{
 		kCtx:      kCtx,
-		ctx:       lev1.NewLocalCtx(kCtx.Ctx()),
+		lCtx:      lev1.NewLocalCtx(kCtx.SelfCtx()),
 		name:      name,
 		bus:       kbus_local.GetKernelBusLocal(),
 		timePhase: lev0.MutSafeNum(1000), // 1000 msec
@@ -52,13 +50,13 @@ func (sf *kModule) Stat() mod_spec.IModuleStat {
 }
 
 // Log -- возвращает буферный лог.
-func (sf *kModule) Log() comp_spec.ILogBuf {
-	return sf.ctx.Log()
+func (sf *kModule) Log() *lev1.LogBuf {
+	return sf.lCtx.Log()
 }
 
 // Ctx -- возвращает контекст модуля.
-func (sf *kModule) Ctx() comp_spec.ILocalCtx {
-	return sf.ctx
+func (sf *kModule) Ctx() *lev1.LocalCtx {
+	return sf.lCtx
 }
 
 // Run -- запускает модуль в работу.
@@ -103,7 +101,7 @@ func (sf *kModule) sigLive() {
 	fnPhase := func() {
 		time.Sleep(time.Millisecond * time.Duration(sf.timePhase.Get()))
 		select {
-		case <-sf.kCtx.Ctx().Done():
+		case <-sf.kCtx.Done():
 			return
 		default:
 			switch iPhase {
@@ -128,7 +126,7 @@ func (sf *kModule) sigLive() {
 	}
 	for {
 		select {
-		case <-sf.kCtx.Ctx().Done():
+		case <-sf.kCtx.SelfCtx().Done():
 			return
 		default:
 			fnPhase()

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

@@ -6,18 +6,16 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec"
 )
 
 // LModMonolit -- объект модульного монолита.
 type LModMonolit struct {
-	kCtx    kspec.IKernelCtx
+	kCtx    *lev2.KernCtx
 	lCtx    *lev1.LocalCtx
-	log     comp_spec.ILogBuf
+	log     *lev1.LogBuf
 	name    mod_ent.AModuleName
 	isLocal *lev0.LBool
 	isWork  *lev0.MSafeBool
@@ -42,12 +40,12 @@ func LetModMonolit(name mod_ent.AModuleName) *LModMonolit {
 		return mon
 	}
 	lev0.If(name == "").Hassert("NewMonolit(): name is empty")
-	kCtx := kern_ctx.GetKernCtx()
+	kCtx := lev2.GetKernCtx()
 	opt := kCtx.Get(txtIsLocal)
 	opt.Hassert("GetMonolit(): in get from kernCtx isLocal -- not found")
 	isLocalCtx := opt.Some()
 	isLocal := isLocalCtx.Val().(lev0.Bool)
-	lCtx := lev1.NewLocalCtx(kCtx.Ctx())
+	lCtx := lev1.NewLocalCtx(kCtx.SelfCtx())
 	sf := &LModMonolit{
 		kCtx:    kCtx,
 		lCtx:    lCtx,
@@ -66,12 +64,12 @@ func LetModMonolit(name mod_ent.AModuleName) *LModMonolit {
 }
 
 // Ctx -- возвращает контекст монолита.
-func (sf *LModMonolit) Ctx() comp_spec.ILocalCtx {
+func (sf *LModMonolit) Ctx() *lev1.LocalCtx {
 	return sf.lCtx
 }
 
 // Log -- возвращает лог монолита.
-func (sf *LModMonolit) Log() comp_spec.ILogBuf {
+func (sf *LModMonolit) Log() *lev1.LogBuf {
 	return sf.lCtx.Log()
 }
 

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

@@ -17,9 +17,7 @@ import (
 	"github.com/gofiber/fiber/v3/middleware/static"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
@@ -32,9 +30,9 @@ var (
 
 // kServHttp -- встроенный HTTP-сервер.
 type kServHttp struct {
-	kCtx     kspec.IKernelCtx
-	lCtx     comp_spec.ILocalCtx
-	log      comp_spec.ILogBuf
+	kCtx     *kern_ctx.KernCtx
+	lCtx     *lev1.LocalCtx
+	log      *lev1.LogBuf
 	strUrl   *lev0.LTxt // URL, на котором слушает HTTP-сервер
 	fiberApp *fiber.App
 	isWork   *lev0.MSafeBool
@@ -49,12 +47,12 @@ var (
 	block        sync.Mutex
 )
 
-func getParams() (*lev0.LTxt, comp_spec.ILogBuf, kspec.IKernelCtx) {
-	param := &log_buf.LogBufParam{
+func getParams() (*lev0.LTxt, *lev1.LogBuf, *kern_ctx.KernCtx) {
+	param := &lev1.LogBufParam{
 		IsTerm_: lev0.MutSafeBool(true),
 		Prefix_: lev0.LetTxt("kServHttp"),
 	}
-	log := mL1.NewLogBuf(param)
+	log := lev1.NewLogBuf(param)
 	log.Debug("GetKernelServHttp(): first run")
 	strLocalUrl := os.Getenv("LOCAL_HTTP_URL")
 	lev0.If(strLocalUrl == "").Hassert("getParams(): env LOCAL_HTTP_URL not set")
@@ -85,7 +83,7 @@ func GetKernelServHttp() kspec.IKernelServerHttp {
 	sf := &kServHttp{
 		kCtx:     kCtx,
 		log:      log,
-		lCtx:     mL1.NewLocalCtx(kCtx.Ctx()),
+		lCtx:     lev1.NewLocalCtx(kCtx.SelfCtx()),
 		strUrl:   strLocalUrl,
 		fiberApp: fiber.New(confFiber),
 		isWork:   lev0.MutSafeBool(false),
@@ -118,7 +116,7 @@ func (sf *kServHttp) IsWork() lev0.Bool {
 }
 
 // Log -- возвращает локальный лог.
-func (sf *kServHttp) Log() comp_spec.ILogBuf {
+func (sf *kServHttp) Log() *lev1.LogBuf {
 	return sf.log
 }
 

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

@@ -17,7 +17,7 @@ const (
 
 type tester struct {
 	t    *testing.T
-	kCtx kspec.IKernelCtx
+	kCtx *kern_ctx.KernCtx
 	wg   kspec.IKernelWg
 	me   *mock_env.MockEnv
 }

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

@@ -9,16 +9,13 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
 // kServHttpStd -- реализация HTTP-сервера на стандартной библиотеке.
 type kServHttpStd struct {
-	kCtx   kspec.IKernelCtx
-	log    comp_spec.ILogBuf
+	kCtx   *kern_ctx.KernCtx
+	log    *lev1.LogBuf
 	port   *lev0.LNum
 	server *http.Server
 }
@@ -35,7 +32,7 @@ func GetKservHttpStd() *lev0.Result[*kServHttpStd] {
 	if kServ != nil {
 		return lev0.ResOk(kServ)
 	}
-	logBufParam := &log_buf.LogBufParam{
+	logBufParam := &lev1.LogBufParam{
 		IsTerm_: lev0.MutSafeBool(true),
 		Prefix_: lev0.LetTxt("kServHttpStd"),
 	}
@@ -71,7 +68,7 @@ func (sf *kServHttpStd) Run() {
 		}
 	}()
 	go sf.close()
-	if err := sf.server.Shutdown(sf.kCtx.Ctx()); err != nil {
+	if err := sf.server.Shutdown(sf.kCtx.SelfCtx()); err != nil {
 		sf.log.Debug("kServHttpStd.Run(): ошибка при graceful shutdown, err=\n\t%v", err)
 	}
 

+ 0 - 11
v4/lev2/kspec/ikernel_keeper.go

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

+ 2 - 2
v4/lev2/kspec/ikernel_server_http.go

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

+ 2 - 2
v4/lev2/kspec/ikernel_wg.go

@@ -2,7 +2,7 @@ package kspec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
 )
 
@@ -23,5 +23,5 @@ type IKernelWg interface {
 	// Len -- возвращает размер списка потоков ожидания
 	Len() lev0.Num
 	// Log -- возвращает логгер ожидателя групп
-	Log() comp_spec.ILogBuf
+	Log() *lev1.LogBuf
 }

+ 18 - 21
v4/lev2/kwg/kwg.go

@@ -9,29 +9,26 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 )
 
-// kernelWg -- именованный ожидатель потоков ядра.
-type kernelWg struct {
+// KernWg -- именованный ожидатель потоков ядра.
+type KernWg struct {
 	sync.RWMutex
 	ctx        context.Context
 	dictStream map[*stream_name.AStreamName]lev0.Bool // Словарь имён потоков с признаком работы
 	isWork     *lev0.MSafeBool
-	log        comp_spec.ILogBuf
+	log        *lev1.LogBuf
 }
 
 var (
-	kernWg *kernelWg // Глобальный объект
+	kernWg *KernWg // Глобальный объект
 	block  sync.Mutex
 )
 
 // GetKernelWg -- возвращает новый именованный ожидатель потоков ядра.
-func GetKernelWg(ctx context.Context) kspec.IKernelWg {
+func GetKernelWg(ctx context.Context) *KernWg {
 	block.Lock()
 	defer block.Unlock()
 	if kernWg != nil {
@@ -39,15 +36,15 @@ func GetKernelWg(ctx context.Context) kspec.IKernelWg {
 		return kernWg
 	}
 	lev0.If(ctx == nil).Hassert("GetKernelWg(): ctx==nil")
-	paramLogBuf := &log_buf.LogBufParam{
+	paramLogBuf := &lev1.LogBufParam{
 		IsTerm_: lev0.MutSafeBool(true),
 		Prefix_: lev0.LetTxt("kernelWg"),
 	}
-	sf := &kernelWg{
+	sf := &KernWg{
 		ctx:        ctx,
 		dictStream: map[*stream_name.AStreamName]lev0.Bool{},
 		isWork:     lev0.MutSafeBool(false),
-		log:        mL1.NewLogBuf(paramLogBuf),
+		log:        lev1.NewLogBuf(paramLogBuf),
 	}
 	sf.log.Debug("GetKernelWg(): run")
 	go sf.close()
@@ -57,29 +54,29 @@ func GetKernelWg(ctx context.Context) kspec.IKernelWg {
 }
 
 // Log -- возвращает лог ожидателя потоков.
-func (sf *kernelWg) Log() comp_spec.ILogBuf {
+func (sf *KernWg) Log() *lev1.LogBuf {
 	return sf.log
 }
 
 // Len -- возвращает размер списка ожидания потоков.
-func (sf *kernelWg) Len() lev0.Num {
+func (sf *KernWg) Len() lev0.Num {
 	sf.RLock()
 	defer sf.RUnlock()
 	return lev0.Num(len(sf.dictStream))
 }
 
 // IsWork -- возвращает признак работы ядра.
-func (sf *kernelWg) IsWork() lev0.Bool {
+func (sf *KernWg) IsWork() lev0.Bool {
 	return sf.isWork.Get()
 }
 
 // IsStop -- возвращает признак остановки ядра.
-func (sf *kernelWg) IsStop() lev0.Bool {
+func (sf *KernWg) IsStop() lev0.Bool {
 	return !sf.isWork.Get()
 }
 
 // List -- возвращает список имён потоков на ожидании.
-func (sf *kernelWg) List() []*stream_name.AStreamName {
+func (sf *KernWg) List() []*stream_name.AStreamName {
 	sf.RLock()
 	defer sf.RUnlock()
 	lst := make([]*stream_name.AStreamName, 0, len(sf.dictStream))
@@ -90,7 +87,7 @@ func (sf *kernelWg) List() []*stream_name.AStreamName {
 }
 
 // Done -- удаляет поток из ожидания.
-func (sf *kernelWg) Done(name *stream_name.AStreamName) {
+func (sf *KernWg) Done(name *stream_name.AStreamName) {
 	sf.Lock()
 	defer sf.Unlock()
 	delete(sf.dictStream, name)
@@ -98,7 +95,7 @@ func (sf *kernelWg) Done(name *stream_name.AStreamName) {
 }
 
 // Wait -- блокирующий вызов; возвращает управление, только когда все потоки завершили работу.
-func (sf *kernelWg) Wait() {
+func (sf *KernWg) Wait() {
 	for {
 		time.Sleep(time.Millisecond * 1)
 		if !sf.isWork.Get() {
@@ -109,7 +106,7 @@ func (sf *kernelWg) Wait() {
 }
 
 // Add -- добавляет поток в ожидание.
-func (sf *kernelWg) Add(name *stream_name.AStreamName) {
+func (sf *KernWg) Add(name *stream_name.AStreamName) {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.log.Debug("Add(): stream('%v') done", name)
@@ -121,7 +118,7 @@ func (sf *kernelWg) Add(name *stream_name.AStreamName) {
 }
 
 // Ожидает окончания работы ожидателя групп.
-func (sf *kernelWg) close() {
+func (sf *KernWg) close() {
 	<-sf.ctx.Done()
 	fnDone := func() bool {
 		sf.Lock()

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

@@ -9,8 +9,7 @@ import (
 	"github.com/dgraph-io/badger/v4"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
@@ -27,9 +26,9 @@ var (
 // kStoreKv -- локальное хранилище ядра.
 type kStoreKv struct {
 	sync.RWMutex
-	kCtx      kspec.IKernelCtx
-	lCtx      comp_spec.ILocalCtx
-	log       comp_spec.ILogBuf
+	kCtx      *kern_ctx.KernCtx
+	lCtx      *lev1.LocalCtx
+	log       *lev1.LogBuf
 	wg        kspec.IKernelWg
 	storePath *lev0.LTxt
 	db        *badger.DB
@@ -54,10 +53,10 @@ func GetKernelStore() store_spec.IKernelStoreKv {
 		Prefix_: lev0.LetTxt("kStoreKv"),
 		IsTerm_: lev0.MutSafeBool(true),
 	}
-	log := mL1.NewLogBuf(param)
+	log := lev1.NewLogBuf(param)
 	sf := &kStoreKv{
 		kCtx:   kCtx,
-		lCtx:   mL1.NewLocalCtx(kCtx.Ctx()),
+		lCtx:   lev1.NewLocalCtx(kCtx.SelfCtx()),
 		wg:     kCtx.Wg(),
 		isWork: lev0.MutSafeBool(true),
 		log:    log,
@@ -69,7 +68,7 @@ func GetKernelStore() store_spec.IKernelStoreKv {
 }
 
 // Log -- возвращает локальный лог.
-func (sf *kStoreKv) Log() comp_spec.ILogBuf {
+func (sf *kStoreKv) Log() *lev1.LogBuf {
 	return sf.log
 }
 
@@ -198,7 +197,7 @@ func (sf *kStoreKv) clean() {
 	chRun <- 1
 	for {
 		select {
-		case <-sf.kCtx.Ctx().Done(): // надо прекратить работу
+		case <-sf.kCtx.SelfCtx().Done(): // надо прекратить работу
 			return
 		case <-chRun: // Пора поработать
 			fnClean()

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

@@ -17,7 +17,7 @@ import (
 type tester struct {
 	t   *testing.T
 	me  *mock_env.MockEnv
-	ctx kspec.IKernelCtx
+	ctx *kern_ctx.KernCtx
 	wg  kspec.IKernelWg
 }
 

+ 2 - 2
v4/lev2/lsi/store_spec/ikernel_store_kv.go

@@ -2,7 +2,7 @@ package store_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent"
 )
 
@@ -17,5 +17,5 @@ type IKernelStoreKv interface {
 	// Delete -- удаляет значение по ключу
 	Delete(key store_ent.IStoreKeyFix) *lev0.Result[lev0.Bool]
 	// Log -- возвращает локальный лог
-	Log() comp_spec.ILogBuf
+	Log() *lev1.LogBuf
 }

+ 7 - 8
v4/lev2/lti/bus_mock/mock_hand_sub_http/mock_hand_sub_http_test.go

@@ -11,7 +11,6 @@ import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/handler_name"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 )
@@ -24,16 +23,16 @@ const (
 type tester struct {
 	t     *testing.T
 	me    *mock_env.MockEnv
-	ctx   kspec.IKernelCtx
+	kCtx  *kern_ctx.KernCtx
 	isBad bool // Признак испорченности обработчика
 	hand  *MockHandSubHttp
 }
 
 func TestHandlerHttpSub(t *testing.T) {
 	sf := &tester{
-		t:   t,
-		me:  mock_env.MakeEnv(),
-		ctx: kern_ctx.GetKernCtx(),
+		t:    t,
+		me:   mock_env.MakeEnv(),
+		kCtx: kern_ctx.GetKernCtx(),
 	}
 	_ = os.Unsetenv("LOCAL_STORE_PATH")
 	_ = os.Setenv("LOCAL_STORE_PATH", pathStore)
@@ -45,11 +44,11 @@ func TestHandlerHttpSub(t *testing.T) {
 	}
 	fnClear()
 	defer fnClear()
-	sf.ctx.Set(lev0.LetTxt("monolitName"), "test_monolit", "comment")
+	sf.kCtx.Set(lev0.LetTxt("monolitName"), "test_monolit", "comment")
 	sf.new()
 	sf.back()
-	sf.ctx.Cancel()
-	sf.ctx.Wg().Wait()
+	sf.kCtx.Cancel()
+	sf.kCtx.Wg().Wait()
 }
 
 // Проверка работы обратного вызова.

+ 2 - 2
v4/lev2/lti/bus_spec/ikernel_bus.go

@@ -3,7 +3,7 @@ package bus_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 )
 
@@ -27,7 +27,7 @@ type IKernelBus interface {
 	// IsWork -- возвращает признак работы шины
 	IsWork() lev0.Bool
 	// Log -- возвращает буферный лог
-	Log() log_buf.ILogBuf
+	Log() *lev1.LogBuf
 }
 
 // IBusClient -- интерфейс клиента к шину.

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

@@ -6,14 +6,13 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 )
 
 // dictSubHook -- словарь потребителей топика по подписке.
 type dictSubHook struct {
-	kCtx  kspec.IKernelCtx
+	kCtx  *kern_ctx.KernCtx
 	dict  map[bus_ent.AHandlerName]struct{} // В качестве ключа -- URL веб-хука
 	block sync.RWMutex
 }

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

@@ -8,7 +8,6 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
@@ -19,7 +18,7 @@ import (
 // Допускается только один обработчик запросов на один топик.
 type dictServe struct {
 	sync.RWMutex
-	kCtx      kspec.IKernelCtx
+	kCtx      *kern_ctx.KernCtx
 	dictServe map[bus_ent.ATopic]bus_spec.IBusHandlerServe
 }
 
@@ -73,7 +72,7 @@ func (sf *dictServe) SendRequest(topic *topic.LTopic, binReq []byte) *lev0.Resul
 	var (
 		chRes = make(chan *lev0.Result[[]byte], 2)
 	)
-	ctx, fnCancel := context.WithTimeout(sf.kCtx.Ctx(), time.Millisecond*time.Duration(TimeoutDefault))
+	ctx, fnCancel := context.WithTimeout(sf.kCtx.SelfCtx(), time.Millisecond*time.Duration(TimeoutDefault))
 	defer fnCancel()
 	fnCall := func() {
 		defer close(chRes)

+ 4 - 3
v4/lev2/lti/kbus/dict_topic_sub/dict_topic_sub.go

@@ -4,9 +4,9 @@ package dict_topic_sub
 import (
 	"sync"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
@@ -21,7 +21,7 @@ type tReadReq struct {
 // dictTopicSub -- потокобезопасный словарь подписчиков.
 type dictTopicSub struct {
 	sync.RWMutex
-	kCtx          kspec.IKernelCtx
+	kCtx          *kern_ctx.KernCtx
 	dictTopicHook map[bus_ent.ATopic]bus_spec.IDictSubHook
 }
 
@@ -53,7 +53,8 @@ func (sf *dictTopicSub) Read(topic *topic.LTopic, binMsg []byte) {
 func (sf *dictTopicSub) Subscribe(handler bus_spec.IBusHandlerSubscribe) {
 	sf.Lock()
 	defer sf.Unlock()
-	helpers.If(handler == nil).Hassert("dictTopicSub.Subscribe(): handler==nil", []any{})
+	lev0.If(handler == nil).
+		Hassert("dictTopicSub.Subscribe(): handler==nil")
 	topic := handler.Topic()
 	dictSubHook := sf.dictTopicHook[topic.Get()]
 	if dictSubHook == nil {

+ 6 - 8
v4/lev2/lti/kbus_base/kbus_base.go

@@ -5,11 +5,9 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ent/stream_name"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/kbus/dict_topic_serve"
@@ -22,10 +20,10 @@ var (
 
 // KBusBase -- базовая часть шины данных.
 type KBusBase struct {
-	KCtx_     kspec.IKernelCtx
+	KCtx_     *kern_ctx.KernCtx
 	IsWork_   *lev0.MSafeBool
-	lCtx      comp_spec.ILocalCtx
-	log       comp_spec.ILogBuf
+	lCtx      *lev1.LocalCtx
+	log       *lev1.LogBuf
 	dictSub   bus_spec.IDictTopicSub
 	dictServe bus_spec.IDictTopicServe
 }
@@ -43,7 +41,7 @@ func GetKernelBusBase() *KBusBase {
 		return Bus_
 	}
 	kCtx := kern_ctx.GetKernCtx()
-	lCtx := mL1.NewLocalCtx(kCtx.Ctx())
+	lCtx := lev1.NewLocalCtx(kCtx.SelfCtx())
 	Bus_ = &KBusBase{
 		KCtx_:     kCtx,
 		IsWork_:   lev0.MutSafeBool(false),
@@ -62,7 +60,7 @@ func GetKernelBusBase() *KBusBase {
 }
 
 // Log -- возвращает лог шины.
-func (sf *KBusBase) Log() comp_spec.ILogBuf {
+func (sf *KBusBase) Log() *lev1.LogBuf {
 	return sf.log
 }
 

+ 6 - 7
v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go

@@ -11,9 +11,8 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/log_buf"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/dot"
@@ -23,8 +22,8 @@ import (
 // ClientBusHttp -- клиент HTTP-шины.
 type ClientBusHttp struct {
 	bus       bus_spec.IKernelBus
-	lCtx      comp_spec.ILocalCtx
-	log       comp_spec.ILogBuf
+	lCtx      *lev1.LocalCtx
+	log       *lev1.LogBuf
 	isWork    *lev0.MSafeBool
 	urlRemote *lev0.LTxt // URL дистанционной шины
 	urlLocal  *lev0.LTxt // URL локальной шины для веб-хуков
@@ -39,7 +38,7 @@ func NewClientBusHttp(urlRemote *lev0.LTxt) bus_spec.IBusClient {
 	log := lev1.NewLogBuf(param)
 	log.Debug("NewClientBusHttp()")
 	lev0.If(urlRemote == nil).Hassert("NewClientBusHttp(): urlRemote is empty", []any{})
-	kCtx := kern_ctx.GetKernCtx()
+	kCtx := lev2.GetKernCtx()
 	resLocal := lev0.MutSafeTxtFromEnv(
 		lev0.LetTxt("LOCAL_HTTP_URL"))
 	resLocal.Hassert("NewClientBusHttp(): in get env LOCAL_HTTP_URL)")
@@ -47,7 +46,7 @@ func NewClientBusHttp(urlRemote *lev0.LTxt) bus_spec.IBusClient {
 	txtUrl := urlLocal.TrimSuffix("/")
 	kBusHttp := kbus_http.GetKernelBusHttp()
 	sf := &ClientBusHttp{
-		lCtx:      lev1.NewLocalCtx(kCtx.Ctx()),
+		lCtx:      lev1.NewLocalCtx(kCtx.SelfCtx()),
 		log:       log,
 		bus:       kBusHttp,
 		isWork:    lev0.MutSafeBool(true),
@@ -263,7 +262,7 @@ func (sf *ClientBusHttp) makePost(hReq *http.Request) *lev0.Result[[]byte] {
 }
 
 // Log -- возвращает локальный лог клиента.
-func (sf *ClientBusHttp) Log() comp_spec.ILogBuf {
+func (sf *ClientBusHttp) Log() *lev1.LogBuf{
 	return sf.log
 }
 

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

@@ -8,10 +8,9 @@ import (
 	"time"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_serve"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_mock/mock_hand_sub_http"
@@ -26,8 +25,8 @@ var (
 
 type tester struct {
 	t        *testing.T
-	me       mL1.IMockEnv
-	kCtx     kspec.IKernelCtx
+	me       lev1.IMockEnv
+	kCtx     *kern_ctx.KernCtx
 	cl       *ClientBusHttp
 	handSub  *mock_hand_sub_http.MockHandSubHttp
 	handServ *mock_hand_serve.MockHandlerServe
@@ -45,7 +44,7 @@ func TestClientBusHttp(t *testing.T) {
 	handServ := mock_hand_serve.NewMockHandlerServe(qNameServ, "local_hook")
 	sf := &tester{
 		t:        t,
-		me:       mL1.MakeEnv(),
+		me:       lev1.MakeEnv(),
 		kCtx:     kern_ctx.GetKernCtx(),
 		handSub:  handSub,
 		handServ: handServ,

+ 4 - 5
v4/lev2/lti/kbus_http/kbus_http.go

@@ -8,8 +8,7 @@ import (
 	"github.com/gofiber/fiber/v3"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent/topic"
@@ -22,7 +21,7 @@ import (
 // kBusHttp -- шина данных поверх HTTP.
 type kBusHttp struct {
 	*kbus_base.KBusBase
-	log comp_spec.ILogBuf
+	log *lev1.LogBuf
 }
 
 var (
@@ -37,11 +36,11 @@ func GetKernelBusHttp() bus_spec.IKernelBus {
 	if Bus_ != nil {
 		return Bus_
 	}
-	paramLogBuf := &mL1.LogBufParam{
+	paramLogBuf := &lev1.LogBufParam{
 		IsTerm_: lev0.MutSafeBool(true),
 		Prefix_: lev0.LetTxt("kBusHttp"),
 	}
-	log := mL1.NewLogBuf(paramLogBuf)
+	log := lev1.NewLogBuf(paramLogBuf)
 	log.Debug("GetKernelBusHttp(): new")
 	kCtx := kern_ctx.GetKernCtx()
 	kBus := kbus_base.GetKernelBusBase()

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

@@ -14,8 +14,11 @@ func NewWuiButton(text *lev0.LTxt, fnClick func(map[lev0.Txt]lev0.Txt) *lev0.Res
 	return wBtn
 }
 
-// GetWuiCtx -- возвращает контекст WUI.
-func GetWuiCtx() mWt.IWuiCtx {
-	wCtx := wui_ctx.GetWuiCtx()
-	return wCtx
+// WuiCtx -- контекст веб-виджета.
+type WuiCtx = wui_ctx.WuiCtx
+
+// GetWuiCtx -- возвращает глобальный веб-контекст графики.
+func GetWuiCtx() *WuiCtx {
+	sf := wui_ctx.GetWuiCtx()
+	return sf
 }

+ 8 - 6
v4/lev2/wui/wui_ctx/wui_ctx.go

@@ -4,24 +4,26 @@ package wui_ctx
 import (
 	"sync"
 
-	mL1 "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
 )
 
+// WuiCtx -- контекст веб-виджета.
+type WuiCtx = lev1.LocalCtx
+
 var (
-	wCtx  mWt.IWuiCtx
+	wCtx  *WuiCtx
 	block sync.Mutex
 )
 
-// GetWuiCtx -- возвращает глобальный контекст графики.
-func GetWuiCtx() mWt.IWuiCtx {
+// GetWuiCtx -- возвращает глобальный веб-контекст графики.
+func GetWuiCtx() *WuiCtx {
 	block.Lock()
 	defer block.Unlock()
 	if wCtx != nil {
 		return wCtx
 	}
 	kCtx := kern_ctx.GetKernCtx()
-	wCtx := mL1.NewLocalCtx(kCtx.Ctx())
+	wCtx = lev1.NewLocalCtx(kCtx.SelfCtx())
 	return wCtx
 }

+ 0 - 11
v4/lev2/wui/wui_types/iwui_ctx.go

@@ -1,11 +0,0 @@
-// package wtypes -- интерфейсы WebUI
-package wui_types
-
-import (
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-)
-
-// IWuiCtx -- контекст веб-интерфейса.
-type IWuiCtx interface {
-	comp_spec.ILocalCtx
-}

+ 7 - 0
v4/lev3/lev3.go

@@ -0,0 +1,7 @@
+// LModuleName -- уровень модулей.
+package lev3
+
+import "gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent/module_name"
+
+// LModuleName -- фиксированное имя модуля.
+type LModuleName = module_name.LModuleName

+ 3 - 3
v4/lev3/mod_ent/module_name/module_name.go

@@ -13,17 +13,17 @@ type moduleName struct {
 	name AModuleName
 }
 
-// LModuleName -- фиксированное имя модуля
+// LModuleName -- фиксированное имя модуля.
 type LModuleName struct {
 	moduleName
 }
 
-// MModuleName -- изменяемое имя модуля
+// MModuleName -- изменяемое имя модуля.
 type MModuleName struct {
 	LModuleName
 }
 
-// LetModuleName -- создать фиксированнанное имя модуля
+// LetModuleName -- создать фиксированнанное имя модуля.
 func LetModuleName(val AModuleName) *LModuleName {
 	sf := &LModuleName{
 		name: val,

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

@@ -5,7 +5,7 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
@@ -22,7 +22,7 @@ type ModuleKernelCtx struct {
 	mod_spec.IKernelModule
 	kCtx      *lev2.KernCtx
 	kServHttp kspec.IKernelServerHttp
-	log       comp_spec.ILogBuf
+	log       *lev1.LogBuf
 }
 
 var (

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

@@ -22,7 +22,7 @@ type ModuleKeeper struct {
 	mod_spec.IKernelModule
 	kCtx     *lev2.KernCtx
 	kServHttp kspec.IKernelServerHttp
-	log       lev1.ILogBuf
+	log       *lev1.LogBuf
 }
 
 var (

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

@@ -7,8 +7,7 @@ import (
 	"strings"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui"
 	mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec"
@@ -16,13 +15,13 @@ import (
 
 type BtnModules struct {
 	btn  mWt.IWuiButton
-	kCtx kspec.IKernelCtx
+	kCtx *lev2.KernCtx
 }
 
 // NewBtnModules -- возвращает новую кнопку для показа модулей.
 func NewBtnModules() *BtnModules {
 	sf := &BtnModules{
-		kCtx: kern_ctx.GetKernCtx(),
+		kCtx: lev2.GetKernCtx(),
 	}
 	sf.btn = wui.NewWuiButton(lev0.LetTxt("Modules"), sf.clickMonolit)
 	sf.btn.Hx().Target().Set("#modules")

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

@@ -7,7 +7,7 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
@@ -15,7 +15,7 @@ import (
 
 type tester struct {
 	t    *testing.T
-	kCtx kspec.IKernelCtx
+	kCtx *lev2.KernCtx
 	serv kspec.IKernelServerHttp
 	api  *HttpApi
 }
@@ -23,7 +23,7 @@ type tester struct {
 func TestPageMonolit(t *testing.T) {
 	sf := &tester{
 		t:    t,
-		kCtx: kern_ctx.GetKernCtx(),
+		kCtx: lev2.GetKernCtx(),
 	}
 	sf.new()
 	sf.getTime()

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

@@ -5,7 +5,7 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
@@ -20,7 +20,7 @@ import (
 type ModuleServHttp struct {
 	mod_spec.IKernelModule
 	kServHttp kspec.IKernelServerHttp
-	log       comp_spec.ILogBuf
+	log       *lev1.LogBuf
 }
 
 var (

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

@@ -7,8 +7,8 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec"
 )
 
@@ -18,17 +18,17 @@ const (
 )
 
 type tester struct {
-	t   *testing.T
-	me  *mock_env.MockEnv
-	ctx kspec.IKernelCtx
-	mod mod_spec.IKernelModule
+	t    *testing.T
+	me   *mock_env.MockEnv
+	kCtx *lev2.KernCtx
+	mod  mod_spec.IKernelModule
 }
 
 func TestModServHttp(t *testing.T) {
 	sf := &tester{
-		t:   t,
-		me:  mock_env.MakeEnv(),
-		ctx: kern_ctx.GetKernCtx(),
+		t:    t,
+		me:   mock_env.MakeEnv(),
+		kCtx: kern_ctx.GetKernCtx(),
 	}
 	err := os.Unsetenv("LOCAL_STORE_PATH")
 	lev0.If(err != nil).Hassert("err=%v", err)
@@ -44,7 +44,7 @@ func TestModServHttp(t *testing.T) {
 	}
 	fnClear()
 	defer fnClear()
-	sf.ctx.Set(lev0.LetTxt("monolitName"), "test_monolit", "test")
+	sf.kCtx.Set(lev0.LetTxt("monolitName"), "test_monolit", "test")
 	sf.new()
 	sf.done()
 }
@@ -52,8 +52,8 @@ func TestModServHttp(t *testing.T) {
 // Завершение работы.
 func (sf *tester) done() {
 	sf.t.Log("done")
-	sf.ctx.Cancel()
-	sf.ctx.Wg().Wait()
+	sf.kCtx.Cancel()
+	sf.kCtx.Wg().Wait()
 	if isWork := sf.mod.IsWork(); isWork {
 		sf.t.Fatalf("newGood1(): isWork==true")
 	}

+ 10 - 11
v4/lev3/mod_serv_http/page_module/page_module.go

@@ -9,16 +9,15 @@ import (
 	"github.com/gofiber/fiber/v3"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent/mod_num"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec"
 )
 
 // PageModule -- страница показа модуля.
 type PageModule struct {
-	ctx kspec.IKernelCtx
+	kCtx *lev2.KernCtx
 }
 
 var (
@@ -31,7 +30,7 @@ func GetPageModule() *lev0.Result[*PageModule] {
 	if page != nil {
 		return lev0.ResOk(page)
 	}
-	kCtx := kern_ctx.GetKernCtx()
+	kCtx := lev2.GetKernCtx()
 	optFiber := kCtx.Get(txtFiberApp)
 	if optFiber.IsNone() {
 		err := lev0.LetErr("GetPageModule(): not found fiberApp in kernel ctx")
@@ -40,7 +39,7 @@ func GetPageModule() *lev0.Result[*PageModule] {
 	fiberApp := optFiber.Some().Val().(*fiber.App)
 	kCtx.Set(txtFiberApp, fiberApp, "fiberApp in GetPageModule()")
 	sf := &PageModule{
-		ctx: kCtx,
+		kCtx: kCtx,
 	}
 	fiberApp.Post("/module/:id", sf.postModule)
 	fiberApp.Post("/module_state/:id", sf.postModuleState)
@@ -74,7 +73,7 @@ func (sf *PageModule) postModuleLog(ctx fiber.Ctx) error {
 	}
 	_log := module.Log()
 	if module.Name().Get() == "kCtx" {
-		_log = sf.ctx.Log()
+		_log = sf.kCtx.Log()
 	}
 
 	strOut := ""
@@ -118,7 +117,7 @@ func (sf *PageModule) postModuleCtx(ctx fiber.Ctx) error {
 
 	lst := mCtx.SortedList()
 	if module.Name().Get() == "kCtx" {
-		lst = sf.ctx.SortedList()
+		lst = sf.kCtx.SortedList()
 	}
 	strOut := ""
 	for _, val := range lst {
@@ -279,15 +278,15 @@ func (sf *PageModule) postSvgSec(ctx fiber.Ctx) error {
 }
 
 // Возвращает модуль.
-func (sf *PageModule) getModule(modNum *mod_num.LModuleNum) (mod_spec.IKernelModule, comp_spec.ICtxValue) {
-	optMonolit := sf.ctx.Get(lev0.LetTxt("monolit"))
+func (sf *PageModule) getModule(modNum *mod_num.LModuleNum) (mod_spec.IKernelModule, *lev1.CtxValue) {
+	optMonolit := sf.kCtx.Get(lev0.LetTxt("monolit"))
 	if optMonolit.IsNone() {
 		return nil, nil
 	}
 	mon := optMonolit.Some().Val().(mod_spec.IKernelMonolit)
 	chLst := mon.Ctx().SortedList()
 	var (
-		val    comp_spec.ICtxValue
+		val    *lev1.CtxValue
 		isFind bool
 	)
 	for _, val = range chLst {

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

@@ -10,7 +10,7 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
@@ -21,7 +21,7 @@ import (
 
 type tester struct {
 	t    *testing.T
-	ctx  kspec.IKernelCtx
+	kCtx  *lev2.KernCtx
 	serv kspec.IKernelServerHttp
 	page *PageModule
 }
@@ -29,7 +29,7 @@ type tester struct {
 func TestPageMonolit(t *testing.T) {
 	sf := &tester{
 		t:   t,
-		ctx: kern_ctx.GetKernCtx(),
+		kCtx: lev2.GetKernCtx(),
 	}
 	sf.new()
 	sf.postModule()
@@ -288,7 +288,7 @@ func (sf *tester) postModule1() {
 // Возвращает состояние лога модуля.
 func (sf *tester) postModuleLog() {
 	sf.t.Log("postModuleLog")
-	monCtx := sf.ctx.Get(lev0.LetTxt("monolit")).Hassert("postModuleLog()")
+	monCtx := sf.kCtx.Get(lev0.LetTxt("monolit")).Hassert("postModuleLog()")
 	mon := monCtx.Val().(mod_spec.IKernelMonolit)
 	log := mon.Log()
 	log.Debug(testMsg)
@@ -352,8 +352,8 @@ func (sf *tester) postModule() {
 // Освобождает ресурсы.
 func (sf *tester) done() {
 	sf.t.Log("done")
-	sf.ctx.Cancel()
-	sf.ctx.Wg().Wait()
+	sf.kCtx.Cancel()
+	sf.kCtx.Wg().Wait()
 }
 
 // Создаёт новую страницу модуля.
@@ -362,7 +362,7 @@ func (sf *tester) new() {
 	_ = mock_env.MakeEnv()
 	_ = os.Unsetenv("LOCAL_HTTP_URL")
 	_ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18322/")
-	sf.ctx.Set(lev0.LetTxt("isLocal"), true, "testing")
+	sf.kCtx.Set(lev0.LetTxt("isLocal"), true, "testing")
 	_ = kmonolit.LetModMonolit("test_monolit")
 	sf.serv = kserv_http.GetKernelServHttp()
 

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

@@ -10,8 +10,7 @@ import (
 	"github.com/gofiber/fiber/v3"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/btn_modules"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/btn_monolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_spec"
@@ -19,7 +18,7 @@ import (
 
 // PageMonolit -- страница показа монолита.
 type PageMonolit struct {
-	kCtx       kspec.IKernelCtx
+	kCtx       *lev2.KernCtx
 	btnMonolit *btn_monolit.BtnMonolit
 	btnModules *btn_modules.BtnModules
 }
@@ -37,7 +36,7 @@ func GetPageMonolit() *PageMonolit {
 		return page
 	}
 	sf := &PageMonolit{
-		kCtx:       kern_ctx.GetKernCtx(),
+		kCtx:       lev2.GetKernCtx(),
 		btnMonolit: btn_monolit.NewBtnMonolit(),
 		btnModules: btn_modules.NewBtnModules(),
 	}

+ 8 - 7
v4/lev3/mod_serv_http/page_monolit/page_monolit_test.go

@@ -8,6 +8,7 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
@@ -16,7 +17,7 @@ import (
 
 type tester struct {
 	t    *testing.T
-	ctx  kspec.IKernelCtx
+	kCtx  *lev2.KernCtx
 	serv kspec.IKernelServerHttp
 	page *PageMonolit
 }
@@ -24,7 +25,7 @@ type tester struct {
 func TestPageMonolit(t *testing.T) {
 	sf := &tester{
 		t:   t,
-		ctx: kern_ctx.GetKernCtx(),
+		kCtx: kern_ctx.GetKernCtx(),
 	}
 	sf.new()
 	sf.getMonolit()
@@ -37,7 +38,7 @@ func TestPageMonolit(t *testing.T) {
 // Возвращает состояние лога монолита.
 func (sf *tester) postMonolitLog() {
 	sf.t.Log("postMonolitCtx")
-	mon := sf.ctx.Get(lev0.LetTxt("monolit")).
+	mon := sf.kCtx.Get(lev0.LetTxt("monolit")).
 		Hassert("postMonolitLog()").
 		Val().(*kmonolit.LModMonolit)
 	log := mon.Log()
@@ -123,8 +124,8 @@ func (sf *tester) getMonolit() {
 func (sf *tester) done() {
 	sf.t.Log("done")
 	sf.page.clickMonolit()
-	sf.ctx.Cancel()
-	sf.ctx.Wg().Wait()
+	sf.kCtx.Cancel()
+	sf.kCtx.Wg().Wait()
 }
 
 // Создаёт новую страницу монолита.
@@ -133,10 +134,10 @@ func (sf *tester) new() {
 	_ = mock_env.MakeEnv()
 	_ = os.Unsetenv("LOCAL_HTTP_URL")
 	_ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18310/")
-	sf.ctx.Set(lev0.LetTxt("isLocal"), true, "testing")
+	sf.kCtx.Set(lev0.LetTxt("isLocal"), true, "testing")
 	for {
 		time.Sleep(time.Millisecond * 1)
-		if sf.ctx.Get(lev0.LetTxt("isLocal")) != nil {
+		if sf.kCtx.Get(lev0.LetTxt("isLocal")) != nil {
 			break
 		}
 	}

+ 3 - 3
v4/lev3/mod_spec/imod_base.go

@@ -2,7 +2,7 @@ package mod_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent/module_name"
 )
 
@@ -15,9 +15,9 @@ type IKernelModule interface {
 	// Name -- возвращает уникальное имя модуля
 	Name() *module_name.LModuleName
 	// Ctx -- возвращает контекст модуля
-	Ctx() comp_spec.ILocalCtx
+	Ctx() *lev1.LocalCtx
 	// Log -- возвращает буферный лог модуля
-	Log() comp_spec.ILogBuf
+	Log() *lev1.LogBuf
 	// Live -- "сигнал жизни"
 	Live() *lev0.LTxt
 	// Stat -- возвращает статистику модуля

+ 3 - 3
v4/lev3/mod_spec/imod_monolit.go

@@ -2,7 +2,7 @@ package mod_spec
 
 import (
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent"
 )
 
@@ -21,7 +21,7 @@ type IKernelMonolit interface {
 	// Add -- добавляет модуль в монолит
 	Add(IKernelModule)
 	// Log -- возвращает лог монолита
-	Log() comp_spec.ILogBuf
+	Log() *lev1.LogBuf
 	// Ctx -- возвращает контекст монолита
-	Ctx() comp_spec.ILocalCtx
+	Ctx() *lev1.LocalCtx
 }

+ 11 - 9
v4/lev3/mod_wui/mod_wui.go

@@ -11,13 +11,14 @@ import (
 	"github.com/gofiber/fiber/v3/middleware/adaptor"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev1"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui"
-	mWt "gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_types"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_button"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_ctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_ent"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/http_api"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev3/mod_serv_http/page_module"
@@ -28,10 +29,10 @@ import (
 // ModuleWui -- модуль WUI.
 type ModuleWui struct {
 	mod_spec.IKernelModule
-	kCtx      kspec.IKernelCtx
-	wCtx      mWt.IWuiCtx
+	kCtx      *lev2.KernCtx
+	wCtx      *wui_ctx.WuiCtx
 	kServHttp kspec.IKernelServerHttp
-	log       comp_spec.ILogBuf
+	log       *lev1.LogBuf
 }
 
 var (
@@ -48,7 +49,7 @@ func GetModuleWui() *ModuleWui {
 	}
 	modName := mod_ent.LetModuleName("wui")
 	sf := &ModuleWui{
-		kCtx:          kern_ctx.GetKernCtx(),
+		kCtx:          lev2.GetKernCtx(),
 		wCtx:          wui.GetWuiCtx(),
 		IKernelModule: kmodule.NewKernelModule(modName),
 		kServHttp:     kserv_http.GetKernelServHttp(),
@@ -74,7 +75,7 @@ func (sf *ModuleWui) Run() {
 }
 
 // Log -- возвращает буферный лог.
-func (sf *ModuleWui) Log() comp_spec.ILogBuf {
+func (sf *ModuleWui) Log() *lev1.LogBuf {
 	return sf.log
 }
 
@@ -94,7 +95,8 @@ func (sf *ModuleWui) wuiClick(resp http.ResponseWriter, req *http.Request) {
 		_, _ = fmt.Fprint(resp, err)
 		return
 	}
-	widget1, isOk := optWidget.Some().(mWt.IWuiButton)
+	_widget1:= optWidget.Some()
+	widget1, isOk :=_widget1.Val().(*wui_button.WuiButton)
 	if !isOk {
 		strOut := lev0.LetErr("ModuleWui.wuiClick(): widget(%T) not button",
 			optWidget.Some())

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

@@ -12,9 +12,8 @@ import (
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kern_ctx"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev2"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
-	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kspec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_button"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/wui/wui_label"
 )
@@ -27,7 +26,7 @@ const (
 type tester struct {
 	t        *testing.T
 	me       *mock_env.MockEnv
-	kCtx     kspec.IKernelCtx
+	kCtx     *lev2.KernCtx
 	fiberApp *fiber.App
 	mod      *ModuleWui
 }
@@ -36,7 +35,7 @@ func TestModKernelCtx(t *testing.T) {
 	sf := &tester{
 		t:    t,
 		me:   mock_env.MakeEnv(),
-		kCtx: kern_ctx.GetKernCtx(),
+		kCtx: lev2.GetKernCtx(),
 	}
 	_ = os.Unsetenv("LOCAL_STORE_PATH")
 	_ = os.Setenv("LOCAL_STORE_PATH", pathStore)
@@ -230,7 +229,7 @@ func (sf *tester) newGood1() {
 	_ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18334/")
 
 	sf.mod = GetModuleWui()
-	kCtx := kern_ctx.GetKernCtx()
+	kCtx := lev2.GetKernCtx()
 	kCtx.Set(lev0.LetTxt("isLocal"), true, "type msg bus")
 
 	_ = kmonolit.LetModMonolit("test_monolit")