The promise, and the code behind it
Every support tool with AI in it will tell you there's a human in the loop. Here is exactly what that means for us, and exactly where you can go and check.
What we claim
No bot ever replies to your customers. There is no send-as-is button. A person reads and edits every reply that leaves Goodcomms.
What we don't claim
We won't tell you "every word is written by a human." When an agent accepts a draft and changes two sentences, most of the remaining text came from a model. Pretending otherwise would be the same overclaiming we're reacting against. What we guarantee is that a person had their hands on it and their eyes over it before your customer saw it.
How it's enforced
-
In the database.
A check constraint named
outbound_messages_have_a_human_authormeans a reply cannot exist without a named person. It survives a deleted validation and a raw SQL backdoor. - In the model. Sending requires a live signed-in session. Background jobs don't have one — and every line of AI code runs in a background job.
- In the type system, such as it is. A message can be from a contact, an agent, or the system. There is no fourth option. Adding one is a migration and a code review.
-
In the test suite.
test/architecture/ai_boundary_test.rbfails the build if any file in the AI namespace so much as mentions a message or a mailer. Removing the guarantee is possible. Doing it quietly is not.
If you self-host
This is your software once it's on your machine, and you can obviously change
it. The enforcement lives in app/models/message.rb,
the check constraint, and that test file. We'd ask you not to. The hosted
product never will.