BarkFluff // Логи разработки
7 subscribers
2.37K links
Download Telegram
📦 Liis17/BarkFluff [dev]
👤 Liis17

сборка андроид клиента

📂 Android
├ Barkfluff.Client.Android 15
├ core 1
└ gradlew ✏️1
Сборка успешна

📱 Android Client v0.0.119 beta
📌 Ветка: dev
🔗 Коммит: 8a33ba7274f4874f598acc3db56daa45ab57206f
👤 Автор: Liis17
📦 Liis17/BarkFluff [dev]
👤 Liis17

Bots: fan-out SessionRevokedConsumer для отзыва сессий (масштабирование)

По docs/scaling/_shared-token-revocation.md: per-instance очередь
session-revoked-bots-{InstanceId} + AutoDelete, консистентно с 8 другими
сервисами. Сегодня Bots не обслуживает user-токены — консистентность
паттерна и future-proofing.

📂 Backend
└ BarkFluff.Bots 1 ✏️1
📂 Tests
└ BarkFluff.Bots.Tests 1
📦 Liis17/BarkFluff [dev]
👤 Liis17

configuration: ключ Redis для FastAuth (ServiceId=7)

FastAuth теперь читает Configuration["Redis"] (Redis-стор QR-сессий +
pub/sub wake-up стримов, см. docs/scaling/fastauth.md), но ключ
заводился только для Messages (6), Federation (15), Onliner (9) и
Bots (14) — без записи сервис падает при старте с
'Redis configuration is missing'. Значение подставит
ConfigurationDefaultsPopulator (redis:6379).

📂 Backend
└ BarkFluff.Configuration 1
📦 Liis17/BarkFluff [dev]
👤 Liis17

fastauth: масштабирование — сессии в Redis + pub/sub wake-up стримов

In-memory FastAuthSessionsManager + FastAuthExpirationService не давали
поднять N инстансов: QR создан на A, подтверждение на B — TryGet вернул
null (см. docs/scaling/fastauth.md).

- IFastAuthSessionStore + RedisFastAuthSessionStore: ключ
fastauth:session:{id}, TTL = 5 мин + 30 сек slack (Expired отличим от
NotFound), финализированная сессия живёт FinalRetention=30 сек для
реконнекта; переходы Scan/Accept/Reject/Expire — Lua-скрипты
...

📂 Backend
└ BarkFluff.FastAuth 4 ✏️8 3
📦 Liis17/BarkFluff [dev]
👤 Liis17

fastauth-тесты: fakes стора и шины, адаптация под Redis-архитектуру

- Fakes/InMemoryFastAuthSessionStore — та же машина состояний, что в
Lua-скриптах RedisFastAuthSessionStore (исполняемая спецификация
переходов): Scan/Accept/Reject/Expire атомарны под lock, захват
подписчика — SETNX-семантика с токеном владельца.
- Fakes/InMemoryFastAuthEventBus — локальная доставка событий ожидающему.
- Хендлер-тесты переведены на стор+шину; новые случаи: локальный дедлайн
пишет EXPIRED без sweeper'а, реконнект в окне FinalRetention получает
токены сразу из стора, освобождение захвата подписчика после
...

📂 Tests
└ BarkFluff.FastAuth.Tests 3 ✏️6 3
📦 Liis17/BarkFluff [dev]
👤 Liis17

Federation: конкурентный забор outbox через FOR UPDATE SKIP LOCKED

По docs/scaling/federation.md (вариант A): claim-then-send — батч
застолблен статусом Processing с lease (NextAttemptAt+2мин) в короткой
транзакции (raw SQL FOR UPDATE SKIP LOCKED, precedent PrekeyStorage;
LINQ-расширения в EFCore.PG 10 отсутствуют), отправка вне блокировки
строк. Reclaim возвращает застрявшие после крэша строки в Pending,
Processing-голова чата блокирует следующие события (head-of-line).
Миграция не нужна: Status хранится как int.

📂 Backend
└ BarkFluff.Federation ✏️2
📂 Tests
└ BarkFluff.Federation.Tests ✏️1
📦 Liis17/BarkFluff [dev]
👤 Liis17

docs: FastAuth масштабируем — обновлены scaling-план, README-сводка и Obsidian

- docs/scaling/fastauth.md: вердикт «МОЖЕТ (реализовано)», что сделано
(Redis-стор, Lua-переходы, pub/sub wake-up, локальный дедлайн,
глобальный захват подписчика), битый путь к образцу
SecretMessageBuffer исправлен.
- docs/scaling/README.md: FastAuth перенесён из « не могут» в « могут».
- Obsidian/ClaudeVault/Backend/FastAuth.md: tech stack, архитектура,
защиты, метрики (sessions_removed упразднён), конфиг с Redis.

📂 Obsidian
└ ClaudeVault ✏️1
📂 docs
└ scaling ✏️2
📦 Liis17/BarkFluff [dev]
👤 Liis17

Federation: OutboxJanitor как single-runner под Redis-локом

По docs/scaling/federation.md: чистку выполняет один инстанс
(federation:lock:outbox-janitor, TTL 2ч с продлением лидером), остальные
пропускают тик. ISingleRunner как test-seam + FakeSingleRunner в тестах.
Паттерн — RedisSingleRunner из Onliner.

📂 Backend
└ BarkFluff.Federation 2 ✏️2
📂 Tests
└ BarkFluff.Federation.Tests 1 ✏️1
📦 Liis17/BarkFluff [dev]
👤 Liis17

Federation: cooldown discovery-триггера в Redis (SET NX EX 300)

По docs/scaling/federation.md: DiscoveryTriggerRateLimiter был in-memory
— при N инстансах discovery одного сервера запускался с каждого. Теперь
ключ fed:discovery:{server} общий, cooldown глобальный. Интерфейс
IDiscoveryTriggerRateLimiter как test-seam, тесты на Moq-паттерне
ChatCreatedQuotaLimiterTests, фейк в тест-хостах.

📂 Backend
└ BarkFluff.Federation 2 ✏️2
📂 Tests
└ BarkFluff.Federation.Tests 1 ✏️3
📦 Liis17/BarkFluff [dev]
👤 Liis17

android: шапка чата — блоки-чипы вместо сплошной подложки (Telegram-style)

Вместо одной полупрозрачной подложки на всю ширину chatHeaderBar теперь
три отдельных скруглённых блока (back, имя/статус, звонок/меню/аватар),
между которыми виден блюр обоев. Без обоев поведение не изменилось.

📂 Android
└ Barkfluff.Client.Android ✏️2
📦 Liis17/BarkFluff [dev]
👤 Liis17

Federation: fan-out инвалидация кэшей при ротации ключа подписи

По docs/scaling/federation.md: RotateSigningKey теперь публикует
SigningKeyRotatedEvent; SigningKeyRotatedConsumer на каждом инстансе
(fan-out очередь signing-key-rotated-federation-{InstanceId}) перезагружает
ActiveSigningKeyCache и WellKnown-документ — иначе после ротации остальные
инстансы подписывают исходящие S2S-запросы старым ключом до рестарта.

📂 Backend
└ BarkFluff.Federation 1 ✏️2
📂 Shared
└ BarkFluff.Shared.Queue 1
📂 Tests
└ BarkFluff.Federation.Tests 1 ✏️2
📦 Liis17/BarkFluff [dev]
👤 Liis17

android: виджет закреплённых чатов — удержание broadcast и бюджет времени

- onUpdate оборачивается в goAsync(): без него процесс мог быть убит
сразу после возврата, до отрисовки виджета корутиной.
- refreshWidget ограничен бюджетом 8 с (таймауты OkHttp в AvatarLoader
втрое больше окна broadcast); onUpdate имеет общий бюджет 9 с на цикл.
- Аватары грузятся параллельно вместо последовательной цепочки,
каждый под таймаутом 3 с с деградацией на плейсхолдер с инициалами.
- CancellationException пробрасывается отдельно от ошибок, чтобы штатная
отмена дебаунса в scheduleRefreshForChat не глоталась.

📂 Android
└ Barkfluff.Client.Android ✏️3
📦 Liis17/BarkFluff [dev]
👤 Liis17

Federation: удалить старый in-memory DiscoveryTriggerRateLimiter (забытое удаление из d8602b83)

📂 Backend
└ BarkFluff.Federation 1
📦 Liis17/BarkFluff [dev]
👤 Liis17

docs: масштабирование Bots и Federation реализовано — обновлены scaling-планы, README-сводка и Obsidian

📂 Obsidian
└ ClaudeVault ✏️3
📂 docs
└ scaling ✏️3
📦 Liis17/BarkFluff [dev]
👤 Liis17

android: убрать notifyDataSetChanged по messageAdapter в ChatActivity

notifyDataSetChanged помечает всю структуру невалидной: RecyclerView теряет
пул холдеров, отбрасывает анимации MessageItemAnimator и не гарантирует
позицию скролла — заметно в чате со stackFromEnd и пагинацией в обе стороны.

- loadGroupMemberInfo: блок sender info вынесен в ReceivedMessageViewHolder
.bindSenderInfo и обновляется точечно по PAYLOAD_SENDER_INFO, без
перезапуска загрузки вложений при каждом открытии группового чата.
- onResume: notifyItemRangeChanged вместо полного сброса структуры.

📂 Android
└ Barkfluff.Client.Android ✏️2
📦 Liis17/BarkFluff [dev]
👤 Liis17

obsidian: Android — бюджет времени и деградация рендера виджета, отказ от notifyDataSetChanged в списке сообщений

📂 Obsidian
└ ClaudeVault ✏️1
📦 Liis17/BarkFluff [dev]
👤 Liis17

fix(fastauth): expire sessions when result stream reaches deadline

📂 Backend
└ BarkFluff.FastAuth ✏️2
📦 Liis17/BarkFluff [dev]
👤 Liis17

feat(web): improve keyboard accessibility for overlays

📂 Backend
└ BarkFluff.Web ✏️16
📂 Obsidian
└ ClaudeVault ✏️1
Сборка успешна

🐳 BarkFluff.FastAuth
📌 Ветка: dev
🔗 Коммит: 20f2ebb6efa32e44b4d306d5f7ed177176ea9bfc
👤 Автор: Liis17
🏷️ Тег: docker.barkfluff.com/barkfluff-fast-auth-dev:1.0.7
Сборка успешна

🐳 BarkFluff.Federation
📌 Ветка: dev
🔗 Коммит: 20f2ebb6efa32e44b4d306d5f7ed177176ea9bfc
👤 Автор: Liis17
🏷️ Тег: docker.barkfluff.com/barkfluff-federation-dev:1.0.16