Основное (наша работа в этой сессии):
- Переименование «subserver» → «homeserver» по всему проекту: основной ESP32-скетч
(папка shine_subserver_ui → shine_homeserver_ui, .ino, flash-скрипт, режим burn.sh
homeserver-ui), скетч lvgl_nav_minimal_test (ключ homeserver.key:<имя>), spec-доки
reference/*, формат PDA (терминология session_type=100 «Homeserver пользователя»),
константа SESSION_TYPE_HOMESERVER в JS и Rust (значение 100 не менялось, формат не затронут),
pending/future доки, AGENTS.md, DAO-док. Сохранены отдельный lvgl_subserver_touch_test и
историческая пометка о рендейме в DERIVATION.md.
- Новый источник истины по деривации ключей: Dev_Docs/Keys/DERIVATION.md (Argon2id-секрет из
пароля, формула Ed25519(SHA-256(base64(secret)|suffix)), суффиксы root/bch/dev/homeserver.key,
Solana-ключ = dev.key). Уточнены роли root (главный/master) и dev (пополняемый кошелёк) в
Dev_Docs/Keys/README.md.
- UI: убран легаси-путь пустого пароля (derivePasswordSeed и др.), deriveMasterSecretFromPassword
бросает ошибку на пустом пароле, register-view блокирует пустой пароль; экран пополнения
переведён на канонический device-адрес из preGeneratedKeyBundle (удалён расходящийся
deriveWalletFromPassword).
Включены также параллельные правки Solana-аудита №3 (были в рабочем дереве, переплетены в lib.rs):
- shine_users: defense-in-depth «строгий список аккаунтов» (require!(it.next().is_none()))
в init/update economy config и create/update user PDA, плюс описание в doc/programs/shine_users.md;
- Dev_Docs/audit/Solana-audit-3-by-Claude-12июня2026.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
shine_payments + shine_users:
- create_pda_account переведён на «создание поверх предзаполненного»
(allocate+assign+добор ренты), чтобы подсев лампортов на детерминированный
адрес PDA (тикет/логин) не блокировал создание — закрыт LOW из аудита №1;
в shine_payments is_uninitialized_account перестала зависеть от баланса.
shine_payments (HIGH из аудита №2):
- запрещён recipient == inflow_vault в buy_ticket*, manager_add_ticket и
change_ticket_recipient; добавлена защита по умолчанию в transfer_from_vault
(require vault.key != recipient.key). Это убирает алиасинг аккаунта в
step_payout, который навсегда замораживал очередь выплат и средства вольта.
Документация и учёт:
- doc/programs/shine_payments.md §3.4, §10.1; doc/programs/shine_users.md §3.3;
- Dev_Docs/audit: добавлен аудит №2, обе закрытые находки помечены ИСПРАВЛЕНО;
- Dev_Docs/Pending_Features: две записи на ручную e2e-проверку на devnet;
- VERSION.properties: client 1.2.161, server 1.2.150.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>