30 lines
2.5 KiB
Markdown
30 lines
2.5 KiB
Markdown
# QuoteForge v2.21
|
||
|
||
Дата релиза: 2026-06-25
|
||
Тег: `v2.21`
|
||
|
||
## Что нового
|
||
|
||
### Короткие ссылки на проекты и варианты
|
||
|
||
- `GET /:code` — редирект на проект по коду опти (регистронезависимо);
|
||
- `GET /:code/:variant` — редирект на конкретный вариант проекта;
|
||
- валидация кода опти и имени варианта: только URL-безопасные символы `[A-Za-z0-9._-]` — проверка на бэкенде и в форме с подсказкой `«Используется в URL: /КОД/Вариант»`.
|
||
|
||
### Ревизия «до обновления цен»
|
||
|
||
При нажатии «Обновить цены» автоматически создаётся ревизия текущего состояния конфигурации до применения новых цен, после чего сохраняется ревизия с обновлёнными ценами. История изменений теперь полная.
|
||
|
||
### Исправления
|
||
|
||
- Старая цена в итоге конфигурации больше не зачёркивается, если цены фактически не изменились.
|
||
- Устранён race condition: `SyncPricelists()` теперь защищена мьютексом — параллельный запуск фонового тикера и ручной синхронизации больше не приводит к `UNIQUE constraint failed`.
|
||
- Дублирующиеся `lot_name` в серверном прайслисте пропускаются при загрузке вместо аварийного завершения синхронизации.
|
||
- Ошибки отправки конфигураций и проектов на сервер теперь видны в диалоге «Информация о синхронизации» и в support bundle (`sync_log`, тип `changes`).
|
||
- Состояние клиента (`last_sync_error_code` и др.) отправляется на сервер по завершении синхронизации независимо от её результата.
|
||
|
||
## Запуск на macOS
|
||
|
||
Снимите карантинный атрибут через терминал: `xattr -d com.apple.quarantine /path/to/qfs-darwin-arm64`
|
||
После этого бинарник запустится без предупреждения Gatekeeper.
|