• v1.5.8 a360992a01

    v1.5.8 Stable

    mchus released this 2026-04-02 10:53:36 +03:00 | 0 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 | 2 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 | 16 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
  • v1.5.0 06397a6bd1

    v1.5.0 Pre-Release

    mchus released this 2026-03-07 23:18:07 +03:00 | 26 commits to main since this release

    Что нового?

    • Добавлен импорт vendor workspace и связанный workflow обработки vendor spec.
      • Добавлен экспорт pricing/конфигураций в новом сервисном контуре.
      • Починена работа price levels в offline/local-first режиме.
      • Приложение переведено на более жёсткий local-first runtime: обычная работа больше не зависит от прямых запросов в MariaDB вне sync.
      • Удалены auth/RBAC и связанный мёртвый код для старой server-style модели.
      • Усилен startup recovery локальной SQLite: битые read-only кэши теперь могут автоматически quarantine/reset, чтобы приложение запускалось.
      • Переработан локальный каталог partnumber books и логика enrichment прайслистов через локальную копию qt_partnumber_book_items.
      • Полностью выпилен legacy-механизм lot_partnumbers.
      • Убрана неиспользуемая server-driven схема client local migrations.
      • Исправлен генератор article для кейса с 1xINTEL в GPU-сегменте.

    Как работает импорт xml

    В проекте добавлена новая кнопка "Импорт выгрузки вендора"
    image.png
    В данной версии поддерживаются только xml файлы конфигуратора lenovo - dcsc.
    Загружаются файлы-по одному.
    image.png
    После импорта распознанные аппаратные позиции добавляются в проект с соблюдением колличества и названия из конфигуратора
    image.png

    Распознавание спеки вендора

    Этот функционал релизнут в версии v1.4 но допилен тут. В разделе конфигуратора добавились вкладки
    image.png
    На вкладке BOM вставляется спека вендора из буфера обмена, либо если использовали импорт xml - она уже добавлена автоматически.
    image.png
    p/n для которых есть сопоставления в базе размечаются автоматически.

    Если работу начали со вставки BOM то внизу таблицы есть кнопка "пересчитать эстимейт" которая заменяет содержимое калькулятора распознанными LOT:

    Downloads
  • v1.4 ed0ef04d10

    mchus released this 2026-03-04 12:35:40 +03:00 | 34 commits to main since this release

    Импорт вендорной спецификации (BOM)

    • Полный цикл импорта BOM из вставки вендорного текста: разбор, привязка PN→LOT, автодополнение LOT.
    • Страница Партномера — сводная таблица всех встреченных партномеров с привязками к LOT.
    • Канонический механизм lot_mappings: изменения всегда сохраняются через единую точку записи.
    • При импорте конфигурации проекта локальная вендорная спецификация больше не затирается.

    Ценообразование

    • Переименование: «цена поставщика» → «цена проекта» во всём интерфейсе и экспорте.
    • Расширен CSV-экспорт прайсинга: добавлены дополнительные поля стоимости.
    • Исправлены итоговые суммы по складу на вкладке прайсинга.

    Таблица проектов

    • Компактный макет: столбцы дат и названий сжаты для отображения большего числа строк.
    • Исправлена нумерация строк при создании нового проекта.

    BOM — UX

    • Упрощена вставка BOM: фиксированный позиционный порядок столбцов.
    • Добавлена кнопка «Очистить BOM» со сбросом на стороне сервера.
    • Подсказка по формату рядом с полем вставки вендорного BOM.

    Исправления

    • Прайслисты: корректная работа при ограниченных правах БД; активы из встроенных ресурсов.
    • Синхронизация: дополнение недостающих позиций для уже существующих локальных прайслистов.
    • Миграции БД: новые SQLite-таблицы создаются через AutoMigrate вместо хардкодных миграций.
    • BOM: сохранение локальной вендорной спецификации при импорте конфига.

    Запуск на macOS

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

    Downloads
  • v1.3.5 7b371add10

    v1.3.5 Pre-Release

    mchus released this 2026-02-24 15:13:41 +03:00 | 57 commits to main since this release

    Синхронизация прайслистов теперь догружает позиции для уже существующих локально прайслистов, если локальный кэш позиций пуст.
    Исправлен кейс 0 позиций в прайслисте при частично заполненном локальном кэше (local_pricelists есть, local_pricelist_items пусты).
    Добавлен graceful fallback при ограниченных правах MariaDB:
    если нет SELECT на lot_partnumbers и/или stock_log, синк прайслиста больше не падает;
    позиции и цены сохраняются без enrichment (могут отсутствовать остатки и partnumbers).
    Убран fallback на файловые templates/static рядом с бинарником:
    приложение всегда использует embedded-ресурсы из бинарника.
    Актуализирована документация по правам MariaDB (03-database.md):
    добавлены обязательные SELECT на lot_partnumbers и stock_log для полноценной синхронизации прайслистов.

    Downloads
  • v1.3.4 8d7fab39b4

    mchus released this 2026-02-24 15:09:12 +03:00 | 59 commits to main since this release

    Исправлен кейс, когда в списке прайслистов отображалось 0 позиций при наличии локальных “шапок” прайслистов.
    Теперь при синхронизации приложение догружает позиции для уже существующих локально прайслистов, если local_pricelist_items пусты.
    Добавлен graceful fallback при ограниченных правах MariaDB.
    Если у пользователя нет SELECT на RFQ_LOG.lot_partnumbers и/или RFQ_LOG.stock_log, синхронизация позиций прайслиста больше не падает.
    Позиции и цены прайслиста сохраняются без enrichment (могут отсутствовать partnumbers и остатки available_qty).
    Убран fallback на файловые web/templates и web/static рядом с бинарником.
    Приложение теперь всегда использует embedded-ресурсы из бинарника.
    Это делает поставку более предсказуемой на клиентских машинах.
    Обновлена документация по правам MariaDB (03-database.md).
    Добавлены обязательные SELECT-права на lot_partnumbers и stock_log для полноценной синхронизации прайслистов.
    Рекомендации после обновления

    Обновить клиент до v1.3.4.
    Нажать Синхронизация.

    Downloads
  • v1.3.2 cc9b846c31

    Release v1.3.2 Pre-Release

    mchus released this 2026-02-19 18:48:01 +03:00 | 65 commits to main since this release

    Summary

    Release focuses on stability and data integrity for local configurations. Added configuration revision history, stronger recovery for broken local sync/version states, improved sync self-healing, and clearer API error logging.

    Changes

    Configuration Revisions

    • Added full local configuration revision flow with storage and UI support.
    • Introduced revisions page/template and backend plumbing for browsing revisions.
    • Prevented duplicate revisions when content did not actually change.

    Local Data Integrity and Recovery

    • Added migration and snapshot support for local configuration version data.
    • Hardened updates for legacy/orphaned configuration rows:
      • allow update when project UUID is unchanged even if referenced project is missing locally;
      • recover gracefully when current_version_id is stale or version rows are missing.
    • Added regression tests for orphan-project and missing-current-version scenarios.

    Sync Reliability

    • Added smart self-healing path for sync errors.
    • Fixed duplicate-project sync edge cases.

    API and Logging

    • Improved HTTP error mapping for configuration updates (404/403 instead of generic 500 in known cases).
    • Enhanced request logger to capture error responses (status, response body snippet, gin errors) for failed requests.

    UI and Export

    • Updated project detail and index templates for revisions and related UX improvements.
    • Updated export pipeline and tests to align with revisions/project behavior changes.

    Breaking Changes

    None identified.

    Downloads
  • v1.3.1 9b5d57902d

    Changes since v1.3.0: Pre-Release

    mchus released this 2026-02-13 19:33:16 +03:00 | 73 commits to main since this release

    Release Notes — v1.3.1

    Что нового

    1. Проекты: добавлены code и variant (уникальность по связке), name стал необязательным.
    2. UI проектов: обновлена таблица, кликабельные коды/варианты, новый вариант через кнопку.
    3. Breadcrumbs: единый стиль, кликабельные переходы и домик “все проекты”.
    4. Квотатор: навигация по проектам/вариантам через breadcrumbs.

    Миграции и совместимость

    1. Добавлены миграции для code, variant и nullable name в MariaDB и SQLite.
    2. Перезагрузка локальной БД теперь не сбрасывает параметры подключения.
    3. Дедупликация проектов по code в интерфейсе и улучшенная синхронизация вариантов.

    Исправления и улучшения

    1. Корректная обработка NULL name в UI и API.
    2. Стабильное формирование кодов/вариантов и уникальность на уровне БД.
    3. Улучшенные элементы интерфейса (варианты в виде чипов, клики по ним).
    Downloads
  • v1.3.0 e58fd35ee4

    mchus released this 2026-02-11 19:24:25 +03:00 | 79 commits to main since this release

    Summary

    Introduced article generation with pricelist categories, added local configuration storage, and expanded sync/export capabilities. Simplified article generator compression and loosened project update constraints.

    Changes

    Main Features: Articles + Pricelist Categories

    • Article generation pipeline
      • New generator and tests under internal/article/
      • Category support with test coverage
    • Pricelist category integration
      • Handler and repository updates
      • Sync backfill test for category propagation

    Local Configuration Storage

    • Local DB support
      • New localdb models, converters, snapshots, and migrations
      • Local configuration service for cached configurations

    Export & UI

    • Export handler updates for article data output
    • Configs and index templates adjusted for new article-related fields

    Behavior Changes

    • Cross-user project updates allowed
      • Removed restriction in project service
    • Article compression refinement
      • Generator logic simplified to reduce complexity

    Breaking Changes

    None identified. Existing APIs remain intact.

    Files Modified

    1. internal/article/* - Article generator + categories + tests
    2. internal/localdb/* - Local DB models, migrations, snapshots
    3. internal/handlers/export.go - Export updates
    4. internal/handlers/pricelist.go - Category handling
    5. internal/services/sync/service.go - Category backfill logic
    6. web/templates/configs.html - Article field updates
    7. web/templates/index.html - Article field updates

    Stats: 33 files changed, 2059 insertions(+), 329 deletions(-)

    Commits

    • 5edffe8 - Add article generation and pricelist categories
    • e355903 - Allow cross-user project updates
    • e58fd35 - Refine article compression and simplify generator

    Testing Checklist

    • Tests not run (not requested)

    Migration Notes

    • New migrations:
      • 022_add_article_to_configurations.sql
      • 023_add_server_model_to_configurations.sql
      • 024_add_support_code_to_configurations.sql
      • Ensure migrations are applied before running v1.3.0
    Downloads