Build log / archive
October 2026_
16 builds logged this month.
The website learns your day, not just hers
- Any day on the website's calendar can now hold your own day: your mood, how productive it was, and a note — the same "Your day" section the iPhone's day sheet has always had. Until today the website could only log today's mood (the one-tap chips on My Fertility); a missed evening, or a day you wanted to annotate after the fact, had to wait for your phone. Tap a day on the Partner calendar and your day sits right beside hers. Clearing a field clears it for good. Your day is yours: it's never shown to a linked partner, whatever you share elsewhere.
- No partner profile? You still get a calendar. The Partner page used to be a setup form and nothing else for anyone not tracking a cycle — even though the server had always answered with a calendar of your own days, and the iPhone had always drawn it. Now the form sits above "Your days": a month grid with your logged moods and your activity marks (only you see those), and every day open to log. Set up a profile later and her cycle simply joins the same grid.
- Screen readers hear the whole day now: a calendar cell says "your mood" and each person's productivity in the same words, in the same order, as the iPhone. Before, the website's cells described her mood and left yours out.
The calendar stops losing the evening
- Yesterday's interval panel got its morning-after audit, and the calendar came out better for it. The real find: an event logged in the evening could vanish from the calendar entirely for anyone living west of Greenwich. The month's lookup cut off at midnight UTC, so an 8pm event in New York fell past the edge of its own month — and the next month's lookup filed it under a day it doesn't show. Logged, counted in the interval, visible nowhere. The lookup now follows your clock, wherever you live.
- The website's calendar also catches up with the iPhone's: days with a logged event now carry a small mark, the day's panel states the count ("Activity logged this day: 2"), and a screen reader hears the same words on both platforms. The mark is yours alone — like everything about these events, a linked partner never sees it — and on the grid it stays a mark rather than a number, because a count on every cell starts to read like a score.
- Two doors closed that no screen ever opened: a logged event could carry a "visible to partner" flag and a free-text note on the wire — accepted and stored, but nothing could set them, nothing displayed them, and the flag named a kind of sharing that exists nowhere in the product. The server now takes neither. Nothing you could actually do changes; the difference is that the machinery can no longer quietly accept a promise no screen keeps.
The lab's first question gets its dial
- My Fertility now answers the one timing question a lab actually asks: how long has it been? The new interval panel shows the gap since your last event with a plain reading of what that gap means — under two days reads lower on volume and concentration (expected, temporary), two to seven days is the window labs standardise against, and beyond a week saving up stops helping, whatever the locker room says. When your gap happens to suit a semen analysis right now, the panel says so. Logging is two taps — solo or partnered, timestamped as "just now" — with an undo while the entry is fresh. On the web and on the iPhone, same day.
- The panel describes, never scores: no streaks, no good or bad days, no implied cost per event — the same posture as the rest of the product, because the intuitive model (that every event costs you and saving up helps) is the one most men arrive with, and it's wrong. And it's yours alone: events are never shared with a linked partner, whatever you've chosen to share elsewhere.
- This machinery existed quietly on the server for months — the reading was computed and the copy written, but no screen could log an event or show the answer. Today it grew its surface.
The server stops taking blank names at the door
- A name made of nothing is now refused by the server itself, everywhere a name exists: your display name (at sign-up and when you change it), her name, and a key date's label. The apps already stopped you saving a blank — but the apps were the only guard, and the server took whatever arrived. A space-only date label would have become a push notification titled " is today"; a space-only display name would have introduced you to a friend as nobody. Line breaks and other invisible control characters are refused the same way — a name is one line of visible text, full stop. Nothing changes for anything you've already saved or for any name a person would actually type.
- Two small hardenings found auditing Friday's work: a hand-mangled "show earlier dates" request now answers with an empty page instead of a server error, and the date-history paging that shipped Friday is now walked end-to-end by the test suite on every push — one hundred and twenty entries on a single day, paged through the exact boundary where a lesser design would duplicate or drop entries.
The backups prove they come back
- Your data's safety net is now tested for real, every week. A full copy of the database has been taken and checked every night all along, and a weekly drill was meant to go the last mile — actually restoring a copy to prove it comes back. That drill spent seven weeks refused at the door, waiting on a one-time server permission nobody had run, which meant no backup had ever been through the fire. It no longer waits for anyone: the drill now starts its own throwaway database server, restores last night's copy onto it exactly the way a real recovery would, confirms every table, account and migration record came back, and tears the scratch server down again. The first true proof ran today — fifty tables restored, every one accounted for — and from here a watchdog raises the alarm if a week ever passes without a fresh proof.
- The rehearsal got safer as well as self-sufficient: the old design restored into a spare corner of the live database server, while the new one never even connects to it — and the drill no longer needs to handle the database password at all.
The AI learns to work on a need-to-know basis
- What you name a key date now stays on the server. The daily plan's AI was handed your dates by their labels — and a label is yours to write: "Mum's memorial", "Clinic follow-up". The model now gets only the kind of date ("her birthday", or just "a personal date he's marked") and how far off it is; your words for it never leave the house. The plan on screen still knows the real name — only the AI works from the generic brief.
- The same door is shut from the other side: when you bin a suggestion, the binned text is quoted back to tomorrow's AI so it learns your taste — and that quote could smuggle a date's label, or your own playbook notes, right back into the prompt. Dismissed playbook plays now stay out of that loop entirely, date labels are scrubbed from the rest, and a binned writer draft now teaches only its kind and your reason, never its words.
- The guard that keeps cycle talk out of words meant for her got longer teeth. A suggested text that mentions PMS, periods, conception, pregnancy or the colour codes to her face is now dropped by code, not just discouraged by instructions — the instructions are editable; the guard isn't.
- The weekly insight is banned from giving advice the same way. It exists to reflect your own data back ("your best weeks followed 7-hour nights"), and now a sentence that says you should start or stop anything — a supplement, a medication, a habit — is refused by code before it reaches you. Observations about what you started or stopped stay; instructions don't.
- Quiet hardening behind all of it: mood lists are filtered to the known vocabulary before any prompt sees them, a partner name can't contain line breaks (the one way to forge a line on the AI's fact sheet), oversized AI responses are refused instead of swallowed whole, and a misconfigured server can't send the model nonsense settings.
The iPhone's Key Dates desk grows up, and the small print starts telling the truth
- Key dates on the iPhone can finally be corrected. A typo in a label or a wrong year used to mean delete-and-re-add — and the re-added date was a new date to the server, so the heads-up push you'd already been sent for it was quietly re-armed to fire again. Every date now has an Edit that changes the row in place, with your saved heads-up setting carried in rather than reset to a default.
- The phone's Key Dates screen also catches up with the website: each upcoming date shows the countdown (computed where you live, not in Greenwich), the amber "inside your warning window" state, and the playbook behind it — what to do, and what to write in the card. Passed one-off dates stay visible in their own section instead of silently vanishing while still haunting your export, so they can be cleared or re-dated.
- Date history past the first hundred entries is reachable again. The list stopped dead at 100 — older nights existed only in your data export — and now both platforms page back through the lot with a "Show earlier dates" at the bottom.
- The levers board only says "Streaks earn badges" when it's true. The heat-clean streak is measured for you and recomputes as data arrives, so no badge is ever minted from it — but a board where it was the only streak still showed the promise. The link now appears only when a check-in streak is on the board.
- The badge case stops handing out Overwatch for someone else's work. Opening the case could award "first cycle tracked" from the mere existence of cycles on the account — including every cycle your partner logged herself, which the live rule deliberately never awards (her period is her data, not your recon). The badge now comes only from the moment it names: you pressing "period started".
- A dismissed suggestion's reason is now presets-only at the door. Both apps only ever offered the preset reasons, but the server accepted any text in that field — words that get counted on the admin page and quoted back to the AI that tunes your plan. Free text there is now refused, same policy as reactions.
Deleting your account now stops the bill, and billing's loose ends get tied
- Deleting your account now cancels a Plus subscription bought on the web as part of the deletion — it used to keep billing your card after every trace of the account (including the door to cancel it) was gone, unless you remembered to cancel first. If the payment provider can't confirm the cancellation, the deletion refuses and your account stays whole, rather than gambling. An App Store subscription still has to be cancelled with Apple — the server physically can't do that for you — and the delete screen on both platforms now says exactly which half is handled for you.
- When the payment provider replays its messages out of order — which it's allowed to do — a stale "subscription updated" arriving after "subscription cancelled" could briefly write the subscription back to life. The server now re-asks for the subscription's current state on every such message instead of believing the message's own snapshot.
- The Plus page now describes the subscription that's actually granting your Plus. If you'd ever held it on both rails — say an old web subscription, since cancelled, and a live App Store one — the page could describe whichever row was touched most recently, portal button and all, instead of the one keeping the lights on. And the buy button's server side now refuses to start a second subscription for an account that's already Plus, whichever rail the first one is on.
- The weekly insight stops promising what it can't deliver. A free account with the AI features open was told "a few more weeks of weigh-ins and the first sentence appears" — but the free tier's 7-day history window means those weeks can never add up, so the promise could never land. It now says what's actually missing: the months of history that Plus keeps.
- A habit week typed in after the fact now earns its badge. Fill the missing day of a seven-day run from last week and the milestone is awarded for the run you actually completed — it used to only look at streaks still alive today, so a backfilled week earned nothing, silently.
- Two small ones: the levers board refreshes when you come back to a tab left open overnight, so a morning check-in can't be credited to yesterday; and the badge case shows its badges in the same curated order everywhere, instead of whatever order the database felt like after an admin edit.
The App Store door gets its second lock, and the clock learns where you live
- Two holes closed in how App Store purchases prove themselves to the server, found by this morning's audit of the billing boundary before anyone found them the other way. First: the server checked that a purchase receipt was signed under Apple's root authority, but not that the signer was Apple's App Store specifically — and Apple signs many things for many people. The verifier now demands the two markers Apple's own verification requires. Second: a subscription refunded mid-month could be frozen in time — replay the old receipt and the server believed its "active until" date forever, because nothing ever re-checked it. Entitlements now lapse on their own dates, and a stale receipt can't roll back what the server already knows. No sign either was ever abused.
- The website now tells the server your timezone, the way the iPhone app always has. Without it, every "what day is it for you?" answer — key-date countdowns, their pushes, the daily check-in day, the heat-clean streak — rolled over at midnight in Greenwich: a web-only user in New York saw "TODAY" on her birthday from 8pm the evening before, and the push came with it. The phone's version had its own quiet trap — sign out and hand the phone to a second account, and the new account never got its zone reported; it also only checked at launch, so a long-haul flight didn't register until the app was next killed. Both fixed: the marker resets on sign-out, and landing re-reports on the next foreground.
- Key-date pushes wait for the morning now. The day ticks over at midnight and the sweep runs hourly, so "Her birthday is today — Execute the plan" used to light the lock screen at 00:15. It arrives after 8am where you live, says the same thing, and loses nothing.
- A date that recurs "every year" now starts recurring at its own date. A wedding set for next November with the every-year box ticked (it's pre-ticked) counted down to this November — heads-up push, daily-plan nudges, calendar paint, all a year early, on both platforms.
- Small honesty on the Dates desk: cancelling an edit now actually clears the form (it used to keep the old values, and the next "+ Add date" quietly saved a duplicate); a cleared heads-up field asks what you meant instead of silently saving "no warning"; a label of pure spaces is refused before it becomes a push titled " is today"; the dashboard tile writes the date like a human; and on the iPhone, switching the date's type keeps prefilling the name until you've actually typed one — it used to give up after the first switch and save mismatched labels.
- Logging a date night in the future is now refused everywhere — the iPhone's picker always stopped at today, but the website accepted next Friday and awarded the badge for it. And "+ Log a date" scrolls you to the form it opens; on a desktop screen it used to open below sixteen idea cards, invisibly.
The iPhone learns to let a Clip go
- Removing a Clip from your account no longer needs the website. The iPhone's Device screen now lists your Clips — serial and the age of the last reading — each with the same remove door the web already had: a confirmation first, spelling out what goes (the Clip's raw temperature readings) and what stays (detected heat exposures in your history), and the Clip freeing up for any account to pair again, yours included. If the removed Clip is the one your phone remembers, the phone forgets it too, rather than hunting in the background for a device that no longer exists.
Patch day in the engine room, round two
- The machinery the API uses to work out which address a request really came from — the thing rate limiting trusts when it decides who's hammering the door — published a critical advisory: a crafted address could let a request masquerade as coming from somewhere trusted. Kalcius sits behind exactly the kind of proxy setup the flaw targets, so the fixed release is live the same day. No sign it was ever poked at here.
- Two more patches on the website's side of the house: the library that draws the social-share images took a fix for a flaw in its image-rendering dependency, and a helper in the build chain closed a denial-of-service hole. Nothing changes on screen; both sides of the house are back at zero known advisories, which is the state the hourly production monitor insists on.
The front page learns the three-month rule
- The dashboard's test tile now carries the retest clock. It used to show your last result's numbers forever, as if they were current — a photograph from July presented with no date on the back. Under the numbers there's now one line: while you're inside the production cycle it counts down ("retest window opens in 23 days — sooner would mostly re-measure this same production run"), and once a full cycle has passed it says so and offers the door ("a retest now measures the new regime, not this one — log the retest"). Same line on the iPhone's Today screen. My Fertility keeps the full story, including what's on your ledger since the test; the front page now at least tells you which chapter you're in.
A verdict can be corrected, a stop can be taken back, and robots can't unsubscribe you
- A playbook rating is no longer carved in stone. A mis-tapped 5★ used to become "proven" forever — feeding your daily plan a move you never actually rated — because the stars went read-only the moment they were set, on web and iPhone alike. Tap the stars again and the verdict changes. The playbook's delete on the web also now asks before it acts; it was the one destructive click on the dashboard with no confirmation.
- "Mark stopped" on the medications & supplements ledger used to fire the instant you clicked it — no confirmation, stamped with today's date whether or not today was right, and with no way back except deleting the entry along with the dates that make your charts readable. It now asks first, with the stop date in hand (today, unless you say otherwise), and a stopped entry has a "Mark current again" if you change your mind — or never meant it. On the iPhone too, with the same date-in-hand step.
- Opening the Mission Report email inside a corporate inbox could quietly unsubscribe you: Outlook Safe Links and mail scanners prefetch every link in an email, and the unsubscribe link did the deed on the first touch. The link now opens a page with one button, and nothing changes until a human presses it. One-click unsubscribe from your mail client's own button still works exactly as before.
The scale refuses a typo, and a weigh-in can finally be taken back
- A fat-fingered weigh-in — 725 kg where 72.5 was meant — used to be accepted without a blink, and then quietly fed your weight chart, your trajectory and the weekly insight forever, because nothing anywhere could delete it. Both halves are fixed: an implausible weigh-in is now refused at the door with a plain sentence (on the phone, before it's even sent — with the conversion spelled out), and a new "Recent weigh-ins" list under the chart on web and iPhone lets you remove any entry, with a confirmation step before anything is deleted.
- Typing a decimal weight on the iPhone finally works on comma-decimal keyboards: "72,5" was silently unparseable — exactly what the decimal pad produces in most of Europe — so a decimal weigh-in couldn't be logged at all. Both separators are accepted now.
- Apple Health syncs keep their own version of the typo door: an impossible sample in a year-long replay is skipped and counted instead of stored — and one bad sample no longer has any way to feed the charts, while the rest of the history lands untouched.
- On the iPhone calendar, key dates — birthdays, anniversaries — showed a day early for anyone west of Greenwich (the countdown and the Dates list were right; the month grid wasn't). And an anniversary that falls on 29 February now appears on 1 March in non-leap years, the same day the countdown has always rolled it to, instead of vanishing from the grid for three years out of four.
The Sunday email tells the truth when it's hardest, and the bell stops eating alerts
- The weekly Mission Report's Partner section used to vanish on exactly the Sunday it mattered most: when her period is late. The email read its cycle claims from the calendar grid, which honestly withdraws its colour-codes past a missed prediction — so the one week something was genuinely worth knowing, the email said nothing. The report now speaks with the same voice as the app and its pushes: when she's late, Sunday's email says so, in the same calm words — late is ordinary, tread gently.
- The same email's "The fertile window is in play — make the time" nudge now stands down while a rough patch you've flagged is standing, exactly as the fertile-window push already does. The window's dates still appear in the Partner section — the information stays, only the pressure waits.
- Opening the notifications bell could quietly swallow an alert you never saw: it marked every notification read — including ones that arrived seconds earlier or sat beyond the 30 the panel shows — and a notification marked read while its push was held by your quiet hours is released silently, so an overnight Code Red could die without ever reaching your lock screen. The bell (web and iPhone) now marks read only the rows it actually showed you; anything you haven't seen keeps its push.
Patch day in the engine room
- The framework the website is built on published a critical security advisory — a flaw in the machinery that draws the site's social-share images could, in the worst case, let a crafted request run code on the server. Kalcius draws its share cards with exactly that machinery, so the fixed release is live the same day the advisory landed. Nothing changes on screen, and there's no sign the flaw was ever poked at here.
- The library that sends every Kalcius email — verification links, password resets, the Sunday Mission Report — picked up a round of its own security fixes, the biggest closing a flaw where a maliciously crafted address could tie the mail machinery in knots. Upload handling took its patched release too. Both sides of the house now stand at zero known advisories, which is the state the hourly production monitor insists on.