Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
3.2 KiB
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 сообщил:
Tree copied: 3 files; 3 dirs.
Внешний checker сравнил target с точным ожидаемым множеством и подтвердил
отсутствие KEEP.TXT и temp:
PASS: selected file and two directory roots copied exactly.
Контрольные состояния:
Компоновка
_CODE W2, DATA, BANK1 и размер EXE не изменились относительно P15. BANK2
вырос с 14547 до 14918 байт (+371); остаётся 1466 байт. Итоговая сборка:
_CODE 9503; DATA 3524; heap 1821
BANK1 9687/16384; BANK2 14918/16384
SPRCMD.EXE 43080
Межбанковый аудит чист.
Воспроизведение
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