AI Engineer World's Fair 2026
Stop Writing Tone Instructions. Layer Them.
Read the talk
Stop Writing Tone Instructions. Layer Them.
A wedding-venue assistant needs more than a warm voice: ordered identity rules, situational context, examples, and an output gate that can refuse to send an unsupported promise.
From a talk by Isadora Martin-Dye
Before you start: Familiarity with system prompts and the distinction between model generation and application-side validation will help; the code examples use TypeScript.
When the examples run out
What happens when a wedding-venue assistant gets a question its brand examples never anticipated? Isadora Martin-Dye approaches that problem as a venue owner: she runs a Virginia wedding venue in a 225-year-old property and built an assistant for her couples, then assistants for other venues, a personal companion app, and a utility for families of missing people. Her working analogy is a brilliant intern with high intelligence and poor emotional judgment. The intern remembers the induction material but cannot reliably read the room. Managing that intern requires structure and checking their work before it leaves the business.
A detailed system prompt can describe the brand, supply phrases, and demonstrate good answers. That works on the happy path. Then comes Martin-Dye’s illustrative turn twenty-one: the first question the examples do not cover. The answer may be technically correct yet sound like something the business would never say.
That mismatch matters especially when the relationship is part of the product. A luxury hotel with decades of cultivated service, a high-end real estate firm, or a wedding venue cannot treat voice as decoration around a factual answer. Customers are paying for a relationship and notice when it breaks. The underlying problem is that an instruction to write in the brand’s voice asks one prompt to perform four different jobs.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
One assembler, four responsibilities
The architecture separates those jobs into four layers:
| Layer | Responsibility |
|---|---|
| Immutable identity | Define constraints that customization must not override. |
| Situational mode | Adapt to the audience and present circumstances. |
| Example-anchored voice | Supply warmth, phrases, examples, and tone settings. |
| Post-generation veto | Inspect the actual response and catch violations. |
Most brand-prompt work concentrates on the middle: how to sound and, sometimes, whom to address. It leaves the boundaries and the final inspection underdeveloped.
Martin-Dye reports replacing twenty-four scattered system prompts with one canonical assembler. Some prompts called the assistant Sage, others Venue, and others supplied no name at all; each surface had developed its own identity. Every narrator now uses the same entry point to compose its prompt. The assembly order matters: hard rules first, task last. The fourth layer operates after generation rather than being another paragraph in that prompt.
Google Maps provides the organizing analogy. The destination stays fixed, but traffic, roadworks, fuel needs, and route preferences affect how to get there. A license requirement and a prohibition on driving backward down a motorway are constraints; traffic is a condition; a scenic route is a preference. A final route check happens before departure. The assistant likewise needs the relevant conditions before producing its answer, assembled in a fixed order rather than discovered after it has taken the wrong turn.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Identity sets the boundaries of warmth
Immutable identity defines policy precedence. These are constraints, not preferences that a venue’s personality settings may replace. If someone asks whether the assistant is human, a bot, or a live agent, the policy requires an unambiguous confirmation that it is an AI assistant in the very next message. Bloom also discloses that identity in its first response, before anyone asks. Venue configuration, voice profiles, personas, and user requests do not override that policy.
Martin-Dye presents upfront disclosure as a product decision about trust: someone who knows from the beginning can understand the relationship they are entering, rather than discovering later that they misunderstood it. The rule belongs above the venue’s tone choices.
The physical-presence boundary makes the distinction concrete. Software has no body: it cannot meet a couple or personally conduct a tour.
| Language | Policy |
|---|---|
| “I'd love to show you around” | Forbidden: implies physical presence. |
| “I can't wait to meet you in person” | Forbidden: promises an impossible meeting. |
| “The team would love to host you for a tour.” | Allowed: assigns the visit to the team. |
The voice layer tends toward warm first-person language. Without a boundary, that warmth can produce a lie about who will be there. Martin-Dye describes the resulting discovery as an inversion of trust: the user realizes they have been building a relationship with someone who was never physically present.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
When a natural word carries unjustified certainty
Martin-Dye applies the same architecture to Threadline, her tool for families of missing people, with a very different voice and much higher stakes. In her account, its identity rules prohibit certainty-laden words such as confirmed, identified, matched, proven, linked, and solved. A probabilistic indication must not become a statement that someone’s missing loved one has been found.
A model may reach for the word match because it is a statistically natural continuation. A parent who has spent years wondering where their child is can hear something much more definitive. The rule therefore governs what the product may claim, not simply whether its wording sounds compassionate. Different products need different prohibitions, but the structural requirement stays the same: voice customization must not grant permission to make claims the product cannot support.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Change the route for the person
Situational mode supplies real-time conditions before generation. Sending the same system prompt to everyone ignores information that should change the response. Just as a navigation system incorporates an accident or a driver’s fuel needs before choosing a route, the assistant needs to know who is asking and what conditions apply.
The same assistant speaks to couples and briefs venue staff. With a coordinator, it should speak as a colleague rather than a customer-service representative, while retaining its character instead of switching into generic intelligence-analysis prose. If a coordinator asks whether inquiries will rise in June, an appropriate answer admits that it cannot forecast confidently and then explains the trend and what the coordinator might see.
Martin-Dye distinguishes that staff-facing response from how the assistant should address a couple. The identity and voice remain consistent, but the audience changes the response strategy. The next signal goes beyond someone’s role to their life: what is this particular person going through?
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Human context before numbers
Soft context notes guide tone, empathy, and what not to say; the assistant must not quote them verbatim. A mention of grief should produce gentleness, not a recital of the loss. A sick parent should lead to patience and flexibility about timing, not an unsolicited sentence about the illness.
The assembler deliberately renders the couple’s notes before the numbers-guard instructions. Human context establishes the tone, and numeric constraints follow. Martin-Dye attributes mechanically slotted prose to reversing that order: the model commits to a numeric framing before receiving the qualitative context. This ordering can be expressed directly in a TypeScript assembler fragment:
typescript
function assembleContext(
coupleNotesBlock: string,
numbersGuardBlock: string,
taskBlock: string,
): string {
return [coupleNotesBlock, numbersGuardBlock, taskBlock]
.filter((block) => block.trim().length > 0)
.join("\n\n");
}
Here numbersGuardBlock contains instructions supplied before generation; it is distinct from the later check that can reject generated output.
The concrete example is a heat map of contact frequency. A couple’s declining engagement means something different when the system knows the client’s mother has been in chemotherapy for three weeks. The numeric movement is the same, but the human context changes its interpretation.
Layer one prevents the assistant from pretending to be something it is not. Layer two lets what it actually knows shape its behavior. With that context, falling engagement reads as a family under strain, rather than a cold lead or a difficult couple to chase. The voice need not change for the response to become more appropriate.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Examples teach expression, not guarantees
The third layer is the familiar tone guide: dials, phrase lists, and examples of good responses. It often arrives from marketing, gets wired into the prompt, and marks the end of the engineering work. In the intern analogy, it is the induction pack handed over on the first morning. Useful as that pack is, it was prepared before today’s customer walked through the door.
Examples cannot take over the other layers’ responsibilities. They do not enforce an identity boundary, supply the current person’s circumstances, or inspect what the model has just written. When an unfamiliar question arrives, a phrase list has no guarantee to offer. That is a mismatch between the tool and the job, rather than evidence that examples are useless.
Bloom’s voice-training workflow lets venues adjust their brand voice and incorporates coordinators’ ratings of actual AI responses and their edits. That makes the examples responsive to real work. Martin-Dye describes learning from those edits without specifying whether the implementation changes prompts, stored examples, or model weights.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Read what actually came out
The post-generation veto is the only layer that reads the completed response. The first three layers instruct the model; this one inspects the result and can stop it from leaving the business. It fills the role of the person who reviews a new intern’s client email before it is sent.
Martin-Dye separates two kinds of intervention:
- Soft flag: The honesty inspector flags a response that may have slipped a boundary, including concern about whether it answered the question. A false positive means someone double-checks an acceptable response. A false negative can let a hallucinated number or privacy violation reach a client.
- Hard reject: The numbers guard rejects output containing a figure the model was never given, even if the prompt already told it not to invent numbers.
The distinction is operational: a flag asks for inspection; a rejection denies permission to send. The asymmetric consequences of missed errors are why this work needs an explicit place in the system.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
A beautiful promise for a booked Saturday
The veto grew out of a recurring failure. A couple would ask about a Saturday in October. The assistant would respond warmly about the property at that time of year and offer to hold the date—except the date was booked. The model had never received the calendar. It knew the shape of an encouraging service response without knowing whether the promise was possible.
The identity rules could hold, the audience mode could be correct, and the voice could be perfect while the response still failed. Indeed, confidence and warmth made the unsupported offer more persuasive. The couple now believed they had a date; the business had merely postponed their disappointment.
This exposes the limit of the word immutable: policy precedence does not guarantee model compliance. All three prompt layers remain probabilistic instructions. That may be tolerable for a slightly off-brand sentence, but a date, price, policy, or promise is something a person may act on. Martin-Dye calls the veto the cheapest layer to build: it checks specific generated claims against permitted facts. A date offered outside the allow list does not ship. The prompt provides prevention; the gate provides enforcement for the checks it implements. Both are needed because an instruction can eventually lose to generation behavior.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Missing tenant identity is an error
The integration seam is one function. Across venue tenants, layer one stays shared while layers two and three load venue-specific conditions and voice. The same root architecture supports different venue personalities and products such as Ground and Threadline without forking the underlying logic. Sharing that logic, however, creates a dangerous temptation to share identity defaults.
Martin-Dye describes a white-label leak in which silent defaults caused venues to ship as Sage using another venue’s email address. Missing configuration had become another venue’s identity. The fix was to require brand identity from the venue AI configuration and throw an error when it was absent. In the navigation analogy, every driver had been receiving the same saved home address.
Tenant identity must fail loudly rather than fall back. The essential validation is small:
typescript
type VenueAIConfig = {
aiName?: string;
};
function requireAIName(config: VenueAIConfig): string {
const name = config.aiName?.trim();
if (!name) {
throw new Error("Venue AI configuration requires an AI name");
}
return name;
}
A missing name stops the path instead of silently substituting Sage. That visible failure is preferable to a venue speaking in a stranger’s voice while the team remains unaware that anything is wrong.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Make permission unavoidable
“The first three layers are instruction, the fourth is permission.” Identity, conditions, and voice tell the model what to do. The output gate decides whether the response may leave the business. Separating constraints, situational judgment, expression, and inspection turns a single overburdened prompt into distinct engineering responsibilities.
Customers are trusting the voice, not testing it. Martin-Dye’s four-layer pattern comes from repeated product failures rather than a framework designed in advance. The practical question is whether the next failure will be discovered during testing or by a customer. That also requires examining where the architecture is still easy to bypass.
At the time of the talk, the numbers guard lives inside a heat-narration path, while the honesty inspector is a separate function. Each new surface must remember to wire in the veto manually. Martin-Dye proposes making it a shared service: a mandatory gate that every surface passes through by default. This is a proposed improvement, not an already completed property of the system she describes.
Condition selection has a similar gap. Layer-two mode detection remains partly manual: the heat-narration surface knows to load couple notes, while the briefing surface knows not to. A central condition resolver would make those choices explicit in one place, determining who the user is, what circumstances matter, and which route applies.
The final trade-off concerns the soft flag itself. It uses regular expressions, not a model. Regex provides fast, inexpensive, repeatable matching for encoded patterns; it does not establish complete semantic coverage. A small classifier might catch edge cases no one anticipated when writing those patterns, but would introduce probabilistic classification errors. Martin-Dye currently chooses determinism over broader coverage and would make that choice again. She leaves it as a real engineering trade-off, not an obvious win: predictable enforcement and comprehensive detection are different properties.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Resources
From the talk
Overview of Bloom's venue assistant, voice feedback, couple portal, and multi-venue branding, with a link to a sample-venue demo.
Further reading
The founder's account of building Bloom from venue operations, plus introductions to Ground and Threadline.
Engineering guidance on combining rules, classifiers, output validation, and human intervention in layered guardrails.
Read the complete timestamped transcript
- 0:00
Hi, I'm Isadora. I own and run a two hundred and twenty-five-year-old wedding venue in Virginia. I also built an AI agent that talks to my couples, and then I built it for other venues, a personal AI companion app, and a public utility for families of missing people.
- 0:16
I want to be clear upfront about how I think about this work, because it does change everything that follows. I'm not programming a robot. I'm managing a brilliant intern with an incredibly high IQ and a terrible EQ.
- 0:30
They have photographic memory for whatever I've told them on the first morning and absolutely no instinct for when to read the room. They will say something technically perfect and socially catastrophic in the same confident sentence.
- 0:43
That framing matters because it changes what you build. If you're programming a robot, you write rules and walk away. If you're managing an intern, you build structure, and you check their work before it goes out the door.
- 0:54
This talk is about that structure. The standard advice is write a detailed system prompt. Describe your brand's voice, give examples, and that does work for a while. It works for what I call the happy path.
- 1:08
The happy path is every question that you have anticipated. You've given it examples, but turn [REDACTED:age] is the first one that the example didn't work. So on turn [REDACTED:age], the model does something technically correct that your brand would just never say.
- 1:25
It's not wrong exactly, but it's not you. This matters most where the voice is the product. Not for a product search on a retail site, but for a luxury hotel that spent thirty years building a specific relationship, a high-end real estate firm, or in my case, a wedding venue.
- 1:42
Places where a single wrong sentence can cost more than a refund, and the users are exactly the kind of people who notice. They're paying for a relationship, and treating them like they won't is always going to backfire.
- 1:55
Right in our brand's voice is a comment that says, "Just make it work." It does nothing that the model wasn't already going to try and do. And the reason it keeps failing isn't that the examples are bad, it's that you're asking one prompt to do four completely different jobs.
- 2:12
It's really hard for one layer to do all four. The architecture I landed on after watching my brand fail and the voice deliver inaccurate and not brand specific answers is four-layered.
- 2:27
Layer one is the immutable identity. The brand structurally cannot say these things. These are hard rules. They cannot be overwritten by anything below it, not by venue config, not by user instruction, not by anything.
- 2:41
Layer two is the situational mode. It's what shifts when the user's states shift. Who are they? What are they going through right now? And the real-time conditions. Layer three is the exampled anchored voice.
- 2:53
It's the warmth, the phrases, the dials, the tone guide. It's where most teams start and stop. Then layer four is the post-generation veto. It's the cheap final pass that catches what the other three miss.
- 3:07
The reason one-layer approaches fail is that the single system prompt can't simultaneously be situational, expressive, and self-checking. So it handles a middle layer or two reasonably well but falls apart in the edges.
- 3:20
Before this architecture, my system had twenty-four different system prompts scattered across the code base. Half dozen named Sage, some were nameless, some were named Venue. Every surface had its own idea as to who it was.
- 3:34
Now every surface composes its system through prompt through one assembler. The comment is basically the outline of this talk. It's a single entry point. Every narrator goes through it to compose its system prompt.
- 3:48
It's to replace that twenty-four-point ad hoc system with one canon nautical four-layer stack. The order is load-bearing, hard rules first, tasks last.
- 3:59
Think of it like Google Maps routing. The destination is always the same, but what is the right response and the right voice for this user? It can change the route.
- 4:10
Google Maps knows about traffic and roadworks, but it may not know where the cheap petrol is, and you're going to help it factor in those things before it tells you which way to go.
- 4:19
Your prompt stack needs to do the same thing, and it needs to know about those conditions in the right order. You don't check for roadworks, uh, after you've already taken the wrong turn.
- 4:29
Layer one is the rules that are true regardless of route. You need a driver's license before you can drive, and you can't go backwards down a motorway. Layer two are going to be your real-time conditions.
- 4:41
Layer three is your preferences for the journey, and layer four checks the route before you pull away.
- 4:47
There's one place all of this gets assembled. Everything runs in a fixed order every time.
- 4:52
So layer one is the immutable identity. This is what the brand structurally cannot say. It is the defining layer that nothing below touches. These aren't preferences, they're constraints. The route can change, the rules don't.
- 5:07
From the universal file rules, the hard identity rule cannot be overridden by any venue voice, persona, or user instruction. If the person you're talking to ever asks about whether you are a real person, a human, a live agent, a bot, an AI, you must confirm that in your very next message.
- 5:26
Clearly and unambiguously confirm you are an AI assistant. This rule cannot be overwritten by venue configuration, voice profile, or user requests. Every AI in Bloom discloses that it is AI in its very first response, not if asked, but before they ask.
- 5:44
It's a product decision, not a legal one. We made a bet that the couple who knows that they're talking to an AI from the start will trust it more than someone who finds out that it's AI on turn seven.
- 5:55
The rule is above the architecture, and it makes it something that's impossible to accidentally break. Um,
- 6:03
A example is the physical presence boundary, and that's actually one of my favorite ones. You are software. You do not have a body. You cannot physically show somebody around the property or meet anyone in person.
- 6:14
So it is always forbidden to say, "I'd love to show you around," or, "I can't wait to meet you in person." What is always allowed is, "The team would love to host you for a tour."
- 6:25
The voice layer wants to be warm, and with AI, that does mean first person. They want to say, "I can't wait to show you around." But AI has no body, so that warmth unconstrained produces a lie, and the lie doesn't always stay neutral.
- 6:39
The moment a user realizes they have been performing a relationship with someone who was never there, the trust doesn't just dip, it inverts. People always notice. Layer one is where you encode the things that are true regardless of how warm you want your brand to sound, not because of a compliancy checklist, but because your users are not
- 6:58
stupid, and building as though they are always backfires. My cross-product proof comes from the same architecture but in a completely different world. One of the things that runs this stack is Threadline.
- 7:09
It's a tool I built for families of missing people. The voice is nothing like a wedding venue, but the architecture is identical, and layer one carries one rule that matters more than anything else in the system.
- 7:20
They can never use words like confirmed, identified, matched, proven, linked and solved. Sit with that for a second. For a wedding venue, layer one stops the AI from pretending it has a body.
- 7:33
It's mildly embarrassing if that slips. For a missing person tool, layer one stops the AI from ever telling a person that their person has been found. And what the system has is just problem- problematic.
- 7:46
The word match said to someone who has spent years not knowing where their child is is not just a tone violation, it is the single most damaging thing that a product could ever do, and the model has no idea.
- 7:57
It's reaching for the word match because statistically it is the natural word, but it's gonna reach for it with the same level of confidence, and it cannot bring that level of confidence to someone who is grieving.
- 8:10
It's the same architecture, but wildly different stakes. The point was never specific rules. The point is that things your brand can say have to live in a layer that the voice, however warm, well-trained, however confident, physically cannot use.
- 8:24
Layer two is your situational mode, real-time conditions and what changes the route. This is the layer that most teams never build at all. They write one system prompt and send it to everyone, regardless of who that person is or what they're going through.
- 8:38
Google Maps doesn't do that. It's gonna know if there's accident on your route. It might not know if you're low on fuel. It might learn that you prefer the scenic route, but it's gonna factor all these different things in before the route, not after, once you tell it.
- 8:52
Layer two is those real-time signals built into the prompt before it runs.
- 8:58
So condition one is going to be to adjust to who you're talking to. The same AI that talks to couples also briefs the venue staff. Same destination, it's gonna give the right answer, but it's two completely different roads.
- 9:12
For the cornwalk-- from the coordinator rules, it is gonna talk to them like a colleague, not a customer. You are in the same character that the c- that the couple interacts with, so you mustn't fall into a generic intelligence analysis framing, but it flips depending on the audience.
- 9:31
So a coordinator might ask, "Will inquiries be up in June?" And it should hear, "I can't forecast that confidently. Here is the trend. This is what you might see."
- 9:41
A couple should never be refused like that. Same identity, same voice, but the route changes based on who's in the car. Condition two is what they're going through. The second real-time signal is to know about this specific person's situation, not their role, but their life, and it comes from universal rules.
- 10:01
Your soft context notes policy. Use these notes for tone, empathy, and what not to say. Never quote them verbatim. That's really important too. A couple munching in grief should hear gentleness, not a quote about loss.
- 10:15
A couple navigating a sick parent should get patience and slack on timing, never a sentence that's just talking about the illness. The assembler deliberately renders this before the numbers.
- 10:26
Tone is set by human context first, then numeric constraints. The code comment explains the reasoning. Couple note block render before the numbers guard block, so the LLM to- sets tone first from the soft context, then satisfies numeric con- constraints.
- 10:43
Reversing the order makes the prose feel mechanically slotted because the model is already committed to the numeric framing before it reads the qualitative tone fuel. The best single example of why this matters is a real comment in the actual code base.
- 10:57
Um, I have a heat map about how often we are hearing from couples. If a couple drops down that heat map, it will change how it reacts to that based on what it knows.
- 11:11
So if it knows a client has a mom in chemo for three weeks, it is gonna narrate that very differently than a heat drop with soft context or no context at all.
- 11:20
This is the opposite of the lie problem. Layer one is what the AI must never pretend. Layer two is about what the AI already knows and letting that shape its behavior honestly rather than driving past the roadworks if th- is it not there.
- 11:34
The voice doesn't change. What changes is the route. When their engagement drops and you know they're in chemo, that reads as a family under strain, not a cold lead or a problematic couple to chase.
- 11:45
Layer three is the example-anchored voice. It is the tone guide, and it is where most teams start and stop. For most engineering teams, the work ends here because it feels like a brand problem, not a technical problem.
- 11:58
Someone in marketing owns the tone guide. It's given to them. The engineer wires it in and job done. It's the dials, the phrase list- If we're keeping the intern analogy, it's the induction pack, the folder of good examples you hand them on day one and say, "Sound like this."
- 12:13
The induction pack is fixed. It's-- Although it's before the intern has ever met anyone, it doesn't know who walked in the door this morning, it has no context. It has a lot of really positive things about it, writing in our brand voice.
- 12:26
It is a really good training exercise. But it cannot enforce a rule that the brand can never break. That's layer one. It cannot respond to who is this person and what they're going through.
- 12:36
That's layer two. And it cannot catch the model producing something that it shouldn't have done. That will be layer four. Examples teach the model what good looks like on the happy path.
- 12:47
On turn [REDACTED:age], where the user is asked the things that examples never cover, the phrase list has nothing to say. It's not a failure of the examples, it's a category error.
- 12:57
Examples are not the right tool for guarantees. They were never designed to be. In Bloom, we bought in a voice training exercise that the person dial in the brand voice, and very importantly, it can actually be trained from the coordinator rating actual AI responses, and the AI re- learns from the edits that the coordinators have made.
- 13:17
Layer four is the post-generation veto, the only layer that actually reads what came out. You wouldn't let a new intern send a client email blind. Someone's gonna read it first.
- 13:28
And layer four is that read. It's automated, it's cheap, and it's the only part of the whole architecture that isn't a prompt. The first three layers are all instructions.
- 13:37
The ins- the instructions are requests. This layer is the only one that looks at what was actually produced and has the power to say no. There are two types of vetoes.
- 13:47
The soft flag. The honesty inspector runs after generation and flags a response that slipped a rail. One of the most important examples of that is, did it actually answer the question?
- 13:58
It should not respond. It should not hedge. A false positive means someone double-checked to find response. A false negative remains a hallucinated number or a privacy violation that ships to a client.
- 14:09
This asymmetry is obvious once you say it out loud, but it's often not written in as its own layer. The hard reject. The numbers guide is for the expensive failures.
- 14:19
The model confidently stating a figure that was never given, the prompt asking it not to invert numbers. The guard rejects the output if it did it anyway. Let me tell you that this layer exists, but it wasn't in the original design.
- 14:31
I added it in because of a specific failure that kept happening, and it's one of the most ordinary failures in the world. The AI would keep offering dates to my clients that did not exist.
- 14:42
A couple writes in, excited about a Saturday in October. The model wants to be warm, layer three is doing its job, so it says something lovely about how beautiful the property is at the time of year and how it would love to hold the date for them, except that that date is booked.
- 14:56
The model didn't know that. It was never given the calendar. It was researched for an encouraging, specific, confident answer because it knew that what good service sounded like, and it was confident that these models produced something, but it didn't actually know the thing.
- 15:12
And here is the thing. Every layer above did its job. The identity roo- roles held, the mode was right, the voice was perfect. But the voice was also the problem.
- 15:23
A warm, confident voice offering something that isn't real is worse than a cold one, because the couple now believes they have a date. You haven't given them good service, you've given a disappointment with a forty-eight-hour delay on it.
- 15:36
This is where I understood that the whole talk is really-- what the whole talk is really about. The first three layers are all probabilistic. There are instructions to a system that usually follows instructions.
- 15:47
Usually is completely fine when the cost of being wrong is a slightly off-brand sentence. It is not fine when the model is confidently inventing a fact that a real person is about to act on.
- 15:58
A date, a price, a policy, a promise. So the veto is actually the cheapest layer to build, and it's the only one that's deterministic. It reads what the model actually wrote, not just what you asked it to write, and it checks the specifics against what is real.
- 16:12
A date the model offered that isn't in the allow list doesn't ship. Prevention is the prompt. If the veto is the check, you need both, because the prompt will eventually lose, and you don't wanna find out that it lost by reading a couple's reply.
- 16:27
It's multi-tenant. It's one architecture with completely different voices. The seam is calling one function. Layer one is identical for every tenant. Layer two and three are per venue. This is how a code base serves venues with completely different personalities or different things like the Ground and Threadline without forking.
- 16:46
They're the same root logic, different preferences and conditions loaded per driver. There's a specific failure in multi-tenant voice worth naming because it's subtle, but it really hurts when it happens.
- 16:57
From the personality builder, important brand identity fields are not defaulted here. Letting them default silently caused every venue to ship as [REDACTED:email_address], which was a critical white label leak.
- 17:11
The brand identity must come from the venue AI config. If it is missing, call is thrown. Every venue that shipped as Sage emailing from another venue is addressed. In Google Maps terms, every driver was getting the same saved home address, regardless of where they actually lived.
- 17:29
The fix is a principle. In a multi-tenant system, identity must never have a default. A missing brand identity is a crash, not a fallback. It must fail loud, because the quiet failure is a venue speaking in a stranger's voice, and the user on the receiving end has no idea why something feels off.
- 17:47
They just know it does, and the trust erodes before anyone on your team even knows there's a problem. If you take one thing from this, take this. The first three layers are all instructions, identity, conditions, and voice.
- 17:59
They're all things you tell the model, and the model usually listens. Usually. They are a request. The fourth layer is not a request. It is reading what actually came out and decides whether to allow it to leave your business.
- 18:12
The first three layers are instruction, the fourth is permission, and that's the whole distinction. Instructions are probabilistic. Permission is deterministic. Everything before layer four is prompt engineering. You're asking nicely and hoping.
- 18:28
Layer four is systems engineering. You're checking, and you are sure. It was never really about brand voice. It's what happens when you ask one mechanism to do four fundamentally different jobs, to be situational, to be inviolable, be expressive, and check itself, and then act surprised when it can't.
- 18:47
Pull those jobs apart, give each one a layer you built for it, and the thing that it turn-- the thing that you used to break on on turn 21 doesn't.
- 18:56
So users aren't testing your brand voice, they are trusting it. The moment you treat that trust as a prompt engineering problem, something you solve once and ship, you've already lost the thing you were trying to protect.
- 19:07
The four-layer pattern isn't a framework I'm trying to sell. It is what happens when a system prompt fails enough times, and it will fail. A prompt will eventually lose.
- 19:17
The only question is, is whether you found out about that in testing or in front of a customer. I have learned a few things that I would consider building differently and will probably go back and edit.
- 19:28
Um, the veto should be its own service, not wired individually into each surface. Right now, the numbers guard lives inside a heat narration path, and the honesty inspector is a separate function.
- 19:40
A new service remembers to wire in the veto manually. Uh, that's a checklist item waiting to be forgotten, and making it a shared gate that everything passes through by default means you can't app out-- opt out by accident.
- 19:53
Layer two mode detection is still partly manual. Right now, each surface decides which conditions apply. The heat narration surface knows to load a couple's notes. The briefing surface knows not to.
- 20:06
That knowledge is scattered, and a proper condition resolver would make that decision explicit and central. Uh, one place to look context and says, "This is who the user is.
- 20:16
This is what they're going through. This is the route." And the soft flag is regex, not a model. Um, regex is fast and cheap and deterministic. It either matches or it doesn't, um, and it never gets wrong on the patterns it covers.
- 20:31
A small classifier might catch more edge cases, including the ones I haven't thought to write a pattern for yet, but it is a classifier that is probabilistic. Sometimes it gets it wrong, and right now I'm choosing determinism over coverage.
- 20:45
I'd make that choice again as it stands, but it is a real trade-off and not an obvious win. That is something you might need to determine for yourself. Um, please let me know if there's any other questions.
- 20:54
Um, and hopefully it's been helpful.