Skip to content
GardenTrack GardenTrack
Start free

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.

  1. We said phone alerts had never been proven to work. They had.

    **Our help page said no alert had ever been shown to reach a phone with the app closed.** That was wrong, and it had been wrong for eleven days. **One arrived on 31 July, on a real phone, with the app shut.** We know because it caused a second bug — opening the app produced a second, near-identical alert for the same tray — and the fix for that has been in the app since the same day. **The code knew. The help page did not.** **What is true now, stated exactly:** alerts have arrived on one phone, once, on a stated date. That is proof the channel works — not a promise it works on every phone, which is why the app still has a **Send a test alert** button and why you should use it. **Why we are writing this up rather than quietly editing a sentence.** We had a claim on a public page that our own code contradicted, and nobody noticed because every check we run points at the code. **Nothing points from a published sentence back at the thing that would disprove it.** Being wrong in the cautious direction is still being wrong.

  2. It stopped guessing how far along your plant is from the calendar

    **Our own record for sweet corn says the seedling stage runs about day 7 to day 31, and the stage after it day 14 to day 55.** They overlap by more than two weeks. **64 of our 66 crops overlap the same way**, and that is honest rather than sloppy \u2014 on day 20 a corn plant really can be either, depending on the spring. **But something still had to answer, and the thing answering was a rule in our code.** Faced with two stages that both fit, it took the later one. **Not because anything about corn decided that \u2014 nothing in the plant record was consulted at all.** **So it asks a different question now: what can you actually see?** First true leaves. Fast new growth. Stems ankle high. **Every crop\u2019s record already lists which stage shows which of those**, sourced the same way everything else is. *"Several true leaves"* is past the first and short of ankle-high \u2014 which is exactly the thing a date cannot tell you, and exactly what a photograph can. **And when a sign belongs to two stages, it says both.** Sweet corn lists silks under two of them, because silks appearing and silks drying are both worth noting and our list has one word for it. **In that case the app names both and will not question your photo over a reading it cannot place itself.** Picking one would look more confident and be less true. **Across the whole catalog, 673 signs point at exactly one stage and 181 point at more than one.** The second number is not a defect to be tidied away \u2014 it is the honest share, and those are the ones you now get told about instead of guessed at.

  3. Every event now records what stage the plant was in — and reaches your account

    **When you log anything now — a watering, a harvest, a pest — it records what stage the plant was in and where it was sitting at the time.** It also records what stage it was *supposed* to be in, worked out from when you planted it. **The gap between those two is the useful part**: a plant three weeks behind where it should be is the most worth-knowing thing an app like this could notice. **Nothing is filled in for the past.** Every entry made before today has no stage and will keep none — we could calculate one, and it would be our own guess dressed as an observation, which would quietly ruin the thing this exists for. **Blank is honest. A guess is not.** **And a test caught this deleting itself before anyone shipped it.** The first time anything else about an entry synced, the stage would have been wiped — permanently, since it is never recalculated. **That led to a bigger fix:** our build now fails if any new thing is stored on your phone and quietly never sent to your account. **Something that saves locally and never leaves looks recorded until you replace the phone.** **One known gap remains and the new check found it independently:** a variety name you typed yourself still lives only on that device. We already said so on the varieties page. Now two separate things say it, and one of them fails the build if we forget.

  4. The hardening-off setup asks when you leave the house, not what time you want reminders

    **Nobody fails at hardening off because they do not know what it is.** They fail because day 3 is a Tuesday and they leave at 7:30. The knowledge is one paragraph. The commitment is ten days of being in the right place twice a day. **So the new setup flow is not an explainer.** It is three screens, all skippable. The first shows you the whole ten days in your own plants\u2019 names. The second asks **when you leave and when you are home** \u2014 and that is the whole feature, because the app already knows the ramp, your frost dates and how cold each crop can take. Your week was the only missing part. **Then it puts the tray out and brings it in at times you are actually there.** And on the days that do not fit \u2014 day 5 wants five or six hours and you are gone ten \u2014 **it says so rather than pretending**: out before you leave, and it will be out longer than the step asks. **What we deliberately did not write** is a sentence telling you the plant will be fine about that. Whether a long day in full shade is really equivalent to a short one is a gardening claim we have not sourced, and we would rather show you the trade than invent the reassurance. **No streak, no ring, no percentage.** Ten days is a plan, not a game. Showing day 4 of 10 is the plan; showing 40% is theater.

  5. Our free plant data now explains its own gaps in plain English

    **When a field in our plant database is empty, the download tells you why — and until today 47 of those explanations were written for us rather than for you.** They opened with things like *MIGRATED FROM `revision_history`, WHERE THIS WAS DECIDED AND NEVER RECORDED AS STATE* and named internal batch numbers. **The useful answer was already inside them.** Underneath the bookkeeping, each note named the pages we actually read and what those pages said — which is the whole point of publishing a gap rather than a blank. So we stripped the scaffolding and kept the reason. **Beets, for example, now reads:** no source we read gives one — *"no beet-specific source states a value; USU/UMD/Clemson/NC State give only consistent moisture / water regularly, no numeric"* — re-fetched 11 August, and Utah State, Minnesota and Maryland still state no per-week figure. **The quoted part is left exactly as it was written**, because that is the evidence. Only the wrapper around it changed. **And 33 notes still read a little like internal shorthand** — mostly ones that open in capital letters. Those are a different shape from the 47 and they are on the list rather than quietly left.

  6. You told us it came up, and the app kept telling you to wait

    Sunday we added a line to the plant page that says when to expect your seeds up — **"Sown 4 days ago. Expect the first sprouts in about 2–8 more days."** **It did not listen when you told it they had come up.** Log "germinated" on the plant and the card carried straight on counting down, on the same screen where you had just recorded it. Fixed: the moment you say it sprouted, that line retires. **How it was found is the useful part.** Three separate bugs this week were the same shape — you tell the app something happened, and one part of the app updates while another never hears about it. Moving a plant. Recording one as dead. Now this. So instead of waiting for a fourth, we listed **every one of the 29 things you can log** and asked which ones nothing in the app reacts to. **Five.** Four of those are simply diary entries — writing down that you treated something does not need to change anything else. **The fifth was this one.** **And there is now a check that will not let a new one through.** Add something a gardener can log, and the build fails until either something acts on it or somebody writes down why nothing should. It cannot tell whether silence is correct — but it can stop silence being an accident.

  7. A code nobody can read is not a reason

    **The list of changes the server would not take had one row reading `not_your_thread`.** The rows above and below it said things like *"It belongs to a different account"*, in English. One of them was a word from inside our own code, on the screen you open when something has gone wrong with your garden data. **It was reported as one code. It was three.** The list that turns those codes into sentences had eight entries; the server can send eleven. `not_your_plant` and a catch-all for a refusal that arrives with no reason at all were both missing too \u2014 nobody had seen them because a hole in a lookup only shows when somebody\u2019s change happens to land in it. **All eleven have words now, and a check reads the server\u2019s own code to keep it that way.** Add a new reason on our side without writing the sentence for it and our build fails, by name. **And if a newer server ever sends something this app has not heard of, it says so** \u2014 that it was refused for a reason this version has no words for \u2014 rather than printing the token. **Then the same sweep found a worse one in the chat.** When an answer started coming back and the connection dropped partway, the message read *"Did not send."* **It did send.** It reached us, we started answering, and the line broke while we were writing. Same for an answer that came back in a shape we could not read. Both now say what actually happened, and both offer Try again, because both are worth one.

  8. “A couple of weeks” now means the same thing in both directions

    **“Remind me in a couple of weeks” worked. “Planted a couple of weeks ago” did not.** Same app, same person, same ordinary English word, two different answers — and the second one just refused, so you had to go back and rephrase it. **The cause was two lists.** The words the app understands for counting time were written down twice in our own code, and only one copy had ever learned “a couple”. There is one list now, and both directions read it. **All the ways people actually type it work** — with “of” or without, with “a” or without. What has not changed is what it refuses: “in the spring”, “a while ago”, “when it warms up” still get nothing rather than a guess, because a season is six weeks wide.

  9. Garlic finally answers “what can I plant now?”

    **Ask in September and garlic used to say the payoff was next year.** The right answer is “yes, now” — garlic goes in around your first frost and comes out the following July. **We already had the date and never looked at it.** Garlic’s first growth stage runs from six weeks before your first frost to two weeks after, sourced and sitting in the record. Every other crop is measured from the last frost of spring, so nothing ever thought to check the other end of the year. **Two more were broken the same way** — cereal rye and hairy vetch, the cover crops you sow in autumn. Both answer properly now. **Asparagus and rhubarb have not changed.** They are perennials that genuinely make you wait a season, and they still say so.

  10. Help is now grouped by the question you arrived with

    **The help section was 22 pages in one flat list**, ordered by a number we assigned by hand and had quietly stopped maintaining — two pages tied at 13, three at 20, then gaps up to 60. That is what a list does when it has outgrown being a list. **It is now six groups, named after the question that sends you there:** getting your plants into it · when can I plant it and will it survive · what should I be doing right now · something looks wrong with my plant · keeping a record · when the app is wrong. **Every page kept its address.** Nothing you have bookmarked or linked to has moved, because grouping into new URLs would have cost 22 redirects for a change nobody asked for. The groups are headings. **And the part that stops it drifting back:** a new help page now cannot be added without choosing which group it belongs to — the build refuses it otherwise — and the hub fails to build if any page would go unlisted. The old flat list had collisions precisely because nothing ever forced that decision.

  11. Two small things on the add-a-plant screen

    **Cucamelon, lovage and summer savory were offering you “1 varieties”.** All three sit in the “ready to plant this week” list, so it was on the first screen most people ever see. Fixed. **And typing a place name now lights the right kind for you.** Type “raised bed” and the raised-bed button is already picked when you get to it; type “the big pot” and it picks pot. You can change it with one tap, and once you touch those buttons it stops guessing. **It suggests rather than decides.** We do not save a guess about where your plant is sitting — that answer drives how often we tell you to water, so it should be one you actually looked at. What it fixes is being asked the same thing twice when you had already typed the answer.

  12. Our spacing calculator and our radish page disagreed. They do not now

    **The calculator told you to leave 6 inches between radish rows. Our own radish page said 10 to 12.** Both numbers came from real university guides, so neither was a typo — but you should not get two different answers from two of our pages. **So we read the guides again, and found something more useful than a winner.** Line up the two numbers each guide gives and they split cleanly. On how close radishes go *to each other*, everybody agrees: about an inch or two, and Utah State says why — crowd them and they never make a proper root. On how wide the gap *between rows* should be, the same guides range from 6 inches to 18. **That second number is about you, not the radish.** Missouri gives two answers for the very same crop — 18 inches if you are working the row by hand, 42 if a tractor is going down it. Nobody says a radish grows worse in a narrow row. They are telling you how much room you need to stand, kneel and weed. **So the calculator now says 12 inches**, which fits inside more than one guide and matches our radish page. We show the range as 6 to 18 rather than averaging it: if your beds are tight and you weed by hand, 6 is fine. If you want to get a hoe down there, go wider.

  13. Seedlings sharing a tray now get their own card

    **If you sow seed into one tray, the seedlings have to be separated before they crowd each other out.** It is the first time a seedling is ever handled and the app had no word for it — so the first real event in a plant’s life went unrecorded, or got called a transplant. **Now a tray whose seedlings are up gets a card asking whether they have their first proper leaves yet.** It asks rather than tells, because we cannot see your tray and nobody publishes a day count for this — it is what the leaves look like, and you are the one looking. **It goes by the tray, not the crop.** A tomato sown one seed per cell never needs pricking out; the same tomato scattered in a flat does. We checked two extension services and they give opposite advice about the method, and neither of them lists crops — so the thing that decides is how you sowed it, which you already told us. **And four jobs now record themselves properly.** Weeding, staking, covering and hilling up were being written into your journal as plain notes because of a lookup that had gone stale. They get their own entries from today.

  14. The home screen said both things about day one

    **Four lines apart, on the same screen, about the same plant:** a card reading *"HARDENING OFF \u00b7 DAY 1 OF 10 \u2014 put the basil out"*, and under it *"Ready to start hardening off \u00b7 Basil (tray)"*. **Both true. Together they read as though the app had lost track of your week.** **The line was ours from the day before.** We had just fixed the setup so it arrives before day one instead of after it \u2014 and put it directly beneath the card that announces day one. **The plant name was wrong on its own terms, too.** The setup asks two questions: when you leave the house, and when you get home. **You answer them once and they are used for every plant you ever harden off.** Naming the basil implied a per-plant setting that does not exist. **So the line now says the one thing the card cannot** \u2014 *"fit the ten days round your week \u2014 set your times once"*. No plant, no day number, no second opinion about whether you have started. **The same duplication was one state further along and nobody had reported it yet.** Once a run was going, that line restated the day number for every plant while the card above said the same thing. It now carries a status only when the day\u2019s cards are silent \u2014 which happens in exactly one situation, when you have finished today\u2019s step and there is nothing left to do. **And it is the compiler that keeps it that way.** The list of situations that get a card is now written once and this line is its opposite, so a new one added to the app with no card fails our build by name rather than quietly turning up here. **We proved that by adding a fake one and watching the build refuse it** \u2014 the first version of the same check compiled happily and guarded nothing.

  15. A photo can guess the stage. Your planting date is what makes the guess worth anything

    **The app has been reading a growth stage off photographs for weeks and comparing it to nothing.** Now it meets the one thing only we hold: **when you actually planted it.** **Three answers.** If the picture and your dates agree, it offers to write the stage down \u2014 one tap. If they differ but your calendar could plausibly put the plant there around now, it says both and records nothing: *"that looks like fruit set to me, your dates put it around leafy growth."* Two facts, no verdict, and you decide. **And if the picture cannot fit your dates at all, it asks whether it is the same plant.** Fruiting on something sown eleven days ago is not a stage \u2014 **it is evidence about the photograph.** A neighbor\u2019s plant, last year\u2019s picture, the wrong bed, the wrong plant tapped on the way in. It never tells you you are wrong, and it writes nothing about the plant. **If you have already told us a stage, the photo does not get a vote.** Your words stay the record; a picture that disagrees becomes a question for you rather than a correction we apply. **What it will never say is "ahead" or "behind."** The stages are not one ladder every crop climbs \u2014 bulbing, heading and pod fill are different plants doing different things \u2014 so there is no axis to be ahead on. Both facts, and you draw the line between them.

  16. Three more jobs stopped saving as untitled notes

    **Training a vine up a trellis, snapping garlic scapes off, and the dormant spray for peach leaf curl were all being written into your journal as blank notes.** The job saved and the date was right, but the entry did not say which job it was — so reading your year back in January had holes in it. **All three now record as themselves**, and each already had somewhere honest to go: training to a trellis is staking, taking the scapes off is pruning — the point is sending the plant’s energy back into the bulb — and a dormant spray is a treatment. **One is staying a plain note on purpose.** Curing onions and garlic happens to the crop after you lift it, not to the plant, so it is kept in your own words rather than filed under a category that would not tell you anything.

  17. A phone said 6 changes were not backed up. 31 were

    **The app holds two different kinds of unsent change and it was mixing them up in every sentence it wrote about them.** Some are simply on their way. Others we asked the server to take and it said no \u2014 those will not go up on their own, however long you wait. **On a phone with thirty-one changes queued, six of them refused, here is what four different parts of the app said.** The alarm at the bottom of the screen: *"6 changes are not backed up."* Twenty-five more were not backed up and were not mentioned. The row on Profile: *"Waiting to back up \u2014 31 changes"*, when six of them were waiting for nothing at all. The line beneath it promised they would go up as soon as there was signal, which for those six was simply untrue. And a **Back up now** button that, on a queue of nothing but refusals, sent nothing and changed nothing on the screen. **All four now read from one place.** The alarm leads with the whole number, because that is the one that answers *is my garden safe* \u2014 *"31 changes are not backed up. The server will not take 6 of them."* Profile shows both. The note says which ones signal will fix and which ones it will not. The button appears only when there is something for it to send; when everything has been refused, the one that helps is **Try these again**. **This is the second half of a fix we shipped on 5 August.** That one taught the app to stop calling a refused change *"waiting"*. It did that in the one line it was written at, and left three more sentences describing two things as one. Splitting a number in two does not go back and correct every sentence that was written when there was only one of it.

  18. We shipped something that questioned good photographs. A picture of corn caught it within the hour

    **This morning we shipped the photo check that compares what a picture shows against when you actually planted.** Three answers by design: agree and offer to record it, differ but plausibly so and just say both, or \u2014 when the picture cannot fit your dates at all \u2014 ask whether it is the same plant. **That third one was firing on almost everything.** **Here is why, and it is our fault in a specific way.** The app holds a fixed list of growth stages \u2014 seedling, fruit set, ripening. The part that looks at your photo does not pick from that list; **it writes like a person.** Asked about a corn plant it answered *"young seedling, a few leaves"*. True, useful, and not a word on our list. **So the app could not place its own answer on your calendar \u2014 and treated that as evidence about your photograph.** It asked whether you had taken a picture of somebody else\u2019s plant, because we could not follow ourselves. **Fixed: it may only question your photo when the stage it sees is one your crop genuinely goes through and your dates put it somewhere else entirely.** Fruiting on something sown eleven days ago still gets asked about. An answer we simply do not recognize now says what it sees and stops there. **Failing to understand ourselves is not evidence about your picture.** **What found it was one real photograph.** Every test we had passed the code a tidy stage name off our own list, so fifteen green checks certified a path the real thing never takes. The test now contains the exact sentence the model returned, word for word, and a second one making sure the useful question can still be asked when it is genuinely earned.

  19. Ask a question before you have an account, and the app now holds your place

    **Two small things from the same walk, and they were the same problem twice.** **The app was writing in your voice.** Ask something without an account and the reply came back inside your own message bubble — your question and our instruction in one purple block, as though you had said both. It is the one thing we forbid the answering side from doing, and the app was doing it to itself. Anything the app says now sits underneath your message, where it belongs. **And it gave directions instead of a door.** The line read "sign in on Profile" — except Profile does not have the words *sign in* anywhere on it, only a link about backing up. So we sent you to look for a word that was not there. Now the sentence says you need to be signed in and **the link is right beside it**. **The part that actually cost people something:** signing in dropped you on the home screen, and the chat reopened empty. Your question was gone from view and you had to remember it and type it again. **Now signing in brings you back to the same conversation**, question still there, and the line under it turns into Try again. One tap and it sends. **We had already built exactly this for jobs** — finish something the chat asked you to do and it offers you the way back to that conversation. **The path that needed it most was not using it**, and a stranger's very first sign-in is the most common place in the whole app to be holding a question you have not managed to ask yet.

  20. A row of white dots on a leek leaf is an insect telling you what it is doing

    **Allium leafminer leaves a sign almost nobody reads as a pest.** Not a blotch, not a chewed edge — Penn State describes "a characteristic linear series of round white dots in leaves". A neat line of pinpricks, made by the female puncturing the leaf to lay. **And it appears weeks before the part that hurts.** The dots are on the leaf; the damage is in the bulb. "Larvae tunnel into the leaves, moving down towards the bulbs", finishing as "small reddish-brown pupae in the bulbs" or leaving to pupate in the soil. **So a garlic or leek that comes up ruined was announced by a line of dots on a leaf tip a long time earlier** — which is the difference between knowing and finding out. **The timing is the other half**, and it is uncomfortable if you grow garlic: two generations a year, and in the Northeast the fall flight runs "in mid-September and remains active through October", which is exactly when garlic goes in the ground. **One honest limit we have written into the record.** Penn State says those dots are "particularly apparent on green onions and scallions" — thin green leaves. Expect them to be harder to spot on a garlic or a leek than the description makes it sound. That completes the onion-and-garlic set and takes us to **94 problem descriptions**, covering a bit over three-quarters of the times a plant in our database names a problem.

  21. A source we cited has been withdrawn, and we are telling you rather than quietly relinking

    Our hardening-off page carries a number we like a lot: an artichoke needs **250 to 500 hours below 50°F** before it will form a bud, which is why the one crop in the garden that wants the cold snap is the one nobody hardens off. **The publication we got it from no longer exists.** University of Florida IFAS has withdrawn it — the link now returns "gone" rather than a page, on their old address and their new one. **We only found out because we now check.** Last week we started fetching every source we cite and comparing our quotes against it word for word. A page that cannot be fetched is recorded as such instead of shrugged off, which is how a dead citation stops being invisible. **Then we went looking for the number somewhere else, and it is not there.** Utah State says only that artichoke "requires cool spring temperatures to initiate the flower stalk". UC IPM gives no figure at all. **So here is where that leaves it, and we would rather say it than tidy it away.** We read that publication while it was up, and the sentence on our page is what it said. You can no longer go and check us, which is most of what a citation is for. **Treat 250–500 hours as the best figure anyone published rather than a settled one** — every source agrees an artichoke needs a real stretch of cold, and only the withdrawn one put a number on how much.

  22. A permanent way to your week, and a chart that was covering the buttons

    **Your week had one way in: a line on Today counting what was left.** Clear everything and the line goes — so the screen became unreachable at the exact moment you had earned the right to look at it. **There is a Today / This week switch at the top of both now**, because they are two views of the same question rather than two places. **And the season chart was drawing over the buttons at the bottom of the screen.** Not near them — through them. The tab bar was pinned in place without ever saying how high it sits, so anything that did say won. It says now, and the chart is sealed so nothing inside it can climb out onto the app’s own furniture again. **Some tidying with it:** the decorative torn-pixel divider is gone, because it separated an upper and lower half of a screen that no longer has two halves. And "22 more this week" and "3 done today" were two loose lines at two sizes; they are one row under the card now — what is left on one side, what is behind you on the other.

  23. A wrong address no longer reads as a lost garden

    **Open a link to a page that does not exist and the app used to show you the Today screen.** Not an error, not an explanation — Today. And on a fresh load, before anything has come back from your own garden, Today says **"Nothing planted yet — add the first thing in your garden."** **So a stale bookmark, a shared link to a plant since removed, or a typo could show somebody with a full garden the most alarming sentence in the app.** Nothing was wrong. It read exactly like everything was. **Now a wrong address says so, and says why:** the address is empty, not your data, and everything you have saved is where you left it — with two ways back. **The same screen now covers a plant and a spot that are no longer there.** Those two used to say the bare words "Not found." with nothing else on the page: honest, and a dead end, because an installed app has no address bar to retype. **Four places could be handed a dead link and they did three different things** — one of them badly. Three now share one screen. The fourth, a crop we do not carry, already said something better and specific, so it kept its own words.

  24. Both cankers weep gum, so the gum is not the test

    **A cherry or plum with sap oozing from a sunken patch on the trunk has two common causes, and everyone diagnoses it by the ooze.** That cannot work: both of them do it. Wisconsin says bacterial cankers "often produce a gummy, resinous ooze", and Penn State says the first sign of Cytospora is "the exudation of gum at the point of infection". **Three things do separate them.** **Look at the leaves.** Bacterial canker does not stay in the wood — "infected leaves become spotted and yellowed" and "the centers of leaf spots often shothole", meaning the dead middle drops out and leaves a hole. Spotted leaves full of small holes, on a tree that also has a gummy canker, is the picture worth knowing. **Look at the color of the gum.** Cytospora's "turns black from alternate wetting and drying", so an old dark crust points there rather than fresh amber. **And look at the shape of the patch.** Cytospora cankers "enlarge more along the length than the width of the branch", so older ones are "oval to elongated" — stretched along the limb rather than round. **One honest limit.** There is a sharper test we have not used: the shape of the canker edge under the bark. We found it in a search result rather than on a page we fetched, so it is not on this site until somebody reads the source it came from. That takes us to **97 problem descriptions**.

  25. Finishing a job with no photo no longer loses the conversation it came from

    **When the app asks you to go and photograph something, finishing that job takes you back to the conversation that asked.** That already worked. What did not is the case where you finish it and there is no picture — you looked, and the answer is something you can just say. **An empty photo list read as "nothing to come back for", so the way back quietly vanished** for anybody who skipped the camera. Now the thread still opens and the line above the box says pick up where you left off, rather than claiming a photo is attached when none is. **Closing a job with no photo means no photo. It does not mean no conversation.** **The reason this had no test was not that anybody skipped writing one.** The decision lived inside a screen, wired to the database, and nothing outside the app could call it — untestable rather than untested. Pulling the decisions out into their own piece and leaving the database work behind made it reachable, and **the very first run crashed**, on a line that had been reading the wrong field the whole time. A test written from what we expected to happen would have checked the sentence and never run the code. **Nine checks now hold it**, including the one that would have killed the feature silently.

  26. Five sprays out of six came with no label warning. Now the app reads the answer itself

    When an answer names something you put on a plant, a caution appears under it: check the label lists the plant you are treating, because the same ingredient is sold in versions that are not for food. **We write that line ourselves rather than asking the answer to remember it**, and have done since we measured the answer remembering about two times in three. **What we had not measured was the trigger.** The caution appeared when the answer flagged the ingredient to us behind the scenes. So we asked about cabbage worms six times and counted: the answer named Bt in all six, and flagged it to us in one. **Five people out of six would have been handed a spray with nothing under it** — and our own help page told them this part was best-effort, which made it sound like a rounding error rather than five out of six. **The fix is that the app now reads the answer.** It is holding the words on the screen, so it looks through them for the name of anything you put on a plant — Bt, horticultural oil, insecticidal soap, copper, neem and the rest of what a home gardener actually meets. Find one, draw the caution. Nothing has to be remembered by anybody. **There is still an edge and we would rather say it.** Something unusual, named in an answer and not flagged to us either, could slip past the list. That is a much smaller hole than the one it replaces. If you ever see a treatment with no caution under it, send it to us with the pencil button and the name goes on the list. **The wider lesson is one we keep paying for:** a safety line that depends on remembering is a reminder, not a guarantee. We had written "best-effort" in a code comment and moved on, and the number behind those words turned out to be one in six.

  27. Hardening off now checks where the plant is, not just where it started

    **A plant already growing in a raised bed or straight in the ground was still being asked to go outside for two hours and brought back in.** It cannot. It is rooted in a bed. **The app was asking one question and it was the wrong tense:** was this plant started indoors? That describes how it began and stays true forever. Where it sits now is a different answer, and nothing in the hardening code was reading it. Now it does, everywhere at once — the job on Today, the evening bring-in alarm, the line on the home screen and the hardening page all stop together. **Seed trays, pots and greenhouse plants keep theirs,** because those are the ones you actually carry outside and back. **If we have never been told where a plant is sitting, it still gets the job** — going quiet over a question we never asked would be worse. So the card now carries a button that says it is already in the ground. One tap ends it, and tells us something the watering advice needed anyway.

  28. "How much water?" offered you the answer in fruit

    **One fruit. Two fruit. Six fruit.** No gallons anywhere. That is what the app put under the question *"how much water?"* **Watering is the one job with two answers that do not convert into each other** — a watering can is gallons, a hose is minutes, and nothing turns one into the other without knowing how fast your tap runs. So the app is meant to pick neither and ask. **That rule had been written down correctly since the day it was written.** The screen simply never read it, and fell through to the answer it uses for a harvest — a count of the thing you picked. The comment sitting directly above the offending line said *"watering is always in the two units a person can answer"*, while the line below it removed exactly those two. **A comment describing the intent is not the intent.** The units now come from the job itself, so watering offers gallons and minutes and nothing else — and there are tests that fail if any job ever offers an amount nobody could answer in.

  29. Old copies of the app no longer pile up on your phone

    **Every version of the app you had ever installed was still being kept on your phone.** The part that cleans up after an update looked for old copies by name, the name never changed, so it found none and deleted nothing. Driven from a clean phone through three updates: 17 files kept, then 18, then 19 — all three versions still there. **It could not show you the wrong thing** — each version’s files have unique names, so an old one is simply never asked for. It was taking up space, and it would have kept doing that for as long as you used the app. **The name now changes when the contents do**, so the previous copy is cleared on the update that replaces it — and an update that ships identical files re-downloads nothing. **The good news from the same test:** one ordinary reload gets you the new version. No force-quitting, no closing every tab, nothing you would not already do.

  30. Rosemary does grow where you live. Our own page was implying otherwise

    Look up rosemary and you will see **hardiness zones 8 to 11**. If you garden in zone 5 that reads as a closed door. **It is not one.** That number is where rosemary lives through the winter outdoors — colder than that, people grow it as an annual or keep it in a pot that comes inside, which is how most of the country grows it. **The number was right. The name of the box it sat in answered a different question.** Six crops had this: rosemary, marjoram, snapdragon, lemongrass, chayote and scallion. Each now says in plain words what the zone actually means for it. **Twenty-one crops matched the same pattern and only six were wrong.** The other fifteen are annuals sitting at zone 2 — a floor that excludes nobody. We read the list rather than trusting the pattern, which is the only reason fifteen fine crops did not get a warning they did not need. **Three more numbers picked up the condition they were measured under.** Goji's soil pH of 6.8–8.1 is the band it *prefers*, and Florida's own page says the plant grows across a much wider range — so acidic soil is not a reason to skip it. Bitter melon's 50 days to harvest was measured in north Florida, and days to maturity move with heat. Malabar spinach's 70 days assumes a good summer. **None of these were wrong numbers.** Every one is exactly what the source says. What was missing is the half-sentence the source put next to it.