Problem #
The watched-repos work in #22 (fe70e1f) has two places where it tells the user something false:
- The
event.didconflict warning treats a half-typed or invalid watched entry as a real DID, so "This check can never pass" flashes while the user is typing the very repo that would satisfy it. - The automation page shows "All repos" for a gated NSID with no watched repos, which the consumer actually skips.
Evidence #
app/islands/step-drafts/watched-repos.ts:22-27:resolveDidreturns null only for empty or{{…}}input, sodid:plc:frioralice.bsky.socialcount as concrete DIDs. The comment at line 49 says unfinished entries are skipped; they are not.watched-repos.test.ts, "unfinished watched entries", only tests{{other}}.lib/actions/validation.ts:182:DID_REis the server's own test, and it would reject these entries.app/routes/u/[handle]/[rkey]/index.tsx:363-375renders "All repos" wheneverwantedDidsis empty.lib/jetstream/consumer.ts:1087-1094skips such an automation when its NSID is inNSID_REQUIRES_DIDS.
Expected #
- A watched entry that is neither
{{self}}nor a full DID (perDID_RE) makes the finder return no conflicts, as it already does for templates. - On the automation page, a gated NSID with no watched repos says something like "None: this automation receives no events until a watched repo is added" (and/or shows a warning), not "All repos".
- Optional: one sentence in the form hint noting that for low-volume lexicons an
event.didcondition avoids a separate Jetstream connection (docs/wanted-dids.md).
Acceptance criteria #
Out of scope #
- Flagging other operators (
in,startsWith…) ormatch: "any"rollups. - A cap on Jetstream subscriptions.
- Changing which NSIDs allow watched repos.
Queued: the loop will work on this version of the issue.
loop:queued cid=bafyreidy5t2dp4xntipamedfqsvpdsm7eyu5m474g65py2cnig6a6uuwim