- Mira went live to the public. For the past week the system had been running in testing mode, which meant every message meant for a talent was quietly redirected to one of six of our own accounts, and the client app wore a blue TEST marker. That window is now closed. Real clients talk to Mira, real talent get real messages in their real Fiverr inbox, and the marker is gone. Nothing was deleted to do it: the test roster and all three of its safety layers stay exactly where they are and simply go quiet, so the same switch turns the rehearsal back on. On the way out the door the production database was given two things it did not have. Its delete protection was only a setting in our own deployment tool, which stops us and stops nobody using the cloud console directly, so the database itself now refuses to be deleted by anyone. And because the automatic backups live inside the instance and would die with it, there is now a daily full copy written out to a separate, separately protected bucket.
- Launch day's real incident: an opening message that promised a document it never sent. Between 10:45 and 14:33, 26 attempts to render a client's job description as a PDF failed, about one in ten. The attachment was treated as nice-to-have, so the message went out regardless, carrying the sentence "I've attached a brief with the full details" and nothing attached. Eleven projects were affected, and we know two of the talent by name who opened a message pointing at a document that was not there. The cause was self-inflicted: we rendered the same identical document once per talent, so a single send to seven people asked our browser service for seven separate copies at once, and it refused the crowd. Four things changed. It renders once per batch, so seven becomes one. A failure is retried rather than shrugged off, including a retry for "too busy" that this path had never switched on, and the warm browser pool doubled. Most importantly the message is now withheld rather than sent lying: if the document genuinely cannot be produced, the outreach waits and tries again instead of going out incomplete. And every single attachment decision is now counted, with an alarm on the two bad outcomes, because the only reason anyone found this was by reading logs by hand. There is a written incident report in the repository.
- A new Funnel board: where every project actually stops. Six rounds through the day built a single picture of the whole journey, from a project being created through the first real conversation, the brief, the search, offers arriving and someone finally being picked, drawn as a river whose width is the number of projects and whose side channels are everyone who fell out at that step. Hover any bar, any ribbon or any drop and it tells you the numbers behind it; click and it opens the actual list of projects sitting at that step. The refinements are where it got useful. Signed-in clients and guests are drawn as two shaded lanes, so a shrinking guest band reads as people signing in rather than people vanishing. Someone who searched and then hired directly, without ever going through our concierge, used to look like a drop-out and now correctly rides a separate channel into the picked bar. Underneath the first chart there is a second one drawn in dollars rather than projects, the same shape weighted by committed budget, so you can see not just how many projects stall at the brief but how much money does. It only ever shows totals and averages, never a name or an address, which is what lets everyone who can already open the Explorer see it.
- The launch-day wall board learned to answer "who?". Yesterday's TV dashboard was all totals, which meant the second a number got interesting the page was a dead end: 61 sign-ups today, and no way to see who they were. Every tile and chart total that has real rows behind it is now a button, opening the list it counted, with the same time-window switcher the tile has, and every row linking straight into the Explorer. Twelve of them, from sign-ups and messages through searches, offers, picks, unhappy clients and paused projects. The modal's total is computed with the exact same rule as the tile above it, side by side in the same file so they cannot drift apart, and a long list says "latest 200 of 4,318" instead of pretending to be everything. Around it: a new gauge showing how many of the clients who searched today went on to pick someone (the old one mixed its units and could read a single client picking three people as three conversions), a live panel showing every client active in the last half hour as an anonymous tag placed at the furthest step they reached, and the Offers tile now says "sent by sellers" so nobody reads it as purchases. Two same-day corrections followed from real traffic: 97 active clients rendered 97 chips and pushed the charts off the bottom of a screen nobody can scroll, and the sign-ups list was counting a wider set of people than the sign-ups number it hung from. There is also now a permission for the wall board on its own, so an operator can be given the TV and nothing else.
- A talent who wanders into the client side is now told so, kindly and at once. The check that already reads every client message for frustration and for anyone asking for a human now answers a fifth question: is this person here to buy, or here to sell? Someone who walks in on the wrong side of the marketplace breaks every assumption downstream at once, nothing they write is a job to be briefed and no search will ever help them, and until today Mira cheerfully collected their budget and their timeline. Now she is handed an urgent private note before she starts writing, not a beat afterwards as these notes normally arrive, so she can name the mix-up in her own words in the very same reply and point them at the talent side. Internally a flag is raised so we can watch how often it happens, and the project carries a durable "Talent, not a client" tag in the admin console. The bar for calling it is deliberately high, because the expensive mistake is telling a genuine buyer they are on the wrong side: describing what your own business sells, hiring for your own agency, and doing some of the work yourself all still read as a client.
- Editing the brief by hand now wakes the team, not just the voice. When a client corrected their own job description directly, Mira said "got it, budget's now $8,000" and absolutely nothing else moved. The planner never re-read the plan, so the work carried on against the old picture. A hand edit now runs a genuine turn, exactly as if the client had said the change out loud, which means it inherits everything a normal turn already does rather than reimplementing it. The client still only sees Mira's reply; the raw before-and-after goes in as a hidden note the team can read. That first landing went slightly too far and was corrected within the hour: running a full turn also handed the edit to the two agents whose job is to rewrite the brief and the About You page, which is precisely the text the client had just written by hand, so the turn talked over the edit that triggered it. Those two now sit this one out. So a hand edit is Mira plus the planner: she acknowledges it in a beat, he re-reads the plan and may go and check something, and the words the client typed stay exactly as they left them.
- The scout now judges fit on the piece of work someone actually sells. Four passes through the day, all from the same finding on a real project: a proven, reviewed, order-backed offering that does exactly the job was being marked down to a loose fit because the seller's overall headline described something broader. Fit is now graded on a seller's single closest offering, its discipline, its scope, its price and its delivery time, and their general description is demoted to an honest label on the card rather than a gate. The other side of the same coin: someone whose closest offering only delivers a piece of the job, a fifty-dollar script for one system when the brief is a whole custom build, is not a weak fit, it is not a fit at all, and now drops out entirely instead of appearing near the bottom. Quality became a separate axis rather than a cap on fit, and the exact quality score the ranking already sorts by is now shown to the scout while it is choosing, so it stops guessing at the order it is about to be put in. And the hunt now opens at the tightest quality floor the job warrants even when the client never mentioned quality, loosening one notch at a time only after a strict pass proves the pool genuinely thin, and saying so when it does. That keeps the bargain-basement and brand-new sellers who flooded one real project's pool out of the search altogether, instead of relying on ranking to bury them.
- Research survives one source dying. Our search-data provider is one of four sources the research agent uses, and it is the only one that needs an account of ours. If that account expired or was rejected, the whole chain died on the spot: no research report, no About You, no harvested imagery from the client's own site, no re-skin of the app in their colours and no reference panel, all lost over one expired key, and the client was told nothing (correctly, since it would be wrong to blame their website for our billing). The run now degrades instead of dying. That one source comes off the menu, the agent is told to skip the steps that needed it, and it finishes on the other three, so everything downstream still runs on a thinner but real file. A rejected account also stops the next call at the door rather than spending four more round trips on a key that cannot fix itself mid-run. Because nothing fails loudly any more, the degrade is counted, which is now the only signal that would tell us a dead key is quietly thinning every client's file. Separately, two clients arriving within seconds on the same website used to each kick off a full duplicate research run, because each of our worker machines only checked its own memory for one already in flight; one real client URL triggered four runs in ninety seconds, four times the cost, and it saturated the browser pool that then failed to read their own site. They now check a shared lock, and a loser simply joins the run already going.
- The admin console stops guessing about a project. Four things it had wrong. The only column that looked like a status was written "draft" the moment a project was created and never moved, so every row on every page read the same word forever; both the table and the project page now badge the rung a project genuinely reached, derived from what it produced, from one shared definition so the same project cannot read differently in two consoles. The Messages count included Mira's own replies, her questions and the team's internal notes, so a client who sent two lines looked chatty; it counts the client's own messages now. Where the conversation turned on a question Mira asked as buttons, the reader had no text to print and fell back to the words "Interactive prompt", which also left the client's one-word answer three lines later reading as a non-sequitur; it now shows the question, the choices offered and what was chosen. And the Sellers tab read only from talent we had contacted, which happens only on a concierge run, so for a client who ran the search themselves it came up empty and read as "nothing happened here" when in fact a full shortlist had been found and shown; it now also lists what the scout found on each search, with its reasoning and which picks were shown versus held in reserve.
- More of the console the team asked for. A new Offers tab collects every offer that came back across every project, newest first, each row linking both to the talent and to the conversation the offer answers, with the price, the quoted delivery, our fit score, and a badge on the one currently recommended. Building it turned up that the neighbouring Searches tab's own "Load more" had never worked at all: the second page always failed, invisibly, because the first page is the only one that does not need it. The Searches table also gained sorting on all seven columns and a filter, and its Willingness figure was quietly wrong: it divided offers by everyone approached, which folds silence in with refusal, so a talent who never opened the message scored the same as one who read it and declined. It now divides by the talent who actually wrote back, which moves the number from 5% to 35% and answers a real question, with reachability left to the Response rate column beside it. Talent management also gained editable VIP, excluded and opt-out lists in the console, retiring a spreadsheet-and-SQL routine, with edits live on the very next search. The project tables show budget and timeline. And there is a dev-only export and import of a project's entire agent trace, so a real production case can be lifted onto a developer's machine and replayed against a change.
- Deleting an account now leaves a mark, and still erases everything. Our reporting could not answer "how many people deleted their account?" at all, because deletion removed the row and everything hanging off it across 35 tables, and a row that is gone is indistinguishable from one that never existed. Deletion is now an archive: the row survives carrying its identifiers, its dates and its plain categories, so it can be counted and dated, while every column that is actually personal is overwritten. The email is replaced with a made-up address derived from the record's own id, which keeps the database rule that it must be unique and, crucially, releases the client's real address so someone who deletes and signs straight back up lands on a clean new record instead of the one they just deleted. The erasure of everything hanging off it, thirty-odd tables of content, runs as a background job with retries, because it is far too much work to do while someone waits and it has to be guaranteed rather than best-effort. Two automatic gates now fail the build if anyone reads that table without excluding deleted accounts, or adds a new table without saying which of its columns are personal, because this is exactly the kind of rule a convention cannot hold.
- Two ways in that were sending people in circles. A guest whose browser blocks local storage was being handed a brand-new identity on literally every call, so the id in the request never matched the id in their cookie, every message was rejected, and the app minted another one and tried again forever. The identity is now pinned for the life of the tab, survives a storage failure, and adopts whatever the server says it is, so the two always agree; overlapping attempts to register also now share one attempt rather than reusing a one-time token that the backend rightly refuses twice. And switching project from the profile page landed you back on the profile page, over the project you had just switched to, because the reload happened from inside the picker while the address still said profile. The switch now goes through the page that owns it, fixes the address first, and lands on the workspace.
- Cost, and a signature. A setting that restructures how each agent's fixed instructions are sent, so the model can cache them between turns, had been switched on only in development. In production it was off, which meant the same 13,000 to 20,000 words of standing instruction were re-read from scratch on every single turn for the four agents that account for roughly seven tenths of our model spend; development, with it on, reuses them 94% of the time. It is now on everywhere. Alongside it, our price table was four days out of date after the model's own price cut, so every cost we had shown since then was about a fifth too high. And the very last message a talent gets, the one closing out a hire or a decline, was still ending in a signature after last night's sweep removed them everywhere else. The instruction now forbids it outright rather than merely not asking for it, since the persona elsewhere in the same prompt would have had him signing anyway.
Launch day. 64 commits across the crew, and the testing window closed: real clients, real talent, real messages, with the production database given a delete lock the cloud console itself will honour and a daily copy kept outside it. The day's own incident came within the hour: one in ten job descriptions failed to render into a PDF, and because the attachment was best-effort, the opening message went out anyway telling eleven projects' worth of talent that a document was attached when none was. It now renders once per send rather than once per person, retries, and withholds the message rather than sending one that lies. Around that, a new Funnel board draws every project's journey and where it stops, in projects and again in dollars, and yesterday's TV dashboard learned to open the list behind any number. Mira now spots a talent who has walked into the client chat and says so in the same breath, a hand edit to the brief wakes the planner instead of only the voice, and the scout judges fit on the piece of work someone actually sells rather than their headline, dropping the cheap component gigs entirely and opening every hunt at the tightest quality bar the job warrants. Research survives its data provider's key dying instead of taking the whole client file down with it, deleting an account leaves a countable mark while still erasing everything personal, and the four agents that are most of our model spend stopped paying full price for the same instructions on every turn.