# AGENTS.md — SHiNE test channels Эта папка — тестовый генератор реальной пользовательской активности SHiNE. Это не часть консенсуса и не отдельный протокол. ## Назначение Один тестовый пользователь публикует заранее подготовленные POST-блоки сразу в несколько своих каналов. Все POST должны идти через обычный SHiNE `AddBlock`, поэтому сервер проверяет их как обычные пользовательские блоки и затем использует штатную Arweave-публикацию. ## Почему publisher один У всех каналов одного пользователя одна глобальная blockchain-цепочка (`blockNumber + prevHash`). Нельзя запускать независимый publisher на каждый канал: они могут одновременно построить следующий глобальный блок. `publisher_multi.py` сериализует публикации всех каналов, но хранит отдельные `prevLineNumber/prevLineHash` и позиции очередей. ## Каналы в примере - `jokes` — короткие анекдоты; часть постов содержит 1–2 изображения. - `mindfulness` — короткие практики осознанности. - `positive` — позитивные и мотивирующие напоминания. - `friends` — советы об общении и дружбе, в духе классических принципов человеческого общения, без выдачи текста за дословные цитаты. - `wisdom` — короткие духовные/созерцательные мысли. Не придумывать цитаты и не приписывать человеку слова без источника. ## Изображения `prepare/prepare_all_channels.py` проходит все `channels[].queue_file`. Для каждого локального файла: 1. вычисляет SHA-256; 2. смотрит общий `upload-state.json`; 3. если ID уже известен — проверяет `https://gateway/`; 4. если файл существует — повторно НЕ загружает; 5. если отсутствует/ID неизвестен — загружает через Arweave JWK; 6. пишет `.prepared.json`, добавляя постоянные Arweave URL в текст POST и сохраняя `images[]` как служебные метаданные. JWK используется только подготовщиком. Не помещать приватный JWK или blockchain key в git/архив. ## State `multi-state.json` содержит один global head и отдельное состояние каждого канала. Pending DataItem записывается до `AddBlock`; при неопределённом состоянии глобальной цепочки publisher обязан остановиться, а не строить форк. ## Не менять - SHiNE Frame v1 и его SHA-256. - `prevHash` глобальной цепочки. - `prevLineNumber/prevLineHash` канальной линии. - ANS-104 signing/deepHash без сверки с серверной реализацией. - `App=test5590` и `c=` без согласованного изменения импортера/Viewer. ## Viewer Viewer распознаёт Arweave URL в тексте POST и показывает изображения inline. Экран «Проверка данных» независимо считает SHA-256 Frame, проверяет доступные `prevHash` и `prevLineHash`, показывает отсутствие соседнего блока как «нет данных», а доказанное несовпадение — как ошибку. Подпись ANS-104 нельзя помечать локально проверенной, если gateway не предоставил сырую подпись DataItem.