<?xml version="1.0" encoding="utf-8"?>
	<rss version="2.0">
		<channel> 
			<title>Version history CMS Donate Engine</title> 
			<link>https://cde.by/en/news/</link> 
			<description>Here you can see the history of changes in CMS Donate Engine.</description>
			<item>
				<title>v19.2.96</title>
				<description><![CDATA[build 19.2.96 refactor]]></description>
				<files><![CDATA[Total: 2 files (+0, ~2, -0)

www/src/app/
  M constants.php
www/src/app/Features/Profile/
  M UcpController.php]]></files>
				<pubDate>Fri, 06 Nov 2026 12:29:15 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.95</title>
				<description><![CDATA[fix(store): return proper 404 page for missing store group and stop logging 404s
- StoreGroupQuery::fetchOne(): throw ResourceNotFoundException instead of returning null from an array-typed method (fixes TypeError / white screen)
- StoreCatalogController::__invoke(): throw ResourceNotFoundException when group has no server, skip redirect to id-0
- RequestHandler: catch ResourceNotFoundException / NotFoundHttpException and render 404 via Template::error() in the full layout
- RequestHandler: handle MethodNotAllowedException with a proper page instead of an empty body
- RequestHandler: wrap runLegacy() in try/catch so legacy exceptions don't escape to the PHP error handler
- RequestHandler: skip ErrorHandler::logException() for 404 responses, only log real 500 errors and transient container errors]]></description>
				<files><![CDATA[Total: 5 files (+0, ~5, -0)

www/src/app/
  M constants.php
www/src/app/Features/Store/Catalog/
  M StoreGroupQuery.php
  M StoreProductQuery.php
www/src/app/Features/Store/Http/
  M StoreCatalogController.php
www/src/app/Http/
  M RequestHandler.php]]></files>
				<pubDate>Fri, 06 Nov 2026 06:35:08 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.94</title>
				<description><![CDATA[perf(infra,qa): migrate to ready-made PHP image and cut QA time from 2m to 30s
Docker:
- replace 460s custom build with joseluisq/php-fpm:8.5
- mount php.ini/apcu.ini/opcache.ini/fpm-pool from docker/php/
- add disable-psr.ini to fix PsrExt vs symfony/cache 8.x conflict
- download Composer on first start via entrypoint.sh
- set working_dir: /var/www, keep user: ${USER_ID}:${GID}
- add tmpfs /usr/local/var/log for FPM log
Dependencies:
- symfony/* 8.1.10 -> 8.1.11 (15 security advisories fixed)
- ResettableServicePass moved to DependencyInjection\Compiler
QA speed:
- inject SleeperInterface into DownloadManager (-30s of sleep())
- inject SleeperInterface into RetryMiddleware (-0.8s backoff)
- fast hash options in HashGeneratorTrait (-5s of bcrypt/argon2)
- brianium/paratest -p8 with per-worker cde_test_N isolation
- phpstan parallel + Turbo + pcntl/posix (-37s cold run)
- createStub instead of createMock (-6 PHPUnit notices)
Composer scripts:
- rename validate/audit to check-validate/security-audit
  (names clash with Composer built-ins)
- add check-validate and security-audit to qa
Before: composer qa ~120s
After:  composer qa ~30s (phpstan 19.6 + paratest 10.5 + audit)]]></description>
				<files><![CDATA[Total: 33 files (+7, ~25, -1)

./
  M .env
  M docker-compose.yml
  A phpunit-otr.xml
docker/php/
  D Dockerfile
  A disable-psr.ini
  A disable-xdebug.ini
  M entrypoint.sh
  M php-fpm-pool.conf
www/
  M composer.json
www/public/style/gente/mods/store/
  M admin_modal_edit_product.tpl
  M index.tpl
  M product_server_group.tpl
  M products_catalog.tpl
www/src/admin/controllers/
  M articles.php
www/src/admin/Features/Store/Http/View/
www/src/admin/lib/updater/services/
  M DownloadManager.php
  A NativeSleeper.php
  A SleeperInterface.php
www/src/app/
  M constants.php
www/src/app/Authentication/
  M AuthenticationConfig.php
  M AuthenticationService.php
www/src/app/Authentication/Hash/
  M PasswordVerifier.php
www/src/app/Container/
  M ContainerFactory.php
www/src/app/lib/database/
  M Database.php
www/src/app/lib/database/middleware/
  M RetryMiddleware.php
www/tests/
  M bootstrap.php
www/tests/Helpers/
  M HashGeneratorTrait.php
www/tests/Integration/Authentication/
  M AuthenticationServiceTest.php
www/tests/Unit/Database/
  M RetryMiddlewareTest.php
www/tests/Unit/Features/Search/
  M SearchIndexControllerTest.php
www/tests/Unit/Updater/
  M DownloadManagerTest.php]]></files>
				<pubDate>Fri, 06 Nov 2026 05:40:52 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.93</title>
				<description><![CDATA[refactor(layout): lazy-load feature scripts out of header
- donate: move payments-form.js bundle to donate_view.tpl,
  lazy-load via pjax:complete
- store: move rullete.js bundle to modal_rulet.tpl
- admin: move admin_modal_edit_product.js bundle to its modal
- editor: drop codemirror.js from header, lazy-load in admin.js
  and articles.php on first formTextEditorInit
- preload: prune APCu manifest of missing bundle files]]></description>
				<files><![CDATA[Total: 5 files (+0, ~5, -0)

www/
  M composer.json
www/public/style/gente/
  M header.tpl
www/public/style/gente/js/
  M admin.js
www/src/admin/controllers/
  M articles.php
www/src/app/
  M constants.php]]></files>
				<pubDate>Thu, 05 Nov 2026 13:14:11 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.92</title>
				<description><![CDATA[fix(pjax): rullete lazy-load, donate re-init]]></description>
				<files><![CDATA[Total: 9 files (+1, ~7, -1)

www/public/style/gente/
  M header.tpl
www/public/style/gente/js/
  D rullete.js
  M shop.js
www/public/style/gente/mods/donate/
  M donate_view.tpl
  M payments-form.js
www/public/style/gente/mods/store/
  M modal_rulet.tpl
  A rullete.js
www/src/app/
  M constants.php
www/src/app/Features/Store/Http/
  M StoreModalController.php]]></files>
				<pubDate>Thu, 05 Nov 2026 11:14:58 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.91</title>
				<description><![CDATA[fix(deploy): composer]]></description>
				<files><![CDATA[Total: 2 files (+0, ~2, -0)

www/
  M composer.json
www/src/app/
  M constants.php]]></files>
				<pubDate>Thu, 05 Nov 2026 08:43:59 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.90</title>
				<description><![CDATA[fix(donate,shop): make form re-init safe on pjax and stale cache]]></description>
				<files><![CDATA[Total: 10 files (+0, ~10, -0)

www/
  M composer.json
www/public/style/gente/
  M header.tpl
www/public/style/gente/js/
  M CacheApi.js
  M custom.js
  M shop.js
www/public/style/gente/mods/donate/
  M donate_view.tpl
  M payments-form.js
www/public/style/gente/mods/store/
  M admin_modal_source.tpl
www/public/style/lte3/js/
  M admin.js
www/src/app/
  M constants.php]]></files>
				<pubDate>Thu, 05 Nov 2026 08:37:40 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.89</title>
				<description><![CDATA[fix(donate): make form re-init safe on pjax]]></description>
				<files><![CDATA[Total: 9 files (+1, ~8, -0)

docs/todo/
  A uppy.md
www/public/style/gente/
  M header.tpl
www/public/style/gente/js/
  M shop.js
www/public/style/gente/mods/donate/
  M donate_view.tpl
  M payments-form.js
www/public/style/gente/mods/servers/
  M graph.tpl
www/src/app/
  M constants.php
www/src/app/controllers/
  M donate.php
  M servers.php]]></files>
				<pubDate>Wed, 04 Nov 2026 14:14:56 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.88</title>
				<description><![CDATA[feat(Features): Store stability & typization]]></description>
				<files><![CDATA[Total: 1 files (+0, ~1, -0)

www/src/app/
  M constants.php]]></files>
				<pubDate>Wed, 04 Nov 2026 09:01:06 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.87</title>
				<description><![CDATA[feat(search): action buttons in admin command palette
Palette previously indexed only form fields (input/select/textarea).
Action buttons (User CSS, Add product, Delete orphans) were invisible
because FieldExtractor ignored /.
Changes:
- FieldExtractor: parse data-palette-* attributes !92 action/actionUrl/actionId
- search-palette.js: cross-page handling for openModal/click via sessionStorage
  (paletteAfterNav); consume after pjax:complete / pageshow / 100ms fallback
- search-palette.js: matchUrl fallback (matches by path/anchor if label differs)
- search-palette.js: grouping by pageUrl (not pageTitle)  14 same title, different pages
- admin.js: dispatch pjax:complete / pjax:end after #content swap
  (palette no longer double-reloads on same-page navigation)
- admin store list navi + template.php: add data-palette-* to action buttons]]></description>
				<files><![CDATA[Total: 6 files (+0, ~6, -0)

www/public/style/lte3/js/
  M admin.js
  M search-palette.js
www/src/admin/controllers/
  M template.php
www/src/admin/Features/Search/Application/
  M FieldExtractor.php
www/src/admin/Features/Search/Http/
  M SearchIndexController.php
www/src/app/
  M constants.php]]></files>
				<pubDate>Mon, 02 Nov 2026 18:47:28 +0300</pubDate>
			</item>
		</channel>
	</rss>