Strip leading @ symbol#71
Open
jalcine wants to merge 6166 commits intoblacksky-algorithms:mainfrom
Open
Conversation
* 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>
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).
…port@blacksky.app
ffbc84c to
84e8700
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Super simple change to close out #41