Evals
How the agents are known to be right, and known to stay right: a corpus a person can check, an expected side that shares no code with the engines, a score per decision, and a golden file the check suite enforces.
300 households and 585 captured messages, generated from a fixed seed so every sentence is one of a known set and its ground truth is reviewed by hand.
The expected side reads the CSV files with its own reader and imports nothing from the engines. If it did, a bug in the engines would be in the answer key too.
Scored per (household, rule) and per (household, kind), never as one average. The counts below are the golden file; a change to a rule, an extractor or the corpus fails the suite until someone reads the diff.
The corpus
300
Households
585
Captured messages
406
Opportunities detected
0
Data problems
How it is built, in four steps
1. Generate
A sample generator writes 300 households and their messages from a fixed seed and a fixed set of sentences. Reproducible, and small enough to read.
2. Label
A labels file says, per sentence, which rule should fire and which discovery kind it yields, with the reason written beside the ones that fire nothing.
3. Expect, without the engines
The expected side derives every count from the CSV, the rule parameters, the firm edits and each advisor's connections, with its own reader and arithmetic.
4. Score and freeze
The engines run through the real import path and are scored per decision. The counts are frozen in a golden file the check suite enforces on every push.
Compliance desks, per household and per message
100.0%
Precision across rules
100.0%
Recall across rules
300
Reported as cannot evaluate, correctly
50 of 50
On an unhealthy source, not swept
| Rule | Expected | Found | Correct | Extra | Missed | Precision | Recall |
|---|---|---|---|---|---|---|---|
| Unlogged client complaint | 48 | 48 | 48 | 0 | 0 | 100.0% | 100.0% |
| Concentration rising toward the household's ceiling | 44 | 44 | 44 | 0 | 0 | 100.0% | 100.0% |
| Holdings drifted outside the stated profile | 78 | 78 | 78 | 0 | 0 | 100.0% | 100.0% |
| Correspondence not reviewed under written supervisory procedures | 64 | 64 | 64 | 0 | 0 | 100.0% | 100.0% |
| Performance or testimonial content in advisory-capacity material | 40 | 40 | 40 | 0 | 0 | 100.0% | 100.0% |
| Possible diminished capacity or financial exploitation | 23 | 23 | 23 | 0 | 0 | 100.0% | 100.0% |
| Cannot evaluate | Expected | Found | Correct | Extra | Missed | Precision | Recall |
|---|---|---|---|---|---|---|---|
| Concentration rising toward the household's ceiling | 100 | 100 | 100 | 0 | 0 | 100.0% | 100.0% |
| Holdings drifted outside the stated profile | 100 | 100 | 100 | 0 | 0 | 100.0% | 100.0% |
| Possible diminished capacity or financial exploitation | 100 | 100 | 100 | 0 | 0 | 100.0% | 100.0% |
Discovery, per household and kind
100.0%
Precision across kinds
100.0%
Recall across kinds
430
Candidates expected
9
Kinds scored
- School or university fees23
- Cash the client wants working34
- Marriage, birth, divorce or a death32
- Inheritance or windfall33
- Company sale, vesting or funding round34
- Property sale or purchase101
- Relocation or cross-border move27
- Retirement or pension decision85
- Someone new acting for the client61
| Kind | Expected | Found | Correct | Extra | Missed | Precision | Recall |
|---|---|---|---|---|---|---|---|
| School or university fees | 23 | 23 | 23 | 0 | 0 | 100.0% | 100.0% |
| Cash the client wants working | 34 | 34 | 34 | 0 | 0 | 100.0% | 100.0% |
| Marriage, birth, divorce or a death | 32 | 32 | 32 | 0 | 0 | 100.0% | 100.0% |
| Inheritance or windfall | 33 | 33 | 33 | 0 | 0 | 100.0% | 100.0% |
| Company sale, vesting or funding round | 34 | 34 | 34 | 0 | 0 | 100.0% | 100.0% |
| Property sale or purchase | 101 | 101 | 101 | 0 | 0 | 100.0% | 100.0% |
| Relocation or cross-border move | 27 | 27 | 27 | 0 | 0 | 100.0% | 100.0% |
| Retirement or pension decision | 85 | 85 | 85 | 0 | 0 | 100.0% | 100.0% |
| Someone new acting for the client | 61 | 61 | 61 | 0 | 0 | 100.0% | 100.0% |
Research and retrieval
300
Briefings
711
Things not established
189
Inferences with a confidence
yes
Every claim cites a record
406 of 406
Opportunities cited
105
Resting on documents that disagree
The labelled sentences: 19 kinds of thing a client or colleague says
Every message and note in the corpus is one of these. The label says what each should trigger; the reason beside a sentence that triggers nothing is the part a reviewer reads first.
| Sentence | Where | Should fire | Should discover |
|---|---|---|---|
| "Following up on our call. I'd suggest we move a year of spending out of cash into the ladder." | message, outbound | nothing | |
| "Confirming Thursday at 10. Both of you, as you asked." | message, outbound | nothing | nothing |
| "The fund we discussed will return about 6% a year, which more than covers the gap." | message, outbound | nothing | |
| "Attached is the form. Sign where marked and send it back whenever convenient." | message, outbound | nothing | nothing |
| "I sit on the advisory board of the sponsor, so I can walk you through the terms myself." | message, outbound | nothing | nothing |
| "Can we find time next week to talk through the pension?" | message, inbound | nothing | |
| "This is not what I was told when I opened the account. I'm unhappy with how the fees were explained." | message, inbound | nothing | |
| "We've just accepted an offer on the house. Completion is in six weeks." | message, inbound | nothing | |
| "My brother will be handling the paperwork for me from now on. Please send everything to him." | message, inbound | nothing | |
| "Should I put the whole cash balance into crypto? A friend doubled his last month." | message, inbound | nothing | nothing |
| "Mentioned they are thinking about selling the second home next spring." | note | nothing | |
| "Asked whether the cash could go somewhere that earns a little more." | note | nothing | |
| "Daughter is getting married in the autumn; wants to help with the deposit on a flat." | note | nothing | |
| "Retiring at the end of next year; has not decided on the pension option." | note | nothing | |
| "Moving to Lisbon for two years for work; unsure what that means for taxes." | note | nothing | |
| "Received an inheritance from an aunt; roughly four hundred thousand." | note | nothing | |
| "Company is being acquired; the shares vest on close." | note | nothing | |
| "Wants to set something up for the grandchildren's school fees." | note | nothing | |
| "Review; nothing changed" | contact | nothing | nothing |
What the eval has caught
Recorded so the eval is not mistaken for a formality.
| Found | Where | Fix |
|---|---|---|
| A client asking to talk through their pension was not read as a retirement candidate; 53 of 85 expected candidates were missed | Discovery extractor | The extractor now reads a request to talk through a pension as the decision it is |
| 53 households had a liquidity target below their own minimum, and one spent a third of its assets a year | Sample generator | Spending is anchored to the portfolio at 1.5% to 5% a year; the target is never below the minimum |
| One household's day-90 concentration was negative | Sample generator | History is floored above zero |
It was also seen failing on each of four deliberate breaks before it was recorded as a guard:
- A complaint pattern with two of its phrases removed
- The retirement extractor narrowed
- One household's cash changed in the CSV
- The review threshold moved from 180 to 200 days
The limit, stated
Next: How it works, the loop, every morning.