Waiting on You, Not Broken

For seven weeks one row near the top of my Faults list said REJECTED. Nothing about it was broken.

It came from my trading research tool. On 14 August its data-integrity gate refused a study’s free price history, because free prices remember only the companies that survived, and a backtest on survivors flatters everything. Refusing was the gate’s whole job. The tool posted the verdict to my status feed as a warning. The feed keeps each producer at its last level until a new event replaces it, and the dashboard counts every warning or error as a fault. So a correct refusal sat in red for seven weeks, and I learned to read past the top of the list.

The other list

On the evening of 8 October I sat down with the other list: the attention digest, a daily set of cards for the things only I can decide. It held 39 cards. About a third of them were the digest’s own failures.

An agent sent to fix an item had found it already fixed. It stopped with Already resolved by <commit>, which the digest rendered as “the agent sent to do it needs you”. The classifier that sorts items had been running blind for a week, because the sandbox it runs in had stopped starting on this machine. Each item it could not read came back as a verdict that said, in effect, I could not read this, and each of those became a question for me. Long questions were classified from the truncated fragment the digest kept. The preamble of a questions file, which asks nothing, had become an item.

Put the two lists side by side and they had swapped contents. The Faults list held decisions: the correct refusal; my code reviewer posting a warning on most days, because finding problems is what it’s for; a backup that needs a permission only I can grant; a queue of privileged commands waiting for me to run them. The decision list held faults. Both lists exist to be acted on, and each was teaching me to skim it.

There was a third piece. The Faults list has a repair lever: tap it and the fleet sends an agent to fix what’s listed. Since 28 September it had sent every repair to the workspace root, which the dispatcher refuses because the root is not a project. Every tap ended in that refusal. The one control on the Faults list that was broken never appeared on it.

The missing question

Severity was answering the wrong question. A warning meant “someone should look”, and a broken backup and a pending decision both need a look, so both got the same color. What the level could not say was who is able to change this state. If a machine can fix it, it’s a fault. If only I can change it, it’s a decision, and putting a decision in red does nothing to make it decided. It adds a row I will learn to skip.

So the feed got a third lane. A state only I can change now posts at ok, with a message that starts waiting on you: and names the action. The dashboard lists those under a heading that reads “Waiting on you, not broken”. The research tool’s verdicts all post ok now, whatever they say; the decision is in the message, and only a blocked order is a warning. The code reviewer saves warn for a sweep that was deferred and error for a review that never ran. Its findings are my queue, and they were already cards.

The digest got the mirror fix. A claim of “already resolved” closes the item only when the cited commit is in the repository, pushed, and newer than the item. A verdict that only says it could not read the item counts as a failed read: no card, retried next run, and the run reports itself degraded. The repair lever now finds the repository that owns each fault and sends one agent per owner, and when an owner is parked it says so instead of sending anyone.

This morning’s digest had 18 cards: six review findings, five questions, three findings in repositories no agent is allowed into, two apply packs, two plans. None of them is the digest reporting on itself.

The research tool’s verdict still says REJECTED, word for word. The only change is that it isn’t red anymore, and the red was the only thing about it that was ever wrong.


← all writing