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. The whole plant catalog now downloads with the app

    Install GardenTrack and everything comes with it — every crop, every variety list, every picture. Walk to the bottom of the garden, lose your signal, look up a plant you have never opened before, and it is there.

    **Before this, the pictures and the variety lists were fetched the first time you opened each one.** Fine on the sofa, useless in a field, and you would not find out which until you were standing in one.

    **It became affordable because we were sending four times the picture anybody sees.** The crop icons are drawn about the size of a large postage stamp and were being shipped at four times that on every edge. Resized to what actually gets displayed, the whole set went from about five megabytes to one and a half — so nothing had to be left out to make room. The complete download is now around five megabytes, once, and then the app stops asking the network for anything it already has.

  2. Your variety moved the harvest window. The "something is wrong" warning stayed put.

    Telling the app which kind you planted changes real dates: a Sungold tomato is ready in about 57 days and a Cherokee Purple nearer 80, so the app re-centers the whole picking window on your variety rather than the crop average. Every plant stage also carries a quieter number behind it — the day after which, if you still have not seen anything, the app starts asking whether something has gone wrong. When the window moved, that number did not. A Murasaki sweet potato had its harvest window pushed out to 120 to 150 days and its check left at day 130, so on day 130, with three weeks of digging still ahead, the app announced the crop was overdue. The check now travels with the window and keeps the same distance from it. Fourteen varieties were affected — twelve sweet potatoes and two buckwheats — out of 1,369 whose dates shift at all. Worth saying how we got the number, because the first two attempts got nothing: the list of varieties and the list of crops are stored separately and the file we were checking has no link between them, so the search kept coming back empty. That was a fact about where we were looking, not about the app. The link is in the per-crop files, and once we joined on those the fourteen fell straight out.

  3. When the beta is full we now say there is no waiting list, because there is not one

    If the beta filled up while you were signing in, the screen told you **your place in line was safe and we would email you.**

    **There was no line.** Your address was never stored — the app turns the sign-in down before it writes anything — and we have nowhere to keep a list of people waiting. So nobody was ever going to write to you.

    **It now says what is true:** the beta is full right now, we are not holding a list, check back in a week or two.

    **We would rather tell you to come back than let you wait for an email that is not coming.** And it is the worst sentence we could have got wrong: it only ever appeared to somebody who wanted in enough to type their email, at the exact moment we had no room — and with no account, they had no way to tell us we had let them down.

  4. Garlic was told to go in in March, and four crops said nothing about sprouting at all

    Three small things, all the same shape: a fact we already held, not reaching the screen — or reaching it wrong. Garlic goes in around October, and its page said "Not yet — around 6 March". The reason is a piece of arithmetic worth explaining, because it is the sort of thing that looks right until you check: a plant's dates are stored as offsets from a reference point, and each offset says which point it counts from. Garlic's count from the FIRST frost of autumn. The screen was adding them to the LAST frost of spring instead, which turns "six weeks before your first frost" into a date in March. Eleven crops were doing it, and for some the number being read was not a planting date at all — grapefruit's came from its ripening stage and oregano's from its dormant period. Those eleven now say we have no planting window on file rather than printing a confident wrong month, which is the honest answer until the autumn dates are sourced properly. Second: amaranth, asparagus, crimson clover and cucamelon told you nothing at all after sowing. Most crops have a range for how long they take to come up — six to twelve days — but those four have sources that publish a single figure, "within ten days", and the app was built to read a range and quietly ignored anything else. They now say "usually up by day 10". Third: the tree-size question on cherry, pear and persimmon had an option called "seedling", which in the nursery trade means a grafted tree — the opposite of what someone who grew one from a pip would assume. Those now read "standard".

  5. Waiting to back up and failing to back up no longer look the same

    Profile has always shown how many changes are still to reach your account. What it could not show is the difference between **waiting** and **failing**, and for a while today that mattered a great deal.

    **A fault on our side meant every logged event was being refused.** The app kept sending them, our server kept refusing them, and it answered in a way that looked like success — so the screen said *waiting to back up* and went on saying it. That is the same sentence a perfectly healthy phone shows for the half-second before a sync finishes.

    **The fault is fixed.** But a screen that cannot tell those two apart will hide the next one just as well, so that is fixed too: when something has been refused several times over, Profile now says so, says it is our end rather than yours, and says the app is still trying. Nothing is lost from your phone while it does.

    **If you ever see that message stay put, tell us with the pencil button.** It means something is wrong on our side and we would rather hear it from you than not hear it at all.

  6. When the answer is no, it now says what is still true instead of inventing a consolation

    Asked whether a late-sown tomato would ripen, the chat gave the honest answer and then undid it in the same paragraph: "you will not finish the season where you are, but you have time to grow some tomatoes and pick what colors up before the freeze." Its own sentence one line earlier said the first ripe fruit arrives two weeks AFTER the first frost. By its own arithmetic there is nothing to pick before the freeze — the plant is dead two weeks before the first fruit is ready. That is not a gentle framing of a hard fact; it is a claim the previous sentence disproves. What caused it is worth knowing, because it is a general risk with any assistant rather than one crop's wording: a flat no with nothing after it is an empty space, and something will fill it. So the fix was not to forbid softening — it was to put something true in the space. When a plant cannot finish, the app now supplies the consolation itself, in the same words the This week screen already shows you: they will keep growing and the app will keep tracking them, but the season runs out before they finish, unless you can give them some protection. And nothing after that about a partial crop, because there is not one to offer.

  7. The plant page is readable in light mode

    If your phone is set to a light theme, eight things on a crop's page were nearly invisible — pale sand text on a pale cream background.

    **The worst of it was the part that matters most.** The line that says *"based on an average last frost"* is where we admit the date we are giving you is a typical year, not your year. That sentence is the honest half of the whole answer, and you could not read it. Nor the plant's Latin name, nor the link back out to look at something else.

    **One page, two opposite mistakes.** Colors meant for the dark theme were being used on the light page, and in one place the reverse — dark text on a panel that stays dark in both themes. Neither was picking the wrong color so much as never asking which background it was sitting on. Every one of them now does, and we checked the dark theme is exactly as it was.

  8. You told the chat you planted them, and it wrote down the mulch

    One message, three things in it, one of them recorded. Somebody planted four bean seeds in a bucket, mulched them, and said so in the chat. Back came a card offering to write down the mulching. The planting itself went nowhere and neither did the four — and nothing on screen said so, which is the worst part. You would have walked away believing it was written down. The chat had understood every word: we checked, and it reported the planting, the number and the day, every single time. The problem was on our side. A note only ever attached itself to a plant by matching the NAME of the crop, and he had said "those seeds in that bucket" — no crop anywhere in the sentence. So the note landed loose in the garden, attached to nothing, and a count of four had nothing to be a count of. Now the place you name is enough. If there is one plant in that bucket, the note, the date and the number all go on it, and the card tells you which plant before you save. If there are two, it will not choose — the note is still kept, and the number waits for you, because putting your four on the wrong plant is a mistake you would never think to go looking for. The same change also lets you finish a job by talking. Tell the chat you pruned the apple while the app is asking you to prune the apple, and the card now offers to tick it off your list as well as write it down. That was never possible before: some jobs — a winter prune, planting garlic sets — could only be ticked by hand on the Today screen, however plainly you had said you had done them.

  9. Your reports come back when you sign in, and a beta account stops being told it has run out

    Two things a first day of testing found, both about being told something untrue about your own account.

    **Sign out and your reports came back empty.** Signing out wipes the garden off that phone on purpose — if the phone changes hands, the next person must not be able to read what you wrote about your own garden. Signing back in then restored the plants, the beds, the journal, the reminders and the conversations, and not the reports. Neither half was broken on its own: the wipe did exactly what it was written to do, and the restore had never been told to include them. Nobody owned the gap between the two. Your notes now come down with everything else, in your own words, with the date and any answer underneath.

    **And Profile told beta accounts they had none left.** Beta and paid accounts have no ceiling at all, so there is no number to report — but the line was reading a figure left over on the phone from the last time the server sent one, and printing it as though it were current. A tester opening Talk was told they had nothing left before asking anything. An account with no limit now says nothing about limits, which is the only honest thing it can say. Free accounts still see what they have, because that number is real and finding out at the end is worse.

    **While fixing it we found the help pages had the wrong figures.** The free grant was set at thirty photo answers and a hundred and twenty questions and cut hours later to ten and twenty. The app took the new numbers; two help pages kept the old ones, and so did the answers our assistant reads from. Anyone reading up before signing up was told six times more than they get. Corrected everywhere, and the checks that are supposed to catch this were themselves testing for the old numbers — which is why three days passed.

  10. Your tomato was still cropping and the app had stopped talking about it

    Sow a tomato in May and you will still be picking it in September. Around the middle of August the app went quiet on it — "nothing scheduled right now" — for 54 days, because a plant stage has a typical end date and nothing took over when it passed. Cucumbers went quiet for 88 days, summer squash and leaf lettuce 83, pole beans 48. Those plants were not finished; they were the ones you were eating from. There is now a standing state for exactly this: the window has closed, the plant is still producing, keep picking on the same rhythm the crop already carries — every two to four days for a tomato. It runs until the first frost in YOUR garden, which is the honest end for a tender plant, rather than to a date we would have had to invent. 25 crops get it. What decides whether a plant qualifies is already in our data and not a guess: some crops are picked over and over, and some are pulled once and done. A tomato keeps cropping. A radish does not, and telling you to keep picking a radish for three months would have been a worse answer than saying nothing. Which leaves one honest gap we have not closed: a radish that finished six weeks ago still gets silence, when what it deserves is "this one is done — pull it, or sow another". That is a different job and we are not pretending it is fixed.

  11. Watering your apple tree in October could stop the app asking again all the next year

    This one was bad and it was completely silent. The app remembered which jobs you had done, but it only remembered the day of the year — not which year. So a watering you logged on the twenty-seventh of October was read the following spring as something you had done on day two hundred and ninety of THIS year, which is still months away. The job simply never came back. Not an error, not a warning, not an empty space where something should be — the watering quietly stopped appearing on your list and stayed gone. It hit trees and bushes hardest, because those stay in your garden for years and keep collecting history, and it got worse each season: every autumn job you logged pushed the date further out. Anything you recorded after about the middle of July could cost you the whole of the following year. The app now remembers how long ago you did something rather than what date it was, which is the question it was actually asking all along. If your fruit trees have gone quiet on you, this was why, and they will start asking again.

  12. A lemon grown from a pip waits about seven years, and now we can say so

    Almost every citrus tree sold is grafted — a cutting of the variety you want, joined to a different tree's roots — and it fruits in two to four years. A tree grown from a pip out of a supermarket lemon is a different plant on this one question, by about the length of a childhood. Mississippi State puts seed to fruit at seven to eight years; UC says up to ten. We already held that for oranges, because somebody grew one from a seed and the app kept telling a three-year-old seedling it was overdue. It only ever worked for oranges. Lemons, limes, grapefruit and mandarins now carry the same figure, from the same two sources, which both turn out to be about citrus as a whole rather than one fruit — we checked that before copying it across, because a sentence about one plant stretched over a dozen is how bad data happens. Nine fruit records now also say plainly which kind of tree their bearing age is about, which none of them did yesterday. Pomegranate is the odd one out and it goes the other way: the ordinary nursery pomegranate is grown from a cutting on its own roots, so its two-to-three years already describes the plant most people have. What we still cannot tell you is how long an apple, pear or peach from a pip takes. We read five extension pages looking, including one whose whole subject is growing fruit from seed, and none of them says — because nobody in extension recommends it, so nobody has measured it. We would rather leave that blank than fill it with a number we made up.

  13. Two people, one tablet, and the second one saw the first one’s garden

    Your garden lives on your device as well as in your account — that is what lets the app work in a bed with no signal. To stay in step it keeps a marker meaning "I already have everything up to here". Signing out cleared the login and nothing else: the plants, the journal, the photos and that marker all stayed. So the next person to sign in on the same device inherited a marker that belonged to somebody else, the app concluded there was nothing new to fetch, and they were shown a stranger’s garden while every screen reported a healthy backup. No error and no warning, which is the part that makes it serious — nobody would have found it by looking. Two fixes went in. The device now declares whose garden it is holding on every sync and the server checks, because the server is the only side that actually knows who is signed in; when they disagree the local copy is cleared and the right account is downloaded in full. And signing out now clears the garden off that device, so a tablet you hand to somebody else does not keep yours on it. Nothing is lost either way — it removes the copy on the device, not the one in your account, and signing back in brings it all down again. One more thing came out of the same pass: anything you had written but not yet backed up was being sent up under the NEXT person’s account. Those are refused now. And a beta tester’s profile page had been telling them they were on the free plan, because the screen only knew about two plans and there are three.

  14. Plant strawberries in spring, pick them in June — and the app said the plant was too young

    Every fruiting plant in the app carries a figure for how many seasons it waits before there is anything to pick. For an apple that is two to eight years, and holding the harvest job back is exactly right: a tree planted yesterday is not ripening fruit. The trouble was that the figure had been written down two different ways. Ours counts the season you plant in as season zero, so something you put in this spring and pick this summer is a zero — and fourteen records had been filed the other way round, each of them telling the app to wait a year that does not exist. Strawberries were the worst of it, because an everbearing type fruits the same summer you plant it and the app quietly withheld the pick. Artichoke, raspberry, chayote, sage, lovage and horseradish were doing the same. All fourteen are corrected against the sentence in their own source that decided them, and there is now a check that reads each record's note against its number, so the two readings cannot drift apart again. Asparagus still refuses to be picked in its first two seasons, and that one is not a bug: its figure is not about when it can bear, it is the rule that you must not cut the first spears at all, because those spears are what builds the crown. One more thing came out of it — a plant that crops the year you plant it has no year by which it should have started, so it can no longer be told it is overdue. A chives clump has been getting that message for its whole life.

  15. Sow peppers or broccoli and the countdown said nothing at all

    Sow a seed and the plant page tells you roughly how many more days until you should see something. It needs two numbers to do that, a first day and a last day. Nine crops carried only one number, and rather than build a countdown on half a fact the app showed nothing — which looks exactly like the crops where we have no figure at all and silence is the right answer. Peppers and broccoli were two of the nine, and between them they are most of what people start indoors. Five are fixed, and every edge is a sentence somebody published rather than a number we picked. Broccoli is 4 to 20 days, cauliflower 5 to 14, cilantro 7 to 21, summer squash 3 to 12. Peppers are 7 to 28, and that wide end matters more than the rest of this: the old figure was a flat 10 days, which quietly told anyone whose peppers had not shown by day 11 that they were late. They are not. Michigan State says a pepper can take another seventeen days after that, and peppers are the seed people most often give up on and re-sow. Two of the five were already right elsewhere in their own record: broccoli has held Michigan State’s "4 to 20 days" for weeks in the part of its file that draws the plant page’s dates, while the part the countdown reads held a flat 14. Cilantro was a different kind of wrong — its file said in writing that no other source gave a figure, and one did, on a page already cited two fields further up. The remaining four still show nothing, and that is the honest answer today: for amaranth, asparagus, crimson clover and cucamelon every source we could open gives a single number, and inventing the other end of a range to fill the gap is the one thing we will not do.

  16. A pepper takes 70 days, or 120, and the page only told you one of them

    Seed catalogs count days to maturity from one of two moments: the day you sow, or the day you set a transplant out. Those are about five weeks apart, and for a pepper they are 100 to 120 days and 70 to 85 — the same plant, two honest numbers, and the difference between them is the whole of a raising period. We hold both figures for 56 crops. Until today only one of them left the building: the transplant number won every time, unlabelled, so anyone sowing straight into the ground read a number that was never about them and every "ready around" date built on it was a month optimistic. For 28 of the 56 the figure being discarded was a sourced one — looked up, cited, and thrown away in the last step. Crop pages now print both, each saying what it counts from. Where we only have one it says so too, which is also new: tomatoes have always been a from-transplant number and the page has never mentioned it. We are not choosing for you, because the right answer depends on how you started the plant and a public page cannot know that. Inside the app it can — a planting already records whether it was sown or set out — and wiring the countdown to pick the matching figure is the next step. One small thing fell out of it: the fact strip at the top of every plant page has always had room for a note under each number, and nothing had ever rendered it. The zones cell has been carrying the word "USDA" since the day it was written and no reader has ever seen it. It shows now.

  17. It is mid-August, the perfect week to sow kale, and we told you the window shut in April

    Kale, spinach and carrots get sown twice: once in spring, and again in late summer for a crop you pick through autumn and into the cold. Our pages only knew about the spring one. So somebody opening the kale page this week — exactly the right week to be sowing it — read "too late this year, the window closed around 10 April". True of the spring sowing. Wrong about the plant. The cause was not three missing numbers, it was that we had nowhere to put them: every planting date we store is measured from the last spring frost, and an autumn sowing is measured from the first frost of the coming winter. There was no field in the whole database that could hold one. There is now, and the first three crops are in it — carrots 70 to 84 days before your first frost, kale about 90, spinach 36 to 68. We store it as days before the frost rather than as a date on purpose, because "ten weeks before your first frost" is true in Maine and in Georgia and a date is only true in one of them. Two things we are not doing. We are not converting "sow in August" into a number of days — some extensions publish months rather than frost offsets, and Clemson gives spinach two different August windows for two parts of one state, six weeks apart. Turning that into a single figure would be us guessing on your behalf, so those crops wait for a way to say it properly rather than get a number we made up. And filling this in across the rest of the catalog is ongoing — about fifty crops are cool-season enough to have a second sowing, and each one needs a real source before it gets a number.

  18. One word in the tree menu meant the exact opposite of how it reads

    Almost every fruit tree you buy is two plants joined together: the variety you wanted, on somebody else's roots. Which roots decides how big the tree gets, so the app asks you. Pear, cherry and persimmon offered a choice called "seedling" — and in the orchard trade that means a full-size root that was itself grown from a seed, with a grafted variety on top. To anyone else it reads as "mine came from a seed", which is the opposite kind of tree. Persimmon was the worst of it: it offered that one option and nothing else, so it was the only thing a person with a seed-grown persimmon could have picked, and picking it would have handed them a grafted tree's answers with more confidence than before they told us anything. Eight other crops already called the same size "standard" — apple's own source writes it out as "standard (seedling rootstock)" — so the catalog was using two words for one thing, eight to three, and the odd one out was the one people misread. All three now say standard. The actual root names, Old Home x Farmingdale for pears, Mazzard for cherries, common American persimmon, are still recorded and still cited; they were never the thing the menu was asking about. The same word had already caught us going the other way earlier today, while we were looking for how long a tree grown from a real seed takes to fruit: search after search returned "trees on seedling rootstocks take 7 to 8 years", which is a grafted tree, and we nearly wrote it down as the answer for a tree grown from a pip.

  19. The app was telling you a frost date that belonged to nobody

    If you have never told us where you garden, the app still needed a first-frost date to work anything out — so it used the twenty-first of October, which is roughly the middle of the country. That part is reasonable. What was not reasonable is that it then said so with total confidence, as though it were your date: how many days you had left, whether a crop would ripen in time, what to plant now. In Denver that date is over a week wrong. In Miami it is wrong by months. Every screen that used it now knows whether it is your date or an average, because that fact travels with the dates themselves instead of each screen working it out again — which is exactly how five of them came to forget. Where it is an average, it says so. The fix for the whole thing is still the same and takes a moment: tell the app where you garden and every date on every screen becomes yours. Two more screens turned up in a second sweep and are fixed the same way: the crop page you tap out to before adding something, which was quoting a spring frost date of 17 April as yours, and the season plan, which said a sowing was too late "where you are" without knowing where you are.

  20. You can put a picture on a problem report

    Some things are much easier to show than to describe, so a report can now carry a picture. It shows up alongside what you wrote, in your Profile, so you can see exactly what we can see. One thing we decided not to do: the app does not take a screenshot for you. A browser can only do that by asking permission to record your whole screen, every single time, and the ways around that draw our own app wrong — so you would be sending us a picture of something that is not quite what you were looking at, which is worse than no picture. Instead you take the screenshot the way you already do on your phone, and attach it, which is one tap. Attaching a picture to a report costs you nothing from your photo answers. Those are for asking about a plant, and telling us something is broken should never compete with that.

  21. A tree you grew from a seed is years away, and the app now knows it

    Most fruit trees you buy are two plants: a variety grafted onto somebody else's roots. That is what makes them fruit in two or three years. A tree grown from a seed is on its own roots and takes far longer — seven to ten years for a citrus, according to Mississippi State and UC ANR. We held both numbers and only ever used the first, so a three-year-old orange grown from a pip was being told it was overdue to fruit. On the plant's page you can now say the tree came from a seed or a cutting, and the dates change to match. Everything else about it stays the same. We also fixed a word that was set to catch people out. Cherries, pears and persimmons offered a choice called "seedling", which in the nursery trade means the tree is grafted onto a root that was grown from seed — so the tree itself is definitely grafted. Anyone who had grown a pear from a pip would have read that word, recognized their own situation, and picked the one option that meant the opposite. It now reads "standard (seedling rootstock)".

  22. The beta opens with an invite code

    GardenTrack is open to a small group of gardeners first, so there is now an invite code on the sign-in screen. You type it once, the first time — that first sign-in is what creates your account — and after that you never need it again. If you already have an account, nothing changes for you at all: the box is not checked for people who have been here before, and it never will be. That was the part we were most careful about, because a gate that can lock out the people already using something is worse than no gate. The screen now also tells you which thing went wrong rather than blaming the six-digit code for everything — an invite that does not match, a beta that is full for the moment, and a code that has expired are three different problems with three different answers, and only one of them is solved by asking for a new code. There is a limit on how many people join at the start. That is deliberate: a beta where everybody gets in is just a launch, and we want the first group small enough that when you tell us something is wrong, a person reads it and answers you.

  23. We told you your carrots had failed three weeks before they were late

    The app has a quiet checkpoint on every seed you sow: a day by which you should have seen something come up. Carrot was set to day 28. In cold spring soil a carrot takes about 50 days to emerge — so on the twenty-eighth day the app was telling people a perfectly healthy sowing had failed, three weeks before there was anything to worry about. The cause was not carelessness. Those days came from extension pages that quote emergence at the ideal soil temperature, plus a few days for the seed varying. What that misses is that cold soil does not add a few days, it multiplies them: a carrot that takes 7 days at 68°F takes 50 at 41°F. The buffer was built for the wrong kind of error. So we went back to the table the whole field still uses — J.F. Harrington measured this at UC Davis in 1954, and it holds up — and re-cut every checkpoint we could against the coldest soil each crop is actually sown into, using that same document's own minimum-temperature table to decide what counts as cold for each one. Fifteen checkpoints moved. Tomato went from 18 days to 43, carrot from 28 to 51, beets from 21 to 42. Onion had been firing on day 30 against a median of 30.6 — wrong for half of all sowings by construction, which is the kind of error you cannot see from inside. Seven crops we deliberately left alone: Harrington never tested their cold end, and moving them on a warm-soil number would have repeated the mistake in the other direction. The first pass through this found thirteen and stopped, because it matched crops by name and the beans and lettuces are filed under names the table does not use — so we wrote something that re-derives every checkpoint from the table instead of trusting the list, and it immediately turned up three more. Lima bean was the worst in the whole set: it was calling a sowing failed on day 18 against a cold-soil figure of 31, on the one crop that most needs patience in cold ground. One crop we got wrong on the way and put back. Parsnip is so slow that we already allow it up to sixty days to come up — and its cold-soil figure is fifty-seven, which lands inside that. Moving it there would have had the app calling a parsnip sowing failed three days before the time we ourselves say it can take. It is back at sixty-three, and the check now refuses any checkpoint that lands inside a crop's own normal window, whatever the cold-soil number says. A checkpoint that fires late costs you nothing, because you already know nothing has come up. One that fires early tells you to dig up seed that was going to be fine.

  24. Two things we went looking for and found before anyone was using this

    Before opening the beta we had the account system pulled apart specifically to find what was wrong with it, and it found two things worth telling you about. The first: if you asked a question about a plant, the app checked that the plant existed but did not check that it was yours. In principle somebody could have asked about a plant belonging to somebody else and been read its journal. It now checks who owns the plant before it reads a single entry. The second was about our own costs rather than your privacy — the counter that tracks how many questions have been asked could be stopped from counting, which would have let one account run up a bill without limit. Both are fixed, and both are now guarded by tests that fail if anyone undoes them. Nobody was affected: at the time we found these, the only accounts that existed were ours. We are telling you anyway, because the alternative is you finding out we knew and said nothing, and because a garden journal is a personal thing — it has your notes, your dates and your photographs in it. Five more findings from the same review are queued and none of them can be reached without already knowing the exact private address of somebody else's plant.

  25. The problems you report now come back to you

    Until today, telling us something was wrong inside the app felt like posting a letter into a wall. You typed the problem, it went, and there was nothing anywhere to say it had arrived. Your Profile now lists everything you have told us, newest first — what you wrote, when, what it was about, and whether it has reached us yet. A report written in the garden with no signal sits on your phone saying "waiting to send" and goes up on its own the moment you are back in range, so a bad connection can never lose it. What it deliberately does not do is show you a made-up progress bar. We could have put "status: new" next to every one, but nothing yet moves that status where you could see it, and a label that never changes reads like being ignored. So it tells you the two things it actually knows: whether we have it, and that a person reads these. Writing back inside the app is next; until then anything needing an answer comes to you by email.

  26. If you shared your location, we were throwing half of it away

    When you set the app up you can either type where you garden or let your phone tell us. Either way we worked out your frost dates and kept the coordinates — and then quietly discarded the rest. If you let your phone share your location, your ZIP code was left blank, because the app only ever knew how to go the other way: type a ZIP, get a location. It could not turn a location back into a ZIP. That is fixed, using the same list of ZIP codes the app already carries, so nothing new is sent anywhere. Your timezone was worse. The app has always known it — your browser tells us, and we were already attaching it to every problem report — and we stored it nowhere. It is saved now, and refreshed each time you sign in, because people move and a gardening app that thinks you are in the wrong place is wrong about your whole season. We still do not keep your street address. The coordinates and a ZIP answer everything the app actually asks, and the address is the one piece of this worth not having.

  27. The floating button can no longer fall off the bottom of the screen

    The round button in the bottom corner sits above whatever else is down there, and on the Talk screen it works out where by measuring the typing bar. When that measurement came back wrong the button did not merely sit oddly — it sat twenty-two pixels below the bottom edge of a phone screen, clipped, resting on the corner of the Profile tab underneath it. Tapping that corner opened the button instead of Profile. Profile still opened from its left side, so nothing was unreachable, but it is exactly the kind of fault you feel as the app being slightly broken without being able to name it. It now has a floor it cannot go below — the same distance from the bottom it uses on every other screen, the one that clears the tab bar. Whatever the measurement says, a button meant to be raised can never end up lower than an ordinary one. We have not reproduced what made the measurement wrong in the first place, and the fix is deliberately a limit rather than a guess at the cause: it holds either way.

  28. A safety ceiling behind every plan, including the paid one

    The free plan has always had its limits counted and enforced on our side, not in the app — so they are real rather than a suggestion, and a signed-out visitor cannot reach the AI at all. What did not exist was a bound on the other end. A paid account skipped the counting entirely and simply had no limit, with nothing behind it. Nobody is on a paid plan yet, which is exactly why this is the right moment: the day billing arrives, the ceiling either already exists or it does not. Every account now has a monthly ceiling on what its AI answers can cost, worked out from the real token cost of every call rather than from a count of them — because a photo answer costs roughly twenty times a typed question, and counting both as "one" was never going to be right. To put the size of it plainly: a whole free month of asking costs us about seven cents, a busy first month with the camera about forty, and the ceiling sits about fifty times above that. It is a guard against a bug or a stolen sign-in, not a limit on gardening. And if anyone does meet it, they get a sentence saying so rather than being told they have used up a free allowance they were not on.

  29. A deletion the other device never heard about

    Clear a garden on your phone and open your laptop a day later, and the laptop could still be showing you everything you removed — looking, from where you were sitting, as though the app had simply forgotten. It had not. The phone was right the whole time and nothing was ever lost. What went wrong is narrower and stranger: when a record is removed we do not erase it, we mark it as gone and give it a fresh position in the running order, and every other device reads forward from where it last stopped. Eighty-four records were marked gone without being moved to the front of that order, so they sat behind every cursor that would have found them. The second device was never told, and could not have known there was anything to ask for. The records have been put back in the right place and the laptops that were behind have caught up. The more useful half is the test that now runs on every build: it deletes a row on one device from a position the second device has already read past, and fails if the second device does not hear about it — which is exactly the shape of what happened, and exactly what no amount of looking at the phone would have shown. Two smaller things went out alongside it. The chat box no longer slides behind the row of buttons at the bottom of the screen when you scroll up through a long conversation. And the code at the foot of Profile used to be the version of our plant information wearing a label that made it look like the app version; it now says both, each named.

  30. A device that only listens was never listening

    If you used GardenTrack on two devices, one of them was probably wrong. Not a little behind — wrong, and staying wrong. A garden cleared on a phone would still be sitting there on a laptop a day later, and opening the app, closing it, or coming back to the tab would not have fixed it. Here is the whole of it: the app talks to your account in one call that carries changes both ways at once. Before making that call it checked whether it had anything of its own to send, and if it did not, it skipped the call. Which also skipped hearing anything back. A device you only read from — the laptop you check in the morning, the tablet in the kitchen — has nothing to send almost by definition, so it stopped receiving the moment it finished its first sync, and would have stayed that way until you happened to edit something on it. The condition was named for the outbox: nothing to do. That was true of the outbox and false of the situation, and the distinction is the entire bug. The call now happens whether or not there is anything to say. The uncomfortable part is how it survived. A two-device test exists and its own notes describe this exact behavior — that a pull-only check would never reach the network and would, in the author’s words, pass by not running. Rather than being read as a fault, it was worked around: the test resets each device to look like one that had never synced, which is the single state where receiving worked. So the suite exercised the one path that was fine. It also turns out that test does not currently run at all. Both of those are being fixed, and the fix that matters is not the one-line one.