What shipped
Newest first. Short entries — what you can now do, and whether it fully works yet. The longer stories about how any of it went live on the blog, and the how-does-this-work pages are in help.
-
The forecast stopped repeating itself
The day screen showed the weather service’s written forecast underneath the numbers it had already given you. Most of it was the same thing twice: "High near 90" sat directly under a large 90°, "East wind 2 to 8 mph" sat directly under the wind line, and one day’s entire paragraph was "Mostly sunny, with a high near 91" — a picture and a number you could already see. Now it shows only the parts that say something the screen has not already said, which on a typical day is the one sentence about rain or about a change coming. Every word still shown is theirs, in their order: whole sentences go or none do, and only when everything in them is already on the screen and the figures match. Anything with a second thought in it stays whole. "High near 90" can go; "High near 90, with temperatures falling to around 87 in the afternoon" cannot, because the second half is news.
-
The half that says no
When Rafe offers to make a bed or add a plant, you get buttons: make it, make it and stop asking, or do not. The one that declines was drawn with an outline so faint it measured 1.6 to 1 against the page — under half of what a control needs to be distinguishable — and a full-width orange button above it pushed it onto its own line. So the accept was the loudest thing on the screen and the decline read as a caption underneath it. On a prompt whose whole job is asking permission, the safety half was the half that did not look tappable. Every button now runs the full width, one under the other. We tried them side by side first and it only worked on the easiest case: give it longer labels and the decline came out wider than the accept, and once a third button arrived the accept was squeezed to a fifth of the width of the one nobody taps. A row is a bet that every future label is short. The outline is a color we measured rather than picked: it clears the bar on the cream page and on the dark one, which the obvious candidate did not. And when Rafe proposes a single thing, the prompt no longer says it twice — it used to run a heading, then a one-item list, then two buttons, working the word "bed" in three times around one short fact. The bed being proposed is now the biggest thing in the block, which is what you are actually deciding about. What did not change is the wording on the buttons: they still say "the bed" rather than "yes", because the same message can carry things already written down, and a bare "no" beside them could be read as undoing those.
-
The hills were already there
Tap a day and the screen fills with that day’s sky. Underneath it sat a flat block of color holding the temperature and the rest of the detail — and that block was covering the picture. The app had been drawing hills along the horizon the whole time, two ridges, a pale one behind and a darker one in front, and the block sat right on top of them. Now there is no block. The words lie on the hills, which is what the picture was drawn for. The near ridge is a shade deeper than the far one, partly so small text stays readable on it and partly because that is how distance looks: things further away wash out. We checked the text against the lightest pixel of every sky the app can draw — three hundred and twenty of them, every season, every hour, every kind of weather — rather than the few we happened to think of.
-
The hours you are not there
If you have told the app roughly when you are usually out of the house, the day band now dims those hours — the same way it dims the part of the day that has already gone. The reason they get the same treatment is that they mean the same thing to you: you cannot act in either. What that shows at a glance is which part of the trouble is actually yours to do something about. A hot stretch while you are at work reads differently from a hot stretch at six in the evening, and until now the band drew them identically. If every calm hour of the day falls while you are out, it says so in one line. It will not say that when you still have a calm hour of your own, even one — most of the day being gone is not the same claim, and we are not going to round it up. The dimmed stretch also says why it is dimmed — "dimmed 9am to 5pm, when you said you are out" — because the part of the day that has already gone is grayed the same way, and those two look identical while only one of them is something you can change. None of this is required. If you have never told us when you are around, the band is exactly what it was, and it stays that way; the times you keep are yours to give or not.
-
What happened moved below what to do
The rainfall record used to sit between the weather and the day's jobs. It reads like something you need before deciding whether to water — and it is not, because the app has already decided that for you. When enough rain falls, the watering job simply does not appear; the record is us showing our working, not asking you to do the sum. So it has moved below the jobs, where the rest of the background lives. What that buys is the top of the screen reading as one thought: the week, then the shape of today, then what needs doing. Those last two were about two inches apart with a record of the past sitting between them. Nothing was removed and the rainfall history still says exactly what it said, including that it is what the forecast expected for your area rather than a reading from a gauge in your garden.
-
The same day twice, before dawn
If you opened the app in the small hours, the week strip could show today twice — once as the night you were standing in and once as the day ahead — which quietly cost you a day off the end of the week. It came from the forecast service, which sends weather in half-day pieces: a night piece and a day piece for each date. We fold the night into its day, but before dawn the night piece arrives first, and the code looking for its matching day had not reached it yet. So it started a new row instead of waiting. Now the day finds the night that was already there and joins it, and you get seven real days whatever time you look. Opening the app in the evening still gives that night its own card, which is right — at nine at night there is no daytime left to show you.
-
The shape of your day, under the weather
Today now shows a thin band under the week, and it is the day laid out end to end. The wide part is the stretch where nothing in your garden is near a limit. The marked part is the stretch where something is, and a line shows where you are in it right now. Above it is one sentence naming which plants and from what time, like "Leaf lettuce and Carrot are over the limit from 10am." The part of the day that has already gone is dimmed rather than removed, because missing a good window is still worth knowing. What it will not do is call an afternoon hot on its own say-so. A stretch is only marked when a plant you actually have is above the temperature recorded for that plant, so a garden of things that shrug off heat gets a quiet band on a 95 degree day, which is the truth. For plants we hold no figure on, it stays silent rather than guessing. On a day with nothing to flag it gives you the range instead — "62 to 78 today" — because that is a fact, where "a nice day" would be our opinion about your weather.
-
The week is seven real cards
The week strip had two kinds of day in one row. The first three were proper cards; the other four were thin columns with no card at all, barely wide enough for a number. Every day is the same card now. The day name reads as a heading instead of sitting in the middle at the same size as everything else, the weather picture is nearly twice as big, and the temperature is large enough to read at arm’s length. The card also has a surface of its own rather than the same background as the rest of the page, so the week reads as a thing rather than as a row of text. One trade worth knowing about: seven cards that size do not fit across a phone, so the week scrolls sideways and you see about three and a half at a time. The card at the right edge is cut off deliberately — that is how it says there is more, and a row that ended neatly would look like the whole week. The alternative is the version with the thin columns, which fitted seven and was too small to read. There was also a lot of empty space in those cards, about ninety pixels of nothing under the temperature, which is gone.
-
The words on the sky screen
Tap a day in the weather strip and the screen fills with that day’s sky, with the details written underneath. On some days those words were hard to read, and it depended on the weather — fine at dawn, at dusk, at night and in a storm, and washed out on a clear day, in snow and in fog. The panel under the sky takes its color from the ground in the picture, so it changes with the season and the hour, and on the brighter ones it had drifted too pale to carry small text. It now settles that color a step darker before the words go on it, which keeps it looking like that day without asking you to squint. We checked it against every sky the app can draw — a hundred and three of them, every season, every hour, every kind of weather — rather than the handful we happened to think of, which is how it slipped through the first time.
-
When you are around has its own place now
The grid where you say roughly when you are usually home used to sit inside the "Hardening off" section of your profile. That made sense when hardening off was the only thing reading it — the whole point of that routine is carrying trays out and back at hours you are actually there. It reads those times too now: the day band on Today uses them to dim the hours you are out, so it stops pointing at good weather you spend at work. Two things using one answer, filed under the name of one of them — and hardening off is something most gardeners never do, so those times were tucked behind a heading a lot of people have no reason to open. It is its own section now, in the same place on the same page, and it says what reads it. Nothing about hardening off changed and nothing you have already entered moved.
-
Whose fault it was
When a question could not be answered, the app had one sentence for it: “Could not reach the answering service.” That was true when the answering service really was the problem, and misleading the rest of the time. Three different things happen behind that one message — we count the question against your account, we look up whatever the question needs from your own records, and then we ask the model. Only the last one is the answering service. If the first two go wrong, the answering service is working perfectly and we were telling you it was down. Now it says which. If the problem is ours, it says so plainly: “Something broke on our end. Nothing you did.” Retrying is still worth a go either way — most of these are momentary. The reason this matters more to us than to you: “could not reach the answering service” is a shrug, and it was hiding problems on our side that we should be looking at. Nothing was logged either, so working out what had actually happened took four separate experiments instead of reading one line. Both are fixed.
-
Your places, listed once
The garden screen showed each of your places twice. Near the top as a card with its plants in it, and again near the bottom in a plain list — same name, same plant count, same link to the same page. The second list is there for a real reason: the cards are built from plants, so a place you have made but not filled yet does not appear in them at all. Without that list, making a spot called "Front porch" and then looking at your garden showed nothing had changed. So the list stays and now shows only the places the cards cannot — the empty ones. When everything you own is planted somewhere, that section is just the button for adding a new place, which is the one thing there you cannot do anywhere else. The heading changes with it, because a heading saying "your places" above a filtered list is a heading telling you something untrue.
-
A bed count that counts the bed
When you ask the chat about one bed, it says how many plants are on it. **That number was capped at forty** — so a bed holding fifty-five said forty, which is a fact about our query rather than about your bed.
It now counts the bed and, when it lists fewer than it counted, says so.
**This is the same mistake as the garden-wide list fixed earlier today, in a second place** — found only because that fix was re-examined rather than assumed finished. The order there is left as it was: oldest first, which the heading says out loud, and which is the right way round for a single bed.
-
A bed with twelve plants in it now says twelve
If you sowed six lettuces as one entry, the Garden screen counted that as one plant. A bed holding four rows of six told you it had four. A garden holding 84 said 14. Every count on that screen was counting entries and calling them plants, while every row underneath showed you its own number — Leaf lettuce times six — so the two disagreed in plain sight and both used the same word. Now every count means plants: the header, each bed, each place in your list, and the line about plants that have no kind recorded yet. The one that mattered most is the warning before you delete a bed. It used to say it would remove two things when it was about to remove twelve, and agreeing to lose two plants is not agreeing to lose twelve. An entry with no number beside it counts as one, which is what the screen was already telling you: no times-six means one plant. Nothing you recorded changed — only what we call it when we add it up.
-
A frost warning opens that night
Tapping a frost warning used to drop you on your job list, the same way the heat alert did before this morning. The heat one was fixed first and the frost one was left, which was the wrong way round: heat costs you a harvest, frost ends the plant. A frost warning now opens the night it was about, with that night’s low and the plants at risk on it. A night belongs to the evening it starts, so a warning sent on Tuesday evening opens Tuesday — the same day the weather strip files it under. The app and the alert always name the same night. If we cannot tell which night, which can happen when the forecast is short, the alert takes you to your jobs rather than guessing: landing somewhere that is not what you asked for is annoying, and landing on the wrong night while you believe it is the right one is the thing being fixed. The heat alert changed underneath too. It was working out the date by counting days forward from the moment it sent, in your timezone — which is right until a clock change, or an account we have never been told a timezone for. It now reads the date straight off the forecast it is already holding, so there is nothing left to get wrong.
-
A hardening day you marked done now stays done, across the spring clock change
If a hardening run crossed the March clock change, every day after it read back as not done — even though you had marked them. The days were recorded correctly the whole time; the app was looking for them at the wrong moment and finding nothing. Measured on a ten-day run starting 4 March: five of the ten came back blank. This is worse than it sounds for the people most likely to hit it. Hardening off is a spring job, US clocks move in early March, and in the mild parts of the country that is exactly when you are moving seedlings outside — so a run straddling the change is the ordinary case there, not a corner case. The cause was the app adding twenty-four hours at a time to work out each day of the run. The day the clocks move is twenty-three hours long, so every day after it landed an hour off. Working out each day properly is a one-line change, and the reason it went unnoticed is that the record was never lost — only mislaid.
-
The heat warning stopped guessing what the heat would do
A hot-weather card used to end with **“growth stalls while it lasts”** whenever it could not say anything more specific. That was not a finding about your plant — it was the sentence left over when nothing else matched, and it read exactly as confidently as the two that were real.
Nik spotted it on a wax bean and said it looked generic. It was.
Those cards now say the honest thing instead: that the temperature is past what the crop is recorded as taking comfortably. **The warning still comes, at the same time, for the same plants.** It simply stops naming a mechanism we could not stand behind.
The two real ones are unchanged. A plant that bolts still says it runs to seed and the leaves turn bitter; a plant in flower or setting fruit still says the flowers drop and no fruit follows. Those come from what the plant is doing right now, and we can show our working.
-
A long answer is a page now, not a bubble
When you asked your garden a question, the answer came back in a chat bubble — the same shape as the question you had just typed. That works for a sentence. It works badly for six paragraphs: the reply became a narrow column pushed against one side of the screen, and the paragraphs it was written in did not show up at all, so you got one solid block and had to hunt inside it for the part that mattered. Answers now sit on the page as ordinary text, with space between the paragraphs and a comfortable line length. Your own messages still appear in a bubble, so it stays obvious who said what. Nothing about the answers themselves changed — the same words, in the same voice, laid out to be read rather than to be a message. Asking for a list of things gives you plain lines, one per item, and those now stay on their own lines instead of running together into a paragraph.
-
A photo can now say what a missing planting date cannot
Nik has a lavender with no planting date on it at all. Everything the app knows about a plant’s stage normally comes from that date plus the crop’s calendar — so for that plant every stage stayed possible, and a heat warning could tell him the flowers were at risk on something that is not flowering.
His point: **the app had already read a photo of it.** It had — the photo path asks the model what stage a plant is at and stores the answer. **No weather warning had ever looked at one.**
Now it does. A plant you have confirmed as *growing* will not be told its flowers are at risk.
**Only readings you have confirmed count.** A stage the app proposed and you have not checked is ignored — silencing a real warning on an unreviewed guess would be the worse bug. **And it only ever removes a claim, never adds one:** a photo that looks like flowering does not switch a warning back on for a tree the calendar says cannot bear yet.
-
A + button that adds a plant, not a file
Every chat app has a + beside the message box for attaching a file. Yours attaches a plant. Tap it and you get your plants as photographs — most recently looked-at first, grouped by which bed they are in — and the one you pick rides along with your question as a small tag you can see and remove. You can add a place the same way, and one of each, so a question about your tomatoes on the front porch can carry both. This is not tidiness. The chat always knows roughly what you grow, but naming one plant hands it that plant's own record: what you wrote about it, what you did to it, and what is normal for something its age right now. That last part is what stops a cheerful answer being written over a real problem. Naming a place gives it that spot's own history instead. The + stays out of sight until you have something to add — a brand new garden has nothing behind it, and a button that opens onto nothing is worse than no button.
-
A second look, before an answer reaches you
Nothing is switched on and answers are unchanged today. This is the machinery, written down because of what it is for. When the chat answers a question about your garden it works from a slice of your own records, and almost always that goes right. But a model can occasionally state something specific your records do not contain — a date, a count, a job you never logged — in exactly the same confident voice as the parts that are correct. That is the hardest kind of wrong answer to notice, because nothing about it reads as uncertain. So there is now a second pass being built: before an answer reaches you, each specific statement about your own garden is checked against what was actually looked at, and anything that cannot be matched is left out with one line saying so. It deliberately leaves general gardening alone. "Tomatoes shed their oldest leaves in a heavy year" is not a claim about your garden and was never in your records — a check that removed everything it could not find in your journal would take the useful half out of every answer.
-
A young fruit tree stops being told its flowers will drop
Nik has an orange tree, two years in the ground and — his words — **"pretty small and not flowering."** A hot spell came, and the app told him the heat would make its flowers drop.
Every rule fired correctly. Our figure for an orange is **2 to 4 years to first harvest**, his tree had been in for two, so the app decided it was bearing. **That figure is an average across orange trees, not a fact about his one** — and inside that window some are covered in blossom and some are still a stick with leaves.
Now, while a tree is inside its own bearing window, the card gives the general warning instead of naming a mechanism it cannot see. **The warning still arrives, same day, same tree.** Past the window — old enough that bearing is not in question — the specific wording comes back.
Nothing grown from seed in a season changes. A flowering tomato still tells you the flowers will drop, because a tomato that is flowering is flowering, and you can see it.
-
An empty space that means "we looked"
Every plant page has a list of warning signs — the things worth watching for, like a lettuce running to seed. On most plants that list is empty, and an empty list reads like an answer: nothing bad happens to this one. That is not what it meant. It meant nobody had checked yet, and there was no way to tell the two apart. Three plants can now say which kind of empty they are, and they turn out to be three different things. Swiss chard has nothing to watch for because Minnesota Extension says outright that it will not run to seed in its first summer, however hot it gets — that is an answer, and the page now says so. Kale is empty because five university pages were read and not one of them names a sign, which is a fact about what has been published rather than about kale. And parsley does run to seed, but in its second year because that is what a two-year plant does, not because of a hot week — so warning you about the weather would have blamed the wrong thing. The other plants still show an empty list, and they still mean "we have not checked". They will say so as we get to them.
-
An entry will say who wrote it
Nothing is switched on and nothing looks different. This is the piece that had to be built first. We are working towards the assistant being able to write things down for you — noting a watering while you are talking to it, instead of making you log it again afterwards — with a choice about how much it may do without asking. That is not built yet. What is built is the record. If the assistant ever writes something you did not confirm, the entry itself has to say so, because a message that flashes past while you are outside is no use: you might not open the app for four days. Without that mark there is no way to show you what it did and no way to undo any single item of it. It is deliberately a separate mark from the "read by the app" badge you already see on entries the app wrote and you tapped to keep. Those two mean different things, and an entry you agreed to must never be mistaken for one you did not — that would fill the list of things to check with entries you had already approved, and hide the ones that actually need your eye.
-
Answers can use a list when the answer is a list
Until today the chat wrote everything as plain sentences, because the screen could not show anything else — a heading or a bullet would have arrived as literal hash marks and dashes in the middle of a sentence. Both halves changed together: the screen can now show headings, numbered steps, bullets and bold, and the chat has been told it may use them when what it is saying genuinely has that shape. A treatment with three steps in an order now comes back as three numbered steps instead of a paragraph you have to unpick. A two-sentence answer still comes back as two sentences. It has deliberately not been given a quota, because an answer padded into sections to look thorough is harder to read than one that just says the thing. Every conversation you already had looks exactly as it did — old answers were written in plain sentences and nothing has been reformatted behind you.
-
Answers now show which of your notes they used
When the chat answers a question about one of your plants, it often leans on things you wrote down weeks ago. It has been doing that for a while, and it has been keeping track of exactly which entries it used — but only the photo screen ever showed you. In the chat that list was quietly thrown away. Now you see it: under the answer, a short line reading "It used what you had written down", followed by the entries with their dates. This is the difference between this and a general chatbot, made visible. Anything can tell you what usually happens to tomatoes in August. Only something that has been keeping your records can tell you that you noticed the same yellowing three weeks ago and fed them nine days after that. If nothing appears, the answer did not use any of your entries — the list only shows up when there is something real in it, rather than claiming credit for records it did not read.
-
Every journal entry knows which garden it belongs to
Nothing looks different today. This is groundwork, and it is worth saying plainly rather than dressing up. Until now, which garden a journal entry belonged to was something the app could work out but not look up: it followed the entry to its plant, the plant to its bed, and the bed to your garden. That works, and it gets slower every week you keep notes — and it made a question like "every note I have written about aphids" expensive before it had even started. Each entry now records its garden directly. The existing entries were filled in the same way the app always worked it out, by following that chain, never by guessing: an entry we could not trace was left alone rather than filed under a garden it might not belong to. What this makes possible — searching your journal by subject, and letting the app look back at seasons you have finished — is not built yet. This is the part that had to come first.
-
Ask a question about last July and Rafe goes and reads last July
Until today Rafe could only work from what he was handed at the start of a question, and that was the recent stuff: what is growing now, what you did lately, one line summing up each finished season. Ask what went wrong with your Sungold last July and he had nothing to go on, so he answered from general gardening knowledge — which reads as the app being vague rather than as the app not having looked. He can now go and look. He works out which dates you meant, finds the plant by the name you call it, and reads that stretch of your journal before he answers. If you have three tomatoes and you just say "the tomatoes", he asks which one and names them rather than guessing. He only reads your own garden, and looking something up never changes anything. One thing worth being straight about: this lets him read what you wrote, not remember what you did not. If nothing was written down that July, there is nothing for him to find.
-
It knows last season happened
Ask the chat about last July and, until today, it answered from general gardening knowledge — because the list of plants it is handed only ever contained what is growing right now. Finished plants were filtered out before it ever saw them. Nothing failed and nothing said so; the answer just came back vague in a way that looked like the AI being cautious rather than the app never having looked. It now gets one line for each season you have finished: how many plants, how many were harvested out, died or were pulled up, and roughly what you grew. It is told that this is a summary rather than the whole record, so it should say when it is answering from the outline. We deliberately did not send the whole of your past. Doing so would cost about thirty-four times as much on every question you ask, and it still would not answer the question — a plant record says a plant ended, not what happened to it. What killed your zucchini last year is in your journal, and being able to look that up on demand is the next thing being built. Two smaller things: a plant that ended without a reason recorded is described that way rather than guessed at, and a year you did not garden produces no line at all.
-
It tells you the plant needs a stake before you pick its spot
Add a cucumber, a pole bean, a young apple or any of the two dozen plants that need holding up, and a line now appears under Where is it? saying so. It is at that moment on purpose: putting a stake, cage or trellis in is easy before the plant is in the ground and awkward once it is, when you are working around roots that are already there. It names the need rather than the method, because that is what we know — a pole bean climbs netting, an apple whip wants a stake, borage just flops, and you can see which one yours is. It says nothing for most plants, which is the point: a note on everything is a note you stop reading. This is the only thing about a plant's spot we tell you so far. The one we would most like to add is drainage — some plants die of a wet winter rather than a cold one — and we are not there yet, because knowing which plants those are is a harder question than it looks.