# A commercial decision reaching a person

Connect does not invent commercial terms. A price, service level or warranty that the workspace's Knowledge does not support is refused, and the question is escalated to a person with the customer's words attached. The refusal is recorded as a decision. A person answers, the reply goes back on the original thread, and the answer can be added to Knowledge so the next one is grounded.

- **Status:** Available
- **Audience:** both
- **In the app:** #/needs-you, #/pipeline, #/knowledge
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/workflows/commercial-decision/

## The chain, stage by stage

1. Trigger — a customer asks something commercial: what it costs, how fast it ships, what the warranty covers, whether a discount applies.
2. External event — the question arrives on any channel. Email, WhatsApp and the phone all reach the same rule; only the moment of enforcement differs.
3. Authentication and workspace resolution — the workspace is settled first, because Knowledge, pricing and every rule below belong to one workspace and to no other.
4. Ingest — the message becomes part of its canonical thread, and the person behind the address is resolved so the question is attached to a relationship rather than to an address.
5. Canonical record — the question, the draft answer and the refusal are all records before anything is sent. That is what makes the refusal reviewable months later.
6. Reasoning — the engine drafts a reply to the conversation, not to the last line of it.
7. Knowledge, memory and rules — grounding is retrieval over the sources the workspace supplied. `safe_sales` then checks the commercial claim against them: supported, or refused.
8. Autonomy and approval — a refused claim does not become a hedge or a softer sentence. The action stops and an approval is created for a person.
9. Action — no provider is called yet. Nothing has been said to the customer, which is the whole point of stopping here.
10. Result — the item appears in Needs You with the customer's question, the draft as far as it got, and what Knowledge was missing.
11. Relationship, timeline and memory — a person decides. Their answer is sent through the ordinary send boundary, joins the thread and the person's timeline, and any commitment in it becomes a dated follow-up.
12. Audit, usage and Needs You — the refusal and the human decision are both in the audit trail, because a refusal is a decision and the log is worth less without it.

> **Note** "Refused" here means Connect declined to state a term it could not support. It does not mean the customer is told no: they are told a person is confirming it, and then a person does.

## What counts as a commercial claim

The rule covers the sentences a business is held to. A number that names what something costs, a promise about time, a scope of cover, an exception to a published term. These are refusable because getting one wrong creates an obligation, and because a plausible-sounding invention is worse than a short delay.

Values on the pipeline are stored in **minor units** with their currency, which removes one whole class of error from the record even before the rule runs. What the rule adds is the refusal to say a figure that no source in the workspace supports.

The Assistant is held to a narrower version of the same line. It has no pricing authority at all, and it cannot clear a do-not-contact entry. Its rights are deliberately narrower than the rights of the person operating it, so asking it to state a price is not a way around the rule.

## The voice exception, stated plainly

On the realtime speech-to-speech path the rule cannot sit between the answer and the customer, because there is no draft to inspect — the model is speaking. There the rule lives in the instructions the model is given, which means a breach is **detected rather than prevented**.

Detection is not a gesture. `price_spoken` counts the lines on which the voice priced something, using the same expression the turn-based carrier path checks each sentence with, so the two paths agree on what a price is and a review of one is comparable with a review of the other.

> **Careful** If commercial exactness on live calls matters more to you than speed, the honest configuration is to keep pricing off the phone entirely and have the call promise a written quote. A follow-up carries the commitment; the written channel carries the number.

## Answering one, and making the next one cheaper

1. Open the item in Needs You. The customer's question, the thread it belongs to and the gap Connect hit are on one screen.
   - Result: You are deciding with the same context the engine had, rather than reconstructing it from a notification.
2. Answer it. Edit the draft, or write the reply yourself, and send.
   - Result: It goes out through the same send boundary a person's own reply uses, and is only reported as sent once the provider has acknowledged it.
3. Add the term to Knowledge if it is a standing answer rather than a one-off concession.
   - Result: The next identical question is grounded and answerable without you. This is the step that turns a queue of refusals into a shrinking queue instead of a permanent one.
4. If the answer was deliberately a one-off, record why on the relationship rather than in Knowledge.
   - Result: A price given to one account for one reason does not quietly become the workspace's published term.

A queue that never shrinks is a Knowledge problem wearing an autonomy costume. Two or three refusals about the same term mean the term is not written down anywhere Connect can reach, and no autonomy setting will fix that — raising autonomy would only convert a refusal into an invention.

## What can go wrong

**Nothing appears in Needs You** — The channel's autonomy is `draft_only`, which prepares and stops without asking anyone. The answer exists on the conversation; nobody was queued to look at it.
**The refusal repeats after Knowledge was updated** — The source was added but does not actually contain the term, or it contradicts another source. A conflict is resolved rather than averaged, and the newer or more authoritative source has to win explicitly.
**The customer was told a number on a call** — The written path prevents; the voice path detects. Review the flagged lines, correct the record, and take pricing off the phone if it keeps happening.
**The reply went out with the wrong figure** — A person sent it, so the audit trail names them and the moment. Correct it on the thread rather than silently — the customer already has the first answer.

## Questions

### Is a refusal a limitation I should be trying to remove?

No. It is the designed behaviour: a business agent that improvises a warranty creates an obligation nobody agreed to. What you can remove is the *cause* of a repeated refusal, by writing the term into Knowledge so the answer is grounded. Turning autonomy up does not ground anything.

### Does raising autonomy let Connect quote a price?

Autonomy decides whether an action needs a human yes. It does not decide whether a claim is supported. A workspace on `autonomous` still refuses a commercial term Knowledge does not carry, because those are two separate gates asking two different questions.

### Where can I see that a refusal happened at all?

In the audit trail, which records what was decided, by what, under which rule, and what followed — refusals included. It is also the answer to "why did nothing go out overnight", which otherwise looks like the engine having missed the message.

### Can the Assistant approve one of these for me?

It can bring the item to you and send what you approve, but it holds no pricing authority of its own and cannot clear a do-not-contact entry. The commercial decision stays with a person, which is the separation that makes the rest of it delegable.

## Related

- [Price, SLA and warranty: what Connect may say](https://connectbyjbrh.com/docs/sales/safe-sales/)
- [Escalating a commercial decision](https://connectbyjbrh.com/docs/sales/commercial-escalation/)
- [Why a sales agent should refuse to answer](https://connectbyjbrh.com/research/safe-refusals-in-sales/)
- [Claims Knowledge does not support](https://connectbyjbrh.com/docs/knowledge/unsupported-claims/)
- [Needs You](https://connectbyjbrh.com/docs/autonomy/needs-you/)
- [Escalating to a person, end to end](https://connectbyjbrh.com/docs/workflows/escalation/)
- [The facts editor](https://connectbyjbrh.com/docs/knowledge/facts/)
- [The decision log](https://connectbyjbrh.com/docs/autonomy/audit-trail/)

## What this page is based on

- `docs-source/sources/CHANNELS.md` §6 — `safe_sales`, minor-unit values, and `price_spoken` on the realtime voice path
- `docs-source/sources/GENERAL.md` §5 and §8 — autonomy modes, Needs You, the audit trail, and the Assistant's narrower rights
- `docs-source/sources/CHANNELS.md` §1 — the single send boundary and its three result states
- Connect capability registry (`docs-source/facts.py`) — `safe_sales`, `approvals`, `audit_trail`
