SHA256
Добавил гостевой режим, единые shine-ссылки и пометку о нестабильности мнений
This commit is contained in:
+34
@@ -0,0 +1,34 @@
|
||||
# Голосовой ввод и озвучка (STT/TTS)
|
||||
|
||||
Статус: `pending`
|
||||
|
||||
## Что сделано
|
||||
|
||||
- Добавлен голосовой ввод в:
|
||||
- личный чат;
|
||||
- форму ответа в канале;
|
||||
- форму нового сообщения в канале;
|
||||
- форму ответа в треде.
|
||||
- Добавлен инструмент «Прочесть вслух» для текста в чате.
|
||||
- Добавлен экран `Настройки инструментов ввода`:
|
||||
- STT через OpenAI (base URL, API key, качество, модель);
|
||||
- TTS через Browser / Piper HTTP / OpenAI TTS.
|
||||
- Для TTS добавлена кнопка «Проверить озвучку».
|
||||
- Если инструмент не настроен, показывается предложение перейти в настройки.
|
||||
- Настройки сохраняются локально и сохраняются между сессиями.
|
||||
|
||||
## Как проверять
|
||||
|
||||
1. Открыть `Настройки -> Настройки инструментов ввода`.
|
||||
2. В блоке STT заполнить OpenAI API key (и при необходимости URL/модель).
|
||||
3. В блоке TTS выбрать OpenAI, заполнить API key, при необходимости модель/голос.
|
||||
4. Нажать «Проверить озвучку» и убедиться, что звук воспроизводится.
|
||||
5. Открыть чат/канал/тред, нажать кнопку `🎤`, записать голос, нажать `OK`.
|
||||
6. Убедиться, что распознанный текст подставился в поле ввода.
|
||||
7. Отправить сообщение и проверить, что оно дошло.
|
||||
|
||||
## Ожидаемый результат
|
||||
|
||||
- Голосовой ввод работает во всех указанных формах.
|
||||
- Озвучка через OpenAI TTS работает с тем же ключом, что и STT (если ключ имеет нужные права).
|
||||
- При пустых настройках показывается понятный переход в настройки.
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
# Argon2id для входа/регистрации + блок «Расширенные»
|
||||
|
||||
Статус: `pending`
|
||||
|
||||
## Что сделано
|
||||
|
||||
- При непустом пароле derivation ключей переведён на Argon2id.
|
||||
- В derivation участвуют и логин, и пароль.
|
||||
- Для пустого пароля оставлен прежний тестовый режим (старый детерминированный вариант), чтобы сохранить текущий тестовый сценарий.
|
||||
- На экранах входа и регистрации добавлен блок `Расширенные` с кратким описанием схемы и параметров.
|
||||
|
||||
## Параметры Argon2id (текущий профиль)
|
||||
|
||||
- `t = 3`
|
||||
- `m = 262144 KiB` (256 MB)
|
||||
- `p = 1`
|
||||
- `dkLen = 32`
|
||||
|
||||
Формат salt:
|
||||
|
||||
- `saltSource = "shine-auth-v2|login=<lowercaseLogin>|suffix=<keySuffix>"`
|
||||
- `salt = first16bytes( SHA-256(saltSource) )`
|
||||
- `keySuffix` = `root.key` / `bch.key` / `dev.key`
|
||||
|
||||
## Как проверять
|
||||
|
||||
1. На входе/регистрации открыть `Расширенные` и проверить отображение описания.
|
||||
2. Проверить тестовый режим: оставить пароль пустым и убедиться, что вход работает по старому сценарию.
|
||||
3. Проверить новый режим: ввести непустой пароль и выполнить вход/регистрацию.
|
||||
4. Проверить, что одинаковый пароль при разных логинах даёт разные ключи (например, вход под двумя логинами с тем же паролем и проверка несовпадения производных ключей/сессий).
|
||||
|
||||
## Ожидаемый результат
|
||||
|
||||
- Непустой пароль использует Argon2id.
|
||||
- Пустой пароль остаётся тестовым legacy-вариантом.
|
||||
- UI показывает пользователю, как сейчас считается секрет.
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
## Краткое описание
|
||||
|
||||
На экране `Кошелёк -> Solana кошелёк` добавлен блок создания нового Solana-кошелька:
|
||||
- генерация случайного кошелька;
|
||||
- генерация публичного ключа из введённого приватного ключа Base58 (32 байта).
|
||||
|
||||
Добавлены:
|
||||
- валидация формата Base58;
|
||||
- проверка точной длины приватного ключа (ровно 32 байта после декодирования);
|
||||
- запрет ввода слишком длинного значения (`maxlength=44`);
|
||||
- статус `Подходит` для валидного ввода;
|
||||
- нередактируемое поле публичного ключа с возможностью копирования.
|
||||
|
||||
## Что проверять
|
||||
|
||||
1. Открыть `Кошелёк -> Solana кошелёк`.
|
||||
2. В блоке создания кошелька нажать `Сгенерировать случайный кошелёк`.
|
||||
3. Проверить, что появились:
|
||||
- приватный ключ Base58;
|
||||
- публичный ключ Base58 (в нередактируемом поле).
|
||||
4. Нажать `Копировать приватный` и `Копировать публичный` — убедиться, что значения копируются.
|
||||
5. Ввести невалидный приватный ключ (символы не из Base58) — увидеть ошибку формата.
|
||||
6. Ввести слишком короткий ключ — увидеть сообщение, что значение слишком короткое.
|
||||
7. Ввести валидный Base58-ключ на 32 байта — увидеть статус `Подходит`.
|
||||
8. Нажать `Сгенерировать из приватного ключа` — публичный ключ должен сгенерироваться.
|
||||
9. Проверить, что в поле ввода приватного ключа нельзя вставить/ввести более 44 символов.
|
||||
|
||||
## Ожидаемый результат
|
||||
|
||||
- Оба сценария генерации работают стабильно.
|
||||
- Для невалидного ввода показываются корректные сообщения.
|
||||
- Поле публичного ключа не редактируется, но значение можно скопировать.
|
||||
|
||||
## Статус
|
||||
|
||||
`pending`
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# Навигация по тредам и история сообщения
|
||||
|
||||
Статус: `pending`
|
||||
|
||||
## Краткое описание
|
||||
В экране треда добавлен явный переход `🧵 В тред` для каждого сообщения (включая ответы), чтобы можно было углубляться в любую ветку обсуждения.
|
||||
Также уточнены заголовки блоков: сверху история сообщений, отдельно текущее сообщение.
|
||||
|
||||
## Что проверять
|
||||
1. Открыть любой канал и перейти в тред сообщения.
|
||||
2. Нажать `🧵 В тред` у одного из ответов.
|
||||
3. Убедиться, что открывается тред выбранного ответа, а не исходного сообщения.
|
||||
4. Проверить, что в новом треде сверху показывается блок истории (`История выше...`), затем блок `Текущее сообщение`, затем `Ответы`.
|
||||
5. Проверить на мобильной ширине, что кнопки действий в карточке не ломают верстку.
|
||||
|
||||
## Ожидаемый результат
|
||||
- Переход в тред ответа работает стабильно для всех узлов дерева.
|
||||
- Пользователь видит структуру треда в логичном порядке: предки → текущее сообщение → потомки.
|
||||
- UI остаётся читаемым на мобильных экранах.
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# Короткая ссылка на сообщение `#/m/{blockchainName}/{blockNumber}`
|
||||
|
||||
Статус: `pending`
|
||||
|
||||
## Краткое описание
|
||||
Добавлен короткий роут сообщения `#/m/{blockchainName}/{blockNumber}` (поддерживает и вариант с hash).
|
||||
Переходы в тред из канала и из треда теперь формируются через `#/m/...`, а не через длинный путь канала.
|
||||
|
||||
## Что проверять
|
||||
1. Открыть сообщение в канале и перейти в тред — адрес должен быть формата `#/m/...`.
|
||||
2. Скопировать ссылку на тред сообщения и открыть в новой вкладке.
|
||||
3. Для ответа (reply) нажать `🧵 В тред` и убедиться, что тред открывается без ошибок `BAD_FIELDS`/`Не удалось определить hash`.
|
||||
4. Проверить шапку треда: UI должен попытаться восстановить красивый заголовок канала (`owner/channel`).
|
||||
5. Проверить, что старый маршрут `#/channel-thread-view/...` тоже продолжает работать.
|
||||
|
||||
## Ожидаемый результат
|
||||
- Короткий роут работает стабильно для постов и ответов.
|
||||
- Тред открывается даже если в URL нет hash (опциональный случай).
|
||||
- Ошибка про невозможность определить hash для открытия треда не воспроизводится.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Переход на history-router без `#` в URL
|
||||
|
||||
- Краткое описание:
|
||||
- UI переведён с hash-router на history API роутинг.
|
||||
- Ссылки на треды переведены в формат без hash сообщения: `/m/{blockchainName}/{blockNumber}`.
|
||||
- Навигация и шаринг-ссылки обновлены под `pathname`.
|
||||
|
||||
- Что проверять:
|
||||
- Открытие UI с корня (`/`) и переход на стартовую страницу без тёмного экрана.
|
||||
- Навигация между основными экранами (сообщения, каналы, профиль, настройки).
|
||||
- Переход в канал, открытие треда, ответ/лайк, шаринг ссылки.
|
||||
- Прямое открытие URL формата `/m/{blockchain}/{number}`.
|
||||
- Поведение после refresh (F5) при настроенном серверном fallback на `index.html`.
|
||||
|
||||
- Ожидаемый результат:
|
||||
- Приложение работает без `#` в адресе.
|
||||
- Треды открываются и действия по сообщению (reply/like/share) работают корректно.
|
||||
- Нет зависания на пустом/тёмном экране при входе.
|
||||
|
||||
- Статус:
|
||||
- `pending`
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# Карточка автора в сообщении канала и стрелка «назад» по истории
|
||||
|
||||
- Краткое описание:
|
||||
- В `channel-view` в карточке сообщения добавлена вложенная плитка автора (аватар, логин, номер сообщения, дата/время).
|
||||
- Клик по плитке автора открывает профиль пользователя.
|
||||
- Клик по области сообщения (вне плитки автора и вне action-кнопок) открывает тред, как кнопка `Тред`.
|
||||
- Стрелка `назад` в `channel-view`, `channel-thread-view` и профиле переведена на реальную навигацию `history.back()`.
|
||||
- Маршрут профиля переименован с `user-profile-view` на `user`.
|
||||
|
||||
- Что проверять:
|
||||
- В канале у каждого сообщения сверху есть вложенная плитка автора.
|
||||
- Клик по вложенной плитке открывает профиль автора.
|
||||
- Клик по тексту/телу сообщения открывает тред.
|
||||
- Кнопки `Лайк`, `Ответить`, `Тред`, `Отправить` работают отдельно и не конфликтуют с кликом по карточке.
|
||||
- Стрелка `назад` возвращает на предыдущий экран по реальной истории переходов.
|
||||
- При отсутствии истории стрелка `назад` не делает переход.
|
||||
- Переходы на профиль работают по новому маршруту `user/{login}/...`.
|
||||
|
||||
- Ожидаемый результат:
|
||||
- Навигация в каналах и тредах соответствует ожидаемому UX.
|
||||
- Переходы в профиль и назад по истории работают стабильно.
|
||||
- Старый маршрут `user-profile-view` больше не используется.
|
||||
|
||||
- Статус:
|
||||
- `pending`
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
# Шапка канала и унификация карточек в треде
|
||||
|
||||
- Краткое описание:
|
||||
- В `channel-view` убрана отдельная кнопка `О канале` из тела экрана.
|
||||
- В шапке добавлена одна кнопка-лейбл формата `owner/channel` на уровне стрелки назад.
|
||||
- Нажатие по кнопке `owner/channel` открывает тот же модал «О канале».
|
||||
- В `channel-thread-view` карточки сообщений приведены к виду, аналогичному карточкам в канале:
|
||||
- верхняя плитка автора (аватар, логин, номер, время),
|
||||
- действия `Лайк`, `Ответить`, `Тред`, `Отправить`.
|
||||
- Клик по телу карточки в треде теперь открывает вложенный (более глубокий) тред этого сообщения.
|
||||
- Уменьшены отступы между карточками/блоками в треде.
|
||||
|
||||
- Что проверять:
|
||||
- В канале в шапке справа отображается единая кнопка `owner/channel`.
|
||||
- Кнопка `owner/channel` открывает модал «О канале».
|
||||
- Старой кнопки `О канале` в контенте экрана нет.
|
||||
- В треде визуал карточек совпадает по паттерну с каналом.
|
||||
- В треде клик по телу сообщения ведёт глубже в тред.
|
||||
- Клик по плитке автора в треде ведёт в профиль пользователя.
|
||||
- Межкарточные отступы в треде компактнее.
|
||||
|
||||
- Ожидаемый результат:
|
||||
- Шапка канала и карточки треда выглядят и работают единообразно.
|
||||
- Навигация по вложенным тредам выполняется кликом по сообщению.
|
||||
|
||||
- Статус:
|
||||
- `pending`
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
# Поднятие верхней фиксированной шапки (канал и тред)
|
||||
|
||||
- Краткое описание:
|
||||
- В `channel-view` и `channel-thread-view` верхняя фиксированная шапка (стрелка назад + центральная кнопка с названием) поднята выше к верхней границе экрана.
|
||||
- Центральная кнопка и стрелка дополнительно подняты внутри шапки для более плотного позиционирования.
|
||||
- Поведение hover/focus сохранено без визуального «прыжка» центральной кнопки.
|
||||
|
||||
- Что проверять:
|
||||
- В канале и в треде верхняя шапка визуально выше, чем до правки.
|
||||
- Кнопка по центру и стрелка назад подняты и находятся на одной линии.
|
||||
- При наведении курсора центральная кнопка не смещается.
|
||||
- Шапка остаётся фиксированной при прокрутке.
|
||||
|
||||
- Ожидаемый результат:
|
||||
- Верхняя навигационная область выглядит компактнее и стабильнее.
|
||||
|
||||
- Статус:
|
||||
- `pending`
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
# Профиль: упрощение + чат: UX меню и голосовой ввод
|
||||
|
||||
- Краткое описание:
|
||||
- В `profile-view` убрана кнопка `Обновить` и статусная строка (`Профиль обновлён`/ошибки).
|
||||
- Кнопка `Изменить профиль` переименована в `Редактировать профиль`.
|
||||
- В личном чате обновлены UX-сценарии:
|
||||
- контекстное меню на сообщении (`Копировать`, `Прочесть`) с закрытием кликом вне меню;
|
||||
- тост `Сообщение скопированно` при копировании;
|
||||
- обновлённый модал голосового ввода (`Отмена`, `OK`, `Распознать и сразу отправить сообщение`);
|
||||
- фоновое распознавание и авто-отправка для сценария «сразу отправить»;
|
||||
- для `OK` отображается режим ожидания распознавания с последующей вставкой текста в поле ввода.
|
||||
|
||||
- Что проверять:
|
||||
- На вкладке профиля отсутствуют кнопка `Обновить` и зелёный статус `Профиль обновлён`.
|
||||
- Кнопка вверху профиля называется `Редактировать профиль`.
|
||||
- В чате по клику на сообщение открывается компактное меню с двумя пунктами.
|
||||
- Копирование текста сообщения работает и показывает короткий тост.
|
||||
- Прочтение сообщения вслух запускается сразу.
|
||||
- Голосовой ввод корректно работает в двух режимах: вставка текста и авто-отправка после распознавания.
|
||||
|
||||
- Ожидаемый результат:
|
||||
- Профиль выглядит чище, без лишних статусов и ручной перезагрузки.
|
||||
- В личных сообщениях управление сообщениями и голосовым вводом работает стабильно и предсказуемо.
|
||||
|
||||
- Статус:
|
||||
- `pending`
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
# DM: Ctrl+Enter, автоскролл и время в списке
|
||||
|
||||
- Статус: `pending`
|
||||
|
||||
## Что сделано
|
||||
|
||||
- Исправлено поведение ввода в чате:
|
||||
- `Enter` отправляет сообщение;
|
||||
- `Ctrl+Enter` добавляет перенос строки в поле ввода.
|
||||
- В списке личных сообщений время последнего сообщения всегда отображается в правой колонке снизу.
|
||||
- Бейдж непрочитанных сообщений (если есть) отображается над временем, не заменяя его.
|
||||
- Обновлены стили карточки диалога для компактного и стабильного выравнивания.
|
||||
|
||||
## Что проверять
|
||||
|
||||
- В чате:
|
||||
- нажать `Ctrl+Enter` в середине текста и убедиться, что вставляется новая строка;
|
||||
- нажать `Enter` и убедиться, что сообщение отправляется.
|
||||
- В списке диалогов:
|
||||
- при `unread=0` справа снизу показывается время;
|
||||
- при `unread>0` сверху бейдж, снизу всё равно показывается время;
|
||||
- длинный текст последнего сообщения обрезается многоточием и не наезжает на время.
|
||||
|
||||
## Ожидаемый результат
|
||||
|
||||
- Управление вводом работает как в постановке.
|
||||
- Время в карточке диалога не исчезает при наличии непрочитанных сообщений.
|
||||
- Верстка карточки остаётся компактной и без сдвигов.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Личные сообщения: правая мета-колонка и Enter/Ctrl+Enter
|
||||
|
||||
- Краткое описание:
|
||||
- В списке `Личные сообщения` обновлена правая колонка карточки диалога:
|
||||
- сверху отображается бейдж количества непрочитанных (если есть);
|
||||
- снизу маленьким шрифтом отображается дата/время последнего сообщения;
|
||||
- если сообщений нет, вместо времени отображается `-`.
|
||||
- В экране чата нижний блок ввода закреплён (sticky) и остаётся на месте при прокрутке.
|
||||
- В поле ввода чата изменено поведение клавиш:
|
||||
- `Enter` отправляет сообщение;
|
||||
- `Ctrl+Enter` добавляет перенос строки и не отправляет сообщение.
|
||||
|
||||
- Что проверять:
|
||||
- В карточках диалогов справа корректно показываются непрочитанные/время/прочерк.
|
||||
- В чате нижний блок ввода не уезжает при прокрутке истории.
|
||||
- `Enter` отправляет сообщение из textarea.
|
||||
- `Ctrl+Enter` вставляет новую строку в textarea.
|
||||
|
||||
- Ожидаемый результат:
|
||||
- Список диалогов показывает полезную мета-информацию в стабильном формате.
|
||||
- Ввод сообщений в чате работает в привычной схеме Enter/многострочность.
|
||||
|
||||
- Статус:
|
||||
- `pending`
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
# Деплой на `93.170.12.154`: Caddy + systemd
|
||||
|
||||
- Статус: `pending`
|
||||
|
||||
## Что сделано
|
||||
|
||||
- Выполнен деплой UI и серверной части на `player@93.170.12.154`.
|
||||
- Создана структура:
|
||||
- `/home/player/SHiNE/caddy`
|
||||
- `/home/player/SHiNE/SHiNE-server`
|
||||
- `/home/player/SHiNE/SHiNE-UI`
|
||||
- Перенесены локальные данные:
|
||||
- `data/shine.sqlite`
|
||||
- `data/*.bch`
|
||||
- Настроен `shine-server.service` через `systemd`.
|
||||
- Настроен `Caddy`:
|
||||
- no-cache заголовки;
|
||||
- SPA fallback на `index.html`;
|
||||
- проксирование `/ws` на `127.0.0.1:7070`.
|
||||
- Добавлена документация в `Dev_Docs/deploy/` и файл по legacy-серверу `45.136.124.227`.
|
||||
|
||||
## Что проверять
|
||||
|
||||
- Открыть `https://shineup.me/start-view`.
|
||||
- Обновить страницу (`Ctrl+F5`) на роуте вида `/start-view` и убедиться, что нет 404.
|
||||
- Проверить авторизацию и базовые действия в UI.
|
||||
- Проверить, что вебсокет соединение устанавливается.
|
||||
|
||||
## Ожидаемый результат
|
||||
|
||||
- UI и сервер доступны на новом хосте.
|
||||
- Сервисы `shine-server` и `caddy` в статусе `active`.
|
||||
- Маршруты SPA и no-cache работают как ожидается.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Редактирование сообщений: история и delete через пустой edit
|
||||
|
||||
Статус: `pending`
|
||||
|
||||
## Краткое описание
|
||||
- Исправлено применение edit-блоков в чтении канала/треда (актуальный текст и версии).
|
||||
- Для удаления сообщения используется edit с пустым `text` (`textLen=0`).
|
||||
- В UI добавлена метка `изменено N`, по нажатию открывается история версий.
|
||||
- Кнопка редактирования оставлена как иконка карандаша без текста.
|
||||
- В модалке редактирования: сверху `Отмена` и `ОК`, снизу отдельная `Удалить`.
|
||||
|
||||
## Что проверять
|
||||
1. В канале отредактировать свой пост обычным текстом.
|
||||
2. Убедиться, что текст сообщения сразу обновился и появилась метка `изменено 1`.
|
||||
3. Нажать на метку `изменено 1` и проверить историю: сверху оригинал, ниже изменения, последнее внизу.
|
||||
4. Нажать `Удалить` в модалке редактирования, убедиться, что сообщение отображается как `удалено`.
|
||||
5. Повторно отредактировать удалённое сообщение непустым текстом и проверить, что текст снова отображается.
|
||||
6. Повторить пп.1-5 в экране треда.
|
||||
7. Проверить личный канал (пара A↔B), что edit и история корректно видны для сообщений владельца.
|
||||
|
||||
## Ожидаемый результат
|
||||
- Edit всегда влияет на отображаемый текст сообщения.
|
||||
- История версий открывается из метки `изменено N` и содержит полный хронологический список версий.
|
||||
- Удаление работает как edit с пустым текстом, без физического удаления блока.
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
# Каналы: убрать кнопку тред, две вкладки, и автоскролл DM
|
||||
|
||||
Статус: `pending`
|
||||
|
||||
## Краткое описание
|
||||
- В карточках сообщений канала и треда убрана кнопка `Тред` (`#`).
|
||||
- В `channels-list` оставлены только две вкладки: `Каналы` и `Мои каналы` (вкладка `Чаты` удалена).
|
||||
- Удалённые сообщения в канале и треде отображаются с красной пометкой `Сообщение удалено`.
|
||||
- В личных сообщениях усилен автоскролл вниз: при открытии чата и после отправки нового сообщения.
|
||||
|
||||
## Что проверять
|
||||
1. Открыть канал, проверить, что в действиях сообщения нет кнопки `Тред`.
|
||||
2. Открыть тред, проверить, что в действиях сообщения также нет кнопки `Тред`.
|
||||
3. В списке каналов сверху проверить только 2 вкладки: `Каналы` и `Мои каналы`.
|
||||
4. Удалить сообщение edit-ом в канале и в треде, убедиться, что видно красную пометку `Сообщение удалено`.
|
||||
5. Открыть любой личный чат, убедиться, что экран сразу внизу ленты.
|
||||
6. Отправить новое сообщение в личке, убедиться, что лента остаётся прокрученной вниз и сообщение видно сразу.
|
||||
|
||||
## Ожидаемый результат
|
||||
- Лишняя кнопка `Тред` отсутствует.
|
||||
- Вкладка `Чаты` отсутствует, навигация в списке каналов состоит из 2 вкладок.
|
||||
- Удалённые сообщения визуально выделены красным в канале и в треде.
|
||||
- В DM нет ручной прокрутки после входа в чат и после отправки новых сообщений.
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
## Краткое описание
|
||||
Добавлена отрисовка пользовательских аватаров (из профиля, Arweave) в карточках сообщений каналов, тредов и в списке личных сообщений.
|
||||
|
||||
## Что проверять
|
||||
1. В канале у сообщений вместо буквы показывается аватар автора (если в профиле задан).
|
||||
2. В треде у сообщений вместо буквы показывается аватар автора (если в профиле задан).
|
||||
3. В списке личных сообщений у диалогов показывается аватар собеседника (если в профиле задан).
|
||||
4. Если аватар не задан или недоступен, корректно остаётся fallback (буква).
|
||||
5. Форма и размер остаются круглыми и визуально не ломают карточки.
|
||||
|
||||
## Ожидаемый результат
|
||||
Аватары подгружаются автоматически после открытия экрана; при отсутствии аватара отображается стандартный fallback без ошибок UI.
|
||||
|
||||
## Статус
|
||||
`pending`
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
## Краткое описание
|
||||
Добавлены новые типы connection-связей в блокчейне и API:
|
||||
- `known_person` (`60/61`)
|
||||
- `shine_confirmed` (`70/71`)
|
||||
- `shine_seen` (`74/75`)
|
||||
|
||||
## Что проверять
|
||||
1. `AddBlock` принимает новые `msg_sub_type` для `type=3`.
|
||||
2. Связи корректно попадают в `connections_state`:
|
||||
- ON создаёт/обновляет запись;
|
||||
- OFF удаляет запись соответствующего ON-типа.
|
||||
3. `GetUserConnectionsGraph` возвращает новые поля:
|
||||
- `outKnownPersons`, `inKnownPersons`
|
||||
- `outShineConfirmed`, `inShineConfirmed`
|
||||
- `outShineSeen`, `inShineSeen`
|
||||
4. Клиент `setUserRelation` принимает `kind`:
|
||||
- `known_person`, `shine_confirmed`, `shine_seen`.
|
||||
|
||||
## Ожидаемый результат
|
||||
Новые связи работают как обычные ON/OFF relation-типы, но не ломают текущие friend/contact/follow и остальные существующие связи.
|
||||
|
||||
## Статус
|
||||
`pending`
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
## Краткое описание
|
||||
Перестроен блок связей в профиле чужого пользователя и добавлен UI для одностороннего "мнения" (`known_person` / `shine_confirmed` / `shine_seen`) с взаимным исключением на уровне UI.
|
||||
|
||||
## Что проверять
|
||||
1. Порядок базовых строк в профиле:
|
||||
- Контакт
|
||||
- Близкий друг
|
||||
- Подписка
|
||||
2. Под этими строками отображается блок мнений:
|
||||
- при отсутствии мнения кнопка `Добавить связь`;
|
||||
- при наличии мнения кнопка `Изменить связи`;
|
||||
- показываются текстовые формулировки для активного мнения.
|
||||
3. В модальном меню:
|
||||
- варианты добавления (синие);
|
||||
- `Убрать мнение` (красная).
|
||||
4. При смене мнения отправляется последовательность:
|
||||
- OFF старой связи,
|
||||
- ON новой связи.
|
||||
5. Для новых мнений показываются только исходящие (`out*`) оценки текущего пользователя (односторонняя логика).
|
||||
|
||||
## Ожидаемый результат
|
||||
Пользователь управляет одним активным мнением через UI, состояние читается корректно и не ломает существующие friend/contact/follow кнопки.
|
||||
|
||||
## Статус
|
||||
`pending`
|
||||
Reference in New Issue
Block a user