# Upstream provenance `upstream/` — вендоренная копия (MIT). - базовый commit: `2564866f7844f334379dc4913dc466a5a4138306` (main, 2026-09-19) - причина вендоринга: самодостаточность репо (пересборка образа без внешних зависимостей); лицензия MIT допускает копирование при сохранении уведомления (см. `upstream/LICENSE`). ## Наши изменения относительно upstream 1. **`container/environment/resources/patches/managed-lifecycle.mjs`** — якоря патча адаптированы к dsh 0.2.x (обратная совместимость с 0.1.x сохранена, проверено на 0.2.0-rc.2 и 0.1.5-rc.2): - динамический импорт Web Profile: в 0.2.x фасад `./profile-boot.js` без хэша и с любым стилем кавычек; - SIGTERM-handler и settled-return: регэксп по форме вместо точного отступа (0.1.x — 2/1 таб, 0.2.x — 3/2 таба); - dispatch в `bin.js`: список известных сигнатур `parseDshArgs` (0.2.x добавила `version, manageDesktopProfile` из scope `runCli`). Именно из-за этих якорей у автора стоит пин `latestSupportedDsh` — с толерантными якорями образ собирается на новых версиях без поднятия пина (dev-ветка сборки пин не проверяет). 2. **`container/control-plane/hooks/dsh-web-ready.mjs`** — дрейф контрактов web-сервера 0.2.x: - token-exchange редирект: допускается `location: './'` (0.2.x) помимо `/` (0.1.x) — без этого runtime падал «DSH Web authentication exchange failed»; - URL ресурсов плагинов в boot-манифесте 0.2.x корневые-относительные (`plugins/…`) — нормализуются до `/plugins/…` перед проверкой и загрузкой. Остальное (compose, scripts/, docs/, README) лежит на верхнем уровне и в upstream не вмешивается.