## ecency/vision-mobile — 3.5.8…3.5.9

_78 commits._

### Features
- **feat: follow hashtags, with the tags notification type** (e004bbf)
- **feat(composer): dictation in the quick post composer, AI image inside AI assist** (02952e4)
- **feat(newsletter): surface the Email digest action on the profile row** (e0d2d07)
- **feat(newsletter): email digest subscriptions, reader phase** (e8a1f9b)

### Fixes
- **fix: register the tags notification type at login too** (fb3b276)
- **fix: tag chips read bare, like the web** (a6e9197)
- **fix: Tags tab keeps its own loading flag and pagination, tab follows a param update** (6c7bb2c)
- **fix: tags filter in the enum, a tags post row routes from source too, tolerant list keys** (166f615)
- **fix: route a tapped tag banner like the other routers** (45d5b91)
- **Merge pull request #3537 from ecency/fix/follow-notification-gates** (1d00348)
- **fix(notifications): show the foreground banner for every accepted type** (35281b8)
- **fix(notifications): handle the whole follow family, fix the FCM vocabulary** (840ad4a)
- **Merge pull request #3536 from ecency/fix/network-request-deadlines** (dc6078c)
- **fix(network): read an unknown connectivity state as online** (825d8f1)
- **fix(network): keep unknown-outcome purchases out of the retry path** (21971ed)
- **fix(network): bound every request and surface the failure** (19193bb)
- **fix(skills): name the two payloads apart in the sheet rule** (be9dea4)
- **fix(skills): mixed-authority batches are settled, not unverified** (af6cd6d)
- **fix(skills): do not claim a mixed transaction resolves to active** (6b6974a)
- **fix(skills): a mixed-authority custom_json is invalid, not active** (44501c2)
- **fix(skills): custom_json is payload dependent too** (3260c7e)
- **fix(skills): owner authority applies to account_update too** (e4744b1)
- **fix(skills): owner authority plus per-payload authority limits** (73cec03)
- **fix(skills): account_update2 authority is payload dependent on mobile** (6ea0a2b)
- **fix(composer): move the caret with programmatic writes, and unfreeze the AI image callback** (bd85677)
- **Merge pull request #3531 from ecency/fix/email-digests-safe-area** (e236f88)
- **fix(ai-image): clear the home indicator when the result view overflows** (775f194)
- **fix(newsletter): enlarge the digest icon targets and rename the header's misnamed style** (5db2ace)
- **fix(newsletter): restore the top safe-area inset on the Email digests screen** (e768a60)
- **Merge pull request #3526 from ecency/fix/upload-placeholder-stuck** (c73b6d0)
- **fix(editor): only prefer the recorded body while its update is in flight** (faf428f)
- **fix(editor): map both selection endpoints through a placeholder edit** (13e2490)
- **fix(editor): drain queued inserts before the editor saves on the way out** (8e65454)
- **fix(editor): clamp the selection handed back to the native input** (b436296)
- **fix(editor): tighten placeholder matching and close the post-publish draft window** (4d9a8cf)
- **Merge pull request #3523 from ecency/fix/profile-sender-row-height** (8d9a5fc)
- **fix(editor): keep the rival-upload guard armed across a gallery remount** (843c5b2)
- **fix(editor): drop the blank line a failed upload used to leave behind** (2e8a4d2)
- **fix(editor): fail a placeholder whose upload resolved without a url** (e9c3eef)
- **fix(editor): harden upload insert ordering and placeholder repair** (467ea71)
- **fix(editor): stop image upload placeholders sticking, corrupting typing, and landing mid-sentence** (7bc53d5)
- **fix(newsletter): move the subscriber row out of the measured card** (c45ed63)
- **fix(newsletter): report the profile subscriber row through the summary card's height channel** (1a71bea)
- **Merge pull request #3521 from ecency/fix/newsletter-followups** (7ce694f)
- **fix(newsletter): harden the post prompt edges** (a16c582)
- **fix(newsletter): render the post prompt only after the subscription lookup succeeds** (9de59a0)
- **fix(newsletter): follow-ups from reader-phase testing** (107cc17)
- **fix(newsletter): review round fixes** (2a37e6c)
- **fix(newsletter): let the community action row wrap** (7f50766)

### Backend
- **Merge pull request #3544 from ecency/feat/auth-request-deeplink** (837b185)
- **auth-request: the prompt claims only what is certain** (fa00158)
- **hive-uri: parser tests** (f6154eb)
- **auth-request: answer with a login proof, not a HiveSigner code** (bbf8c74)
- **auth-request: callback denylist covers ftp, intent, ws and wss** (16907e2)
- **auth-request: callbacks allowlisted to https and registered app schemes** (dd2c36d)
- **auth-request: consent first, callback as requester, no token handover** (eee3036)
- **Deep link: ecency://auth-request signs the user in to another app** (121e975)
- **Merge pull request #3543 from ecency/chore/sdk-2.3.99-received-delegations** (2040f56)
- **Merge pull request #3541 from ecency/dependabot/npm_and_yarn/qs-6.16.0** (63e16e5)
- **Merge pull request #3540 from ecency/dependabot/npm_and_yarn/browserslist-4.28.8** (544ff49)
- **Merge pull request #3539 from ecency/feature/follow-tags** (9991f5d)
- **Merge pull request #3534 from ecency/chore/skills-accuracy** (7f09011)
- **Merge pull request #3532 from ecency/feat/quick-post-composer-toolbar** (7b58118)
- **Merge pull request #3519 from ecency/feat/newsletter-digests** (76e79bb)
- **Merge pull request #3517 from ecency/bugfix/iap-error-reporting** (eb4d86f)
- **Handle every requestPurchase rejection, dedup against the listener** (141b30f)
- **Keep the IAP error spec within the line limit** (d10a7a1)
- **Fingerprint expo-iap rejections by code too** (aca9c3f)
- **Await requestPurchase and leave store codes to the listener** (ca68f11)
- **Report store errors to Sentry by code, skip user cancellations** (233db3f)

### Chore
- **chore: SDK 2.3.99, received HP delegations from balance-api** (9b292d3)
- **chore(deps): bump qs from 6.15.2 to 6.16.0** (cfcd442)
- **chore(deps): bump browserslist from 4.24.4 to 4.28.8** (e1bfdce)
- **chore(deps): bump @ecency/sdk to 2.3.95** (c97083e)
- **chore(skills): drop the counts the files could not keep true** (c377a2b)
- **chore(skills): address PR review findings** (f9d1b40)
- **chore(skills): correct the repo skills against the current code** (41ce5ea)
- **refactor(composer): group dictation with the other content buttons** (a3bc709)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/ecency/vision-mobile?utm_source=github-action)._