✅ Сборка успешна
🐋 BarkFluff.Web
📌 Ветка:
🔗 Коммит:
👤 Автор: Liis17
🏷️ Тег:
🐋 BarkFluff.Web
📌 Ветка:
dev🔗 Коммит:
7ca60e101076b7ed8ae84c7c8293cefe2a008e95👤 Автор: Liis17
🏷️ Тег:
docker.barkfluff.com/barkfluff-web-dev:1.0.39📦 Liis17/BarkFluff [claude/profile-web-version-button-k3rqi6]
👤 claude
📂 Backend
└ Barkfluff.WebServer ✏️2
📂 Obsidian
└ ClaudeVault ✏️1
👤 claude
webserver: показывать «Написать в браузере» на мобильных
Кнопка перехода в веб-клиент (#webChatBtn) на страницах профиля была
скрыта правилом @media (hover: none), (pointer: coarse) с момента своего
появления. Оно гасило её не только на телефонах, но и на планшетах и на
ноутбуках с сенсорным экраном, из-за чего на barkfluff.com/<username> с
мобильного оставался только вариант «Открыть в Barkfluff».
Ограничение расходилось с главной страницей, где карточка «Веб — Любой
современный браузер» ведёт на web.barkfluff.com без условий по
...
📂 Backend
└ Barkfluff.WebServer ✏️2
📂 Obsidian
└ ClaudeVault ✏️1
📦 Liis17/BarkFluff [dev]
👤 claude
📂 Backend
└ Barkfluff.WebServer ✏️2
📂 Obsidian
└ ClaudeVault ✏️1
👤 claude
webserver: показывать «Написать в браузере» на мобильных
Кнопка перехода в веб-клиент (#webChatBtn) на страницах профиля была
скрыта правилом @media (hover: none), (pointer: coarse) с момента своего
появления. Оно гасило её не только на телефонах, но и на планшетах и на
ноутбуках с сенсорным экраном, из-за чего на barkfluff.com/<username> с
мобильного оставался только вариант «Открыть в Barkfluff».
Ограничение расходилось с главной страницей, где карточка «Веб — Любой
современный браузер» ведёт на web.barkfluff.com без условий по
...
📂 Backend
└ Barkfluff.WebServer ✏️2
📂 Obsidian
└ ClaudeVault ✏️1
📦 Liis17/BarkFluff [dev]
👤 web-flow
📂 Backend
└ Barkfluff.WebServer ✏️2
📂 Obsidian
└ ClaudeVault ✏️1
👤 web-flow
webserver: показывать «Написать в браузере» на мобильных (#344)
📂 Backend
└ Barkfluff.WebServer ✏️2
📂 Obsidian
└ ClaudeVault ✏️1
✅ Сборка успешна
🐳 Barkfluff.WebServer
📌 Ветка:
🔗 Коммит:
👤 Автор: Liis17
🏷️ Тег:
🐳 Barkfluff.WebServer
📌 Ветка:
dev🔗 Коммит:
b9430f8eb2dca1be1cd40114d266c56e33e02c3e👤 Автор: Liis17
🏷️ Тег:
docker.barkfluff.com/barkfluff-webserver-dev:1.0.11📦 Liis17/BarkFluff [dev]
👤 Liis17
📂 Backend
└ BarkFluff.Web ✅1 ✏️3
📂 Obsidian
└ ClaudeVault ✏️1
👤 Liis17
web: авто-бамп версии SW-кэша хешем шелл-ассетов и stale-while-revalidate для статики
📂 Backend
└ BarkFluff.Web ✅1 ✏️3
📂 Obsidian
└ ClaudeVault ✏️1
✅ Сборка успешна
🐋 BarkFluff.Web
📌 Ветка:
🔗 Коммит:
👤 Автор: Liis17
🏷️ Тег:
🐋 BarkFluff.Web
📌 Ветка:
dev🔗 Коммит:
49c0bf3d01bbf741e0a9fd0bedf984b18c8f3b33👤 Автор: Liis17
🏷️ Тег:
docker.barkfluff.com/barkfluff-web-dev:1.0.40📦 Liis17/BarkFluff [dev]
👤 Liis17
📂 Android
└ Barkfluff.Client.Android ✅2 ✏️2 ❌10
📂 Obsidian
└ ClaudeVault ✏️1
👤 Liis17
android: векторная adaptive-иконка (градиентный фон + monochrome для MD3) вместо WebP
📂 Android
└ Barkfluff.Client.Android ✅2 ✏️2 ❌10
📂 Obsidian
└ ClaudeVault ✏️1
📦 Liis17/BarkFluff [dev]
👤 Liis17
📂 Android
├ Barkfluff.Client.Android ✅15
├ core ✅1
└ gradlew ✏️1
👤 Liis17
сборка андроид клиента
📂 Android
├ Barkfluff.Client.Android ✅15
├ core ✅1
└ gradlew ✏️1
✅ Сборка успешна
📱 Android Client v0.0.119 beta
📌 Ветка:
🔗 Коммит:
👤 Автор: Liis17
📱 Android Client v0.0.119 beta
📌 Ветка:
dev🔗 Коммит:
8a33ba7274f4874f598acc3db56daa45ab57206f👤 Автор: Liis17
📦 Liis17/BarkFluff [dev]
👤 Liis17
📂 Backend
└ BarkFluff.Bots ✅1 ✏️1
📂 Tests
└ BarkFluff.Bots.Tests ✅1
👤 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
📂 Backend
└ BarkFluff.Configuration ✅1
👤 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
📂 Backend
└ BarkFluff.FastAuth ✅4 ✏️8 ❌3
👤 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
📂 Tests
└ BarkFluff.FastAuth.Tests ✅3 ✏️6 ❌3
👤 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
📂 Backend
└ BarkFluff.Federation ✏️2
📂 Tests
└ BarkFluff.Federation.Tests ✏️1
👤 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
📂 Obsidian
└ ClaudeVault ✏️1
📂 docs
└ scaling ✏️2
👤 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
📂 Backend
└ BarkFluff.Federation ✅2 ✏️2
📂 Tests
└ BarkFluff.Federation.Tests ✅1 ✏️1
👤 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
📂 Backend
└ BarkFluff.Federation ✅2 ✏️2
📂 Tests
└ BarkFluff.Federation.Tests ✅1 ✏️3
👤 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
└ Barkfluff.Client.Android ✏️2
👤 Liis17
android: шапка чата — блоки-чипы вместо сплошной подложки (Telegram-style)
Вместо одной полупрозрачной подложки на всю ширину chatHeaderBar теперь
три отдельных скруглённых блока (back, имя/статус, звонок/меню/аватар),
между которыми виден блюр обоев. Без обоев поведение не изменилось.
📂 Android
└ Barkfluff.Client.Android ✏️2
📦 Liis17/BarkFluff [dev]
👤 Liis17
📂 Backend
└ BarkFluff.Federation ✅1 ✏️2
📂 Shared
└ BarkFluff.Shared.Queue ✅1
📂 Tests
└ BarkFluff.Federation.Tests ✅1 ✏️2
👤 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
└ Barkfluff.Client.Android ✏️3
👤 Liis17
android: виджет закреплённых чатов — удержание broadcast и бюджет времени
- onUpdate оборачивается в goAsync(): без него процесс мог быть убит
сразу после возврата, до отрисовки виджета корутиной.
- refreshWidget ограничен бюджетом 8 с (таймауты OkHttp в AvatarLoader
втрое больше окна broadcast); onUpdate имеет общий бюджет 9 с на цикл.
- Аватары грузятся параллельно вместо последовательной цепочки,
каждый под таймаутом 3 с с деградацией на плейсхолдер с инициалами.
- CancellationException пробрасывается отдельно от ошибок, чтобы штатная
отмена дебаунса в scheduleRefreshForChat не глоталась.
📂 Android
└ Barkfluff.Client.Android ✏️3