Picture the version of this app I did not ship.
It is 6:04am. The room is dark, the alarm is going, and you are saying today I begin with purpose into a phone for the third time. You are saying it correctly. The phone has decided you said “today I began with purpose” and it is not letting you out.
That app gets deleted before breakfast, and it deserves to.
To turn RYZA off you read a sentence out loud, so the obvious build is to transcribe what you said and compare it to what you were supposed to say. I never did that. Two phones have been running this since the first build, every morning, and recognition lands somewhere around eight or nine times out of ten. That is a fine number for dictating a message, where you glance down and fix the one wrong word. It is a terrible number when the wrong word means the noise continues.
Exact matching makes the user pay for the recognizer’s mistakes. At six in the morning that is not a bug report. It is an uninstall.
So I stopped asking whether it was right
The question I care about is not “did the transcription come back correct.” It is “is there enough here that a person plainly read this sentence out loud.”
Those are different questions, and the second one survives a recognizer having a bad morning.
Three questions instead of one
Both the expected sentence and whatever came back get tokenized, then compared three ways.
Similarity asks how close the words are to the ones I expected. This is the part closest to a traditional match, and it is the most forgiving of the three, because it is the one the recognizer breaks most often.
Coverage asks how many of the expected words showed up at all. Saying half the sentence louder does not help you here.
Order asks whether the words that did show up arrived in the right sequence. It is the longest common subsequencethe longest run of words appearing in the same order in both sentences, gaps allowed divided by the number of words that matched.
All four gates, not the average
The score alone does not let you through. Passing means clearing the composite and each of the three parts on its own.
That is deliberate, and it is the decision I would defend hardest. A weighted average lets a very high similarity drag a terrible coverage over the line, which in practice means someone mumbling the first three words of a nine-word sentence gets their alarm turned off. Separate floors make each dimension non-negotiable.
It costs me a failure mode I have decided to live with: you can say every single word and still not pass, if you say them badly out of order. Rare enough with real sentences that I would rather keep the floor.
One dial, four numbers
Difficulty is a single setting, and everything else falls out of it.
| Mode | Setting | Score | Similarity | Coverage | Order |
|---|---|---|---|---|---|
| Easy | 0.62 | 0.62 | 0.54 | 0.68 | 0.72 |
| Normal | 0.72 | 0.72 | 0.64 | 0.78 | 0.80 |
| Hard | 0.82 | 0.82 | 0.74 | 0.88 | 0.90 |
Similarity always sits below the score. Coverage and order always sit above it. That ordering is not cosmetic: it encodes what I trust the recognizer to get right. I expect it to mangle individual words, so similarity gets slack. I expect it to preserve the shape of what was said, so coverage and order do not.
The floor I left in easy mode
Look at the Easy row again. The score bar drops to 0.62, but order stays at 0.72.
That is a clamp, and I put it there on purpose. Easy mode is meant to forgive a groggy voice and a recognizer having a bad morning. It is not meant to let someone say the words of their own intention in a random order and call it done.
Every dimension gets more generous as you turn difficulty down, except the one that would let you through without actually reading the sentence. That is the single most opinionated number in the file, and if anyone ever tells me easy mode is too strict, that is the number they are complaining about and I am not moving it.
Where this stops being evidence
Everything above is what the code does. How well it works is a weaker claim.
Two phones every morning for months is real testing, and it is how these thresholds ended up where they are. It is not a logged trial count and I am not going to dress it up as one. No distribution of attempts per morning, no failure rate by sentence length, and I have never held one variable still while moving another.
The part that actually nags at me is narrower. I tuned this on my own voice, in my own room, in the languages I happen to speak. The order floor has been harmless for two people. Two people is not a sample.
That measurement is the next piece of work, and the numbers will get their own post rather than get estimated into this one. Assuming the alarm gets to ring at all, which on iOS turned out to be a whole separate fight.