-
Notifications
You must be signed in to change notification settings - Fork 137
bird live sync does not persist profile avatar URLs from GraphQL user payloads #71
Copy link
Copy link
Open
Labels
P2Normal priority bug or improvement with limited blast radius.Normal priority bug or improvement with limited blast radius.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:data-lossThis issue is about lost, corrupted, or silently dropped user/session/config data.This issue is about lost, corrupted, or silently dropped user/session/config data.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Description
Metadata
Metadata
Assignees
Labels
P2Normal priority bug or improvement with limited blast radius.Normal priority bug or improvement with limited blast radius.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:data-lossThis issue is about lost, corrupted, or silently dropped user/session/config data.This issue is about lost, corrupted, or silently dropped user/session/config data.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Summary
When syncing live data through the
birdtransport, Birdclaw creates/updates profile rows for timeline, likes, bookmarks, and mentions authors, but many of those profile rows are persisted withoutavatar_url. The web UI then falls back to initial/letter avatars even though the rawbird --json-fullGraphQL payload contains usable avatar URLs.Environment
bird/ Chrome cookie-backed GraphQLbirdclaw sync * --mode birdReproduction
birdtransport account.Observed before local repair:
The Home UI showed letter/initial placeholders for most authors.
Raw data evidence
Running
bird home --following -n 5 --json-fullincludes avatar URLs under the raw GraphQL user payload, for example:{ "core": { "user_results": { "result": { "rest_id": "1197424631398879233", "avatar": { "image_url": "https://pbs.twimg.com/profile_images/..._normal.jpg" }, "core": { "screen_name": "Franktradinglog", "name": "Frank trading" } } } } }So the source data exists; it appears to be dropped or not mapped when normalizing
birdlive-sync users intoprofiles.avatar_url.Expected behavior
When the
birdtransport receives a GraphQL user object withavatar.image_url, Birdclaw should persist it toprofiles.avatar_urlfor the matchingprofile_user_<rest_id>row, and the web UI should render real avatars through/api/avatar?....Local workaround used
I repaired my local DB by parsing
bird --json-fulloutputs for timeline/likes/bookmarks/mentions, extracting(rest_id, avatar.image_url), then backfilling only emptyprofiles.avatar_urlrows.After backfill:
The UI then rendered
/api/avatar?profileId=...&v=https%3A%2F%2Fpbs.twimg.com%2Fprofile_images...images as expected.Suggested fix
In the
birdtransport normalization path, map GraphQLuser.result.avatar.image_urlinto the profile upsert model asavatarUrl, preserving existing avatar URLs when the live payload does not include one.