fix: never let a guessed threshold hold an account out of sending

The profile check was allowed to set state 'unestablished', which made
isSendable() false, which made canAcceptPost() false — so a flagged
account never attempted an invitation and the functional probe could
never run. The one signal with real authority was gated behind the one
that is guessing, and because each check pushed retryAt forward by
another interval, accounts that send perfectly well were held
indefinitely.

Reddit does not publish the thresholds its chat gate applies, so ours are
a guess and are now advisory only. Sending is held solely by a live
rejection, tracked as sendingHeld on the account summary and keyed off by
the attention feed, the sending state and the Accounts page.

Reason strings now say "below the configured floor of N" rather than
"needs N", and the Accounts page distinguishes "Sending on hold" from
"Below thresholds", stating outright that the latter is our own number
and the account is still sending.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Jamie BruntonandClaude Opus 5 committed 2026-08-11 09:49:40 +01:00
1 parent 89eb4583f8
commit 3a40651930
9 files changed
+164 -71

No files matched your search

+2
View File
@@ -13,6 +13,8 @@ export const AccountEstablishmentStateSchema = z.union([
]);
export const AccountEstablishmentSummarySchema = z.strictObject({
state: AccountEstablishmentStateSchema,
/** True only when Reddit rejected an invitation; profile shortfalls do not hold sending. */
sendingHeld: z.boolean(),
reasons: z.array(z.string()),
accountAgeDays: z.number().nullable(),
linkKarma: z.number().nullable(),