verstak/internal/core/plugins
mirivlad d83c8c80e1 fix: второй стабилизационный проход Lua plugin lifecycle
1. Enabled/Active state separation:
   - Enable() sets Enabled=true (persisted in config), does NOT create runtime
   - ActivatePlugin() checks Enabled && !Active, creates VM + scheduler
   - DeactivatePlugin() stops runtime, keeps Enabled=true
   - InitRuntimes() iterates Enabled plugins, sets Active=true after creation
   - SyncConfig() restores Enabled from config, does NOT touch Active

2. ActivatePlugin: добавлен vm.SetServices(m.Services)

3. Discover: атомарная замена списка (newPlugins slice), нет дублирования

4. CallPluginFunction: thread-safe через LuaVM.CallFunction (vm.mu + callWithTimeout)

5. Uninstall активного плагина: полная деактивация (StopScheduler → on_shutdown → CloseVM → Active=false)

6. GetPluginPanelHTML: валидация panel path (no absolute, no .., must be .html, must be within plugin dir)

7. PluginPage: убран hardcoded 'calendar-plugin', используется funcPrefix из pluginName

Тесты:
- security_test.go: +8 тестов (FullLifecycle, ActivatePlugin_Services, Discover_Idempotent,
  ReloadPlugins_NoDuplicates, CallPluginFunction_Timeout, Uninstall_ActivePlugin,
  GetPluginPanelHTML_PathTraversal, FullLifecycle_EndToEnd)
- manager_test.go: обновлены тесты под новую семантику Enabled/Active
2026-06-07 20:49:43 +08:00
..
builtin/templates step 10: plugins system (Lua + templates) + DokuWiki as optional plugin 2026-05-31 11:20:45 +08:00
api.go feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
api_ext.go feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
api_node.go feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
api_utils.go feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
lua.go step 10: plugins system (Lua + templates) + DokuWiki as optional plugin 2026-05-31 11:20:45 +08:00
manager.go fix: второй стабилизационный проход Lua plugin lifecycle 2026-06-07 20:49:43 +08:00
manager_lifecycle.go fix: второй стабилизационный проход Lua plugin lifecycle 2026-06-07 20:49:43 +08:00
manager_test.go fix: второй стабилизационный проход Lua plugin lifecycle 2026-06-07 20:49:43 +08:00
runtime.go fix: второй стабилизационный проход Lua plugin lifecycle 2026-06-07 20:49:43 +08:00
runtime_test.go test: add TestCallPluginFunction + final run - all 13 tests pass 2026-06-07 16:41:47 +08:00
scheduler.go security: стабилизационный аудит Lua plugin system 2026-06-07 19:19:44 +08:00
security_test.go fix: второй стабилизационный проход Lua plugin lifecycle 2026-06-07 20:49:43 +08:00