# Инструкция Codex: применить ANS-104 test5590 patch ## Цель Перевести пользовательский blockchain SHiNE на Frame v1 внутри готовых ANS-104 DataItems и убрать старый SHINE-ARCHIVE/файловое хранение цепочек. ## Жёсткое ограничение **Не изменять ничего в `ESP32/`.** В этом patch нет ни одного файла `ESP32/**`. Remote/homeserver signer, завязанный на устройство, намеренно не мигрирован. Не пытаться «заодно исправить» его в рамках этого patch. ## Применение 1. Распаковать patch поверх корня репозитория, сохраняя относительные пути. 2. Удалить все пути из корневого `DELETE_FILES.txt`. 3. Проверить, что `git diff -- ESP32` пуст. 4. Использовать чистую/dev test DB. `migration_v24.sql` намеренно откажется мигрировать непустую blockchain DB, потому что backward compatibility со старым block format не требуется. ## Arweave config Минимально для публикации: ```properties arweave.blocks.publish.enabled=true arweave.blocks.publish.intervalMinutes=15 arweave.blocks.publish.gateway=https://arweave.net arweave.blocks.publish.walletJwkPath=/ABSOLUTE/SECRET/PATH/arweave-wallet.json ``` JWK не коммитить. Для discovery/import: ```properties arweave.blocks.sync.enabled=true arweave.blocks.sync.intervalMinutes=15 arweave.blocks.sync.gateway=https://turbo-gateway.com arweave.blocks.sync.startBlockHeight=0 ``` На тестах желательно установить `startBlockHeight` на высоту начала `test5590`, чтобы не сканировать лишнюю историю. ## Test namespace Child DataItem: ```text App=test5590 ``` Channel child: ```text App=test5590 c= ``` Root bundle: ```text Bundle-Format=binary Bundle-Version=2.0.0 App=test5590-batch ``` Перед production-start test namespace должен быть заменён отдельным осознанным изменением. ## Проверки после применения Из корня репозитория: ```bash node --check shine-UI/js/services/ans104-data-item.js node --check shine-UI/js/services/auth-service.js node --check shine-UI/js/app.js node --check shine-UI/js/pages/settings-view.js ``` Java/Gradle: ```bash ./gradlew testClasses ./gradlew test ``` Затем локальный smoke test по штатной инструкции проекта, например `./gradlew startLocal`. В среде, где готовился patch, Gradle wrapper не смог скачать Gradle 8.14 из-за отсутствия внешнего сетевого доступа к `services.gradle.org`. Поэтому полный Gradle compile/test обязательно прогнать после применения в обычной dev-среде. ## Smoke scenario 1. Создать/использовать тестового пользователя с локальным blockchain Ed25519 key. 2. Добавить обычный block и убедиться, что `blocks.block_bytes` начинается с ANS-104 DataItem, а `data_item_id` заполнен. 3. Создать channel и post; проверить `c=`. 4. Включить publisher, дождаться цикла или вызвать сервис тестом; проверить root Arweave tx. 5. На второй чистой test DB включить importer и убедиться, что `App=test5590` blocks восстанавливаются в правильном порядке. 6. Убедиться, что imported blocks имеют `arweave_publish_pending=false`. 7. Проверить, что повторный discovery не создаёт дублей. ## Не делать в этом patch - не добавлять backward compatibility Frame v0; - не возвращать `.bch` storage; - не возвращать SHINE-ARCHIVE; - не менять ESP32; - не мигрировать remote/homeserver signing без отдельного решения пользователя; - не заменять `prevHash` на Arweave DataItem ID.