Gates castEvent's accepted input type on whether a cast's own declared event type T
requires a signature. If T carries a sig: string field (a NostrEvent-shaped cast), the
input is pinned to NostrEvent — this rejects an unsigned rumor at compile time. Otherwise (a
rumor-shaped/sig-less T) the input stays a loose StoreEvent — deliberately not
narrowed to the cast's exact T (e.g. a literal kind), so a generic Rumor still satisfies
a narrowed-kind rumor cast; the cast's own constructor validates the narrower shape at runtime.
Gates castEvent's accepted input type on whether a cast's own declared event type
Trequires a signature. IfTcarries asig: stringfield (aNostrEvent-shaped cast), the input is pinned toNostrEvent— this rejects an unsigned rumor at compile time. Otherwise (a rumor-shaped/sig-lessT) the input stays a loose StoreEvent — deliberately not narrowed to the cast's exactT(e.g. a literalkind), so a genericRumorstill satisfies a narrowed-kind rumor cast; the cast's own constructor validates the narrower shape at runtime.