Three hours, twenty smart properties, built the regular way, hand-written prompts pulling from company activity to enrich records automatically. Tools used, current stack, that kind of thing.
Checked each one as it was built, not after. Opened it up, looked at what source the answer actually came from, not just whether a value populated.
Good thing I did. Most of the problems were in properties sourced from transcripts and activities specifically. A rep name-drops a competitor's stack on a call, or an outbound email uses another customer as a proof point, and the model reads that mention and quietly assigns it to the company being enriched. Association isn't attribution. The activity being on the record doesn't mean the content is about that company.
Tried to fix the prompts myself first. Didn't hold. Tried it with Claude too. Same result.
What actually worked was going through Breeze's assistant one prompt at a time. Not one fix, twenty separate passes, since what each property needed to capture wasn't the same. Same underlying logic every time, different ask. Took a while, but got every single one to only pull from the right sources.
None of this was live. Nothing populated on a real record before it was caught, since it was all still in testing.
Worth saying plainly: an empty field tells you what you don't know. A wrong one tells you the wrong thing with total confidence, which is worse for anyone downstream trusting the field.
If you're building smart properties on activity-based sources, transcripts especially, check the source before you check the output. I'll drop the prompt structure that ended up working in the comments if anyone wants it.