-
Release v1.3.2 Pre-Release
released this
2026-02-19 18:48:01 +03:00 | 199 commits to main since this releaseSummary
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_idis 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/403instead of generic500in 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
-
Changes since v1.3.0: Pre-Release
released this
2026-02-13 19:33:16 +03:00 | 207 commits to main since this releaseRelease Notes — v1.3.1
Что нового
- Проекты: добавлены
codeиvariant(уникальность по связке),nameстал необязательным. - UI проектов: обновлена таблица, кликабельные коды/варианты, новый вариант через кнопку.
- Breadcrumbs: единый стиль, кликабельные переходы и домик “все проекты”.
- Квотатор: навигация по проектам/вариантам через breadcrumbs.
Миграции и совместимость
- Добавлены миграции для
code,variantиnullable nameв MariaDB и SQLite. - Перезагрузка локальной БД теперь не сбрасывает параметры подключения.
- Дедупликация проектов по
codeв интерфейсе и улучшенная синхронизация вариантов.
Исправления и улучшения
- Корректная обработка
NULL nameв UI и API. - Стабильное формирование кодов/вариантов и уникальность на уровне БД.
- Улучшенные элементы интерфейса (варианты в виде чипов, клики по ним).
Downloads
- Проекты: добавлены
-
Release v1.3.0 (2026-02-11) Pre-Release
released this
2026-02-11 19:24:25 +03:00 | 213 commits to main since this releaseSummary
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
- New generator and tests under
- 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
internal/article/*- Article generator + categories + testsinternal/localdb/*- Local DB models, migrations, snapshotsinternal/handlers/export.go- Export updatesinternal/handlers/pricelist.go- Category handlinginternal/services/sync/service.go- Category backfill logicweb/templates/configs.html- Article field updatesweb/templates/index.html- Article field updates
Stats: 33 files changed, 2059 insertions(+), 329 deletions(-)
Commits
5edffe8- Add article generation and pricelist categoriese355903- Allow cross-user project updatese58fd35- Refine article compression and simplify generator
Testing Checklist
- Tests not run (not requested)
Migration Notes
- New migrations:
022_add_article_to_configurations.sql023_add_server_model_to_configurations.sql024_add_support_code_to_configurations.sql- Ensure migrations are applied before running v1.3.0
Downloads
- Article generation pipeline
-
Release v1.2.3 (2026-02-10) Pre-Release
released this
2026-02-10 11:11:10 +03:00 | 216 commits to main since this releaseSummary
Unified synchronization functionality with event-driven UI updates. Resolved user confusion about duplicate sync buttons by implementing a single sync source with automatic page refreshes.
Changes
Main Feature: Sync Event System
- Added
sync-completedevent in base.html'ssyncAction()function- Dispatched after successful
/api/sync/allor/api/sync/push - Includes endpoint and response data in event detail
- Enables pages to react automatically to sync completion
- Dispatched after successful
Configs Page (
configs.html)- Removed "Импорт с сервера" button - duplicate functionality no longer needed
- Updated layout - changed from 2-column grid to single button layout
- Removed
importConfigsFromServer()function - functionality now handled by navbar sync - Added sync-completed event listener:
- Automatically reloads configurations list after sync
- Resets pagination to first page
- New configurations appear immediately without manual refresh
Projects Page (
projects.html)- Wrapped initialization in DOMContentLoaded:
- Moved
loadProjects()and all event listeners inside handler - Ensures DOM is fully loaded before accessing elements
- Moved
- Added sync-completed event listener:
- Automatically reloads projects list after sync
- New projects appear immediately without manual refresh
Pricelists Page (
pricelists.html)- Added sync-completed event listener to existing DOMContentLoaded:
- Automatically reloads pricelists when sync completes
- Maintains existing permissions and modal functionality
Benefits
User Experience
- ✅ Single "Синхронизация" button in navbar - no confusion about sync sources
- ✅ Automatic list updates after sync - no need for manual F5 refresh
- ✅ Consistent behavior across all pages (configs, projects, pricelists)
- ✅ Better feedback: toast notification + automatic UI refresh
Architecture
- ✅ Event-driven loose coupling between navbar and pages
- ✅ Easy to extend to other pages (just add event listener)
- ✅ No backend changes needed
- ✅ Production-ready
Breaking Changes
/api/configs/importendpoint still works but UI button removed- Users should use navbar "Синхронизация" button instead
- Backend API remains unchanged for backward compatibility
Files Modified
web/templates/base.html- Added sync-completed event dispatchweb/templates/configs.html- Event listener + removed duplicate UIweb/templates/projects.html- DOMContentLoaded wrapper + event listenerweb/templates/pricelists.html- Event listener for auto-refresh
Stats: 4 files changed, 59 insertions(+), 65 deletions(-)
Commits
99fd80b- feat: unify sync functionality with event-driven UI updates
Testing Checklist
- Configs page: New configurations appear after navbar sync
- Projects page: New projects appear after navbar sync
- Pricelists page: Pricelists refresh after navbar sync
- Both
/api/sync/alland/api/sync/pushtrigger updates - Toast notifications still show correctly
- Sync status indicator updates
- Error handling (423, network errors) still works
- Mode switching (Active/Archive) works correctly
- Backward compatibility maintained
Known Issues
None - implementation is production-ready
Migration Notes
No migration needed. Changes are frontend-only and backward compatible:
- Old
/api/configs/importendpoint still functional - No database schema changes
- No configuration changes needed
Downloads
- Added
-
Release v1.2.2 (2026-02-09) Pre-Release
released this
2026-02-09 17:38:50 +03:00 | 219 commits to main since this releaseSummary
Fixed CSV export filename inconsistency where project names weren't being resolved correctly. Standardized export format across both manual exports and project configuration exports to use
YYYY-MM-DD (project_name) config_name BOM.csv.Commits
8f596cefix: standardize CSV export filename format to use project name
Changes
CSV Export Filename Standardization
Problem:
- ExportCSV and ExportConfigCSV had inconsistent filename formats
- Project names sometimes fell back to config names when not explicitly provided
- Export timestamps didn't reflect actual price update time
Solution:
- Unified format:
YYYY-MM-DD (project_name) config_name BOM.csv - Both export paths now use PriceUpdatedAt if available, otherwise CreatedAt
- Project name resolved from ProjectUUID via ProjectService for both paths
- Frontend passes project_uuid context when exporting
Technical Details:
Backend:
- Added
ProjectUUIDfield toExportRequeststruct in handlers/export.go - Updated ExportCSV to look up project name from ProjectUUID using ProjectService
- Ensured ExportConfigCSV gets project name from config's ProjectUUID
- Both use CreatedAt (for ExportCSV) or PriceUpdatedAt/CreatedAt (for ExportConfigCSV)
Frontend:
- Added
projectUUIDandprojectNamestate variables in index.html - Load and store projectUUID when configuration is loaded
- Pass
project_uuidin JSON body for both export requests
Files Modified
internal/handlers/export.go- Project name resolution and ExportRequest updateinternal/handlers/export_test.go- Updated mock initialization with projectService paramcmd/qfs/main.go- Pass projectService to ExportHandler constructorweb/templates/index.html- Add projectUUID tracking and export payload updates
Testing Notes
✅ All existing tests updated and passing
✅ Code builds without errors
✅ Export filename now includes correct project name
✅ Works for both form-based and project-based exportsBreaking Changes
None - API response format unchanged, only filename generation updated.
Known Issues
None identified.
Downloads
-
QuoteForge v1.2.1 Pre-Release
released this
2026-02-09 15:45:00 +03:00 | 220 commits to main since this releaseДата релиза: 2026-02-09
Тег:v1.2.1
GitHub: https://git.mchus.pro/mchus/QuoteForge/releases/tag/v1.2.1Резюме
Быстрый патч-релиз, исправляющий регрессию в конфигураторе после рефактора v1.2.0. После удаления поля
CurrentPriceиз компонентов, autocomplete перестал показывать компоненты. Теперь используется на-demand загрузка цен через API.Что исправлено
🐛 Configurator Component Substitution (
acf7c8a)- Проблема: После рефактора в v1.2.0, autocomplete фильтровал ВСЕ компоненты, потому что проверял удаленное поле
current_price - Решение: Загрузка цен на-demand через
/api/quote/price-levels- Добавлен
componentPricesCacheдля кэширования цен в памяти - Функция
ensurePricesLoaded()загружает цены при фокусе на поле поиска - Все 3 режима autocomplete (single, multi, section) обновлены
- Компоненты без цен по-прежнему фильтруются (как требуется), но проверка использует API
- Добавлен
- Затронутые файлы:
web/templates/index.html(+66 строк, -12 строк)
История v1.2.0 → v1.2.1
Всего коммитов: 2
Хеш Автор Сообщение acf7c8aClaude fix: load component prices via API instead of removed current_price field 5984a57Claude refactor: remove CurrentPrice from local_components and transition to pricelist-based pricing Тестирование
✅ Configurator component substitution работает
✅ Цены загружаются корректно из pricelist
✅ Offline режим поддерживается (цены кэшируются после первой загрузки)
✅ Multi-pricelist поддержка функциональна (estimate/warehouse/competitor)Breaking Changes
Нет критических изменений для конечных пользователей.
⚠️ Для разработчиков:
ComponentViewAPI больше не возвращаетCurrentPrice.Миграция
Не требуется миграция БД — все миграции были применены в v1.2.0.
Установка
macOS
# Скачать и распаковать tar xzf qfs-v1.2.1-darwin-arm64.tar.gz # для Apple Silicon # или tar xzf qfs-v1.2.1-darwin-amd64.tar.gz # для Intel Mac # Снять ограничение Gatekeeper (если требуется) xattr -d com.apple.quarantine ./qfs # Запустить ./qfsLinux
tar xzf qfs-v1.2.1-linux-amd64.tar.gz ./qfsWindows
# Распаковать qfs-v1.2.1-windows-amd64.zip # Запустить qfs.exeИзвестные проблемы
Нет известных проблем на момент релиза.
Поддержка
По вопросам обращайтесь: @mchus
Downloads
- Проблема: После рефактора в v1.2.0, autocomplete фильтровал ВСЕ компоненты, потому что проверял удаленное поле
-
released this
2026-02-09 11:44:23 +03:00 | 224 commits to main since this releasev1.2.0 — Export Improvements & Sync Stability Released: 2026-02-09
🎯 Key Changes
✨ Features
CSV Export Enhancements
- Streaming CSV with Excel compatibility — Export large datasets efficiently with proper Excel BOM encoding
- Smart filename handling — Project name automatically included in exported CSV filename format:
YYYY-MM-DD (PROJECT-NAME).csv - Content-Disposition header support — Browser respects suggested filename from server for better UX
Projects API
- New
/api/projects/allendpoint — Get unlimited project list without pagination (complements existing paginated endpoint)
🐛 Bug Fixes
Database Synchronization
- Fixed sync blockage with limited database users — Application now checks if migration registry tables exist before attempting to create them, eliminating permission errors for read-limited DB users
- Graceful permission handling — No longer requires
CREATE TABLEprivileges if tables already exist - Applies same robustness to user sync status table creation and management
📚 Documentation
- Complete database user permissions guide — Added comprehensive table-by-table permissions documentation
- Clarifies which tables require
SELECTonly vsSELECT, INSERT, UPDATE - Explains that sync infrastructure tables must be created by DB admin (not by app)
📋 Detailed Changes
Type Description Feature Export: implement streaming CSV with Excel compatibility Feature Export: update CSV filename format to YYYY-MM-DD (PROJECT-NAME) BOMFeature Export: use filename from Content-Disposition header in browser Feature Export: add project name to CSV filename format Feature Projects: add /allendpoint for unlimited project listFix Sync: handle database permission issues in sync migration verification Docs Document complete database user permissions for sync support 🔧 Database Permissions
To enable sync for users with limited DB privileges, ensure these tables exist (created by administrator):
qt_client_local_migrations— SELECT onlyqt_client_schema_state— SELECT, INSERT, UPDATEqt_pricelist_sync_status— SELECT, INSERT, UPDATE
See README.md for complete permission setup.
🚀 Installation & Upgrade
# No database migrations required for this release # Simply deploy the new binary go run ./cmd/qfs 📊 Statistics - 7 commits merged - 5 export & API features added - 1 critical sync stability fix - Full backward compatibility maintained 🙏 Notes - This release improves offline-first reliability by reducing external dependencies - CSV exports now use standard Excel-compatible BOM encoding - Better UX for project-specific configuration exports - Users with read-limited database accounts can now sync successfully --- Installation: See README.md for setup instructions.Downloads
-
Release v1.1.0 Stable
released this
2026-02-08 10:29:51 +03:00 | 231 commits to main since this releaseQuoteForge v1.1.0
Дата релиза: 2026-02-08
Тег:v1.1.0Что нового
- Завершен переход на
local-first: локальная SQLite, стабильный офлайн-старт и фоновая синхронизация. - Синхронизация стала надежнее: корректный full sync
push/pull, обработка stale/orphan событий, восстановление missing-конфигураций.
- Добавлен полноценный модуль проектов: отдельные проекты,tracker_url, создание и управление через UI. - Улучшены прайслисты и ценообразование: стабильнее пересчет, проверки прав, меньше ошибок в online/offline сценариях.
- Реализован и доработан поток импорта остатков: привязка partnumber к лотам, улучшенный UX и фиксы UI-багов.
- Позиции прайслиста теперь обогащаются актуальными остатками и partnumber изstock_log. - Усилен CORS: доступ только с loopback-origin (
localhost,127.0.0.1,::1). - Обновлен релизный контур: бинарник
qfs, флаг-version, сборка и упаковка под Linux/macOS/Windows.
Запуск на macOS
Снимите карантинный атрибут через терминал:
xattr -d com.apple.quarantine /path/to/qfs-darwin-arm64
После этого бинарник запустится без предупреждения Gatekeeper.Downloads
- Завершен переход на
-
Release v1.0.4 Pre-Release
released this
2026-02-07 21:25:01 +03:00 | 236 commits to main since this releaseQuoteForge v1.0.4
Дата релиза: 2026-02-07
Тег:v1.0.4
Диапазон изменений:v1.0.3..v1.0.4Что нового
- Удалён модуль admin pricing (UI, API и связанные сервисы).
- Удалены подсистемы alerts, stock import, warehouse-алгоритмы, а также
cmd/cronиcmd/importer. PricelistHandlerпереведён в read-only режим:GET /api/pricelistsGET /api/pricelists/latestGET /api/pricelists/:idGET /api/pricelists/:id/itemsGET /api/pricelists/:id/lots
- Обновлена веб-навигация:
- удалена ссылка «Администратор цен»;
- добавлена отдельная страница «Прайслисты» (
/pricelists).
- Обновлена документация (
CLAUDE.md) под новую область ответственности приложения.
Совместимость
- Offline-first и sync-поток сохранены полностью.
- Read-only просмотр прайслистов работает через локальный SQLite-кэш.
Запуск на macOS
Снимите карантинный атрибут через терминал:
xattr -d com.apple.quarantine /path/to/qfs-darwin-arm64
После этого бинарник запустится без предупреждения Gatekeeper.Downloads
-
Release v1.0.3 Stable
released this
2026-02-06 14:04:11 +03:00 | 249 commits to main since this releaseQuoteForge v1.0.3
Дата релиза: 2026-02-06
Тег:v1.0.3
Диапазон изменений:v1.0.2..v1.0.3Что нового
- Добавлена страница управления проектами
/projectsс:- датой и временем создания проекта;
- сортировкой по названию и дате создания;
- серверной пагинацией;
- фильтром по автору в заголовке таблицы.
- Добавлена отдельная вкладка
Статус синхронизациина уровнеАлерты / Компоненты / Прайслисты. - Во вкладке статуса синхронизации отображаются:
- пользователь;
- версия приложения;
- статус (
онлайнили относительное время последней синхронизации).
Изменения синхронизации
- Реализован heartbeat синхронизации пользователей в MariaDB:
qt_pricelist_sync_status. - Добавлен API
GET /api/sync/users-statusдля UI статуса синхронизации. - Логика онлайн-статуса рассчитана от интервала фоновой синхронизации:
5 минут + 10%. - В heartbeat фиксируется версия приложения (
app_version).
Важные исправления
- Исправлено восстановление отсутствующей серверной конфигурации при push обновлений.
- Исправлено экранирование паролей в MySQL DSN в setup.
- Улучшена логика запуска SQL-миграций на старте при отсутствии прав/необходимости.
- Обновлена логика пересчета прайслистов через админский price-refresh.
Миграции и совместимость
Добавлены SQL-миграции:
migrations/010_add_pricelist_sync_status.sqlmigrations/011_add_app_version_to_pricelist_sync_status.sql
Релиз совместим с предыдущей веткой
v1.0.x; новая таблица синхронизации создается автоматически.Коммиты в релизе
b1b50ceAdd projects table controls and sync status tab with app version6ab1e98sync: recover missing server config during update pusha1d2192Fix MySQL DSN escaping for setup passwords and clarify DB user setupa90c07cupdate stale files liste9307c4Apply remaining pricelist and local-first updates1b48401Use admin price-refresh logic for pricelist recalculation4a86f7bfix: skip startup sql migrations when not needed or no permissions
Downloads
- Добавлена страница управления проектами