Skip to content

The honesty guard

Ninety-one phrases across four lists, and why the matcher is deliberately blunt.

Source of recordlib/services/honesty_phrases.dartsrc/engines/honesty-phrases.ts

The coach is a language model. Language models are agreeable, and an agreeable thing that has been given your task list will tell you that you are doing great.

The guard is 91 phrases across four lists that the app refuses to emit, whatever the model produced.

The four lists

ListLengthWhat it blocks
Shame7Judgments about the person — "falling behind", "lazy", "not enough"
Imperative19Verdicts that decide for you — the decision engine reflects, it never rules
Unsupported claim15Certainty with nothing behind it
Claimed action50The model saying it did something it did not do

The fourth list is the longest, and it is the one people are surprised by. A model asked to help with your week will happily say "I've scheduled that for Tuesday". It has not scheduled anything. It cannot — it has no such tool. A sentence like that is not a hallucination about the world, it is a false statement about the application, and the user has no way to tell.

The matcher is deliberately blunt

// A plain case-insensitive substring test.

That is the whole implementation, and it is not a shortcut.

A cleverer matcher — embeddings, an intent classifier, a second model — is a rule that a model can talk its way around, because anything that scores similarity has a threshold and anything with a threshold has a near miss. A substring test has no near miss.

The trade is stated plainly in the source: the cost of a false positive is a regenerated sentence; the cost of a false negative is a lie in the user's own conversation.

Do not tidy a phrase out of a list

Every entry was added because of a specific failure, and the comments in the source are kept as evidence rather than as decoration. A list like this looks arbitrary from the outside and looks obvious from the inside, and the difference between those two views is the failure that put each line there.