A maximum is only a limit if the number you hold it against is allowed to be wrong.
The only verdict is a dimming light
FocusBottle does one thing when I stop concentrating: the light in the bottle dims. No score, no streak, no notification. It is a check that is permitted to fail me, and that permission is the only reason it is worth anything at minute nineteen of a fifty.
So when I read through a fix log from the trading dashboard I keep, the thing that stood out was not the crash. It was a layer of safeguards that had never once said no.
Zero passes every test
The order path had the controls you would expect: a maximum order value, limits on exposure, a validation step that ran before anything reached the broker. The trouble was what it was fed. Market orders arrive without a price — that is what makes them market orders — and the order's value was computed as price times quantity. No price meant the value was zero.
Zero is an extremely polite number to hold up against a maximum. Every rule ran, every rule returned within limits, and the entire layer — the one thing standing between a bad afternoon and a bad month — approved whatever it was handed. Nothing was broken. It was simply asked a question it could not answer honestly.
The path that walked past the gate
Underneath that sat something worse. Orders could be placed two ways, and only one of them consulted the risk layer at all. The path I triggered by hand went through it. The strategy path — the automated one, which fires when nobody is watching — checked only whether a position in that symbol already existed, then went straight to the broker.
Nobody wrote a bug that day. Somebody added a second door to the same room and never installed a lock on it. A check that cannot fail and a path that never reaches the check are the same defect wearing two costumes, and both of them look exactly like a system that is working.
Seven steps, in order, with a written trace
The fix had two halves. First, give the check something real to measure: a market order now gets a price estimated from the position's current price, or from a slice of the account when there is no position yet. It is a rough number. It is no longer zero.
Second, make the gate unskippable. The strategy path now runs a fixed sequence — sell-position checks, duplicate-buy checks, risk validation, position limits, submit, record, log — in that order, with no branch around it. My favourite detail is that the risk log is the final step rather than an afterthought. A guard that leaves a written trace is far harder to bypass quietly than one whose only talent is staying silent.
What a check is for
FocusBottle's check is crude next to all that machinery. A timer notices the app lost focus and dims a light. There are no thresholds to tune and no configuration screen, and it is wrong about me several times an hour.
But it can say no, and I can see it saying no. That turned out to be the whole difference. A control that is structurally incapable of refusing is not a control. It is furniture, and it is the most expensive kind, because it is the kind you trust.