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
#1 put the review gate in the right place, in autoPair, and then left both
submit surfaces carrying copy for outcomes they can no longer reach. A fresh
listing is pending_review, autoPair refuses anything that is not active, so
matched, first_in_category and no_eligible_partner became unobservable from
the submit path and a fourth branch was added alongside them.
The call is gone from both surfaces instead. describeAutoPair is deleted,
the four-way ternary in tools.ts is one sentence, and CommitState.matched
goes with them, along with the PartyPopper the panel showed when a submit
came back already matched. Nothing comes back already matched now.
Renamed the reason from pending_review to not_active. paused, rejected and
banned take the same branch, so the old name was wrong three ways out of
four.
setSiteStatus now logs what autoPair returned. It is the only caller left,
so an unlogged return meant nothing anywhere observed whether approving a
site actually matched it, and "I approved them and they never heard
anything" had no trail to follow.
Headers updated where they described the old flow, including the matches.ts
one that claimed the digest cron calls autoPair. It does not, and has not:
it runs its own candidate query because it shows several masked candidates
rather than proposing one match.
typecheck, lint, 42 tests and prettier --check pass.
Claude-Session: https://claude.ai/code/session_01TytxW7wT52Miy394hDeh9V
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
/** "yourapp.com is listed and pending review." */
174
171
headline: string;
175
-
/** The auto-pair outcome, in plain words. Never empty. */
172
+
/** What happens next, in plain words. Never empty. */
176
173
outcome: string;
177
-
matched: boolean;
178
174
};
179
175
176
+
/**
177
+
* What happens next, in the same words the `submit_site` tool uses.
178
+
*
179
+
* A constant rather than a computed sentence: nothing is matched at submit any
180
+
* more, so there is no per-submission outcome left to describe. Kept in the
181
+
* state object anyway, because the panel that renders it does not need to know
182
+
* that, and the day matching says something per-submission again this is where
183
+
* it goes.
184
+
*/
185
+
constPENDING_REVIEW_OUTCOME=
186
+
"A human reads the listing, usually the same day. Matching runs the moment it is approved, and if a partner is waiting in your category you will hear by email right then.";
187
+
180
188
/**
181
189
* Splits the anchors textarea into keywords.
182
190
*
@@ -192,7 +200,12 @@ function parseKeywords(raw: string): string[] {
192
200
}
193
201
194
202
/**
195
-
* Writes the confirmed listing and immediately looks for a partner.
203
+
* Writes the confirmed listing.
204
+
*
205
+
* It used to look for a partner here too. It no longer does: `autoPair` pairs
206
+
* nothing that is not `active`, and a listing is `pending_review` until a human
207
+
* clears it, so the call could only ever have come back empty. Matching happens
? `\n\nYou already have a match: ${pair.partner.category}, DR ${pair.partner.domainRating??"unrated"}. Say "show my matches" to see it.`
283
-
: pair.reason==="pending_review"
284
-
? "\n\nMatching starts the moment a human approves the listing. If a partner is waiting in your category, you will hear by email right then."
285
-
: pair.reason==="first_in_category"
286
-
? `\n\nYou are the first site in ${pair.category}. That is a good position: the next member to join it is matched with you immediately.`
287
-
: "\n\nNo partner available right now. You will be matched as soon as a suitable one joins.";
288
-
289
-
returntext(`${site.domain} is listed and pending review.${tail}`);
280
+
// No pairing call here. `autoPair` refuses anything that is not
281
+
// `active` and a fresh listing is `pending_review`, so calling it
282
+
// would do nothing but return a reason. Matching happens at
283
+
// approval, in `setSiteStatus`.
284
+
returntext(
285
+
`${site.domain} is listed and pending review.`+
286
+
"\n\nA human reads the listing, usually the same day. Matching runs the moment it is approved, and if a partner is waiting in your category the member hears by email right then.",
0 commit comments