# Репосты в каналах и тредах

- Статус:
  `future`

- Горизонт:
  `medium`

- Ориентир:
  1-2 месяца

- Решение от 2026-05-24:
  Репосты временно убраны из активной разработки. Фича уже была частично реализована, но не доведена до финальной проверки. Чтобы она не мешала запуску проекта, пользовательский вход в репосты отключён в UI, а сервер больше не принимает новые `TEXT_REPOST` через `AddBlock`.

## Что должна делать фича

Репост должен позволять взять сообщение из канала или треда и опубликовать его в один из своих каналов с комментарием.

Ожидаемый пользовательский сценарий после возврата к задаче:

1. Пользователь открывает сообщение в канале или треде.
2. Нажимает `Репост`.
3. Выбирает один из своих каналов.
4. Добавляет комментарий.
5. Отправляет репост.
6. В целевом канале появляется новый пост-репост.
7. У репоста есть переход к исходному сообщению через действие `Оригинал`.

## Что уже есть в коде

- В блокчейн-формате зарезервирован и описан подтип `TEXT_REPOST (30)`.
- Парсер блокчейна умеет распознавать тело репоста как `TextLineBody`.
- В UI есть функция сборки тела репоста:
  `shine-UI/js/services/auth-service.js`, `makeTextRepostBodyBytes`.
- В UI есть клиентская операция:
  `shine-UI/js/services/auth-service.js`, `addBlockRepost`.
- В экране канала был обработчик репоста:
  `shine-UI/js/pages/channel-view.js`, `onRepost`.
- В экране треда был обработчик репоста:
  `shine-UI/js/pages/channel-thread-view.js`, `onRepost`.
- Серверная выдача каналов и тредов частично учитывает `TEXT_REPOST` и target-поля:
  `targetBlockchainName`, `targetBlockNumber`, `targetBlockHash`.
- В списке подписок `TEXT_REPOST` считается публикацией канала.

## Что сейчас отключено

- В `shine-UI/js/pages/channel-view.js` кнопка `Репост` больше не создаётся и не добавляется в список действий сообщения.
- В `shine-UI/js/pages/channel-thread-view.js` кнопка `Репост` больше не создаётся и не добавляется в список действий ответа/сообщения треда.
- В `shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java` добавлена явная временная блокировка:
  если новый блок имеет `type=1` и `subType=TEXT_REPOST (30)`, `AddBlock` возвращает ошибку `repost_disabled`.

## Что осталось активным намеренно

- Константа `TEXT_REPOST (30)` остаётся в коде и документации как зарезервированный формат.
- Парсер блокчейна продолжает знать формат `TEXT_REPOST`, чтобы не потерять уже написанную основу и не ломать потенциальное чтение старых тестовых данных.
- Код формирования репоста в `auth-service.js` не удалён: его можно будет использовать как основу при возвращении к задаче.
- Код отображения target-полей и перехода к оригиналу не удалён: он нужен для будущей проверки и возможной совместимости с уже созданными тестовыми блоками.

## Почему это не лежит в Pending_Features

`Dev_Docs/Pending_Features/` предназначена для фич, которые уже реализованы и ждут ручной проверки.

Репосты сейчас не подходят под этот статус: они не должны проверяться как готовая фича, потому что пользовательский сценарий временно закрыт, а серверная запись новых репостов заблокирована. Поэтому старый pending-файл удалён, а задача перенесена сюда как будущая.

## Что сделать при возврате к реализации

1. Решить, остаётся ли формат `TEXT_REPOST (30)` финальным.
2. Если формат меняется, заранее предупредить пользователя и получить отдельное подтверждение на изменение блокчейн-формата.
3. Вернуть UI-кнопки репоста в:
   - `shine-UI/js/pages/channel-view.js`;
   - `shine-UI/js/pages/channel-thread-view.js`.
4. Снять временную блокировку `repost_disabled` в:
   `shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java`.
5. Проверить `auth-service.js`:
   - `makeTextRepostBodyBytes`;
   - `addBlockRepost`;
   - актуализацию вершины блокчейна перед `AddBlock`;
   - корректность target-полей исходного сообщения.
6. Проверить серверное чтение:
   - `GetChannelMessages`;
   - `GetMessageThread`;
   - отображение `targetBlockchainName`, `targetBlockNumber`, `targetBlockHash`.
7. Добавить или обновить тесты на успешный репост и отказ некорректных target-полей.
8. Обновить документацию:
   - `Dev_Docs/Blockchain/11_TEXT_Blocks.md`;
   - `Dev_Docs/Blockchain/CHANGELOG.md`;
   - `Dev_Docs/API/04_Add_Block_to_Blockchain_API.md`;
   - документы API чтения каналов/тредов, если изменятся поля ответа.
9. После реализации перенести задачу из `Dev_Docs/Future_Features/` в `Dev_Docs/Pending_Features/` как фичу, требующую ручной проверки.

## Минимальный чек-лист ручной проверки в будущем

1. Репост из сообщения канала в свой канал.
2. Репост из ответа в треде в свой канал.
3. Ошибка при попытке репоста в чужой канал.
4. Переход `Оригинал` из репоста к исходному сообщению.
5. Корректное отображение комментария к репосту.
6. Корректная работа после перезагрузки страницы.
7. Отсутствие поломки обычных постов, ответов, лайков и отправки ссылки.
