- A talent who walks into the client chat is now asked, straight out, which side they are on. Yesterday's version acted on the suspicion by itself: the check quietly told Mira "this person is selling" and she redirected them in her own words, which puts the worst mistake this gate can make, telling a real client they are on the wrong side of the marketplace, one false reading away. Now the first time it fires, Mira stops and shows a two-button card instead of writing anything: are you here to hire someone for your business, or are you offering your own services? A wrong reading costs a genuine client one tap and the conversation carries straight on with nothing recorded. Tapping "I'm offering my services" is the only answer that ends anything, and what it ends is that one conversation, not the person: the chat closes with a note explaining why and pointing at the seller side of Fiverr, while their account, their other projects and any new project they start are all completely untouched. A later pass closed the last way around it. The card had been as escapable as any other question card, and typing past it was both the widest exit and the quietest one, so it now cannot be skipped, folded away, dismissed or typed past, the composer greys out until one of the two buttons is pressed, and the server enforces the same rule rather than trusting the button.
- Every door that spends money now has a lock on it, and a test that notices a new one. Three holes of the same shape, and none of them was a lock built wrongly, they were locks nobody remembered to fit to a new door. The route that starts a fresh guest conversation, mints an identity and sets Mira running had a shared-secret check that returned "allowed" whenever the secret was blank, and no environment ever set it, so the blank branch was the live branch: an unauthenticated way to spend model money on the public site. The human check that guards the same spend elsewhere had been written inline in exactly one handler and was simply missing from all of its siblings, and sweeping the whole route table turned up sixteen more, including the entire concierge flow. All of them now share one gate that refuses before it costs anything, and the one route with no rate limit at all got one. The durable part is not the fix: a new route that skips the gate is now a failing build, because a test walks the live route list against a written-down ledger of what is allowed to be open. Guests still browse and read for free; the check is asked once, at the first thing that costs money, and deleting your own data is deliberately exempt so a bot challenge can never stand between someone and their own erasure.
- Four more things the public could see and should not have. The production site was publishing a complete machine-readable map of its own API, every route, every field, every option, to anyone who asked; those three addresses now simply do not exist in production and stay exactly as they were everywhere else, which is where they earn their keep. A talent-facing test surface that production never deploys was still answering there, and answering anonymously with every concierge run in the system, client names included; it now refuses where it was never meant to run. Employee access had been resting on a display handle the identity provider explicitly says nobody should rely on, and on an email address it had never checked was verified; both are gone from the chain. And the admin panel that previews a client's brief was rendering it in a frame with the one pair of settings that cancels a sandbox, so anything that survived into that document would have run with the console's own privileges; the frame is now fully sealed and renders identically. Alongside them, the three kinds of link that carry an access token in the address stopped outliving the log that recorded them, and a right-to-erasure now reaches a marketing trail whose key had one capital letter in it.
- The funnel board grew the rung everyone kept asking about. A new "Brief finished" step now sits between the brief being started and the search being run, which is the moment the job description is ready to approve, and it is drawn as a deeper shade of the brief's own green so the ladder reads as one thing. Every drop now carries the share of that step it took away, as a percentage of the projects that reached it and, on the money chart below, as a percentage of the budget that reached it, so "how bad is this leak" is answered without hovering. The two drop channels at each step, signed-in clients and guests, used to trail off as separate stubs and now converge into one labelled end, split in proportion. Tables across the console went to a hundred rows a page.
- Every list in the console can now be narrowed, not just sorted. Sorting answers which row is biggest. An operator working a list wants "just the agent errors", "just the stopped ones", "just Israel and Ukraine", and clicking a header only clumps those together. Ten of the console's tables had a sort arrow and nothing else, and the Offers table had neither. Each column whose values repeat now carries a checkbox menu, with four rules that live in one place because getting any of them wrong quietly lies to the reader: the options come from the rows themselves, so a value the server starts sending before the page knows about it is still filterable; a row with nothing in that column gets its own named option instead of silently disappearing; and a filter you have selected stays listed even when nothing matches it, so a stale bookmarked link can always be undone. A follow-up the same afternoon rescued the option labels, which a toolbar rule had been pushing off the edge of the panel. Separately, the launch board grew a "Blocked users" tile that clicks through to exactly those people, and its health grid was rearranged into three rows of three so each row is one kind of number.
- Permissions became a picture of a person rather than a list of grants. The table had been one row per person per area, so someone holding five areas took five rows: you could not see what one colleague actually had, and changing them meant revoking rows one at a time and scrolling back to a form to retype their address for anything you wanted to add. It is now one row per person, printing every area they hold, who granted it and when, with a Manage button that expands an editor in place: every area as a toggle, pre-ticked with what they have, saved as a single change. And there is a new "Viewer only" area for a reviewer who needs to watch client conversations without being able to touch one: it reads the same project record, conversation, brief and files as a full operator and has none of the buttons that act, which makes it a real permission rather than a hidden control.
- Mira's talent-side voice learned to match the size of the message, and to answer "what are you". Reading five live talent conversations turned up four separate problems. A talent replying "ok" was getting a paragraph back that restated a promise already made, because the rules required a reply every turn and never said how long one should be; a bare acknowledgement is now one short line that repeats nothing. Samples and test runs had no rule at all, so three different wrong things were improvised: one talent asked for a test email, it was escalated, the client agreed, nothing in the product can send one, and the shortlist closed without him; another offering a single sample page had that page read as his entire scope. Samples are now a carve-out like credentials, explained rather than arranged, with the estimate free to assume a pilot step and a sample request explicitly forbidden from narrowing anyone's scope. Nothing at all answered "what is this, and can I get one", so a talent asking how to set up an assistant like this one got an invented answer about posting projects and contacting Fiverr Support; there is now a standing set of honest answers, on every turn including a closed one, that says plainly it is AI, describes what the service does, and says it cannot promise anyone their own rather than making up a path to it.
- Four ways a talent conversation could go wrong, closed. A production alarm about recovered replies had been firing fourteen times a day, and a third of those firings were not the problem it names: the same talent reply was being answered twice, minutes apart, because one talent could end up with two conversation records on the same search and the two halves of the system were reading different ones. There is now one canonical conversation per talent per search, chosen by the same rule everywhere, and the duplicates already in the database were merged onto it. Once a price had been agreed, every later price from that talent was ignored by the part that records it while the reply still cheerfully said "I've updated your estimate to $420", so the client kept seeing the old number and the new one escaped the quality check entirely; a re-quote is now scored like any other offer and either replaces the agreed terms or bounces without touching them. The polite "we are not going to move forward" note read like a farewell and left the conversation open, so a tester who pushed back twenty-one seconds later was told their proposal was going to the client; it now ends the conversation it says it ends. And talent who simply went quiet were the one group that never heard anything at all, because the deliberate silence at the thirty-minute mark carried through to the end of the search as well; they now get a closing note at the moment the opportunity genuinely ends.
- A talent manager can now put someone on a shortlist by hand. Typing a seller's username on the Sellers tab adds them to the outreach batch for that project, so Mira contacts them even when the search never surfaced them, and pins them into the client-facing top three once their offer comes back, but only if that offer clears the quality bar. The pin guarantees a good offer gets seen; it can never push a bad one in front of the client. Separately the ranking learned two things about who it is scoring: agencies can now be graded on their own quality signal and, if an operator chooses, their own weights, and whether a seller is online right now is available as a tunable signal. Both are switched off by default and change nothing until the data arrives, so the ranking is exactly as it was until someone deliberately turns them on.
- Three things the client could not do with their own brief. The delivery-date question offered a "Flexible" button that posted the word as an answer, but nothing downstream treats "flexible" as a date, so the brief showed "Delivery window: flexible" while the checklist kept insisting the timeline was missing, the brief could never finish, and the search never unlocked; one session escaped it only by typing "so put 21 days". The button is gone, leaving the calendar and an honest skip. A photo the agent had added to the brief had no way to be removed, because the only control structured blocks ever offered was the pencil; images now carry a delete chip beside it. And a file whose name is written in Chinese, Japanese, Korean or Cyrillic could never be downloaded at all, on any of three surfaces, because the download failed while the response was still being built and returned a server error rather than the file. An accented Latin name happened to work, which is why only the non-Latin scripts were ever reported.
- The alarms, and the machinery behind them. The daily model-spend guard was a warning that posted to a chat room at $500 a day, which is the wrong shape for something that bills continuously: it is now critical, fires at $2,000, and pages named people. A production plan that has no alerting destination configured now fails outright instead of quietly applying fifty-four alert policies that reach nobody, which is exactly what happened for four days in July. The preview environments stopped stranding their own locks: cancelling a build mid-apply left a lock nobody held, which reddened every later run on that pull request forever, and a measurement over the last hundred runs found seven such locks, the oldest three weeks old, and twenty-one preview services still running for closed work. The launch dashboard stopped refreshing every fifteen seconds after its session expired, which had quietly generated 13,460 failed requests, 5.4% of all traffic, over thirteen unnoticed hours. A log line too big for the logging service to accept was being dropped in full rather than trimmed, so fourteen successful requests left no trace at all and a search over that window answered "the route was never used"; oversized fields are now trimmed with a marker, and every trim is counted. The two thin-shortlist alarms now name the project instead of printing a bare identifier. And there is a new daily production scan that reads all five of our telemetry surfaces, including the two Grafana instances that only answer to a signed-in browser, and reports what happened.
- A guest's second project stopped inheriting the first one's business. Every project opened in one browser without signing in shares a single anonymous account, and two things hang off that account rather than off the project: the About You record and the research file on the client's website. So a brand-new project loaded the previous one's company, name, industry and research, and Mira greeted a fresh visitor as a returning client. A guest now starts genuinely empty, with the project's own conversation as its only memory, while a signed-in client keeps the carry-over, because a real returning client should be greeted by name. It landed at lunchtime, was rolled back within half an hour when it reddened the build, and went back in the same afternoon. Four rounds of test repair ran alongside it, ending a cascade of unrelated failures caused by a shared database connection being reused across tests.
The day after launch, and it reads like one: 51 commits, most of them closing something that had been standing open. A talent who wanders into the client chat is now asked which side they are on rather than guessed at, and their own answer, not ours, closes that one conversation, with the card sealed against every way there was to type past it. A security sweep found that the route which spends model money on the public site had a lock whose off-state was "allow" and sixteen siblings with no lock at all, and left behind a test that fails the build the next time someone adds a route and forgets; production also stopped publishing a full map of its own API, stopped answering on a talent surface it never deployed, and stopped resting employee access on an unverified handle. The console got the operator tools it had been asking for: a "Brief finished" rung and exit percentages on the funnel, a filter on every column whose values repeat, a blocked-users tile, and a permissions table that shows a person rather than a list of grants, plus a viewer-only role that can read a conversation and touch nothing. On the talent side, one canonical conversation per person per search ended an alarm that was firing fourteen times a day answering the same reply twice, a re-quote after a handshake is scored again instead of silently ignored, the goodbye note now ends the thread it says it ends, and Mira answers "ok" with one line and "what are you" with the truth.