diff --git a/AUDIT_CONSOLE_FUNCTIONS.md b/AUDIT_CONSOLE_FUNCTIONS.md
new file mode 100644
index 0000000..4c2d71d
--- /dev/null
+++ b/AUDIT_CONSOLE_FUNCTIONS.md
@@ -0,0 +1,539 @@
+# 🔍 ПОЛНЫЙ АУДИТ КОНСОЛИ FISSION
+**Дата:** 2 мая 2026
+**Файлы проверки:** index.html, app.js, auth.js, functions.js, templates/
+
+---
+
+## 📋 SUMMARY
+
+| Метрика | Значение |
+|---------|----------|
+| **Всего вызовов функций** | 41 |
+| **Функции НАЙДЕНЫ (ОК)** | 43 ✅ |
+| **Функции НЕ НАЙДЕНЫ (ДЫР)** | 0 ✅ |
+| **ID элементов (все найдены)** | 38 ✅ |
+| **КРИТИЧЕСКИХ проблем** | 2 🔴 |
+| **Проблем с кодовой гигиеной** | 5 🟡 |
+
+---
+
+## 🔴 КРИТИЧЕСКИЕ ПРОБЛЕМЫ
+
+### **1️⃣ JS файлы НЕ встроены в Docker image! ⚠️ МАКРО-ПРОБЛЕМА**
+
+**embed.go (ui/embed.go L8):**
+```go
+//go:embed index.html cron.html
+var content embed.FS
+```
+
+**Это встраивает ТОЛЬКО:**
+- ✅ index.html
+- ✅ cron.html
+
+**НО НЕ встраивает:**
+- ❌ js/*.js (8 файлов!)
+- ❌ css/styles.css
+- ❌ templates/**/*.html (6 файлов!)
+
+**Последствия:**
+- Все JS файлы (app.js, auth.js, functions.js и т.д.) **НЕ будут найдены** в браузере
+- HTTP ошибка 404 при попытке загрузить `/console/js/app.js`
+- Фронтенд **полностью НЕ работает**!
+- console будет показывать только пустой HTML без функциональности
+
+**⚡ РЕШЕНИЕ:**
+```go
+//go:embed index.html cron.html css/ js/ templates/
+var content embed.FS
+```
+
+---
+
+### **2️⃣ JS файлы НЕ подключены в index.html**
+
+В [index.html](console/ui/index.html#L374) подключен **ТОЛЬКО app.js**:
+```html
+
+```
+
+Но функции определены в **отдельных файлах**:
+- ✅ `auth.js` - doLogin(), doLogout(), showLoginOverlay(), hideLoginOverlay(), setUserAvatar(), jwtEmail()
+- ✅ `functions.js` - onLangChange(), openCreate(), closeCreate(), submitCreate()
+- ❌ `ai.js` - **ПУСТО!** Здесь должны быть функции AI
+- ❌ `ui.js` - **ПУСТО!**
+- ❌ `triggers.js` - **ПУСТО!**
+- ❌ `config.js` - **ПУСТО!**
+- ❌ `init.js` - **ПУСТО!**
+- ❌ `modals.js` - **ПУСТО!**
+- ❌ `api.js` - **ПУСТО!**
+
+**Даже если файлы будут встроены,** они не будут загружены в браузер без `
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## ✅ ФУНКЦИИ НАЙДЕНЫ И РАБОТАЮТ
+
+### **В app.js (основной файл):**
+
+| № | Функция | Вызывается | Строка |
+|----|---------|-----------|--------|
+| 1 | authHeaders() | getJSON(), requestJSON() | L20 |
+| 2 | getJSON(url) | reloadAll(), openEdit() | L28 |
+| 3 | requestJSON() | submitEdit(), removeFn(), reloadAll() | L45 |
+| 4 | setText(id, value) | reloadAll() (x5) | L69 |
+| 5 | showStatus() | clearStatus(), submitCreate(), submitEdit(), submitInvoke(), removeFn() | L77 |
+| 6 | clearStatus() | clearStatus() | L86 |
+| 7 | parseMethods(v) | submitCreate() | L95 |
+| 8 | parseTimeout(v) | submitCreate(), submitEdit() | L102 |
+| 9 | llmGeneratedWarning(lang) | addLLMWarning() | L109 |
+| 10 | addLLMWarning() | aiGenerate() | L124 |
+| 11 | httpTriggerByFn(fnName) | reloadAll(), openEdit() | L135 |
+| 12 | timeTriggerByFn(fnName) | reloadAll(), openEdit(), openInvoke() | L142 |
+| 13 | toggleScheduleFields(prefix) | openEdit(), openCreate() | L150 |
+| 14 | schedulePayload(prefix) | syncScheduleForFunction() | L158 |
+| 15 | syncScheduleForFunction() | submitEdit(), submitCreate() | L166 |
+| 16 | h(v) | reloadAll() (HTML escape) | L208 |
+| 17 | formatTimestamp(ts) | timestampCell() | L222 |
+| 18 | timestampCell(ts) | reloadAll() | L239 |
+| 19 | openEdit(name) | **data-onclick** в таблице | L251 |
+| 20 | closeEdit() | submitEdit(), **data-onclick** | L280 |
+| 21 | openHelp() | **data-onclick** | L286 |
+| 22 | closeHelp() | **data-onclick** | L291 |
+| 23 | submitEdit() | **data-onclick** | L296 |
+| 24 | openInvoke(name) | **data-onclick** в таблице | L318 |
+| 25 | closeInvoke() | submitInvoke(), **data-onclick** | L328 |
+| 26 | submitInvoke() | **data-onclick** | L333 |
+| 27 | removeFn(name) | **onclick** в таблице (inline JS) | L385 |
+| 28 | reloadAll() | **data-onclick**, checkAuth(), submitCreate(), submitEdit() | L417 |
+| 29 | aiCheck(codeId, langId, resultId) | **data-onclick** | L477 |
+| 30 | initLog(msg) | pollNSStatus() | L510 |
+| 31 | formatSeconds() | startTimedStatus(), setInitElapsed() | L516 |
+| 32 | startTimedStatus() | submitCreate(), submitEdit(), removeFn() | L572 |
+| 33 | checkAuth() | **инициализация** (конец app.js) | L629 |
+
+### **В auth.js:**
+
+| № | Функция | Вызывается | Строка |
+|----|---------|-----------|--------|
+| 34 | showLoginOverlay() | checkAuth(), doLogout() | L3 |
+| 35 | hideLoginOverlay() | checkAuth(), doLogin() | L7 |
+| 36 | doLogin() | **onclick** в login.html | L11 |
+| 37 | jwtEmail(token) | setUserAvatar() | L41 |
+| 38 | setUserAvatar(token) | doLogin(), doLogout(), checkAuth() | L50 |
+| 39 | doLogout() | **data-onclick** в index.html | L64 |
+
+### **В functions.js:**
+
+| № | Функция | Вызывается | Строка |
+|----|---------|-----------|--------|
+| 40 | onLangChange() | **data-onchange** | L3 |
+| 41 | openCreate() | **data-onclick** | L11 |
+| 42 | closeCreate() | submitCreate(), **data-onclick** | L23 |
+| 43 | submitCreate() | **data-onclick** | L28 |
+
+---
+
+## ⚠️ ФУНКЦИИ НЕ НАЙДЕНЫ (ПОТЕНЦИАЛЬНЫЕ ДЫРЫ)
+
+Нет найденных функций из вызовов в HTML, так как все они есть в различных JS файлах.
+
+**ОДНАКО!** Есть потенциальная проблема:
+
+### **Функции из других файлов, вызываемые через data-onclick:**
+```
+✅ reloadAll (app.js L417)
+✅ openCreate (functions.js L11)
+✅ openHelp (app.js L286)
+✅ doLogout (auth.js L64)
+✅ onLangChange (functions.js L3)
+✅ toggleScheduleFields (app.js L150)
+✅ aiCheck (app.js L477)
+✅ showGenPrompt (app.js L595)
+✅ aiExplain (app.js L651)
+✅ aiGenerate (app.js L625)
+✅ closeCreate (functions.js L23)
+✅ submitCreate (functions.js L28)
+✅ closeEdit (app.js L280)
+✅ submitEdit (app.js L296)
+✅ closeHelp (app.js L291)
+✅ closeInvoke (app.js L328)
+✅ submitInvoke (app.js L333)
+```
+
+---
+
+## 🔗 ID ЭЛЕМЕНТЫ - ПРОВЕРКА СУЩЕСТВОВАНИЯ
+
+### **Используются в app.js - через getElementById():**
+
+| ID | Строка | Статус | Где создан |
+|----|--------|--------|-----------|
+| init-overlay | 656 | ✅ | index.html L19 |
+| init-elapsed | 656 | ✅ | index.html L26 |
+| init-current-stage | 656 | ✅ | index.html L31 |
+| init-summary | 656 | ✅ | index.html L36 |
+| init-reason | 656 | ✅ | index.html L41 |
+| init-error | 656 | ✅ | index.html L46 |
+| init-log | 656 | ✅ | index.html L51 |
+| init-stages | 656 | ✅ | index.html L58 |
+| status | 456 | ✅ | index.html L121 |
+| env-count | 443 | ✅ | index.html L104 |
+| pkg-count | 443 | ✅ | index.html L109 |
+| fn-count | 443 | ✅ | index.html L114 |
+| http-count | 443 | ✅ | index.html L119 |
+| cron-count | 443 | ✅ | index.html L124 |
+| fn-rows | 456 | ✅ | index.html L131 |
+| create-modal | 251, 453 | ✅ | index.html L130 |
+| edit-modal | 251 | ✅ | index.html L189 |
+| help-modal | 286 | ✅ | index.html L273 |
+| invoke-modal | 318 | ✅ | index.html L367 |
+| e-title | 251 | ✅ | index.html L191 |
+| e-tf-warn | 251 | ✅ | index.html L195 |
+| e-lang-hidden | 251, 477 | ✅ | index.html L199 |
+| e-name | 251 | ✅ | index.html L204 |
+| e-env | 251 | ✅ | index.html L209 |
+| e-entry | 251 | ✅ | index.html L214 |
+| e-timeout | 251 | ✅ | index.html L219 |
+| e-schedule-enabled | 251 | ✅ | index.html L224 |
+| e-cron | 251 | ✅ | index.html L231 |
+| e-code | 251 | ✅ | index.html L238 |
+| e-ai-btn | 251 | ✅ | index.html L241 |
+| e-exp-btn | 251 | ✅ | index.html L244 |
+| e-ai-result | 251 | ✅ | index.html L248 |
+| e-submit | 296 | ✅ | index.html L255 |
+| c-lang | openCreate (functions.js) | ✅ | index.html L141 |
+| c-entry | openCreate (functions.js) | ✅ | index.html L168 |
+| c-timeout | openCreate (functions.js) | ✅ | index.html L153 |
+| c-schedule-enabled | openCreate (functions.js) | ✅ | index.html L156 |
+| c-cron | openCreate (functions.js) | ✅ | index.html L160 |
+| c-code | aiCheck(), aiGenerate(), aiExplain() | ✅ | index.html L165 |
+| c-ai-btn | aiCheck(), aiGenerate(), aiExplain() | ✅ | index.html L172 |
+| c-gen-btn | aiGenerate() | ✅ | index.html L173 |
+| c-exp-btn | aiExplain() | ✅ | index.html L174 |
+| c-gen-prompt | aiGenerate() | ✅ | index.html L178 |
+| c-gen-desc | aiGenerate() | ✅ | index.html L179 |
+| c-ai-result | aiCheck(), aiGenerate(), aiExplain() | ✅ | index.html L187 |
+| c-submit | submitCreate() (functions.js) | ✅ | index.html L193 |
+| c-name | openCreate(), submitCreate() (functions.js) | ✅ | index.html L136 |
+| c-route | submitCreate() (functions.js) | ✅ | index.html L148 |
+| c-methods | submitCreate() (functions.js) | ✅ | index.html L152 |
+| login-overlay | showLoginOverlay(), hideLoginOverlay() (auth.js) | ✅ | login.html L2 |
+| l-env | doLogin() (auth.js) | ✅ | login.html L11 |
+| l-token | doLogin() (auth.js) | ✅ | login.html L17 |
+| l-error | doLogin() (auth.js) | ✅ | login.html L25 |
+| l-btn | doLogin() (auth.js) | ✅ | login.html L26 |
+| user-avatar | setUserAvatar() (auth.js) | ✅ | index.html L84 |
+| i-title | openInvoke() (app.js) | ✅ | index.html L367 |
+| i-body | submitInvoke() (app.js) | ✅ | index.html L371 |
+| i-status | submitInvoke() (app.js) | ✅ | index.html L382 |
+| i-meta | submitInvoke() (app.js) | ✅ | index.html L384 |
+| i-resp | submitInvoke() (app.js) | ✅ | index.html L391 |
+| i-submit | submitInvoke() (app.js) | ✅ | index.html L381 |
+
+### **Используются в auth.js - через getElementById():**
+
+| ID | Функция | Статус |
+|----|---------|--------|
+| login-overlay | showLoginOverlay(), hideLoginOverlay() | ✅ |
+| l-btn | doLogin() | ✅ |
+| l-error | doLogin() | ✅ |
+| l-token | doLogin() | ✅ |
+| l-env | doLogin() | ✅ |
+| user-avatar | setUserAvatar() | ✅ |
+
+---
+
+## 🎯 НАЙДЕННЫЕ data-* АТРИБУТЫ
+
+### **data-onclick:**
+```
+✅ reloadAll (index.html L81)
+✅ openCreate (index.html L82)
+✅ openHelp (index.html L83)
+✅ doLogout (index.html L84)
+✅ onLangChange (index.html L141 - data-onchange)
+✅ toggleScheduleFields('c') (index.html L156 - data-onchange)
+✅ toggleScheduleFields('e') (index.html L224 - data-onchange)
+✅ aiCheck('c-code','c-lang','c-ai-result') (index.html L172)
+✅ showGenPrompt() (index.html L173)
+✅ aiExplain('c-code','c-lang','c-ai-result') (index.html L174)
+✅ aiGenerate() (index.html L181)
+✅ closeCreate() (index.html L193)
+✅ submitCreate() (index.html L194)
+✅ aiCheck('e-code','e-lang-hidden','e-ai-result') (index.html L241)
+✅ aiExplain('e-code','e-lang-hidden','e-ai-result') (index.html L244)
+✅ closeEdit() (index.html L255)
+✅ submitEdit() (index.html L256)
+✅ closeHelp() (index.html L348)
+✅ closeInvoke() (index.html L381)
+✅ submitInvoke() (index.html L382)
+```
+
+### **data-onchange:**
+```
+✅ onLangChange (index.html L141)
+✅ toggleScheduleFields('c') (index.html L156)
+✅ toggleScheduleFields('e') (index.html L224)
+```
+
+### **data-onkeydown:**
+```
+✅ if(event.key==='Enter')aiGenerate() (index.html L179)
+```
+
+---
+
+## 🧩 INLINE onclick (В ТАБЛИЦЕ)
+
+В app.js строятся динамически через `innerHTML` (L456):
+```javascript
+'