Blog
Updated Dayah DoverCircadia

One Number Is Never the Whole Story

Why Circadia lets you change the math behind your sleep — and why my own settings look nothing like the defaults. Featuring a very bad Airbnb, a fourteen-hour lurch, and the embarrassing number of hours I do not spend asleep.

Why Circadia lets you change the math behind your sleep — and why my own settings look nothing like the defaults.

Most sleep apps hand you one number and a great deal of confidence. Your cycle is 24.8 hours. Your chronotype is a woodland animal. Your sleep score is 71 — no methodology, no margin of error, just 71, like a credit score for being unconscious. Good morning!

Circadia tries hard not to do that, and the clearest place you can see it is a panel most apps would bury, or never build in the first place: Sleep Math. Five numbers that change how your drift actually gets calculated. Not display preferences, not cosmetic toggles — the real machinery underneath your results.

This post is about why those numbers exist, why the defaults are deliberately cautious, and how to change them so the app describes you instead of some imaginary average sleeper who doesn't exist. I'll use myself as the example, partly because my settings are nowhere near the defaults, and partly because I just lived through a genuinely strange month that lays out, in one messy stretch, exactly why a single number should never be trusted alone.

Fair warning: this runs long and wanders — through some arithmetic, a very bad Airbnb, and the embarrassing number of hours I do not spend asleep. The wandering is deliberate.

First, what τ actually is

I'll be leaning on τ ("tau") throughout, so it's worth defining properly — because the casual version most apps imply is flattering and wrong.

When people hear "your circadian period," they picture a fixed biological constant: the true running speed of your internal clock, wired in somewhere deep and immutable. That constant is real. It's called your intrinsic period, and pinning it down requires a forced-desynchrony protocol in a sleep lab — no windows, no clocks, dim light, melatonin sampling around the clock. That number does not come out of a phone. It comes out of a laboratory.

What Circadia measures is its earthbound cousin: your behavioral period — the observed length of one complete sleep-wake cycle, measured from one sleep onset to the next. And the faintly deflating secret of the behavioral period is that it's a sum, not a mystery. One cycle is simply your sleep plus the wakefulness that follows it. Sleep five hours, stay awake twenty-three, and that cycle ran twenty-eight hours — arrived at by addition, not by anything mystical happening in your hypothalamus. (Which is also why a cycle over 24 hours drags your bedtime later each day: a 28-hour cycle is just 24 hours plus 4 hours of drift. Sleep-plus-wake and 24-plus-drift are two roads to the same number — and for a 24-hour sleeper they'd both land on 24, with nothing left over to drift.)

Here is where it turns personal, and a little absurd. I sleep about five hours a night. Not by preference — that's simply where my body settles when it's well-rested, comfortably under the seven or eight hours most people log. And since a cycle is sleep plus wake, the less you sleep, the shorter each cycle runs. My five-hour nights make my cycles shorter than they'd be if I slept a full eight and stayed awake exactly as long.

Which yields a fact I find grimly funny: my chronic under-sleeping makes my τ look smaller than it has any right to. If I slept like a civilian — a full eight hours — and kept the same punishing days, every cycle would stretch a few hours longer and my number would climb. The very thing that makes the disorder exhausting, the perpetual sleep deprivation, is quietly holding my headline figure down. My sleep is too short to even let my tau be as dramatic as my body actually is. There's a joke about efficiency in there somewhere and I'm too tired to find it.

This is also worth being careful about, because it's easy to say sloppily and accidentally insult a whole community. I almost certainly do have a genuinely long intrinsic clock — that's what Non-24 fundamentally is: an internal period far enough from 24 hours that daylight can't yank it back into line. The clock is real, and it's the underlying cause of everything in my log. What behavioral τ gives you is the visible footprint of that clock — the best estimate you can take at home — with the texture of real life pressed into it. How long you sleep, the nights you skip, the alarm that drags you up early: all of that nudges the footprint away from the clean number the oscillator would print on its own. So two people with genuinely identical internal clocks can show different behavioral τ purely because one sleeps four hours and the other sleeps nine. That's not the measurement failing, and it's not me suggesting the intrinsic clock is a fiction. It's the honest limit of measuring from a bedroom instead of a lab: I can see the footprint clearly, I just can't pin the exact number underneath it without the windowless-room treatment. Anyone who hands you a home-measured τ as though it were a lab-grade reading of your deep biological clock is quietly rounding off that humility.

My number this month: 26.3 hours on the defaults, 28 on my own settings

Both are correct. Same data, same estimator — the only variable is the thresholds. That gap is the entire reason the Sleep Math panel exists, so let me show you where it comes from using a single real night.

Here's yesterday, lifted straight from my log:

May 26 — asleep 02:21, awake 12:09. Drift reads −9.95h, with an alternate reading of +14.05h. Tagged: migraine. Note: "Woke up feeling good finally."

I'd been awake roughly 31 hours — which, added to the short sleep before, made the gap from my last bedtime to this one about 36. When I finally went down, that bedtime had landed about fourteen hours later on the clock than the cycle before.

Now, Circadia records drift on a scale that only runs from −12 to +12 hours. Picture a clock face: travel far enough forward around the dial and you arrive somewhere that looks identical to having gone backward. A genuine +14-hour leap won't fit on that scale, so it gets transcribed as −9.95h — the "short way around." That's why the app surfaces both numbers. From the timing alone, it cannot distinguish "I drifted fourteen hours in a single cycle" from "I had an ordinary day, skipped a sleep entirely, and wrapped around the clock." On paper, those two stories are the same shape.

That isn't the app dithering. It's the app declining to manufacture a certainty it doesn't possess — which most apps simply won't do; they pick one interpretation and march on. Circadia shows you the fork and lets you make the call, because you were there and the algorithm wasn't. The setting that governs how nights like this get counted is the post-sleepless threshold, which I'll come back to. It's the single biggest reason my number reads 26.3 on the factory settings and 28 on mine.

Update, May 27 2026: I shipped a fix for exactly this. Circadia now measures drift in gap-space — the unwrapped slip across the whole gap (onset-to-onset minus 24h) — so a night like the one above reports the true direction (the +14h reading) instead of the −9.95h "short way around," and flags only genuinely enormous sleepless stretches as a "long sleepless event" rather than a misleading number. I'm leaving the walkthrough above exactly as written, because the reasoning still explains why the ambiguity existed in the first place — and honestly, "we noticed and fixed it" is a better ending than pretending the fork was never there.

The detour: a very bad Airbnb

Here's what turned this particular month into such a peculiar dataset.

I booked an Airbnb that turned out to be quietly hosting black mold, and I spent about nine hours in it before we fled. Nine hours. That was sufficient to derail a substantial chunk of my month. (For the record, since "mold" in a sleep blog invites the wrong mental image: this was a rental, briefly, by accident. I am not living in a petri dish. I just stayed in one overnight.)

It didn't arrive like a head cold. It arrived like someone quietly turned my entire system down a few notches: brain fog, a heavy dragging fatigue, and — the part that matters for a sleep post — more sleep that somehow registered as no sleep. I'd go down longer and more often and still surface wrung-out and foggy, as though I'd never been to bed at all. You can watch it happen in the run of dismal quality scores through the back half of the month. And here's the counterintuitive twist: all of that misery made my sleep data look calmer, not worse.

Because here's my baseline, and it doesn't go anywhere: I have severe Non-24, and severe means severe. On a normal month I go sleepless several times a week, routinely 30 to 40 hours at a stretch, and the genuinely bad ones run past 70 — I've been doing the 70-plus marathons regularly for years, not as some rare event. The mold did not cure any of that — you don't catch a respite from a circadian rhythm disorder by inhaling a toxin. What it did was grind me down so thoroughly that my body started seizing more sleep than it usually permits: more total rest, fewer marathons, a slower-looking drift. But the drift never stopped — it just shrank. I still moved hours later most nights. One night it even slipped backward an hour, which almost never happens to me — I'm a forward-drifter through and through — and when it does, it's not my clock wandering at random; it's my body lunging back toward its natural period after a long sleepless stretch knocked it off course. The exposure weeks in my log are wall-to-wall small drifts paired with abysmal sleep quality — which is exactly what "my rhythm losing a fight to exhaustion" looks like rendered as data. Slowed, not silenced.

So when the app shows a calmer month, it is telling the absolute truth about this month, and simultaneously lowballing who I am the rest of the time. This was the easy version. My normal is worse — and I say that as someone whose "easy" month still contains a 38-hour all-nighter.

Then yesterday happened, and I made a deliberate choice: I did not tag it as mold-related, even though I'm not fully back yet. Because it felt like me again — the enormous fourteen-hour lurch, the long sleep, "woke up feeling good finally." That's my real drift coming back online as the fog burns off, and it read more like baseline-me than the foggy weeks did. So I let the absence of a tag carry the meaning. Tagging is a judgment call, not data entry; sometimes the most informative thing in a log is the tag you chose not to apply.

Which is the point I keep circling back to: τ is not a fixed possession. It's something you are doing right now, and it moves. Mold slowed mine. Recovery is accelerating it. Ask the app what my τ is this month and the only honest answer is another question: compared to which week?

The sleepless nights get their own paragraph

Even in the easy month, I had eight stretches with no real sleep — roughly 27, 38, 30, 28, 20, 26, 28, and 31 hours awake. The 38-hour one spanned three calendar days.

If you don't have a free-running disorder, that list looks alarming. If you do, you already registered that this is the mild version for severe Non-24, and that being too sick to stay upright was the only thing keeping the count that low.

These stretches are exactly what the post-sleepless threshold exists to handle. Take my 38-hour one: more than a day and a half awake, then a long recovery crash — that's a bedtime-to-bedtime gap pushing forty-five hours. Did my clock genuinely lurch fourteen-plus hours forward in one go, or did I skip an entire cycle so the apparent "drift" is really the clock wrapping around again? The app can't tell from timing alone — at a gap that large, "fourteen forward" and "ten backward" are mathematically indistinguishable; one is just the long way around the dial. Rather than pick wrong, it sets nights like that aside. For most people, that's the correct instinct. For me — where these gaps are routine, not rare — it's where everything gets interesting.

The five settings, and who each one is for

The defaults assume a fairly clean, sleep-once-a-day Non-24 pattern. A lot of us don't fit that, so here's how to set the math to your actual body rather than the hypothetical average one.

Sleep target (default 7.5h)

This sets the baseline your sleep-debt readout measures against. It does not touch the τ math at all — only the debt figure.

Change it if your well-rested baseline isn't 7.5 hours. Plenty of people with Non-24 or chronic illness need considerably more; some of us run short. Mine sits around 5, which is why leaving it at 7.5 would have the app convinced I'm perpetually drowning in sleep debt when I'm perfectly fine. Set it to your genuine rested baseline, or the debt number is fiction.

Fragment if < (default 6h after prior wake)

If a sleep begins within this many hours of your previous wake, the app treats it as a fragment of the same sleep — a continuation — rather than a brand-new cycle. Otherwise a quick second sleep right after waking would get counted as a whole separate day, which it isn't.

Lower it (3–5h) if your sleep naturally arrives in pieces — polyphasic sleepers, ME/CFS, fibromyalgia, chronic fatigue. If your body genuinely runs two or three real sleeps a day, a 6-hour window fuses them when it shouldn't. Raise it (8h) if you're a clean one-sleep-a-day type who occasionally dozes after waking and doesn't want that counted as a fresh cycle.

Auto-flag naps under (default 4h)

Anything shorter than this is automatically pulled from the drift math — a crash nap has no business defining your clock. You can always flip it back on a per-entry basis. Lower it if you have genuinely short main sleeps you want counted; raise it if your "naps" run long but still aren't your real sleep. Most people leave it where it is and override the occasional exception by hand.

Post-sleepless if gap > (default 30h) — the one that moves my number

When the gap from one bedtime to the next exceeds this value, the app tags that transition "post-sleepless" and excludes it from your clean average — because beyond a certain gap, it genuinely cannot distinguish a real, enormous drift from a skipped cycle that wrapped around. Rather than guess, it benches the night.

One subtlety worth naming honestly, because I tripped over it myself this week: the setting's called "post-sleepless" and it sounds like it should be gating on how long I was awake. The math is a little different — it compares the gap from one bedtime to the next, which is the prior sleep plus the awake stretch combined. A twenty-five-hour awake stretch after a ten-hour sleep makes the same gap as a thirty-hour awake stretch after a five-hour one; the math doesn't care which made it long. The name leans biological; the underlying gate is geometric, because that's the gap where the clock-face wrap math actually breaks down. (We're working on a smarter version that uses your prior τ to unwrap those long gaps correctly instead of benching them — when it ships, transitions like my fourteen-hour leap will count toward τ at the right magnitude instead of getting set aside. For now, the bench-and-trust-your-cleaner-nights approach is the conservative call.)

For most people, 30 hours is right. The trap, for people like me: if your biological day genuinely runs long — 26, 27, 28 hours — your ordinary cycles start colliding with 30 all on their own. An eight-hour sleep after a twenty-three-hour awake stretch is a thirty-one-hour cycle, nothing skipped whatsoever, and the default benches it anyway. So the default scrutinizes my most characteristic nights — the long ones — decides it can't trust them, and quietly assembles my average out of my shorter cycles instead. That's how I end up reading 26.3.

I keep mine at 34h, which lets my genuine long cycles count, and my number climbs toward 28 — far closer to what my body is actually doing. The app's own tooltip says it outright: if your biological day is unusually long (26h+) you may have legit cycle gaps that creep over 30 — raise this to about 32–36. I wrote that tip. For myself. And then promptly needed it.

Raise it (32–36h) if your true period is 26h+, or if the app flags you as a "low-cycle-rate" user. Leave it at 30 or lower if you sit closer to 24 hours and want to be strict about discarding genuinely skipped nights.

Ambiguous drift if |shift| > (default 8h on a clean transition)

Even on a night that isn't post-sleepless, a single drift larger than this gets flagged "ambiguous" and held out of the main average, on the theory that shifts that big are usually clock-wrap artifacts or split-sleep noise. Raise it if you genuinely swing 9–12 hours after a long awake stretch — yesterday I swung fourteen — so those real nights still count. (And if you've already hand-flagged a specific entry as "include in drift," that choice wins and bypasses this filter for that night.)

The opposite approach: the forecast that tunes itself

Everything above is you, by hand, instructing the app how to read your nights. There's a second engine inside Circadia that operates in the exact opposite direction, and the contrast is worth a minute, because it's the whole philosophy in miniature.

The thresholds are rules you set. The Adaptive forecast — Jon built it, and he wrote it up properly here — sets no thresholds at all. It's machine learning, but the small, transparent, old-fashioned variety, not the chatbot kind. No neural network, no language model, nothing of the sort.

Picture a swarm of 64 small competing guesses about what your sleep is doing at this moment. Each one carries a complete theory of you — where your clock currently sits, how fast it's drifting, how much sleep pressure you've banked, how long you tend to sleep. Every time you log a night, all 64 make their own prediction and then get graded on how close they came. The ones that called it correctly gain influence; the ones that missed get culled and replaced with variations on the survivors. Run that loop over enough nights and the swarm gradually converges on the picture that actually fits you. (If you've ever heard how meteorologists run dozens of slightly different weather models in parallel and let reality vote on the winners — it's that, pointed at your sleep instead of the sky.)

The interesting part, for this post, is what those guesses are arguing about. A threshold asks a blunt, binary question: was this gap longer than 30 hours, yes or no? The forecast asks a subtler one about every single sleep — was that a normal night? a crash nap? recovery sleep after a brutal stretch? a genuine phase shift? a skipped cycle? — and crucially, it doesn't have to commit immediately. After one weird night it can hold several hypotheses open at once ("probably recovery, but possibly a real shift — let's see what tomorrow brings"), widen its uncertainty accordingly, and wait for your next sleep to break the tie. That is the precise opposite of a fixed rule. Instead of you drawing the line, it infers the line from your data, and it has the good manners to admit when it doesn't know yet.

So the two halves of Circadia pull in deliberately opposite directions. The thresholds are where you encode what you know about your own body that no algorithm could possibly guess. The forecast is where the app earns its own understanding of you from your history. One is hand-tuned, one is self-tuned, and somewhere between them you get a number that respects both what you know and what the data shows.

The honest part, which is the part that actually matters

It would be easy to read all of this as an invitation to crank the thresholds until your number looks impressive. Please don't — and the app is built so that doing so makes your data worse, not better.

The point of changing your settings is accuracy to you, and accuracy frequently points down, not up. If your real period is 24.4 hours, widening every threshold won't promote you to a glamorous 28-hour outlier. It'll just admit noise into your average and inflate your uncertainty until the number means nothing at all. The correct setting is the one that matches what your body actually does — and the only person equipped to answer the question the app cannot is you: were those long gaps real long cycles, or nights I skipped sleep? That answer sets the threshold. Never the reverse.

And two caveats sit beneath every number Circadia will ever show you. The first I already confessed up top: this is a behavioral period, reconstructed from when you report falling asleep. Real and useful, but not a laboratory measurement of your intrinsic clock, and quietly shaped by how much you sleep.

The second concerns confidence. Every τ arrives with a companion number telling you how solid it is. Mine, this month, is shaky — as it should be, because this month was effectively two different people sharing one dataset: the slowed-down mold version and the rebounding version that surfaced yesterday. A wide confidence band there is not the app failing. It's the app being honest that my rhythm wasn't steady enough this month to pin down. That honesty beats a tidy, false number every single time. If you carry one idea out of this entire rambling post, carry this: a period reported without its confidence is not a measurement. "28, but I'm genuinely unsure" and "28, rock solid" are completely different facts about a human being, and any app that hides which one it's quoting you is doing you a quiet disservice.

The short version, for the scrollers

  • τ, the kind you can actually measure at home, is just your cycle length: how long you sleep, plus how long you're awake. It is not your intrinsic clock, and it's shaped by how much you sleep — I sleep ~5 hours, which actively shrinks my cycle and holds my number down.
  • The defaults are cautious on purpose, so a brand-new user with three nights of data doesn't get handed something wild.
  • "Cautious and comparable" is not the same as "true for you." Long biological day, polyphasic pattern, ME/CFS, big nightly swings — the Sleep Math panel is where you tell Circadia who you actually are.
  • The thresholds are rules you set by hand; the forecast learns its own. One respects what you know, the other earns what it knows.
  • τ moves. A bad mold exposure slowed mine and cut my all-nighters; recovery is hauling me back to a faster, harder baseline. This was my easy month, and it still looks like this.
  • Tune for truth, not for drama. The honest setting sometimes makes your number smaller.
  • Then trust the number a little less than you'd like to, and your own logged history a little more.

I tracked this month foggy, slowed, and rebounding, across eight sleepless stretches and a string of big drifts — including a fourteen-hour lurch that may or may not have even been a single shift. The app can't render that clean, and it isn't supposed to. What it can do is show me the mess accurately, hand me the dials, and trust me to know which of my nights were real cycles and which were just my body flatly refusing to close one.

That trust — the assumption that you know things about your own sleep no algorithm ever could — is the whole idea behind Circadia. The settings panel is simply where it stops being a nice sentiment and turns into a button you can actually press.

— Dayah

FAQ

What is τ (tau) — is it my biological clock?
It's your behavioral period: one cycle, onset to onset (sleep plus the wake after). It's the at-home footprint of your real intrinsic clock, not a lab-grade reading of it — that needs forced desynchrony in a sleep lab.
Why does sleeping less make τ smaller?
A cycle is sleep + wake, so fewer hours asleep means shorter cycles. Chronic under-sleeping makes τ look smaller than the underlying clock actually is.
How does Circadia handle a huge overnight shift or a skipped sleep?
It measures drift in gap-space — the unwrapped slip across the cycle (onset-to-onset gap minus 24h) — so a big jump shows as one value (e.g. +14h) instead of being wrapped onto a 24-hour clock where +14h and −9.95h look identical. There's one drift per cycle, and it's the value the τ math uses. For very long sleepless stretches the app shows the raw gap length ("long sleepless event") rather than a meaningless drift number.
What's the post-sleepless threshold, and why raise it?
When the gap between onsets exceeds it (default 30h), the app benches that transition — it can't tell a real long cycle from a skipped sleep. If your biological day genuinely runs long (26h+), your ordinary cycles can pass 30h, so raising it (~32–36h) lets real cycles count.
What do the five Sleep Math settings control?
Sleep target (sleep-debt baseline only), fragment-if-under (continuations vs new cycles), auto-flag naps (short sleeps excluded from drift), post-sleepless gap (benches over-long transitions), ambiguous-drift cap (holds out single huge clean-night shifts).
Should I raise the thresholds to get a more impressive number?
No. They exist for accuracy, which often points down. Inflating them just admits noise and widens your uncertainty until the number means nothing.

Comments