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
|
2a5f255c7b
|
v1.0.178: скролл таблицы файлов — max-height:50vh, overflow-y:auto
|
2026-06-25 11:14:53 +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
|
613a154c2b
|
v1.0.178: ZIP в диалоге выбора + предупреждение о перезаписи. accept=.zip, ⚠ под input, инфо в «О сервисе».
|
2026-06-25 09:51:30 +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
|
a58df099b6
|
trigger Lucee redeploy v1.0.177
|
2026-06-24 19:40:09 +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
|
c223fc04c0
|
v1.0.177: О сервисе — полная инструкция с промежуточными результатами
|
2026-06-24 19:30:50 +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
|
8953af0c19
|
v1.0.176: version bump + cache bust
|
2026-06-24 18:08:35 +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 |
|
naeel
|
8267149190
|
v1.0.175: cache busting ?v=1.0.175 на скрипты
|
2026-06-24 17:40:36 +04:00 |
|
naeel
|
f205f0f547
|
v1.0.175: compareCard отдельно от diffCard — группы не исчезают при сравнении
|
2026-06-24 17:39:19 +04:00 |
|
naeel
|
475d0b8dc7
|
v1.0.175: виртуальные группы + classify_raw + stepper
|
2026-06-24 17:06:25 +04:00 |
|
naeel
|
b5d35f57fc
|
v1.0.174: reset/list_pending без фильтра status=parsed
|
2026-06-24 15:21:17 +04:00 |
|
naeel
|
e939c320cc
|
v1.0.174: classify_batch сбрасывает статус на pending — работает после удаления файлов
|
2026-06-24 15:17:45 +04:00 |
|
naeel
|
592041ab89
|
v1.0.174: 'файлов не распознано' вместо 'не распознано'
|
2026-06-24 15:13:32 +04:00 |
|
naeel
|
70a7c8bfb4
|
v1.0.174: /api/sync — БД = зеркало таблицы, удаление ВСЕГО кроме keep_ids
|
2026-06-24 15:11:57 +04:00 |
|
naeel
|
b19e6ba06e
|
v1.0.174: fix groups count — не считаем __unresolved__ за группу
|
2026-06-24 15:03:17 +04:00 |
|
naeel
|
b325a6b2c2
|
v1.0.174: sync-batch — удаление мусора после загрузки, DELETE /api/documents/<id>
|
2026-06-24 14:59:46 +04:00 |
|
naeel
|
7538c0a5c9
|
v1.0.174: fix FK cascade in delete_by_document — spec_current → spec_events → supplement → document
|
2026-06-24 14:50:31 +04:00 |
|
naeel
|
ef4536a437
|
v1.0.174: classify tab in prompts UI — activePromptId + openPromptModal
|
2026-06-24 14:43:22 +04:00 |
|
naeel
|
cf4fc016bd
|
v1.0.174: fix \n → real newlines в seed-промптах (parameterized queries)
|
2026-06-24 14:40:38 +04:00 |
|
naeel
|
f693acce6f
|
v1.0.174: пояснения 'для чего' к кнопкам промптов
|
2026-06-24 14:33:58 +04:00 |
|
naeel
|
c98f190cbc
|
v1.0.173: О сервисе в топбар, новый контент — инструкция без упоминания Lucee/VM
|
2026-06-24 14:32:36 +04:00 |
|
naeel
|
9cc6e43868
|
v1.0.172: вкладка classify в редакторе промптов
|
2026-06-24 14:29:36 +04:00 |
|
naeel
|
b49523677c
|
v1.0.171: detailed SSE results for group compare
|
2026-06-24 14:07:31 +04:00 |
|
naeel
|
cbdfc7a8c1
|
v1.0.171: ▶ Сравнить группу via SSE + classify timer/progress
|
2026-06-24 13:55:22 +04:00 |
|
naeel
|
e0cff8d85f
|
v1.0.170: green dot instead of checkmark for active prompt
|
2026-06-24 13:49:43 +04:00 |
|
naeel
|
7cbfdc9589
|
v1.0.170: show prompt notes in history
|
2026-06-24 13:47:23 +04:00 |
|
naeel
|
6f2c0fd910
|
v1.0.170: simple text buttons — активировать / удалить
|
2026-06-24 13:45:20 +04:00 |
|
naeel
|
c21a50cd14
|
v1.0.170: clear activate/delete buttons with lucide icons
|
2026-06-24 13:43:37 +04:00 |
|
naeel
|
15bd4ad322
|
v1.0.170: fix prompts list — datetime serialization
|
2026-06-24 13:32:13 +04:00 |
|
naeel
|
e2348eaf4e
|
v1.0.170: remove fake drag-drop text
|
2026-06-24 13:28:02 +04:00 |
|
naeel
|
1aa22767ef
|
v1.0.170: допник → допсоглашение
|
2026-06-24 13:19:08 +04:00 |
|
naeel
|
d848caacb2
|
v1.0.170: UI — Общее сравнение, Классификация и группы, пояснения для нераспознанных
|
2026-06-24 13:17:50 +04:00 |
|
naeel
|
abba9c4f1d
|
v1.0.169: prompts CRUD via VM API — /api/prompts, no more prompt.cfm dependency
|
2026-06-24 10:27:59 +04:00 |
|
naeel
|
dd558e00e7
|
v1.0.168: detailed О сервисе — architecture, pipeline, Event Sourcing, security
|
2026-06-24 10:22:41 +04:00 |
|
naeel
|
115e71b2a1
|
v1.0.167: fix grouping dead code (classified→docs) + max_tokens 500→1000
|
2026-06-24 09:35:42 +04:00 |
|
naeel
|
49c472b46d
|
v1.0.166: aggressive JSON repair — close unterminated strings/braces
|
2026-06-24 09:14:07 +04:00 |
|
naeel
|
d0326ee9ce
|
v1.0.166: fix missing _smart_extract function
|
2026-06-24 09:09:26 +04:00 |
|
naeel
|
c2c92d0a37
|
v1.0.166: classify prompt v2 (LLM-suggested) + safe JSON parse with auto-repair
|
2026-06-24 09:04:31 +04:00 |
|
naeel
|
fe1f76fa1d
|
v1.0.165: app_utils.js + detailed comments (Opus analysis) in classify/grouping/connection
|
2026-06-24 08:46:40 +04:00 |
|
naeel
|
d86a369d2b
|
v1.0.164: remove ↕ column — auto-classify determines order
|
2026-06-24 08:41:15 +04:00 |
|
naeel
|
8a5d93a5c7
|
v1.0.163: classify UI — batch_id, Классифицировать button, group cards
|
2026-06-24 08:27:29 +04:00 |
|
naeel
|
eb98790802
|
v1.0.162: /api/classify-batch + batch_id UUID validation
|
2026-06-24 08:23:40 +04:00 |
|
naeel
|
7a96f5b95b
|
v1.0.162: auto-classify backend — classify/grouping services, 7 new columns, /classify-batch, /api/groups, /apply-groups
|
2026-06-24 08:22:21 +04:00 |
|
naeel
|
740f75a791
|
v1.0.161: cgi.FieldStorage for UTF-8 filenames
|
2026-06-23 21:09:27 +04:00 |
|
naeel
|
e4cbc59f7e
|
v1.0.161: LLM_KEY fallback to LLM_API_KEY
|
2026-06-23 21:02:33 +04:00 |
|
naeel
|
c74be9782a
|
v1.0.161: nginx /api/ → Python :8766
|
2026-06-23 18:58:08 +04:00 |
|
naeel
|
15ea2325da
|
v1.0.161: fix app.js — remove HTML tags, parseInfo lowercase keys
|
2026-06-23 18:01:46 +04:00 |
|
naeel
|
ca01247fc0
|
v1.0.160: bump version
|
2026-06-23 17:49:40 +04:00 |
|
naeel
|
493d75e51a
|
v1.0.159: /static/app.js (nginx location / matches)
|
2026-06-23 17:30:25 +04:00 |
|
naeel
|
4b0e5c04de
|
v1.0.159: fix app.js path
|
2026-06-23 17:23:26 +04:00 |
|
naeel
|
9b23148c16
|
v1.0.159: SO_REUSEADDR + app.js via Python
|
2026-06-23 17:17:58 +04:00 |
|
naeel
|
79b6554316
|
v1.0.159: serve app.js via Python (nginx alias not working)
|
2026-06-23 17:16:23 +04:00 |
|
naeel
|
04ca79a489
|
v1.0.159: JS extracted to app.js on VM — Lucee is now HTML shell only (191 lines)
|
2026-06-23 17:15:03 +04:00 |
|
naeel
|
a788e9e23d
|
v1.0.158: fix r.OK→r.ok (Python lowercase) + add /convert-doc endpoint
|
2026-06-23 17:00:49 +04:00 |
|
naeel
|
ddc0a8b42d
|
v1.0.157: VM API /api/supplements + /api/documents — index.cfm no longer calls Lucee api.cfm
|
2026-06-23 16:40:19 +04:00 |
|