Корзина. Памятка по компоненту sale.basket.basket

Проблема: в корзину у неавторизованного пользователя в $arResult отсутствуют ключи ["GRID"]["ROWS"][0]["CATALOG"]. 

Было установлено, что добавляется ["CATALOG"] в обработке события "OnExtendBasketItems" в файле: 
/bitrix/modules/catalog/general/discount.php 
CAllCatalogDiscount::ExtendBasketItems(); 

Регистрация на событие в файле: 
/bitrix/modules/catalog/install/index.php 
RegisterModuleDependences("sale", "OnExtendBasketItems", "catalog", "CCatalogDiscount", "ExtendBasketItems", 100); 

Запуск события в файле: 
/bitrix/modules/sale/general/discount.php 
ExecuteModuleEventEx($arEvent, array(&$arOrder['BASKET_ITEMS'], $arExtend)); 

На сколько я понял, событие не запускается, т.к. у неавторизованного нет скидок (пустой $arIDS):
$arIDS = array();
$groupDiscountIterator = Internals\DiscountGroupTable::getList(array(
   'select' => array('DISCOUNT_ID'),
   'filter' => array('@GROUP_ID' => CUser::GetUserGroup($arOrder['USER_ID']), '=ACTIVE' => 'Y')
));
while ($groupDiscount = $groupDiscountIterator->fetch())
{
   $groupDiscount['DISCOUNT_ID'] = (int)$groupDiscount['DISCOUNT_ID'];
   if ($groupDiscount['DISCOUNT_ID'] > 0)
      $arIDS[$groupDiscount['DISCOUNT_ID']] = true;
}

if (!empty($arIDS))
{
   $arIDS = array_keys($arIDS);
   $couponList = DiscountCouponsManager::getForApply(array('MODULE' => 'sale', 'DISCOUNT_ID' => $arIDS), array(), true);

   $arExtend = array(
      'catalog' => array(
         'fields' => true,
         'props' => true,
      ),
   );
   foreach (GetModuleEvents('sale', 'OnExtendBasketItems', true) as $arEvent)
   {
      ExecuteModuleEventEx($arEvent, array(&$arOrder['BASKET_ITEMS'], $arExtend));
   }

Подробное объяснение механизма работы от Евгения Жукова:
1. Ключ CATALOG в массиве элементов корзины, появляющийся после вызова CSaleDiscount::DoProcessOrder - СЛУЖЕБНЫЙ. Он не должен был выходить за пределы метода - это наша ошибка, к сожалению.
2. Ключ заполняется данными из каталога только при наличии правил корзины, действующих на группы текущего пользователя (публичка) или клиента, для которого менеджер создает заказ (админка). Авторизован пользователь или нет (в публичке) - роли НЕ ИГРАЕТ.
3. Ключ CATALOG содержал все поля и свойства товара по одной причине - до версии sale 15.5.1 правила корзины не могли сообщать, какие данные о товарах необходимы для правильного расчета. Сейчас этот механизм реализован, но пока используется только при оформлении заказа из админки. 
4. С выходом sale 16.0.0 компоненты тоже перейдут на новый механизм получения свойств и полей товаров для правил корзины. Это означает что ключ CATALOG для товаров либо вообще не будет заполнен (нет правил корзины с условиями каталога), либо будет содержать информацию об отдельных свойствах и полях. По этой причине ключ исчезнет.