Skip to content

Strip leading @ symbol#71

Open
jalcine wants to merge 6166 commits intoblacksky-algorithms:mainfrom
jalcine:fix/41-strip-leading-at-sign
Open

Strip leading @ symbol#71
jalcine wants to merge 6166 commits intoblacksky-algorithms:mainfrom
jalcine:fix/41-strip-leading-at-sign

Conversation

@jalcine
Copy link
Copy Markdown

@jalcine jalcine commented Apr 2, 2026

Super simple change to close out #41

mozzius and others added 30 commits December 30, 2025 01:31
* manually update source langs

* add `intl:push-sources` script
* replace graphemer with unicode-segmenter

* use grapheme entrypoint

* force resolution of unicode-segmenter
* remove RNGH on web

* add intentionally-failing webpack alias

* Update webpack.config.js
* fix prefetching starter pack query

* add comment
* allow pressing banner to view

* remove special type
* intl:pull

* yarn intl:extract:all
Configure concurrency groups so only one iOS build and one Android build
can run at a time across all workflows. This prevents manual builds from
conflicting with automatic builds triggered by fingerprint changes.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…#9659)

Patches react-native-pager-view to handle iOS 26's
interactiveContentPopGestureRecognizer, using the same logic that
already exists for RNSPanGestureRecognizer: on the leftmost page,
disable the scrollview's pan gesture to let the back gesture through.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Clarify some comments

* Add error state in case of config failure

* Add retry button and relayout to accommodate
* Improve miminum age handling

* Update api sdk

* Fix bad import
* "Claude PR Assistant workflow"

* "Claude Code Review workflow"
* Add report dialog to LiveStatus dialog

* Mr Worldwide™

* Bug fix bug fix

* Copy update

* Simplify parsing

* Bump api sdk

* update dev-env

* Update yarn.lock

* Bump api sdk

* Refactor useActorStatus, add disablement and appeal dialog

* Fix types

* Guard against chat profile views

* Go live (disabled)

* Fix types

* Status reports should only go to bsky

* Ah yeah let's not override types

---------

Co-authored-by: Samuel Newman <mozzius@protonmail.com>
rudyfraser and others added 28 commits February 17, 2026 13:45
Use currentAccount.service instead of agent.serviceUrl.toString()
to get the PDS URL for describeServer. The agent's serviceUrl can
be undefined for OAuth-based sessions.
- Default proxy DID: did:web:api.blacksky.community
- Public appview: https://api.blacksky.community
- Video service: https://video.blacksky.community (60 min / 5GB limits)
- Route trending feed requests through Bluesky appview via ALT_PROXY_DID
- Update embeds, functions, and test snapshots
- Add resolveRecordEmbeds() to convert raw blob refs into CDN URLs for
  external link cards, images, videos, and recordWithMedia embeds
- Wire resolved embeds into buildSyntheticPostView and
  buildSyntheticEmbedViewRecord so fallback posts render media
- Fix thread fallback: intercept threadItemNotFound from AppView and
  load post via Slingshot instead of showing "Post not found"
- Add moderation checks to thread fallback to prevent bypassing
  takedowns/suspensions
- Add quoteCount from Constellation backlink data
- Use record createdAt as indexedAt to prevent false archived post warning
- Change "Bluesky" to "Blacksky" in archived post dialog
…sers

- Add granular OAuth scopes (identity:handle, account:email?action=manage,
  account:status?action=manage) for proper permissions on newer PDSs
- Add isOauth && !isBskyPds guards for Update Email, Deactivate, and Delete
  which are hardcoded to reject OAuth at the PDS level
- Route Blacksky PDS OAuth users through gatekeeper for email update,
  deactivate, and delete (password-required operations)
- Fix ChangeHandleDialog crash: OauthBskyAppAgent extends Agent (not AtpAgent)
  so resumeSession does not exist, causing TypeError in onSuccess callback that
  TanStack Query catches and surfaces as a mutation error despite HTTP 200
- Add ScopeMissingError and OAuth error handling in error strings and
  useCleanError as safety net
The /oauth-client-metadata.json endpoint is dynamically generated by the
Go handler, not served from the static file. The scope string was stale.
…ccount page

listAppPasswords, createAppPassword, and revokeAppPassword all explicitly
reject OAuth at the PDS level. Redirect non-Blacksky PDS OAuth users to
their PDS account page instead of showing a broken error screen.

Fixes blacksky-algorithms#58
…th users

The PDS hardcodes OAuth rejection for listAppPasswords, createAppPassword,
and revokeAppPassword. For Blacksky PDS OAuth users, the App Passwords
screen now prompts for the account password and routes all operations
through the gatekeeper's new /gate/ endpoints.
Add redirect_url query param (window.location.origin) to the captcha
iframe URL on web so the gatekeeper redirects back to the correct
origin after captcha verification, enabling same-origin code reading.
When a quoted post was ViewNotFound, PostNotFoundEmbed triggered a
Slingshot fallback which resolved the post. If that resolved post
itself quoted another ViewNotFound post, another fallback fired,
creating an infinite nesting chain visible in the UI.

Disable Slingshot fallback when already inside a quote embed. Nested
unresolved quotes are silently hidden - users click through to see
deeper quotes. Top-level ViewNotFound embeds still use Slingshot
fallback and show "Deleted" only when the post is actually gone.
Subscribes to the TanStack Query cache and automatically detects
incomplete profiles (missing both avatar and displayName) across all
query types: followers, follows, notifications, DMs, search, feeds,
hover cards, etc. Fetches profile records from user PDSs via Slingshot
and enriches cached data with avatar URL, displayName, description,
and banner. Batches requests with debouncing and concurrency limits.
The spread operator {...data} converts arrays into plain objects
({0: item, 1: item, ...}) which breaks .map() calls on query data
like pinnedFeedInfos. Use Array.isArray check to preserve arrays
when creating new references for React Query cache updates.
Persisted queries (like pinnedFeedInfos) survive across app restarts.
Mutating their shape is catastrophic since corrupted data gets loaded
from disk on every launch. Skip any query whose key starts with
PERSISTED_QUERY_ROOT when applying enrichment mutations.
Three fixes:
- Use immutable deep-clone (deepEnrich) instead of in-place mutation
  so React properly detects changes in nested structures like
  InfiniteData<{pages: [{follows: [...]}]}>
- Add repairPersistedCache() to detect and remove corrupted persisted
  query data (arrays turned into {0:..., 1:...} objects) on startup
- Batch all enrichments into a single applyEnrichments call per batch
  to minimize setQueryData calls
The appview echoes the handle as displayName when a profile record hasn't
synced yet, so isIncompleteProfile was never flagging these profiles.

Changes:
- Detect displayName === handle as incomplete (appview echoes handle)
- Patch displayName even when set, if it's just the handle echoed back
- Also enrich profiles that have only a description from PDS
- Reduce debounce from 200ms to 50ms to minimize flash of incomplete data
When Blacksky's indexed counts are significantly lower than Bluesky's
canonical counts, show a pill badge inline with moderation labels.
Clicking it opens a modal explaining the backfill process.

Detection: badge shown when any count differs by >5% AND >10 absolute.
Data source: unauthenticated fetch from public.api.bsky.app.
…eler

Without geolocation, subscribing to all country labelers causes labels
from irrelevant jurisdictions to block content for all users. For example,
a !hide label from the Brazil labeler on @pfrazee.com was blocking his
content for all blacksky.community users regardless of location.
The canonical appview handles verification server-side via the
trustedVerifier flag on the actor table. The client-side constellation-based
overlay was from an earlier fork and is no longer needed.

Removes: constellation.ts, blacksky-verification.ts, and 4 dead preference
providers (constellation-enabled, constellation-instance, blacksky-verification,
direct-fetch-records).
@jalcine jalcine marked this pull request as ready for review April 4, 2026 20:54
@jalcine jalcine force-pushed the fix/41-strip-leading-at-sign branch from ffbc84c to 84e8700 Compare April 5, 2026 12:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.