You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
comments: threads_comment_id/author never persisted + Meta /replies returns no id/from for third-party commenters #261
First real inbound comment exposed three layered problems in the comments pipeline:
Meta returns no id / from for third-party commenters — GET /v1.0/{post}/replies?fields=id,text,from,timestamp returns only text. Observed across two accounts (codecoradev, guyonlelucon) and multiple posts on v0.9.3. Suspected standard-access field redaction (both apps lack App Review); needs confirmation against docs or with an app-review'd token.
threads_comment_id is never persisted even when present — Store::insert_comment() accepts (id, post_id, author_username, author_user_id, text) and inserts 6 columns; the comments.threads_comment_id column (migration 001) and CommentData.threads_comment_id (threads_client) exist but the value is dropped in the route. Consequence: POST /api/comments/{id}/reply always fails with NO_THREADS_ID — API reply is dead code in practice.
No dedup on re-fetch — fetching the same post twice stored the same comment twice (verified: identical text, different fetched_at). No natural key exists today.
Evidence (production, 2026-09-10)
Post DdGzof4gbDd (canary carousel): comment from @taufikabayy visible in UI with its own shortcode DdHALqWEsvS (via CloakBrowser DOM), but stored row has author_username: null, threads_comment_id: null.
3/3 stored comments across accounts: 0 with author, 0 with threads_comment_id.
Duplicate row proof: same comment text stored at 14:37:14 and 14:37:49 after two fetches.
Impact
Dashboard shows anonymous comment text only — cannot attribute or thread.
Mention/engagement workflows can't route by author.
Fix plan
Confirm Meta behavior: minimal repro on the titen host (token is encrypted at rest) — curl the replies edge with/without fields, check threads_basic standard vs advanced access docs.
Remaining open item (not actionable in code): confirming whether Meta returns id/from for third-party commenters under advanced access / after App Review — docs indicate username/permalink are limited to public users + own user, which matches our production observation. Re-test after App Review; if ids become available, existing id-less rows will backfill automatically on the next fetch (in-place attribution, covered by tests).
Activity
fix(comments): persist threads_comment_id, dedup re-fetches, in-place…
ajianaz commentedon Sep 10, 2026
Fixed in #262 (merged to develop).
threads_comment_idnow persisted (reply-via-API unblocked when Meta returns ids)Remaining open item (not actionable in code): confirming whether Meta returns
id/fromfor third-party commenters under advanced access / after App Review — docs indicateusername/permalinkare limited to public users + own user, which matches our production observation. Re-test after App Review; if ids become available, existing id-less rows will backfill automatically on the next fetch (in-place attribution, covered by tests).fix(comments): purge id-less comment rows superseded by attributed tw…