Files
SHiNE-server/tools/test-publisher/AGENTS.md
T

42 lines
4.3 KiB
Markdown

# 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/<id>`;
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=<canonical channel>` без согласованного изменения импортера/Viewer.
## Viewer
Viewer распознаёт Arweave URL в тексте POST и показывает изображения inline. Экран «Проверка данных» независимо считает SHA-256 Frame, проверяет доступные `prevHash` и `prevLineHash`, показывает отсутствие соседнего блока как «нет данных», а доказанное несовпадение — как ошибку. Подпись ANS-104 нельзя помечать локально проверенной, если gateway не предоставил сырую подпись DataItem.