docs: v0.0.64-0.0.67 (тикеры/оценки, блокировки UI, фикс имён ZIP) + README History

This commit is contained in:
“Naeel”
2026-08-24 15:55:55 +03:00
parent 023dba3daa
commit 45c6f3b7f0
4 changed files with 96 additions and 0 deletions
@@ -0,0 +1,30 @@
# v0.0.64–0.0.65 — Тикеры времени и оценки обработки по файлам (2026-08-24)
_ux-frontend. Продолжение v0.0.63 (прерывание/ETA). По итогам замечаний: тикеры/оценки
должны быть видны СРАЗУ и на ВСЕХ этапах, а не только в LLM-фазе._
## Проблема (v0.0.63)
- Подсветка «▶ Текущий файл» и оценки появлялись только в LLM-фазе.
- На этапе извлечения (долгие PDF, .doc через liberta) таблица показывала всё
«○ Ожидают —», без текущего файла и оценок — юзер не видел никакого прогресса.
## v0.0.64 — тикер текущего файла на всех этапах + самокалибровка
- `start` (этап извлечения): файл, который обрабатывается сейчас, помечается `current`
(предыдущий демотируется), тикер `прошло/осталось` идёт через `procRefresh` (1с).
- Замер скорости извлечения: по предыдущему «текущему» файлу считается `procExtractRate`
(сек/МБ) — оценки «ожидающих» калибруются по факту, а не по константе.
- `extract_done`: снимает подсветку извлечения (LLM-фаза назначает текущий через `file_start`).
- Оценки у «ожидающих»: LLM (`chars × rate`) либо грубая по размеру (сек/МБ).
## v0.0.65 — мгновенные оценки (ещё до старта)
- При выборе файлов (простой режим) у каждого файла в «Статусе» — `~X` (по размеру,
`EST_MB_SEC = 12` с/МБ).
- В шапке таблицы — суммарная оценка: `N файлов · S МБ · ~T`.
- Подсказка: «⏱ Время обработки каждого файла — ориентировочное (обновляется по факту)».
## Проверка
- `node --check` — OK; `py_compile` — OK.
- Локально: имя из ZIP декодируется корректно (см. v0.0.67).
## Версии
- 0.0.63 → 0.0.64 (тикеры на всех этапах) → 0.0.65 (мгновенные оценки).
@@ -0,0 +1,34 @@
# v0.0.66 — Блокировки UI: предсказуемое поведение во всех состояниях (2026-08-24)
_ux-frontend. По замечанию: во время обработки «Выбрать файлы» оставалась активной —
юзер мог менять список и ломать состояние/индексы. Требование: ВСЁ предсказуемо,
учтены ВСЕ действия юзера._
## Состояния и доступные действия
| Состояние | Выбрать файлы | ✕ удалить | Обфусцировать | Прервать | Скачать | Новая сессия |
|---|---|---|---|---|---|---|
| Простой | ✅ | ✅ | ✅ | — | — | — |
| Загрузка (1/2) | 🔒 | 🔒 | 🔒 | — | — | — |
| Обработка (2/2) | 🔒 | 🔒 | 🔒 | ✅ | — | — |
| Результат готов | 🔒 | 🔒 | 🔒 | — | ✅ | ✅ |
| Ошибка | ✅ | ✅ | ✅ | — | — | — |
## Реализация
- Глобальный флаг `busy` + `setBusy(b)`: блокирует `fileInput` и скрывает кнопки «✕»
(CSS `body.busy .remove-btn { display:none }`).
- Двойная защита: обработчики `change` (выбор файлов) и `rm` (удаление) игнорируют
вызовы при `busy`.
- `uploadFiles()`: guard `if (busy) return` + `setBusy(true)`; ранние выходы (ошибки
фазы 1, test-режим) — `setBusy(false)`.
- **Заморозка сессии после результата**: `complete`/`cancelled` → `sessionDone=true`,
`fi`/`uploadBtn` выключены, показаны «Скачать» и новая кнопка **«🔄 Новая сессия»**
(`resetAll`). Ошибки — снимают блокировку (можно повторить).
- При закрытии вкладки (beforeunload) — `resetAll` сбрасывает всё.
## Найденный и исправленный баг при правке
- При добавлении заморозки случайно затёрлась строка `activeES.addEventListener('complete', ...)`
— JS-синтаксис сломался («Missing catch»). Восстановлено ДО пуша; `node --check` — OK.
## Проверка
- `node --check` (извлечённый <script>) — OK; `py_compile` — OK.