Commit Graph
137 Commits
Author SHA1 Message Date
naeel d95c17cc18 v1.0.178: [ZIP] в группах — показываем zip_source рядом с именем файла 2026-06-26 10:08:56 +04:00
naeel 2764ab1cb5 v1.0.178: группировка по ZIP в renderFiles — заголовок-секция 📦 + отступ 24px для вложенных файлов 2026-06-26 09:53:07 +04:00
naeel 4e59c83699 v1.0.178: zip_source — БД, Python, JS. Дедупликация по паре (zip_source, name). addZipFile передаёт имя архива. 2026-06-26 09:48:18 +04:00
naeel 08779c3938 v1.0.178: P0 — улучшены промпты classify и diff. Classify: блок НУБЕС=Исполнитель, parent_number=null для contract, примеры doc_type=other, 3 few-shot примера. Diff: UNRESOLVED вместо ADD при сомнении. 2026-06-26 09:44:31 +04:00
naeel f143894e10 v1.0.178: fix async classify polling — frontend ждёт done>=total через batch-progress, fix путь логов 2026-06-25 14:41:41 +04:00
naeel 4e9dd94433 v1.0.178: логи + lock-файл + guard от двойного classify. Ответ Опуса: минимум сейчас. 2026-06-25 13:29:06 +04:00
naeel aa1b801e94 v1.0.178: classify → subprocess.Popen (classify_worker.py). Изолированный процесс — свои коннекты к БД. HTTP-сервер продолжает отвечать. 2026-06-25 13:14:39 +04:00
naeel 88039fb750 v1.0.178: classify-batch → async (202 Accepted + background thread). При 69 файлах БД задыхается. 2026-06-25 12:18:20 +04:00
naeel 9a19b10708 v1.0.178: fix zipIdx → zipEntry (ссылка на объект). ZIP temp entry держится до конца обработки. 2026-06-25 10:36:23 +04:00
naeel 91f22137d7 v1.0.178: fix — onFilesSelected больше не удаляет существущие файлы. reconcileSelection убрана из оркестратора. Файлы из ZIP/предыдущих загрузок сохраняются при добавлении новых. 2026-06-25 10:33:36 +04:00
naeel 60dd40cf05 v1.0.178: унификация ZIP. addZipFile → base64→File→addRegularFile (единый путь). confirm() при дубликате. unzip.py — только распаковка, без БД. 2026-06-25 10:16:06 +04:00
naeel b013c79190 v1.0.178: fix unzip — xhr.send(file) → FormData. Бэкенд ждёт multipart (ищет \r\n\r\n + PK magic), а не сырой файл. 2026-06-25 10:08:16 +04:00
naeel 9b129c3707 v1.0.178: fix двойной проверки дубликатов в addZipFile + console.error для диагностики unzip 2026-06-25 10:06:51 +04:00
naeel 0f6f102664 v1.0.178: addZipFile — дубликаты из ZIP теперь перезаписываются (как addRegularFile). Унифицировано поведение: файл из архива заменяет существующий с тем же именем. 2026-06-25 09:50:06 +04:00
naeel b25c58ae29 v1.0.178: расширенные тесты (131 шт) + чистка app.js. 53 новых теста: краевые случаи statusToHTML, applyParseResult, reconcileSelection, renderGroupCard(*), applyCompareEvent, renderCompareOpsTable, escHtml. Убран неиспользуемый SITE_URL, дубль UNZIP_URL, дубль promptEditor. 2026-06-25 09:42:38 +04:00
naeel 9c08af6a1d v1.0.178: убрал неиспользуемую llmStart после Фазы 3 2026-06-25 09:36:34 +04:00
naeel 691549223f v1.0.178: тесты чистых функций. 78 тестов: statusToHTML, applyParseResult, reconcileSelection, renderGroupCard(*), applyCompareEvent, renderCompareSectionHeader/Body, renderCompareOpsTable. Все PASS. 2026-06-25 09:28:15 +04:00
naeel 7e76224203 v1.0.178: Фаза 4 — renderStepper(state). Степпер через state.ui.steps вместо прямой манипуляции DOM. stepDone/stepActive/resetStepper мутируют state → renderStepper. 2026-06-25 09:25:15 +04:00
naeel c9d55b3d80 v1.0.178: Фаза 3 — compare.js. applyCompareEvent, startCompareSSE, renderCompareOpsTable. ~160 строк дублирования SSE → ~60 строк общих + 2 тонких вызова в runCompareForGroup и llmBtn. 2026-06-25 09:24:26 +04:00
naeel e7917c8af5 v1.0.178: Фаза 2 — groups.js. loadGroupsAction + renderGroups + renderGroupCard + renderGroupCardDone. markGroupDone удалена, готовность = group.compare.status === 'done'. renderGroups пересобирает ВСЕ карточки из state.groups. 2026-06-25 09:15:54 +04:00
naeel ba9a833ce8 v1.0.178: Фаза 1.4 — разбит fileInput handler. Чистые функции: reconcileSelection, applyParseResult. Async-actions: addZipFile, addRegularFile. Оркестратор: onFilesSelected (15 строк). finalizeUpload. app.js fileInput listener: 4 строки. 2026-06-25 08:59:17 +04:00
naeel 67658d0ef1 v1.0.178: Фаза 1.3 — вынос в files.js. statusToHTML, renderFiles, syncDB, toggleClassifyDetail, uploadFile, refreshSupps → files.js. app.js похудел на ~200 строк. index.cfm грузит files.js. 2026-06-25 08:57:22 +04:00
naeel 3200ce749b v1.0.178: Фаза 1.2 — renderTable → renderFiles(state). render(state) теперь вызывает renderFiles(state). Имя отражает ответственность — рендерит ТОЛЬКО таблицу файлов. 2026-06-25 08:54:58 +04:00
naeel 9dd1afd832 v1.0.178: Фаза 1.1 — statusToHTML. Статусы из HTML-строк в структуры {kind,pct,text,count,elapsed}. Чистая функция statusToHTML(st). renderTable использует statusToHTML(f.status). 2026-06-25 08:54:39 +04:00
naeel 7490568b4b v1.0.178: Фаза 0 — state + render(state). Введён state.js (центральное состояние), render(state) вызывает renderTable(). fileQueue/contractId/batchId/_activeCompare → state.*. app_utils.js адаптирован. Подробные комментарии из decoupling-final-plan.md. 2026-06-25 08:44:52 +04:00
naeel b994da8c4c v1.0.177: inline onclick на diff-section-header — переживает markGroupDone 2026-06-24 20:25:07 +04:00
naeel 6806ee5027 v1.0.177: клик на файл сам переключает diff-section-body (addEventListener теряется) 2026-06-24 20:19:21 +04:00
naeel 332fad2e1a v1.0.177: клик на имя файла в обработанной группе — раскрыть/свернуть результаты 2026-06-24 20:18:29 +04:00
naeel 84898e10d6 v1.0.177: необработанная — только кнопка; обработанная — только раскрытие 2026-06-24 20:08:09 +04:00
naeel 38ade38573 v1.0.177: markGroupDone сохраняет HTML результатов — раскрытие работает 2026-06-24 20:05:02 +04:00
naeel 5955c03677 v1.0.177: buildGroupCard + markGroupDone — разная вёрстка для необработанных и готовых 2026-06-24 20:02:46 +04:00
naeel 08220fa4b9 v1.0.177: группы независимы — изменения в одной не касаются других 2026-06-24 20:01:14 +04:00
naeel fa06c758f4 v1.0.177: Готово НЕ сбрасывается при сравнении другой группы 2026-06-24 19:57:55 +04:00
naeel 0562c16897 v1.0.177: блокировка ВСЕХ кнопок сравнения пока идёт процесс 2026-06-24 19:52:23 +04:00
naeel 7f6d912010 v1.0.177: Готово → span, не кнопка — нельзя перезапустить сравнение 2026-06-24 19:47:34 +04:00
naeel 7a780e457e v1.0.177: Готово — disabled + data-done, клик не перезапускает 2026-06-24 19:37:58 +04:00
naeel 498bee90d8 v1.0.177: сравнение внутри карточки группы, только одно одновременно 2026-06-24 19:34:00 +04:00
naeel 2a566869aa v1.0.176: classify_input + elements_json в промежуточных результатах 2026-06-24 19:23:34 +04:00
naeel 3974a032a5 v1.0.176: раскрывающиеся результаты классификации прямо в таблице 2026-06-24 18:42:47 +04:00
naeel 3f58f6adcd v1.0.176: FOR UPDATE fix — ORDER BY LIMIT 1 вместо MAX() 2026-06-24 18:37:48 +04:00
naeel d44f8f3e6c v1.0.176: fix self.path → urlparse for ?v= cache bust 2026-06-24 18:27:17 +04:00
naeel 0b27832292 v1.0.176: X-Content-Type-Options nosniff for ORB fix 2026-06-24 18:23:19 +04:00
naeel b26728d9da v1.0.176: remove verify=False — MITM fix 2026-06-24 18:07:44 +04:00
naeel a36c8fa2bf v1.0.176: prompts — seed per-role + _serialize non-mutating 2026-06-24 18:07:02 +04:00
naeel 0e0939bb32 v1.0.176: spec_events — FOR UPDATE + transaction for seq race 2026-06-24 18:06:05 +04:00
naeel cd5ba7470e v1.0.176: spec_current cascade fix + keep_ids DoS limit 2026-06-24 18:04:59 +04:00
naeel 044a83a43d v1.0.176: grouping.py — apply_groups error handling + doc_id null check 2026-06-24 18:04:05 +04:00
naeel 780e52d072 v1.0.176: XSS ×5 fix + syncDB await + escHtml(null) 2026-06-24 18:03:12 +04:00
naeel 666f85b743 v1.0.176: upload.py — path traversal + size limit + UUID + data loss 2026-06-24 18:01:18 +04:00
naeel 60dc41e83f v1.0.175: общее сравнение → compareCard, diffBody только для групп 2026-06-24 17:42:31 +04:00