# Sprinter Commander: рекурсивный group F5 0.2/P16 Дата: 9 сентября 2026 года. Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`. ## Реализованный контракт При групповом F5 Commander сначала последовательно копирует выбранные файлы, а затем добавляет все выбранные каталоги текущего уровня как независимые roots в одну traversal queue P15. Для каждого root действует тот же контракт: - breadth-first обход и пустые каталоги; - crash-safe temp/commit для файлов; - cancel между файлами, каталогами и 4-КБ блоками; - no-overwrite и self-target guard; - один динамический EMM-блок очереди на всю группу; - один refresh passive panel после операции. Если top-level файл даёт ошибку или cancel до запуска обхода, directory roots остаются `unprocessed`. При ошибке одного tree root операция останавливается; уже committed-файлы и созданные каталоги сохраняются. Это не меняет семантику `+`, `-`, `*`: групповые команды выделения по-прежнему игнорируют каталоги. Каталог может попасть в F5-группу только после отдельного `Insert`. ## Проверка В active panel вручную выбраны `ADIR`, `BDIR` и `ROOT.BIN`; `KEEP.TXT` оставлен невыбранным. Два root-каталога содержат по файлу, а `ADIR` — ещё и пустой вложенный каталог. UI сообщил: ```text Tree copied: 3 files; 3 dirs. ``` Внешний checker сравнил target с точным ожидаемым множеством и подтвердил отсутствие `KEEP.TXT` и temp: ```text PASS: selected file and two directory roots copied exactly. ``` Контрольные состояния: - [два каталога и файл выбраны](../artifacts/mame-p16/group-tree/selected-roots.png); - [группа скопирована](../artifacts/mame-p16/group-tree/copied.png); - [passive panel перечитана](../artifacts/mame-p16/group-tree/passive-refreshed.png); - [чистый возврат в DSS](../artifacts/mame-p16/group-tree/clean-dss-return.png). ## Компоновка `_CODE` W2, DATA, BANK1 и размер EXE не изменились относительно P15. BANK2 вырос с 14547 до 14918 байт (+371); остаётся 1466 байт. Итоговая сборка: ```text _CODE 9503; DATA 3524; heap 1821 BANK1 9687/16384; BANK2 14918/16384 SPRCMD.EXE 43080 ``` Межбанковый аудит чист. ## Воспроизведение ```sh make hdd-p16-group-tree-copy ALLOCS=3000 tests/run_mame_hdd.sh build/hdd/p16_group_tree_copy.chd \ tests/mame_p16_group_tree_copy.lua artifacts/mame-p16/local 60 tests/check_p16_group_tree_copy_hdd.sh build/hdd/p16_group_tree_copy.chd ```