Завершить разделение SDK и внешних проектов

This commit is contained in:
Александр Петров
2026-09-16 10:01:43 +03:00
parent 0e74aaa7ee
commit 2e7ffd64a4
1965 changed files with 373 additions and 201393 deletions
+68 -34
View File
@@ -1,7 +1,7 @@
# Разделение Sprinter-CC, MAME и приложений
Статус: реализация. Контракт SDK и локальных образов готов; выделение Git
репозиториев и физический перенос выполняются. Дата: 2026-09-15.
Статус: физическое разделение выполнено; завершаются локальные коммиты,
проверка документов и публикация Sprinter-CC. Дата обновления: 2026-09-16.
## Цель и границы
@@ -26,24 +26,40 @@ MAME приложению не нужны.
└── VSCode-Sprinter/ # Git-репозиторий расширения VS Code
```
Имена `C-Compiler`, `Volkov` и `PoP-Archive` пока локальные; адреса Git remote
новых репозиториев будут добавлены после создания доступных для записи URL.
Имена `C-Compiler`, `Volkov` и `PoP-Archive` приняты для локальной раскладки;
адреса Git remote новых репозиториев будут добавлены после создания доступных
для записи URL.
Отсутствие remote не мешает сохранить независимую локальную историю. Папка
`Applications/` не становится общим репозиторием: каждый продукт имеет свою
историю, релизы, игнорируемые ресурсы и тесты. Физическое расположение рядом
удобно, но не входит в контракт сборки.
Локальные точки истории после разделения:
| Репозиторий | Split/base | Итоговый локальный commit |
|---|---|---|
| Examples | `502d735` | `a76852d` |
| SprPoP | `4507ba9` | `bd300b3` |
| Volkov | `a71e3c5` | `3c1956b` |
| PoP-Archive | `716c639` | `54d0b3d` |
| VSCode-Sprinter | `68a821e` | `901d91a` |
| MAME | baseline `b0c4527c`, backend/MCP `fe7ee37a` | `37b89b78` |
Первые пять base-коммитов получены из подготовительного коммита Sprinter-CC
через `git subtree split`; поэтому их история прослеживается до исходного
монорепозитория. У выделенных репозиториев пока нет настроенных remote.
## Что принадлежит каждому проекту
| Проект | Что остаётся/переходит | Причина |
|---|---|---|
| Sprinter-CC | `bin/`, `runtime/`, `libc/`, `libbgi/`, `lib/`, общие `toolchain/`, `tests/`, `testkit/`, `app.mk`, справочник API, платформенные исследования, `release_docs/`, рецепт SDCC в `third_party/` | Это target SDK, его ABI, инструменты и собственные регрессионные тесты. libc/libbgi пока остаются вместе: их версия и ABI тесно связаны с `sprinter-cc`; дальнейшее выделение возможно после стабильного интерфейса. |
| MAME | Нынешний `mame/sources/MAME` со своим Git, изменения драйвера/OSD, патч debugger backend, общие `mamebridge` и `mame_mcp.py`, рецепты stock/sdbg сборок | Изменения ядра и общий транспорт MCP должны проверяться и выпускаться вместе с конкретной ревизией MAME. |
| Examples | Нынешние `examples/balls`, `mdview`, `mdview2`, `rpgwalk`, `scroll`, `space` и относящиеся к ним ресурсы/документы | Это демонстрации SDK с общей версией. Один репозиторий избегает множества мелких релизов. |
| SprPoP | Всё `applications/SprPoP/`: исходники, конверторы, тесты, собственные ресурсы и планы | Уже почти автономное приложение; оригинальные ресурсы и дальше остаются внешними. |
| Volkov | Всё `applications/Volkov/`: исходники, сценарии MAME, собственные тестовые носители и документы | Продукт и его проверки должны развиваться без дерева тулкита. |
| PoP-Archive | `applications/PoP/` как архив прежних PoC/roomtest и исследований | Не смешивать прежнюю историю с активным SprPoP. Если архив не нужен как рабочий клон, сохранить Git-историю и документы в отдельном архивном репозитории. |
| VSCode-Sprinter | Нынешний `toolchain/vscode-sprinter-debug`: extension, задачи сборки, конфигурации и тесты клиентской части | У расширения свои версии, упаковка VSIX и цикл обновления. Отладочный Python backend остаётся в SDK. |
| MAME | Выделенный `../MAME` со своим Git, изменения драйвера/OSD, патч debugger backend, общие `mamebridge` и `mame_mcp.py`, рецепты stock/sdbg сборок | Изменения ядра и общий транспорт MCP должны проверяться и выпускаться вместе с конкретной ревизией MAME. |
| Examples | Выделенный `../Examples`: `balls`, `mdview`, `mdview2`, `rpgwalk`, `scroll`, `space` и относящиеся к ним ресурсы/документы | Это демонстрации SDK с общей версией. Один репозиторий избегает множества мелких релизов. |
| SprPoP | Всё из прежнего `applications/SprPoP/`: исходники, конверторы, тесты, собственные ресурсы и планы | Уже почти автономное приложение; оригинальные ресурсы и дальше остаются внешними. |
| Volkov | Всё из прежнего `applications/Volkov/`: исходники, сценарии MAME, собственные тестовые носители и документы | Продукт и его проверки должны развиваться без дерева тулкита. |
| PoP-Archive | Прежний `applications/PoP/` как архив PoC/roomtest и исследований | Не смешивать прежнюю историю с активным SprPoP. Архив сохранён самостоятельным рабочим репозиторием. |
| VSCode-Sprinter | Выделенный `../VSCode-Sprinter`: extension, задачи сборки, конфигурации и тесты клиентской части | У расширения свои версии, упаковка VSIX и цикл обновления. Отладочный Python backend остаётся в SDK. |
`applications/DN/DosNavigator` и вложенные чужие клоны в PoP/Volkov —
референсы, не Sprinter-приложения. Их не превращать в продуктовые репозитории
@@ -67,8 +83,8 @@ MAME приложению не нужны.
переноса такой путь может случайно указывать на чужой каталог.
`MAME_HOME` — необязательный для сборки путь к подготовленной **среде запуска**
MAME, а не к его исходникам. Стандартные пути соответствуют нынешнему
`mame/v306` и допускают переопределение из окружения, аргументов `make` или
MAME, а не к его исходникам. Стандартные пути внутри `MAME_HOME` задают
контракт установленной среды и допускают переопределение из окружения, аргументов `make` или
локального игнорируемого файла настроек. Если `MAME_HOME` не задан,
необходимые пути можно указать отдельно; отсутствие обоих источников
диагностировать в цели запуска, не превращая пустое значение в `/mame.arm`:
@@ -103,7 +119,9 @@ DAP-launch должны брать один источник настройки,
`IMG/mc.img` и `IMG/test_hdd.chd` больше не являются выходами сборки
приложения. `make hdd` готовит локальный образ; `make run` запускает его
без `mame-link`. Для нескольких сценариев создавать отдельные носители и
state-каталоги, чтобы параллельный запуск не перезаписывал чужой тест.
state-каталоги, чтобы один запуск не перезаписывал чужие файлы. Одновременная
работа нескольких процессов MAME, особенно с MCP bridge, не проверялась и
не гарантируется; отдельная отложенная задача есть в [TODO.md](TODO.md).
Конфигурация разработчика не содержит абсолютных личных путей в Git.
Для `.img` нужен упаковщик из SDK; для `.chd` нынешний `make_hdd.sh`
дополнительно использует внешние `mtools` и `chdman`. Зафиксировать эти
@@ -179,16 +197,13 @@ MAME документируются вместе; extension не копируе
## История Git, внешние ресурсы и совместимость
До выделения репозиториев инвентаризировать незакоммиченные/неотслеживаемые
файлы в корне и отдельный dirty checkout MAME. Среди новых файлов сейчас
находятся DAP, extension, MCP-плагин, MAME patch и документы: простое
`git subtree split` по старому HEAD их потеряет. Сначала сохранить работу
в подходящих коммитах/ветках или проверенных патчах; не сбрасывать и не
перезаписывать пользовательские изменения. Затем выделить историю
`examples/`, `applications/SprPoP/`, `applications/Volkov/` и PoP через
`git subtree split` либо `git filter-repo`, проверяя состав каждого нового
Git дерева. Для MAME использовать его существующую историю, а не историю
родительского SDK, где `mame/` игнорируется.
Перед выделением были инвентаризированы незакоммиченные/неотслеживаемые
файлы в корне и отдельный dirty checkout MAME. Работу DAP, extension,
MCP-плагина, MAME patch и документов сначала сохранили в подготовительном
коммите. Истории `examples/`, `applications/SprPoP/`,
`applications/Volkov/` и PoP выделены через `git subtree split`, после чего
каждый результат импортирован как `main` самостоятельного Git-репозитория.
MAME сохранил свою исходную историю и не получил историю родительского SDK.
Новый `.gitignore` каждого проекта покрывает собственные `.exe`, объекты,
debug packages, носители, снимки, внешние источники и секреты локального
@@ -207,47 +222,66 @@ debug packages, носители, снимки, внешние источник
## Порядок работ и критерии готовности
1. **Зафиксировать текущую базу.** Список tracked/untracked файлов,
1. **Выполнено — зафиксировать текущую базу.** Список tracked/untracked файлов,
отдельный Git MAME, лицензии/внешние ресурсы, базовые результаты сборок
и smoke-тестов. Сохранить незавершённую отладочную и прикладную работу.
Критерий: никакой исходник не теряется при выделении истории.
2. **Стабилизировать контракт SDK.** В `app.mk` разделить build и run,
2. **Выполнено — стабилизировать контракт SDK.** В `app.mk` разделить build и run,
реализовать `SPRINTER_ROOT`, `MAME_HOME` и переопределения, упаковку
локального образа с проверкой `mtools`/`chdman`, общий профиль путей
и диагностику отсутствующих файлов. Перевести автотесты/launcher без
переноса дерева.
Критерий: приложение собирается без MAME и запускается с нестандартным
`MAME_BIN`/ROM/DSS/System HDD.
3. **Подготовить MAME отдельно.** Сохранить fork с точной baseline-revision,
3. **Выполнено локально — подготовить MAME отдельно.** Сохранить fork с точной baseline-revision,
stock/sdbg сборки и проверенным способом подготовки `MAME_HOME`.
Перенести MAME patch/общий MCP к их владельцу, проверить обоих провайдеров.
Критерий: два бинарника существуют одновременно, ROM/CHD и state не
коммитятся, patched DAP launch проверен.
4. **Выделить Examples.** Переписать относительные пути и источник RPG
4. **Выполнено — выделить Examples.** Переписать относительные пути и источник RPG
графики, определить формат релиза SDK+Examples. Критерий: каждый пример
собирается из собственного клона Examples при одном `SPRINTER_ROOT`,
локальные диски не затрагивают MAME или соседние проекты.
5. **Выделить приложения по одному.** Сначала SprPoP как наиболее близкий
5. **Выполнено — выделить приложения по одному.** Сначала SprPoP как наиболее близкий
к автономному контракту, затем Volkov с локальным viewer fixture, затем
архив PoP с его референсами. Переписать тесты и run-скрипты, сохраняя
их документы и историю. Критерий: каждый продукт собирается и проходит
доступные host/MAME проверки из изолированного клона без Examples и
других приложений.
6. **Выделить extension.** Научить VS Code находить SDK DAP независимо от
6. **Реализовано; остаётся ручная проверка установленного VSIX после разделения — выделить extension.** Научить VS Code находить SDK DAP независимо от
workspace, запускать build/run/debug приложения и показывать ошибки
разрешения путей/версий. Проверить VSIX в отдельном workspace SprPoP
или Volkov, а не только в `C-Compiler`. Критерий: F5 строит debug package,
ждёт DSS, доходит до `main`, принимает breakpoint/logpoint и клавиатуру;
опция родного окна MAME работает на macOS. Windows остаётся явно
ограниченной до отдельной реализации host transport.
7. **Очистить SDK и документы.** Заменить корневые цели, release-скрипт,
7. **Завершается — очистить SDK и документы.** Заменить корневые цели, release-скрипт,
README, `AGENTS.md`, инструкции автотеста/отладки и рабочие ссылки.
Проверить `make`, `make -C libc`, `make -C libbgi`, `make size-check`,
SDK host/sdbg tests и отдельные проекты. Критерий: в SDK нет tracked
приложений/примеров и игнорируемого вложенного MAME; инструкции используют
новые пути, а архивные исследования остаются доступны.
Каждый этап заканчивается проверкой в отдельном клоне и просмотром Git diff,
а не одним успешным запуском в старом общем дереве. Реальные переносы,
новые Git remote и публикация релизов выполняются отдельной задачей после
согласования этого плана.
## Проверка реализации на 2026-09-16
Успешно выполнены сборка SDK (`make`), отдельные сборки libc/libbgi,
создание `build/media/toolkit-tests.img`, release-smoke, 36 Python-тестов
source debugger (один platform skip), 12 тестов extension, все Examples,
SprPoP в обычном и `SRC_DEBUG=1` режимах с локальным CHD, 17 host-наборов
SprPoP, Volkov и PoP-Archive PoC. Живые последовательные DAP-прогоны
подтвердили patched `sdbg`, stock MAME с `osx`, клавиатурный ввод,
`SDBG_LOG` в обеих консолях и запуск SprPoP с собственного `hard2` до
`main`.
`make size-check` пока не принят: текущий baseline показывает 12 старых
увеличений (обычно +9 байт, `openenv` +188) и несколько исчезнувших прежних
тестов. Реорганизация не меняла libc/libbgi, поэтому эталон автоматически не
перезаписывался; расхождения нужно разобрать отдельно. После разделения ещё
нужна ручная проверка установленного VSIX в чистом workspace. Несколько
одновременных MAME, маршрутизация MCP между ними и Windows transport остаются
явно непроверенными сценариями.
Каждый этап заканчивается проверкой в отдельном репозитории и просмотром Git
diff. Новые Git remote для выделенных репозиториев и публикация их релизов
остаются отдельной задачей. MAME пока не публикуется: существующий `origin`
доступен только для чтения. Sprinter-CC публикуется в своём прежнем remote.