Skip to content

Commit 83ce3e8

Browse files
committed
docs(spec): the computed-address screen's email-channel scope is confirmed
The maintainer confirmed that ruling B's screen of a computed address applies only to a notify node whose channels include email (ruling record 6393736930). The recipients docblock and the changeset no longer call the scope unconfirmed. Claude-Session: https://claude.ai/code/session_01PC4NPXPgPmpDRG9DdDnyXT Co-authored-by: Claude <noreply@anthropic.com>
1 parent 29733bf commit 83ce3e8

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

‎.changeset/25696-notify-recipients-describe.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Ruling-ref: 6386629237
1111
The `recipients` text of a `notify` node config now says what an email address in `recipients` means, and what the notify node does with one. That text is the field's `describe()` (which the reference docs and the JSON Schema read), the union's description, and the sentence a refused `recipients` value leads with.
1212

1313
- **Written out as a string, it is an author constant.** `recipients: 'ops@example.com'` is no audience selector. It is sent as written: to the user who holds that address, or else, on the `email` channel, to the address itself. Nothing about it changes; the text no longer calls it an audience selector. The audience selectors are the prefixed forms, such as `team:ID`.
14-
- **An address a CEL envelope evaluates to is not one.** In a node whose `channels` include `email`, a computed recipient that reads as an address, bare or as `user:ADDRESS`, must belong to a user. One a user holds resolves to that user. One that no user holds fails the node, and the message points to `{ emailField }`. A node that does not name `email` (`inbox` alone, the default) mails nobody, so its computed recipients go to the messaging service as before. This is the current behaviour of the notify node; the channel scope is with the maintainer for confirmation.
14+
- **An address a CEL envelope evaluates to is not one.** In a node whose `channels` include `email`, a computed recipient that reads as an address, bare or as `user:ADDRESS`, must belong to a user. One a user holds resolves to that user. One that no user holds fails the node, and the message points to `{ emailField }`. A node that does not name `email` (`inbox` alone, the default) mails nobody, so its computed recipients go to the messaging service as before. The screen is scoped to nodes that include the `email` channel (confirmed by the maintainer).
1515
- **`{ emailField }` is delivered.** The text no longer says delivery is not live. The address is read from the stored trigger record when the node runs. It must be one plain ASCII mailbox, or the node fails and nothing is sent. One address receives at most 5 such emails per hour; the limit is best-effort.
1616

1717
No key, shape, default or accepted value changes. Everything that parsed still parses, and authored metadata needs no change.

‎packages/spec/src/automation/io-node-config.zod.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -383,9 +383,9 @@ function notifyRecipientsRefusal(input: unknown): string {
383383
* as does one that cannot be looked up (no data engine, a failing lookup). A
384384
* node that does not name `email` (`inbox` alone, the messaging default)
385385
* mails nobody, and its computed recipients reach the messaging resolver
386-
* unscreened, as before. That channel scope is the runtime's current reading
387-
* of the ruling and is with the maintainer for confirmation, so the describes
388-
* below state it as the current behaviour, not as final.
386+
* unscreened, as before. That channel scope is the confirmed reading of the
387+
* ruling (ruling record 6393736930 on #25647: the maintainer chose to screen
388+
* only nodes that include the `email` channel).
389389
*
390390
* The same change delivers an email-field recipient: the address is read from
391391
* the STORED trigger row (never the run's `record` snapshot), must be one

0 commit comments

Comments
 (0)