How I grade my discipline
There’s a single number at the top of this site that claims to measure how disciplined I was. You should be suspicious of it. Any number a person reports about themselves is suspect — the easy move is to define it so it always flatters.
So here’s the whole recipe, in public. No part of it is a vibe.
The number
discipline_score = round(100 × priorities-hit% × coverage%)
Two factors, multiplied. That’s the important word.
- Priorities hit — of the high-stakes, dated deadlines I actually committed to, how many I delivered.
done ÷ deadlines set, trailing 30 days. - Coverage — how often I showed up at all.
days I logged real work ÷ available days, trailing 30 days.
Today that’s round(100 × 14/15 × 12/15) = round(74.7) = 75 — priorities 93.3%, coverage 80%. (Use the exact fractions; 93% rounds the wrong way.)
Why multiply, not average
If I averaged the two axes, I could coast. Nail my priorities, ghost the system for half the month, and still post a respectable number — the average would quietly carry me. That’s exactly the kind of self-grading I don’t trust.
Multiplying is non-forgiving: a slip on either axis drags the whole thing down, and you can’t buy one axis back with the other. Two 95s make a 90. And a perfect 100 on one axis can’t rescue an 80 on the other — 1.00 × 0.80 = 0.80, still just an 80. No single lever buys back a weak axis. To score high you have to both hit what matters and keep showing up.
Why coverage exists at all
The sneaky way to look disciplined is to stop recording on your bad days. Only log the wins, and your “hit rate” looks immaculate.
Coverage closes that door. A day I don’t even record counts as a miss on me — the denominator is available days, not days I felt like logging. The only way coverage goes up is to actually show up.
The one exception: when the system breaks, not me
There’s exactly one carve-out, and it’s annotated in the open. If the system goes down — the agent host is a laptop, and in June it went dark across four days (19–22 Jun) — those days are a system outage, not skipped work. They’re recorded as a real, honest gap (you can read the incident note on the board), excluded from coverage’s available days. It still ends my streak, though — a multi-day gap is a multi-day gap, even when it’s the machine’s fault; the streak just restarts when I’m back.
That’s the rule: a slip is on me; an outage is on the machine. I don’t get to call my own laziness an “outage” — the outage has to be a real, logged incident, and it shows up as one.
The streak
consecutive sealed days where done ≥ 1 and missed_major = 0
It counts only days sealed into the ledger — the same hash-chained record you can verify — so you can recompute it from public data: each integrity.entries[] item carries its done and missed_major. It’s deliberately fragile: one day of no real work, one blown major deadline, or a system outage, and it resets to zero — then climbs again. Coverage forgives an outage; the streak doesn’t. A gap is a gap.
The tiers
The score is lower than a single-axis number would be — that’s the point — so the bands are set for the new distribution:
- Platinum (≥ 90) — ~95% on both axes. Genuinely hard.
- Gold (≥ 70) — a strong, consistent operator.
- Silver (≥ 50) — decent; one axis is clearly slipping.
- Bronze (< 50) — a real problem somewhere.
You don’t have to trust any of this
Every input is in public.json: priorities_hit_30d.pct, coverage_30d.pct. Multiply them, round, and you’ll get the score on the board. If they don’t match, I’m caught.
And the day-by-day record those percentages come from is a hash-chained ledger you can verify yourself — recompute the chain in your browser; alter one past day and it breaks. The grade is reproducible; the history is tamper-evident. That’s the whole idea: proof over vibes, formula included.