Files
Sprinter-SDCC/applications/Volkov/docs/p16-group-tree-copy-results.md
T
snark13 8e389c03f8 Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
2026-09-10 10:45:30 +03:00

73 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```