• v1.12 a81947b852

    v1.12 Stable

    mchus released this 2026-06-03 13:46:24 +03:00 | 2 commits to main since this release

    фикс режиме работы кнопки скопировать когфин

    Downloads
  • v1.10 5d5af07fc5

    v1.10 Stable

    mchus released this 2026-06-02 14:06:18 +03:00 | 6 commits to main since this release

    QuoteForge v1.10

    Дата релиза: 2026-06-02
    Тег: v1.10

    Что нового

    Новые возможности

    • Support Bundle — кнопка-иконка в шапке рядом с именем пользователя скачивает ZIP-архив с диагностикой: версия приложения, статистика локальной БД, статус подключения с TCP-пингом до сервера, история синхронизаций (sync_log), список скачанных прайслистов, системные метрики (память, диск), состояние readiness-блокировки и лог-файл приложения.
    • Автосинхронизация компонентов — при первом запуске с пустой таблицей компонентов фоновый воркер автоматически скачивает каталог из MariaDB. Новые пользователи сразу видят все вкладки и автокомплит артикулов без ручной синхронизации.
    • Импорт собственного CSV QuoteForge — файлы, экспортированные из QuoteForge, можно импортировать обратно в конфигурацию.
    • Кнопка «Обновить цены» на странице варианта проекта — обновление цен доступно прямо со страницы проекта.
    • Импорт BOM Inspur в формате PN×qty — поддержка формата артикул × количество при импорте Inspur-спецификаций.

    Исправления

    • «Не докачано» исчезает когда всё на месте — исправлена логика NeedSync: при наличии подключения всегда сравниваем реальные версии с сервером, не ориентируясь на давность последнего синка. Устраняет ситуацию когда бейдж висел вечно после сетевого сбоя, хотя все прайслисты уже были скачаны.
    • Синхронизация прайслистов через медленное соединение — увеличен WriteTimeout с 30 с до 10 мин. При высокой задержке до сервера (VPN, >300 мс) кнопка «Синхронизировать» больше не зависает без обратной связи.
    • ALTER-спам в логах — устранены повторяющиеся WARN ALTER command denied каждые 5 минут. DDL на qt_client_schema_state выполняется не более одного раза за жизнь процесса и только если колонки реально отсутствуют.
    • Галочка «Создать копию» включена по умолчанию в обоих диалогах клонирования.
    • Сортировка категорий в CSV-экспорте — исправлена сортировка без учёта регистра и правильный порядок (MB → CPU → MEM → RAID → диски → GPU → NIC → HBA → PSU → ACC).
    • /api/categories возвращал display_order: 0 для всех категорий — исправлено.

    Запуск на macOS

    Снимите карантинный атрибут через терминал: xattr -d com.apple.quarantine /path/to/qfs-darwin-arm64
    После этого бинарник запустится без предупреждения Gatekeeper.

    Downloads
  • v1.9 55acbe138b

    mchus released this 2026-05-19 12:37:47 +03:00 | 21 commits to main since this release

    • Вынести sortConfigsByLine() — устранить дублирование sort.Slice
      в ProjectToExportData и ProjectToPricingExportData
    • Добавить ConfigToPricingExportData() и ExportConfigPricingCSV handler
    • Зарегистрировать POST /api/configs/:uuid/export/pricing
    • Заменить клиентский DOM-скрапинг exportPricingCSV() на fetch к новому
      endpoint; артикул теперь включается через pricingConfigSummaryRow
    Downloads
  • v1.8 8b5e04168a

    release: v1.8 Stable

    mchus released this 2026-04-28 16:56:45 +03:00 | 24 commits to main since this release

    QuoteForge v1.8

    Дата релиза: 2026-04-28
    Тег: v1.8

    Ключевые изменения

    • исправлен sync прайслистов при конфликте local_pricelists.server_id: сохранение локального снапшота стало idempotent через upsert;
    • сохранение нового локального снапшота прайслиста теперь атомарно заменяет строки внутри одной транзакции;
    • sync обновляет метаданные уже существующих локальных прайслистов;
    • устаревшие sync/export тесты приведены к актуальному контракту, go test ./... проходит полностью.
    Downloads
  • v1.6.2 83a3202bdf

    v1.6.2 Stable

    mchus released this 2026-04-16 09:28:33 +03:00 | 28 commits to main since this release

    Что изменено:

    • на вкладке Storage в режиме сервера возвращена секция RAID Контроллеры
    • в режиме СХД RAID по-прежнему скрыт
    Downloads
  • mchus released this 2026-04-09 15:08:47 +03:00 | 32 commits to main since this release

    Ampere, Hopper, Blackwell now produce AMP/HOP/BWL suffixes (like ADA)
    so RTX cards across generations are distinguishable: RTX6000ADA vs
    RTX6000BWL. LOVELACE remains a skip token as it duplicates ADA info.

    Downloads
  • v1.5.9 7f6be786a8

    mchus released this 2026-04-03 17:55:26 +03:00 | 35 commits to main since this release

    • Add FOB/DDP basis to export options; DDP multiplies all prices ×1.3
    • Rename export file from "pricing" to "{FOB|DDP} {variant}" (e.g. "FOB v1")
    • Fix server article missing from CSV summary row (PN вендора column)
    • Skip per-row breakdown when neither LOT nor BOM is selected
    • Remove empty separator rows between configurations
    • Redesign export modal: split into Артикул / Цены / Базис поставки sections
    Downloads
  • v1.5.8 a360992a01

    v1.5.8 Stable

    mchus released this 2026-04-02 10:53:36 +03:00 | 36 commits to main since this release

    • Set PRAGMA journal_mode=WAL + synchronous=NORMAL on SQLite open;
      eliminates read blocking during background pricelist sync writes
    • Replace N+1 per-lot price loop in QuoteService local fallback with
      GetLocalPricesForLots batch query (120 queries → 3 per price-levels call)
    • Add CountAllPricelistItems, CountComponents, DBFileSizeBytes to LocalDB
    • Report local_pricelist_count, pricelist_items_count, components_count,
      db_size_bytes in qt_client_schema_state for performance diagnostics
    Downloads
  • v1.5.7 7ae804d2d3

    mchus released this 2026-03-30 12:34:57 +03:00 | 38 commits to main since this release

    SyncPricelistsIfNeeded was called synchronously in Create(), blocking
    the HTTP response for several seconds while pricelist data was fetched.
    Users clicking multiple times caused 6+ duplicate configurations.

    • Run SyncPricelistsIfNeeded in a goroutine so Create() returns immediately
    • Add TryLock mutex to SyncPricelistsIfNeeded to skip concurrent calls
    Downloads
  • v1.5.4 579ff46a7f

    mchus released this 2026-03-16 08:33:53 +03:00 | 52 commits to main since this release

    Дата релиза: 2026-03-16
    Тег: v1.5.4

    Предыдущий релиз: v1.5.0

    Ключевые изменения

    • pricing tab переработан: закупка и продажа разделены на отдельные таблицы с ценами за 1 шт.;
    • экран прайслиста переработан под разные типы источников; удалены misleading-колонки Поставщик и partnumbers;
    • runtime и startup ужесточены: локальный клиент принудительно работает только на loopback, конфиг автоматически нормализуется;
    • добавлены действия с вариантом и унифицированы правила именования _копия для вариантов и конфигураций;
    • исправлен CSV-экспорт прайсинговых таблиц в конфигураторе под Excel-совместимый формат Excel-friendly;
    • таблица проектов переработана: дата последней правки, tooltip с деталями, отдельный автор, компактные действия и ссылка на трекер;
    • sync больше не подменяет updated_at проектов временем синхронизации;
    • добавлена одноразовая утилита cmd/migrate_project_updated_at для пересинхронизации updated_at проектов из MariaDB в локальную SQLite;
    • runtime config, release notes и bible-local/ очищены и приведены к актуальной архитектуре;
    • scripts/release.sh больше не затирает существующий RELEASE_NOTES.md.

    Summary

    UI и UX

    • вкладка ценообразования теперь разделена на отдельные таблицы закупки и продажи;
    • список проектов переработан: новая колонка даты, отдельный автор, tooltip с деталями, компактные действия, ссылка на трекер;
    • для вариантов добавлены действия переименования, переноса и копирования;
    • копии вариантов и конфигураций теперь именуются единообразно: _копия, _копия2, _копия3.

    Прайслисты и экспорт

    • экран прайслиста переработан под разные типы источников;
    • из прайслистов убраны misleading-колонки Поставщик и partnumbers;
    • CSV-экспорт прайсинговых таблиц в конфигураторе приведён к Excel-совместимому формату.

    Runtime и sync

    • локальный runtime нормализует server.host к 127.0.0.1 и переписывает некорректный runtime config;
    • sync перестал подменять updated_at проектов временем локальной синхронизации;
    • добавлена утилита cmd/migrate_project_updated_at для восстановления локальных дат проектов с сервера.

    Документация и release tooling

    • bible-local/ сокращён до актуальных архитектурных контрактов;
    • release notes и release-структура приведены к одному формату;
    • scripts/release.sh теперь сохраняет существующий RELEASE_NOTES.md и не затирает его шаблоном.

    Затронутые области

    • cmd/qfs/;
    • cmd/migrate_project_updated_at/;
    • internal/localdb/;
    • internal/services/project.go;
    • internal/services/sync/service.go;
    • internal/handlers/pricelist.go;
    • web/templates/pricelist_detail.html;
    • web/templates/index.html;
    • web/templates/project_detail.html;
    • web/templates/projects.html;
    • web/templates/configs.html;
    • bible-local/.

    Совместимость

    • схема данных не меняется;
    • серверные SQL-миграции не требуются;
    • для уже испорченных локальных дат проектов можно один раз запустить go run ./cmd/migrate_project_updated_at -apply.
    Downloads