<?xml version="1.0" encoding="utf-8"?>
	<rss version="2.0">
		<channel> 
			<title>История коммерческой редакции CMS Donate Engine</title> 
			<link>https://cde.by/ru/news/</link> 
			<description>Здесь Вы можете ознакомиться с историей изменений в CMS Donate Engine.</description>
			<item>
				<title>v19.2.69</title>
				<description><![CDATA[feat(http): redirect unknown host to primary via DomainRedirectSubscriber
- DomainResolver (pure): resolve/isSuspiciousHost/redirectUrl, subpath-safe
- Redirector: create() !92 Response (AJAX !92 JsonResponse), send() !92 legacy adapter
- DomainRedirectSubscriber: priority 512, isMainRequest() invariant,
  strtolower host, http_site validation
- status: 308 canonical (permanent), 307 unknown (temporary, method-preserved)
- wiring: services.php (tag), RequestHandler::runLegacy (dispatch),
  Request::redirect !92 @see Redirector::send
- 7 unit tests, 0 mocks
Known issues: domain-guard-known-issues.md
Worker mode blocked by B1-B4 (CFG singleton, ResettableServicePass, bootstrap-once)]]></description>
				<files><![CDATA[Total: 12 files (+6, ~6, -0)

docker/angie/
  M angie.conf
docs/todo/
  M Multi-Tenant-SaaS.md
  A domain-guard-known-issues.md
www/src/app/
  M constants.php
www/src/app/config/
  M services.php
www/src/app/Http/
  A DomainRedirectSubscriber.php
  A DomainResolver.php
  A Redirector.php
  M RequestHandler.php
www/src/app/lib/
  M Request.php
www/tests/Unit/Http/
  A DomainResolverTest.php
  A RedirectorTest.php]]></files>
				<pubDate>Thu, 22 Oct 2026 07:59:19 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.68</title>
				<description><![CDATA[fix(updater): fail-closed restore without manifest
Restore now aborts with manifest-missing when the backup has no manifest
and --force is not given, instead of silently leaving orphan files that
break the DI container (same failure mode as incident 19.2.66).
- BackupManager: add manifest-missing and version-mismatch rules; skip
  manifest lookup when versionTo is null (BC preserved); pass warnings
  through the legacy --force path
- core_updater: drop redundant !== '' ternaries (PHPStan); treat
  manifest-missing as proceedable in the catch block alongside
  from-version
- Tests: add testAbortsWhenManifestMissing and
  testForceAllowsLegacyRestoreWhenManifestMissing]]></description>
				<files><![CDATA[Total: 5 files (+0, ~5, -0)

www/src/admin/controllers/
  M core_updater.php
www/src/admin/lib/console/
  M UpdaterRestoreCommand.php
www/src/admin/lib/updater/services/
  M BackupManager.php
www/src/app/
  M constants.php
www/tests/Functional/Updater/
  M UpdaterRestoreManifestTest.php]]></files>
				<pubDate>Tue, 20 Oct 2026 19:56:50 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.67</title>
				<description><![CDATA[feat(updater): safe restore via manifest]]></description>
				<files><![CDATA[Total: 24 files (+12, ~12, -0)

docs/contracts/
  A Cache.md
  A Updater.md
docs/todo/
  A Multi-Tenant-SaaS.md
  A updater_restore_manifest.md
www/public/style/gente/mods/store/
  M form_donate.tpl
www/src/admin/controllers/
  M core_updater.php
www/src/admin/lib/console/
  A UpdaterRestoreCommand.php
www/src/admin/lib/updater/
  M UpdateServiceFactory.php
www/src/admin/lib/updater/migrate_mysql/
  M DBMigration.php
www/src/admin/lib/updater/services/
  M BackupManager.php
  M BackupManagerInterface.php
  M CompareUpdate.php
  A ManifestChecksum.php
  A ManifestValidationException.php
  A ManifestValidator.php
  A ManifestWriter.php
www/src/app/
  M constants.php
www/src/app/Features/Profile/
  M UcpController.php
www/src/Install/sql/
  M inserttable_en.sql
  M inserttable_ru.sql
www/src/Install/Step/
  M DemoContent.php
www/tests/Functional/Updater/
  A UpdaterRestoreManifestTest.php
www/tests/Unit/Updater/
  A ManifestValidatorTest.php
  A ManifestWriterTest.php]]></files>
				<pubDate>Tue, 20 Oct 2026 19:21:15 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.66</title>
				<description><![CDATA[fix(ui): steam form size]]></description>
				<files><![CDATA[Total: 2 files (+0, ~2, -0)

www/src/app/
  M constants.php
www/src/app/helpers/
  M SteamForm.php]]></files>
				<pubDate>Tue, 20 Oct 2026 11:59:05 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.65</title>
				<description><![CDATA[fix(smarty): unify storage paths and clear all 8 cache dirs]]></description>
				<files><![CDATA[Total: 18 files (+1, ~15, -2)

www/public/style/gente/css/
  M cde-modules.css
www/public/style/gente/mods/store/
  M form_donate.tpl
www/public/style/images/
  D sits_small.png
www/src/admin/lib/
  M CmsCache.php
www/src/admin/lib/updater/services/
  M CacheCleaner.php
www/src/app/
  M constants.php
www/src/app/config/
  M services.php
www/src/app/controllers/
  M lisf.php
  M lisfmarket.php
  M oxide.php
  M oxidemarket.php
www/src/app/Features/Common/Smarty/
  A SmartyStorage.php
www/src/app/lib/
  M Cache.php
  D CacheCleaner.php
  M Template.php
www/src/app/lib/database/middleware/
  M LoggingMiddleware.php
www/src/Install/Core/
www/src/Install/Step/
  M Permission.php]]></files>
				<pubDate>Tue, 20 Oct 2026 11:42:25 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.64</title>
				<description><![CDATA[fix(cron): move IM mail filters into SQL to fix batch starvation]]></description>
				<files><![CDATA[Total: 9 files (+3, ~6, -0)

docs/todo/
  M errorhandler-context-instead-of-wrap.md
www/public/style/lte3/views/comeback_settings/
  A modal.tpl
  A navi.tpl
  A setup.tpl
www/public/style/lte3/views/forms/
  M pagination.tpl
www/src/admin/controllers/
  M comeback_settings.php
www/src/admin/lib/cron/
  M MessagesNotifierUseCase.php
www/src/app/
  M constants.php
www/src/app/lib/InstantMessages/
  M MessangerService.php]]></files>
				<pubDate>Tue, 20 Oct 2026 07:25:49 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.63</title>
				<description><![CDATA[fix(news): save form]]></description>
				<files><![CDATA[Total: 3 files (+0, ~3, -0)

www/public/style/gente/js/
  M admin.js
www/public/style/gente/mods/news/
  M edit.tpl
www/src/app/
  M constants.php]]></files>
				<pubDate>Tue, 20 Oct 2026 01:03:50 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.62</title>
				<description><![CDATA[fix(store): show gift icon for free products in modal]]></description>
				<files><![CDATA[Total: 11 files (+2, ~9, -0)

www/public/style/gente/mods/store/
  A card_price.tpl
  M modal_bundle.tpl
  M modal_footer_price.tpl
  M modal_rulet.tpl
  A package_price.tpl
  M product_server_group.tpl
  M products_catalog.tpl
www/src/app/
  M constants.php
www/src/app/Features/Store/Catalog/View/
  M StorePackageView.php
www/src/app/Features/Store/Http/
  M StoreCatalogController.php
  M StoreModalController.php]]></files>
				<pubDate>Mon, 19 Oct 2026 18:46:55 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.61</title>
				<description><![CDATA[fix(sendpassword): route key-based reset, drop session_name/session_id from captcha]]></description>
				<files><![CDATA[Total: 7 files (+2, ~4, -1)

docs/contracts/
  A split-current-user-money.md
docs/todo/
  D split-current-user-money.md
www/src/app/
  M constants.php
www/src/app/Features/Auth/
  M SendPasswordController.php
www/src/app/Features/Auth/View/
  M sendpassword.tpl
www/tests/Unit/Database/
  M CircuitBreakerMiddlewareTest.php
  A DatabaseFactoryTest.php]]></files>
				<pubDate>Mon, 19 Oct 2026 16:35:29 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.60</title>
				<description><![CDATA[fix(sql): debug error_log]]></description>
				<files><![CDATA[Total: 4 files (+0, ~3, -1)

docs/todo/
  D mysql-buffered-queries.md
www/src/admin/lib/updater/services/
  M Updater.php
www/src/app/
  M constants.php
www/src/app/lib/database/
  M Database.php]]></files>
				<pubDate>Mon, 19 Oct 2026 13:21:50 +0300</pubDate>
			</item>
		</channel>
	</rss>