Pages can be fetched as markdown, robots.txt allows training, and the public discovery files describe search, profiles, and posts.
Co-authored-by: Cursor <[email protected]>
Empty-body account limits were treated as a blocked proxy IP, so visitors got 429 while other cookies still had budget.
Co-authored-by: Cursor <[email protected]>
An empty SearchTimeline used to expire after a day and get tried again. The mark stays in the session state, with the account name in the log.
Co-authored-by: Cursor <[email protected]>
The first donation goal is met, search spam is burning accounts, and those sister-site icons do not belong on the public bar.
Co-authored-by: Cursor <[email protected]>
A reader does not keep the cookie, so opening an item was dropping back to a page that loads pictures straight from X.
Co-authored-by: Cursor <[email protected]>
Keeping hundreds of sockets per account made later calls wait on headers, so each account now keeps a few and a slow call is given three seconds before it is abandoned.
Co-authored-by: Cursor <[email protected]>
Reply sort is a one-click choice on the post and in settings, and a feed URL can ask for proxied pictures without turning that on for everyone.
Co-authored-by: Cursor <[email protected]>
X sometimes sends a negative text index and drops HTTP/2 streams; those used to fail the whole response or sit until the gateway gave up, and the small concurrency caps made every other call wait.
Co-authored-by: Cursor <[email protected]>
Brave and Chrome were blocking those redirects because the content security policy only allowed forms to stay on this site.
Co-authored-by: Cursor <[email protected]>
Missing or slow parts can be requested on GitHub, and surplus donations would pay for posting, liking, and reposting.
Co-authored-by: Cursor <[email protected]>
A shared HTTP/2 session to video.twimg.com sat in retransmits for seconds after the CDN dropped it, so playback stalled and then loaded.
Co-authored-by: Cursor <[email protected]>
- Read each operation's current query id and feature flags from X's web
client, keep them in graphql-ops.json, refresh them hourly, and read them
again when two accounts get nothing back for the same call.
- Leave an account out of an operation for a day when X answers it with an
empty 404 while another account gets results. Check unchecked accounts'
search access in the background and prefer accounts known to work.
- Send search the way Chrome does (variables, features, referer) and load
X's script chunks with Chrome's headers. Keep a transaction-id refusal only
when dropping the id helped.
- Require three handshakes before using a browser version; one lucky
handshake let Chrome 152 through while X refused it.
- Add a round-robin fallback proxy pool for HTML 429s, with clients shared
per browser so exits reuse connections.
- Drop the browser auto-retry and the per-account retries on empty answers,
and log expected empty answers at trace.
The profile sitemap listed four URLs per user and Cloudflare 520'd the download; Search Console then marked every sitemap as unreadable.
Co-authored-by: Cursor <[email protected]>