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.
-
We turned one gardener’s text message into “proof”. Then we deleted it. Neither was true.
**Our hardening-off page said phone alerts were proven to reach a closed app.** It was not a test. **It was one person here saying they had gotten one on their own phone on 31 July** — relayed, written up in our voice, and published as *proof the channel works*, with no sign it had come from anybody in particular. **That is laundering, and it is the exact thing we spend our days removing from plant data.** A real fact, stripped of whose it was, restated as if we had established it. **Then today we made it worse in the other direction.** A review of our own honesty notes went looking, could not find the 31 July report, and concluded it had never happened — so the page was rewritten to say no alert had ever been confirmed, and a note was published announcing that correction. **That went live for a few hours and it was also false.** The review found four of our own records agreeing with it and stopped; three of them predated the correction they were contradicting, and the fourth was about a different feature. **What is actually true, stated with its limits:** one person on our team got an alert on one real phone with the app shut, on 31 July 2026, and got a second near-duplicate when they opened the app — a bug now fixed. **Nobody here has watched a push land on a device we control.** So it has worked once, for one person. That is not the same as working reliably, and we are not going to write the sentence that says it is. **There is a Send a test alert button on Today and in Profile. Use it once.** A minute now beats finding out on the night of a freeze. **Both pages say this now.** The frost alerts page had spent eleven days saying alerts were unproven, right beside a page saying they were proven — yesterday’s correction reached the page somebody reported and never its twin. **The pattern worth naming: over-claiming and under-claiming are the same mistake.** One of them just feels careful.
-
We said we read “Beans Bush in the Garden”. No such page exists.
**When we cannot find a number, we write down where we looked** — which page, and what it did or did not say. Forty-four of those notes named a Utah State Extension page that does not exist. **The page names were built from our own file names.** Our record for bush beans is filed as `beans-bush`, so the note said we read *"beans bush in the Garden"*. The real page is **Beans in the Garden**. Swiss chard became *"chard swiss"*, sweet corn became *"corn sweet"*, and carrots, leeks, onions, tomatillos and head lettuce were each named in the wrong number or the wrong form. **The research was real — the citation was not.** We checked, and the pages exist, we did fetch them, and Utah State is a recorded source on every one of those crops. **The reading happened. The page name was assembled.** **That is the one defect that specifically ruins a source note**, because the whole point of it is that you can go and look. A name we invented sends you to a search that finds nothing. **And we found something else while checking: these particular notes do not reach you at all.** The frost-temperature fields they belong to are not in the public download, so forty-four explanations of why we left a number blank are sitting in our own files where nobody can read them. That is a separate fix and it is now on the list. **Fixed by citing the web address we actually hold, not a title.** You can open a link. You cannot check a title. Forty-four notes across twenty-two crops now carry the real address. **One note we left alone**, and it is worth saying why: our currant record cites Utah State's *Gooseberries in the Garden*, which looks wrong and is not — currants and gooseberries are the same genus and Utah State covers both on that one page. The note says so itself. **Our own checking script flagged it; reading it did not.**
-
The app no longer guesses when you brought the tray in
If a hardening tray went out and nothing was logged after, the card asks whether it came back in. Saying yes used to record the bring-in at the moment you tapped — so answering the next morning about a tray put out at nine wrote down twenty-six hours outside, counted the day as a full one, and warned you the plant had been out overnight and needed checking. A truthful answer produced a warning about a night that never happened. It now asks what time, starting on the time the step itself suggested, and records it on the day the tray actually went out. Also fixed while we were looking: that whole card was being laid out as three squeezed columns on a phone, so its question read two words per line.
-
Hardening off can record where the tray actually sat
Putting a tray out already assumes you followed the step, so the ordinary button is still one tap. Tap "Put it somewhere else?" and you can say it sat in full shade, some sun, most of the day in sun, full sun — or somewhere else entirely. It is recorded and never scored: we went looking for whether extra shade buys a shorter day, or more sun makes up for a missed one, and across twelve extension sites nobody makes that comparison in either direction. So the week is still counted in hours. Where the tray sat is there for later — if the leaves scorch on day six, your journal can tell you it was in full sun on days three, four and five.
-
A help page told you a working feature did not exist. We built the thing that catches that.
**Our photos page said GardenTrack could not look at a picture and tell you what is wrong.** It can, and has for a while — another help page describes it working. **Two of our own pages disagreed, and the one that was wrong told you a shipped feature was not built.** **That is the third stale claim we found today**, after a page that said phone alerts had never been proven (they had) and one that described a fix an hour before it existed. **The pattern is the problem, not the sentences.** We already had a check that fires when the app changes and no help page does. It is blind to this, because *nothing changed* — no commit, no deploy. A sentence like **"not yet"** stops being true when the world moves, and nothing was watching. **So every "not yet" and "never" on every help page is now classified.** Either only we can make it false — a policy, a guarantee — or somebody else can, in which case it carries the one sentence saying what would make it untrue, and a date somebody last checked. **Go past that date and the build fails.** **Writing that sentence is the part that works.** The photos error was found while writing it — not by the check running, but by having to say out loud what would prove the claim wrong. **It also caught its own author twice within ten minutes**, on the correction to the very page that started it.
-
You can change your hardening times now, because a routine changes
**The setup asks when you leave and when you are home, once, and never asks again.** That is deliberate \u2014 an app that keeps asking is one you stop reading. It also left the answers locked to whichever week you happened to be having when a tray of seedlings got ready. **A new job, a school term, the clocks going back.** So the two questions now live in Profile under **Hardening off**, with the same taps, and a change takes effect on the next day of the plan. **Skipped them the first time? That is where you answer them later.** The ten days run either way \u2014 you just do the timing yourself until you do. **On Profile and not on your home screen, on purpose.** Home is for things you have to do. Settings you revisit go somewhere you go looking for them, or Home fills up with things that are not jobs.
-
You planted the thing we suggested, and we said there was nothing to do
**We walked the app as somebody who had never opened it.** New phone, nothing saved. It suggested radish as ready to plant this week. We planted one. Then the home screen said, in the biggest text on it: **"Nothing needs you today."** **There was something to do.** The week screen listed it. The garden screen offered to do it. **Three screens, one radish, and the one you land on was the one saying the app had nothing for you.** **The cause.** Every watering check was filed as a job for the week rather than for today, unless it was over 90\u00b0F. **The seedbed check is the one that shows how wrong that is: a seed that soaks up water, starts to swell and then dries out is dead** \u2014 it does not get a second go. That check now takes its place in your day from how often it actually needs doing. At once a day or more it is today\u2019s job, which is seedbeds, trays, root balls and pots. Mulched beds and open ground stay weekly, which is right for them. **And the job itself was a riddle.** It read *"Is the seedbed still damp?"* \u2014 which is a question, not a job. You read it, walk out, look, work out whether there is now a task, and then do it. **Four steps, when the app already knew all of it.** Every one of our six watering checks was written that way. They now say what to do with the condition inside: **"Feel the soil where you sowed \u2014 water it if it is dry."** **The buttons changed too, and this is the part that matters for later.** They said *Damp* and *Dry*, which describe the soil. They now say **Still damp** and **Watered it**, which describe what you did \u2014 because that is what a journal entry is. **Both were already recorded and both still are.** Going out to look and finding it damp is not a skip; it tells us when to ask again.
-
Basil now warns you about a cold night, not just a frost
**Basil goes black at 50°F, and nothing on the plant page said so.** We already warned about frost — but frost is 32°F, and basil is ruined a long way above that. A 48°F night does not kill the plant. It stunts it and blackens the leaves, and the leaves are the whole point. **Now basil carries that number.** University of Illinois Extension states the harm and the temperature in one sentence; Clemson and Iowa State independently put the same 50°F line at night. **We say which of the three kinds of harm it is** — this one costs you the picking, not the plant — because "cover it" and "give up on it" are different advice. **We also wrote down what we could not find.** Nobody publishes a hot-night limit for basil, so basil says we looked and found nothing rather than quietly showing you a blank. **One herb, not thirty-one.** We checked four extension sources for basil and found one usable sentence, so we are not going to pretend we can do the rest in an afternoon.
-
Cabbage is not the heavy feeder everyone says it is
**Cabbage has a reputation as a hungry crop, and the extension services do not back it up.** Utah State and Minnesota both prescribe the same thing: feed the bed before planting, then one side-dressing about four weeks in. That is it. Broccoli, its close cousin, really is a heavy feeder — cabbage is not, and we had it blank rather than guess. **The warning is the useful half.** Utah State says to stop the nitrogen once heads begin to form, because feeding then makes the heads loose and split them. So the number now carries that condition with it instead of leaving you to find out at harvest. **We nearly got this wrong.** The obvious answer was "heavy" and reputation is not a source.
-
You can delete a plant you added by mistake
**Deleting something and recording that it died are now two different things, because they mean two different things.** At the bottom of a plant or a growing space there is a quiet line: delete this, for something you added by mistake. **If a plant really died, keep saying it died.** That is a fact about your garden and it stays in your record — the journal is the whole point. Delete is for the test plant you added while poking at the app, which was never in the ground. Getting those two mixed up costs you either way: a test plant marked dead becomes a gardening fact that is not true, and a real death recorded as a delete loses the season. **Deleting a growing space takes the plants in it**, and it says so with the numbers before it does anything — "also removes 3 plants and 14 journal entries". Deleting a seed tray does not touch the plants; a tray is where a plant sat, not what it is.
-
A plant you added by mistake can go. A plant that died stays.
**You can now delete a single plant or growing space — and it is deliberately not the same thing as recording that a plant died.** Delete says this never happened. Died says it happened and is over. **Both mistakes damage your record, in opposite directions.** Deleting a plant that really died removes a real season: the sowing date, the feed in June, the photo from July, and the fact that it failed at all — and a failure is the entry you are most likely to want next year. Recording a test plant as *died* writes a false gardening fact, so next spring your own history tells you that variety dies in your garden when it never grew there. **So the control opens by pointing at the difference** rather than asking you to work it out: *for something you added by mistake — if it really died, say that instead so it stays in your record.* **Deleting a bed counts what goes with it.** *Deleting Bed 2 also removes 3 plants and 14 journal entries.* It names only what is actually there, and deleting a single plant does not say "1 plant" — a number that is always one teaches you to skim the line, and the entry count beside it is the one that matters. **There is no undo and it removes it from your other devices too.** The protection is the question before it, not a rescue after it.
Deleting a plant vs recording that it diedRestarting your garden
-
"It’s got its first true leaves" now records a stage, and a question still records nothing
**Telling the app what a plant is doing now saves it as a stage.** True leaves, cotyledons, setting fruit, heading up, bulbing, pods filling out, starting to ripen, curing, gone dormant. Flowering, bolting and germinating already had their own entries. **The hard part was not the list. It was everything that contains the same words.** *"Should I pinch the flowers off?"* has *flowering* in it. So does *"I’m going to let it flower"*, and *"no flowers yet"*. **None of those is you telling us something**, and recording a stage from any of them would put a fact in your journal that you never stated. **So only a sentence that asserts a stage records one.** Questions, plans, worries, conditionals and negatives all pass straight through and your words are kept as a note instead \u2014 which loses nothing. **A wrong stage would be permanent and invisible. A note is neither.** **One case we made sure still works:** *"the peppers are setting fruit, is that early?"* counts. You told us something and then asked about it, which is how people actually write. Our first version threw that away because it ended in a question mark \u2014 the test caught it.
-
Hardening off no longer gets stuck on day two
**Miss a day and the plan used to step backwards.** Three days off repeated a step, three weeks started you over — so a busy week could leave the screen sitting on "day 2 of 10" indefinitely, while the plant outside carried on experiencing actual weather. **The ten days now run on the calendar.** Day six is day six because six days have passed. A day you miss is recorded as missed and the plan keeps going. **We went looking for the research behind those old numbers and there is none.** Illinois, Utah State and Minnesota all tell you the ramp takes about two weeks, and not one of them says what to do when you miss days. So the app stopped pretending it knew. **It counts instead** — days it was out, days shorter than the step asked, days with nothing logged. If fewer days went well than the plan wanted, it suggests adding that many back, **and it says that is a suggestion**, with the numbers beside it. Which days you missed is a fact. What to do about it is our opinion, and it reads like one.
-
The chat can read what stage your plant was at — and it will not pretend to know more
**Every entry you log now records two things about timing:** what stage the plant was in, and what stage our model expected on that date. **The gap between them is the signal** \u2014 and the chat can now read it back. *"Watered while it was flowering, where the model expected leafy growth."* Both facts, and you draw the conclusion. **What it will not say is "ten days ahead", and that is deliberate.** To count days we would need the dates the model expects each stage to start, and we do not save those \u2014 on purpose, because a number worked out at the moment you ask is our model checking its own homework. **And "ahead" needs the stages to be one ladder every plant climbs in the same order.** They are not: bulbing, heading and pod fill are different crops doing different things, not steps in one sequence. **Reading a ranking into that would be inventing biology.** **When there is no stage, it says why.** *We hold no growth-stage model for this crop* is a different problem from *our dates for this crop did not line up with your planting*, and you can do something about the difference. Silence would hide both. **Nothing logged before today gets a stage added.** Those entries have none, and guessing one now would put our opinion into your records where a fact should be.
-
Third report of the voice stutter, and it was never our code
**We fixed the repeating-words bug twice and it kept happening.** Then the person reporting it gave us the clue that solved it: **his phone\u2019s own keyboard microphone transcribes him perfectly.** Same phone, same microphone, same connection. The only difference is that we were asking the browser to listen ourselves. **It is a known bug in Chrome on Android.** There is a mode where speech recognition listens continuously rather than one sentence at a time, and on Android that mode repeats what it hears \u2014 reported to Chromium and hit by other apps using the same browser feature. **We were using it, so the words arrived doubled before any of our code saw them.** **Both of our earlier fixes were real improvements to code that was not the problem.** The first genuinely stopped us gluing half-finished guesses together. The second genuinely stopped us re-adding sentences we already had. **Neither could fix words that were already repeated when they reached us**, which is why the output never changed. **It now listens for one thing at a time**, which is what every report of this bug recommends. If you have more to say, tap the microphone again and it adds to what is already in the box. **We could restart it automatically and chose not to**: Android plays its listening beep on every restart, so a pause to look at a plant would mean being beeped at, by an app, in your garden. **We are not calling this fixed.** It has been called fixed twice already. It is fixed when the phone that found it says so.
-
"Not supported here" was one tap from working, and we were about to test the wrong thing
**We are about to find out whether alerts actually reach a phone.** They have never been proven to — not because they fail, but because nobody here had tried it on a real device with the app closed. That test takes one person about a minute. **Which is exactly why the app had to stop shrugging first.** On an iPhone, alerts only work once the app is saved to your Home Screen — Apple\u2019s rule, no way around it. The app did not know that. So an iPhone user tapped "register this phone", it failed quietly, and the status read **"not supported here"** — which sounds like a dead end and was one tap from working. **Now it says what to tap:** Share, then Add to Home Screen. **And a test that does not arrive now names its reason** — not on the Home Screen, blocked in your settings, this phone never registered, or our own end missing a key. That last one says plainly that it is us, not you. **The order matters more than it sounds.** On a fresh iPhone, three of those are true at the same time, and only one of them can be acted on. Telling you about the other two sends you to a settings screen that cannot help. So the app names the one that has to be fixed first. **Why we built the explanation before running the test:** a test that comes back "nothing arrived" with no reason burns the one expensive thing we have — somebody\u2019s minute with a real phone in their hand — and leaves us knowing nothing.
-
One button on every screen, and you can just say it out loud
**The pencil button now opens the chat, already knowing what you were looking at.** If you were on a plant, that plant comes with you \u2014 say *"watered it"* and nothing else needs asking. If you were on the home screen, nothing about a plant comes with you, which is the honest answer, so you say which one. **And you can speak instead of typing.** There is a microphone next to Send. It keeps listening through pauses, because describing what you did in a garden is not one clean sentence. A gardener has dirty hands and one free thumb; the whole point is the distance between noticing something and having it written down. **Tapping a row records nothing.** *Something\u2019s wrong* and *Just a note* hand the chat a starting point and stop there. One tap cannot know which plant, how much, or when \u2014 so it does not pretend to. You say the rest, and the app still shows you a card to check before anything goes into your garden. **There are only two rows and that is deliberate.** We did not add *Watered* or *Picked*: if the chat cannot understand *"watered the tomatoes, about two gallons"* said cold, that is something we need to know, and a button would have hidden it from us. **The plan is fewer rows over time, not more.** **One honest limit.** Speaking needs a connection \u2014 the sound is turned into text on a server, and there is no version that happens on your phone. That sits oddly beside everything else here, which is built so writing something down never waits for signal. **Typing always works, anywhere, and saves instantly.** Speaking is a shortcut on top of that. If you see no microphone, your browser does not do it \u2014 Firefox does not \u2014 or it is turned down for this site, and there is nothing to fix.
-
"Overnight in left out" — what twenty minutes on a phone found that a typecheck could not
**The hardening setup shipped this morning had never been looked at on a phone.** It compiled, it passed its tests, and we walked it at phone size before anybody else did. Three things were wrong, and none of them was the kind a test catches. **Day 10 read "overnight in left out."** Day 9 read "the whole day in where it is actually going to live." Our own plan describes the last steps in a way that does not take the word "in" in front of it \u2014 and **the app already knew that**: four other screens write it with a comma. We had invented a fifth way and it was the broken one. **Day 3 was scheduled to come back in at 9pm.** Which is not a shade step \u2014 it is an hour of daylight and two and a half hours of night. **The ten days save night for day 10 on purpose**, and this quietly moved it to day 3. Evening sessions now finish by 8pm, and anything that will not fit goes out before you leave instead. **And six days in a row ended with the same advice: "put it somewhere it stays in shade all day."** On days 7 and 8 that contradicts the plan itself, which by then asks for half a day of sun and then most of the day. **Telling you to keep it in full shade on the day the ramp wants sun is not a hedge, it is wrong.** That line now appears only on the days that actually call for shade. On the sun days it states the trade and stops \u2014 **because we looked for guidance on that case and nobody publishes any.** **All three are now in the tests**, so they cannot come back. But no test would have found them: they needed a screen, at the size somebody holds.
-
Planting something out now asks where it went
**"Plant it out" recorded the day and nothing else.** The plant stayed on file as a seed tray for the rest of its life — so a tomato in open ground kept getting watering advice written for a tray under a light, and where a plant sits is the single thing that most changes that advice. **The move was recorded; the plant never moved.** **Now finishing a transplant asks the one question that follows from it** — a tray, a pot, a raised bed, straight in the ground, or under cover — and the answer fixes the watering advice and ends any hardening off in the same tap. **This covers potting up as well**, because moving a seedling into a bigger pot is the same kind of change: the container is different, so the watering is different. Any job that records a transplant inherits the question rather than having to be remembered separately.
-
You can wipe your garden and start over
**If you have been trying the app out rather than recording a real garden, you can now clear it and start again.** Profile has a Start over section with a Restart my garden button. It deletes every plant, growing space, journal entry, photo, reminder and conversation, and leaves your account signed in. **It tells you what it is about to delete, with the actual numbers** — three plants, one space, fourteen journal entries — because a vague warning is not something you can check. Then it asks you to type the word restart, so it is always something you decided rather than something your thumb did. **You pick whether your location goes too.** Keep it and you land on an empty garden ready for plants. Clear it and the app asks for your zip and frost dates again, which is what a brand-new gardener sees. **There is no undo, and it empties your other devices as well.** That last part is deliberate: a wipe that left an old copy on a tablet would put the whole garden back the next time the tablet connected.
-
The plantable list now leads with what has the most room, not with what starts with A
Yesterday the add-a-plant list started sorting by what you can plant this week. **In spring that worked beautifully** — mustard flagged *last chance this year*, broccoli *about 5 days left*, the closing windows first. **From midsummer it did nothing at all.** **By August almost no sowing window is still closing**, so nothing carried a deadline, and the list quietly fell back to alphabetical. Twenty-nine crops you could plant that day, and the first one offered was Amaranth. **The same problem we fixed on Sunday, wearing a different coat, on the exact kind of date a new gardener would open the app.** **Anything about to run out now sits at the top, soonest first.** In April that is five rows reading *last chance this year*, then the ones with about five days left. Skip those today and you have missed them for the year. **Under them, the order is whichever crop has the most room before your first frost.** On 10 August that is mizuna with 50 days to spare, then arugula and radish at 46 — and since nothing is closing by then, that is the whole list. **The same figure the "what can I plant right now?" button uses**, because both now read the same calculation. **We tried each rule on its own and neither survived both seasons.** Sorting by deadline alone went alphabetical in August. Sorting by room alone put *last chance this year* at position 60 of 70 in April, under dozens of crops with no deadline at all — which is how you lose a sowing you were being warned about. They answer different questions, so each orders its own half.
-
Telling the chat a plant died now actually ends it
**The It died button on a plant page ended the plant. Typing the same thing into chat did not.** It wrote the sentence into your journal and left the plant alive — **still on your list, still being given watering jobs**, for something you had just told us was gone. **Now both do the same thing.** Say a plant died, press Save on the card, and it is closed out the same way the button closes it — dated to the day you said it happened, not to today, so catching up on Sunday about a Thursday still reads Thursday. **It only acts on a card you pressed Save on**, naming the plant, never off a guess. If it was wrong, Reopen on the plant page brings it straight back. **This is the second one of these we found this week** and they share a shape: something got written down, and the thing it was about never changed.
-
The app now refuses to record five things that cannot happen
**You can no longer harden off a plant you have told us is in a bed.** It is rooted — you cannot carry it outside and bring it back in. **That was the bug that started this**, and until now it was only filtered out of the screens; the record could still be created. **Four more:** nothing can be logged against a plant you have recorded as finished (a note still can, because *pulled it out and the roots were knotted* is worth keeping); nothing can be dated in the future, with a day of slack so a gardener in New Zealand tapping **today** is never refused; sprouting cannot be dated before the seed went in — **by date, not by the order you type things**, so catching up on Sunday about Thursday is fine; and an amount needs a unit, because a bare **4** against a watering is four gallons or four minutes forever. **The three rules we threw out matter more than the five we kept.** A plant may go backwards — one cut back or flattened by hail genuinely does, and refusing that would delete the exact signal we just built. A harvest needs no flowers first, because most of what people grow is leaf and root. And a move need not say where it went yet, because **forcing that answer is how somebody invents a bed they do not have.** **A rule that fires on real gardening gets switched off, and then it protects nothing.**
-
The button is a microphone now, and it stopped repeating you
**Two things, and the first one is a bug we shipped this morning.** Speak into the app and one sentence came back as a stutter of itself \u2014 *"see see see if see if this see if this thing…"* **Every guess the browser made was being added to the ones before it instead of replacing them.** When you talk, a phone sends a stream of improving guesses; we were gluing them together. It now keeps only what the browser has settled on, plus the words you are saying right now. **Found on a real phone, by the person who asked for the feature, within a day of it shipping.** We said at the time that whether speech actually becomes text needed a real phone to prove. It did, and it was broken. **And the button changed shape entirely.** For one day it was a pencil that opened a short list \u2014 *Something\u2019s wrong*, *Just a note* \u2014 and each row took you to the chat. **Which is more taps than just opening the chat.** So the list is gone. **It is a microphone, and it starts listening the moment you tap it, on the screen you are already on.** Say what you did. The words appear as you talk and you can fix any of them. Tap send and *then* it takes you to the chat, with the message already on its way. **Going somewhere is the reward for finishing, not the price of starting.** **You no longer tell it what kind of thing you are about to say.** No categories, no picking a plant first \u2014 just say it, and the chat works it out. If your browser has no microphone, the same box opens with the keyboard and nothing mentions voice at all.
-
A help page sent you to a chart that had moved off that screen a week ago
**We read all 22 help pages looking for one thing: every place a page quotes what the app says, checked against what the app actually says.** Fifty-one quoted strings. **Two were wrong.** **The worse one.** The tree-and-bush page told you to find your once-a-year jobs *"under the second chart on Today, in a list called \u2018The year\u2019s work on these\u2019"*. **There is no chart on Today** \u2014 the season chart moved to its own screen on 10 August \u2014 and the list is on **This week**, headed *"Coming up on your trees and bushes"*. The page also said anything due right now shows NOW. It does not: **a job whose window is open has left that list and become a card in your day**, which is where you would act on it. Four sentences describing a screen by the shape it had a week ago. **The smaller one.** A page quoted a button as *"Yes, that\u2019s what I see"*. The button reads *"Yes, that is what I see"*. Inside quotation marks that is a misquote rather than a paraphrase, so it now matches the button. **What the other forty-nine turned out to be is the useful part.** Thirty-seven matched the app word for word. Ten were pages quoting a sentence the app builds around your own numbers \u2014 *"29\u00b0F tonight"*, *"2 gallons"* \u2014 which is a real quotation with your garden filled in. Two were correct history: a page explaining that a button **used to** say something else. **Nothing on any page quoted a string the app has never shown.** **Both failures had the same cause, and it was not carelessness at writing time.** Both pages were accurate the day they were written and were broken later by a screen changing underneath them. **A support page is a claim about the product, and it goes stale silently.**
-
The hardening setup now arrives before you start, not after
**We shipped the setup flow this morning and described it as appearing the first time you have something to harden off. That was not what the code did.** **It waited until you had already put a plant outside once** — so the walkthrough that exists to lay out the ten days and set your reminder times would have introduced you to hardening off on day three of doing it. **Ordered backwards, not merely hard to find.** **Now it asks the same question the daily list asks:** is this plant ready to start? Not: has this plant already begun? You meet it before day one, which is the only moment it is any use. **Written up rather than quietly corrected** because the help page has been describing the fixed behavior since this morning — for about an hour, our own instructions were ahead of our own app, and that is worth saying out loud rather than letting the record close over it.
-
You told us when you get home. We were not listening
**The hardening setup asks two questions: when do you leave the house, and when are you back.** It then lays the ten days out around those two times and shows you the plan. **And that was the only thing your answers ever did.** The moment you tapped Start, the app went back to its own arithmetic: bring the tray in two hours from now, whenever *now* happened to be. **Tell us you are home at six, open the app at eleven in the morning, and it asked you to bring the tray in at one o\u2019clock** \u2014 when you are at work. **Now the time you gave us is the time on the card.** You cannot carry a tray indoors before you are home, so your own return time is the bring-in whenever the plan puts one there and it is still ahead of you today. Open the app in the evening, past your own time, and it falls back to the step\u2019s own window exactly as before. **We found it by mapping every piece of information the app holds about you and asking, for each one, which screens actually read it.** Thirty-four screens; this was the one thing collected, stored, shown back to you on your profile, and acted on nowhere.
-
The hardening walkthrough would have arrived on day two. Now it comes before day one
**The setup we shipped this morning explains the ten days and asks about your week.** It only knew about plants that had already been put outside at least once. **So it would have appeared on day two** \u2014 after you had carried the tray out on your own, guessed the hours, and done the thing the walkthrough was about to help you plan. Not hard to find. **Ordered backwards.** **Now your home screen offers the setup the first time a plant is actually ready**, before anything has happened. **The fix was to ask the question the app already asks itself.** The daily task list decides whether to show you a hardening job using the plant\u2019s eligibility \u2014 not its history. The setup now asks the same thing the same way. The right answer was already in the building. **This is the fifth time this week we have found a mechanism that was built, correct, and wired to something that could not happen at the moment it mattered.** We are getting faster at spotting them, which is not the same as making fewer of them.
-
We fixed the voice stutter, shipped it, and it came back on Android
**Second report from the same phone, same evening.** *"I I I took I took I took the seeds out I took the seeds out today…"* \u2014 one sentence, every version of it glued to the last. The same shape as the bug we had just fixed, from the opposite mistake. **Here is what happened, because it is a good lesson and an uncomfortable one.** When you speak, the browser hands over the whole sentence again on every update, improving as you talk. It also says which part changed. **Our first fix trusted that "which part changed" marker and only read from there** \u2014 which works, right up until a phone leaves the marker at the beginning and hands over the whole list every time. **Android does exactly that.** So every update re-added the whole sentence to a sentence that already contained it. **The second fix keeps nothing between updates.** Each one describes the entire sentence on its own, so it does not matter whether a phone moves that marker or not. **It is right on every phone rather than on most of them.** **And the test we wrote for the first fix could not have caught this**, because we built it from how we believed the browser behaves rather than from how it does. The test now replays the Android shape as well, and we broke the code both ways on purpose to watch it fail before trusting it. **A test that has been seen failing is worth more than ten that have only been seen passing.**
-
We never told it what a growth stage was. It answered in its own words, and we blamed the photograph
**This morning a photo of sweet corn came back described as *"young seedling, a few leaves"*.** True, useful, and not one of the seven words our calendar knows \u2014 so the part that compares a picture to your planting date could not place its own answer, and asked whether you had photographed somebody else\u2019s plant. **We fixed that this morning: it no longer doubts a photograph over a reading it cannot follow.** **Today we went looking for why the reading was in its own words at all, and the answer is that we never asked for anything else.** We have two places that read your photos. One of them lists the seven stage words when it asks. **The other gave one example and stopped.** **The difference is measurable and we measured it on the same corn photograph.** Asked without the list, three times: none of the three answers was a word our calendar could place. Asked with it, three times: all three were. **Same photo, same model, same everything but one sentence of instruction.** **So both now ask the same way** \u2014 and if none of the seven words fits what it sees, it is still free to say so in its own. Nothing gets thrown away for missing our vocabulary; that would delete a true sentence about your plant, which is exactly what we refused to do this morning. **One thing we are not claiming.** Given the list, it answered *growing* \u2014 and *seedling* was on the same list, for a plant its own free answer had called a seedling. **More of the answers are now placeable; whether more of them are right is a separate question and we have not established it.** Whether corn with a few true leaves is a seedling or growing is a gardening question, and we would rather log it than settle it with a number that only measures whether we were understood.