Connect by JBRH Open Connect

Sending with provider evidence, end to end

A message is reported as sent only when the provider has acknowledged it. Before that it is attempting; if it never reached the provider it is a clean failure that can be retried; and if it reached the provider but the acknowledgement was lost, it is *uncertain* — shown as uncertain rather than guessed either way, because re-sending on a maybe is how a customer gets the same reply twice.

Status
Available What this means
Audience
both
Channels
email
In the app
#/inbox, #/needs-you
Last verified
Product version
6.3.2

The flow, stage by stage#

  1. Trigger — the engine decides a reply is due, or a person approves or writes one.
  2. User or external event — an approval in Needs You, a person's own send, or an autonomous decision inside the gates.
  3. Authentication and workspace resolution — the send runs inside the owning workspace; the mailbox, its credentials and its rules are all read there.
  4. Ingest — the draft, its recipients and the thread it belongs to are assembled into one outbound message.
  5. Canonical record — the intent to send exists as a record before the attempt, so a failure has somewhere to be written.
  6. Classification and reasoning — already done: by this stage the wording is fixed, whether written by Connect or edited by a person.
  7. Knowledge, memory and rules — consulted while drafting, not at the boundary. What the boundary reads is policy, not prose.
  8. Autonomy and approval — the last gate: the mode for that mailbox and channel, the compliance check for that recipient, and the daily allowance.
  9. Action through a provider — one attempt, through the one send boundary that both the engine and a person use.
  10. Result — sent on acknowledgement, failed if the provider refused it, uncertain if the answer never arrived.
  11. Relationship, timeline and memory — an acknowledged message joins the thread and the person's cross-channel timeline.
  12. Audit, usage and Needs You — the outcome is recorded, the allowance is decremented, and anything unresolved is put in front of a person.

The four states#

StateWhat is trueWhat Connect doesWhat you should do
HeldThe message has not been attemptedWaits for an approval, an allowance reset, or a suppression to clearApprove it, or read the reason it is held
AttemptingThe message is with the provider nowWaits for the answerNothing — this state is brief
SentThe provider acknowledged itRecords the acknowledgement against the messageNothing; this is the only state that means delivered to the provider
FailedThe provider refused it, or it never reached oneRecords the failure with a reason a person can act onFix the cause and send again — a retry here is safe
UncertainIt may or may not have reached the providerShows it as uncertain and sends nothing furtherCheck the mailbox's own sent items before deciding

*Failed* and *uncertain* are not degrees of the same thing. A failure is knowledge: nothing was handed over, so another attempt cannot duplicate anything. Uncertainty is the absence of knowledge: the message may be in the recipient's inbox already, and a second attempt would be a second message.

Why nothing is re-sent on a maybe#

An automatic retry needs a rule, and every rule has a failure case. Retry on uncertainty and a dropped acknowledgement becomes a duplicate reply to a customer — the same answer twice, sometimes with different wording, which reads as a machine talking to itself. Never retry and a genuinely lost message becomes silence nobody notices.

Connect refuses to pick for you and shows the state instead. A person can look at the mailbox's own sent items, or at whether the customer has replied, and settle in seconds a question no rule can settle at all. That is the same principle the product applies elsewhere: uncertainty is an answer, and presenting it honestly beats a confident guess.

What the gates refuse before an attempt#

Autonomy
ask_before_send holds every outbound message for a person; draft_only writes and stops without even asking; off disables the channel.
Compliance
Suppression, unsubscribe, complaints and do-not-contact are checked in one place before any outreach. A refusal here is recorded as a decision, with its origin.
The daily allowance
When it is spent, the send is held rather than dropped, and the refusal is shown with its cause.
A mailbox that cannot send
A mailbox connected for reading has no send path. This shows as a failure with a reason rather than as a silent nothing.

Every one of those produces a record. A refusal is a decision, and the decision log holds refusals for the same reason it holds actions: the question asked afterwards is usually *why did nothing happen*, and that question needs an answer as much as *who sent this* does.

Resolving an uncertain send#

  1. Open the mailbox at the provider and look at what actually left it.

    Result The provider's own sent record is the authority. This is a thirty-second check that no automatic rule can perform on your behalf.

  2. If the message is there, mark the matter closed and do nothing else.

    Result The customer has it. The uncertainty was about the acknowledgement, not about the message.

  3. If it is not there, send once, from the same thread.

    Result The reply leaves from the mailbox the thread is bound to, so the conversation stays in one place for the recipient.

  4. If uncertain sends recur on one mailbox, treat it as a health question.

    Result Repeated uncertainty is a connection or provider problem rather than a message problem, and reconnecting the mailbox is the usual repair.

Questions#

Why does Connect not just retry when it is unsure?

Because the message may already be with the customer. A retry rule that is right most of the time produces duplicate replies the rest of the time, and a duplicate reply is worse than a short delay while a person checks the sent items.

Is a failed send the same as an uncertain one?

No, and the difference is what you may safely do next. A failure means nothing was handed to a provider, so sending again cannot duplicate anything. Uncertainty means it may have been handed over and the answer was lost.

Does a message a person typed get the same evidence?

Yes. The engine and a person share one send boundary, so a person's message passes the same gates, produces the same states and is recorded with the same provider acknowledgement.