The clock could never have fired, and a full all-in re-opened nothing
Two defects found by reading the code back, neither of which any test could see. ## The clock would have thrown on its first tick `HoldemDeadlineSweep` carrie...
Spring Data does not register a NESTED repository interface
MediaService crash-looped on the Hold'em image. The six repositories shipped as nested interfaces inside one `HoldemRepositories` class — one file rather than s...
Four defects only a real browser could show
Rendered the felt, the compact layout, the lobby and the action bar in headless Chrome against a fabricated table and MEASURED them. Four things were wrong, and...
The two mode plates were clipped by their own scroller, at every size
The selected plate lifts 2px and carries a 1px ring, and it is the first child of an `overflow-y: auto` column — so its top border sat 3px above the clip edge a...
Map.of throws on a null value, so "no game yet" was a 500
`gameWith` answered with `Map.of("game", …)`, and `Map.of` rejects a null value with a NullPointerException. So the one endpoint whose documented normal answer ...
The proxy could still be walked out of, because a dot is not encoded
The catch-all re-encodes each segment, and the comment claimed that meant it could only ever address the chess API. `encodeURIComponent('..')` is `'..'` — dots ...
The error test did not typecheck, and next build runs tsc
`await promise.catch((e: Error) => e)` does not give you an Error. The catch handler's return type unions with the promise's resolve type, so the result is `Che...
The BFF route that was never written, and an error that was a megabyte of HTML
Pressing Start game returned 1,529,239 bytes of markup. `/api/media/*` is not a proxied prefix — every path under it is a hand-written Next route and there is n...
Let a refusal keep the sentence it was written with
The chess code refuses with reasons meant to be read — "not your turn", "this game is not in play", "illegal move". None of them reached anybody. `server.error....
AppType hid two live apps, and the guard could not see the place they were hidden
The Java app enum is mirrored into TypeScript twice, and only one of the two was guarded. AppType.ts — the mirror Organization's app getters actually read — had...
An app id an older build cannot name must not fail every feature read
ServiceType ships inside each service's jar while ORG_FEATURES is shared, so a newly added app is ALWAYS in the database before the older readers have been rebu...
A black piece on the Kamo board was the colour of the square under it
Only a browser found this. The Kamo scheme derived its piece colours from `--color-primary` as well as its squares, and both mixed the same token into similar d...
Dial the detail dialog's tel: through the shared normaliser
The dialog built `tel:${action.tel}` by hand because telHref() was not on main when it landed — it was in a concurrent branch, and importing it then would have ...
One formatter, and one dialable link, for every number on screen
Follow-on to the lead-view country-code fix, closing the places that still answered the same question their own way. `NumbersTab` kept a private US-only format...
Light the bell, and make a click mean something
Three defects behind one report: the browser tab alerted for an unread notification while the bell stayed dark, and clicking rows on /notifications went to the ...
Two more deadlines a background tab cannot meet
Swept the app for the failure the notification deck's repeat turned out to be: work whose correctness depends on a timer firing while nobody is looking. Chrome ...
A pane lock survives the editor alt-tabbing away
The client heartbeats its pane lock every 15s and the sweeper released any lock unheard from for 45s — three missed beats, which reads like a generous margin an...
Stop writing "/" as the destination of a review notification
The Growth Hub has no screen of its own — kamo-internal's widgetRegistry says so where it decoders to give the widget an href: "the widget IS the feature". So t...
A notification raised on the wrong pod reached nobody
The broker here is enableSimpleBroker — in-heap, per pod, no relay — and this deployment runs two replicas. MemberNotificationService published straight into it...
The last two durable consumers become queues, and contact sync reaches every pod
The mail relay was one of four NATS subscriptions on a plain durable consumer. A plain durable admits exactly ONE subscriber, so at two replicas the second is r...
A bulk action announces the folder changed, like opening one message does
`email:folder-changed` is what the nav badge listens for while it is not being pushed a count — a socket that never came up, or one that came up and relays noth...
A bulk mark-read announces itself, so the nav badge follows it
The single-message endpoints have always published the mailbox events that move the nav badge and reload the other tabs. The three batch endpoints — flags, move...
Every pod relays the mailbox push, so the unread badge moves again
The browser's email relay bound a DURABLE NATS consumer named after the member ("email-ws-<id>"). A durable push consumer admits exactly one subscriber, so with...
The nav badge follows a message being read, instead of waiting for a reload
The badge treated the STOMP socket being UP as proof that counts were being pushed to it, and those are two different questions. EmailService relays the count f...
A lead outside the US lost its number's country code
The lead view read "+373 606208888" back as "606208888". `formatPhoneDisplay` chose between national and international form by comparing the number's calling co...
The repeating sound survives a tab nobody is looking at
"Repeat sound" saved correctly and did nothing audible. The deck beat the tone out with setInterval, and Chrome clamps timers in a page that has been hidden for...
Let a local build reach the catalogue it already has the key for
`npm run build` on a laptop died prerendering /en/alternatives/gohighlevel with "Kamo seat prices unavailable", and `npm run dev` served a homepage with no pric...
The leaderboard called everyone on it a former member while it loaded
The board and the names come from two different places, and the names come second. The board is one request to SecurityService; the names are the shared member ...
The contact-effect editor's accent is the org's primary, not a fixed purple
The editor painted its reset control and its "Following the shipped default" helper lines in #8b5cf6, hardcoded four times over — the shared editor's default pl...
The storage meter's trough was black, which is most of the bar
Reported twice, and the first fix missed it. That pass corrected every foreground and left the trough at rgba(0,0,0,0.28) with a black inset shadow, on the reas...
The dock was reserving space for its own scrollbar, and walking left
A docked window crept left in 38px steps and then jumped back to the right edge, over and over, for as long as it was open. `rightEdgeReserve` accepts a scroll...
Remove the mock desktop dialog, and guard against it coming back
The celebration layer's corner alert reproduced a named third party's interface chrome — its title bar gradient, its double bevel, its close box — and said the ...
Round the artwork's corners
The picture sat square inside a pane with a 16px corner, cutting a rectangle out of the glass. 12px on the wrapper — the same radius the drop veil uses — and th...
Make the cabinet as tall as its own content
The page was dark for one screenful and then white for the rest of the scroll. `PageWrapper` is `height: 100%` with `flex-direction: column`, so every route in...
The white band under the cabinet
The application's `body` and `html` are `--background: #ffffff`, and this route is the one dark surface in it. The page element is `min-height: 100%` so it fill...
Every foreground on the storage meter is white
Reported unreadable, and it was. Four places went dark or coloured where the rest of the component is white on a dark ground: - The "Add 10 GB" button was #0b0...
A scrollbar 17px in from the edge is still a scrollbar the dock must not cover
The tool dock reserved the right edge for a page's vertical scrollbar only when that bar was AT the edge — within two pixels, for sub-pixel rounding. Almost no ...
The Accounts app was billed as Human Resources, so the Free plan lost it
The `accounts` option was gated on `organization.isHrs && VIEW_EMPLOYEES`. Neither half is what /account is: its own backend enforces VIEW_ACCOUNTS (CRM) on the...
The baseline award was two transactions, not one
`ensureBaselineFor` calls `ensureBaseline` on `this`, and Spring's transaction advice is a PROXY — a self-invocation does not pass through it, so the inner REQU...
Three React Compiler errors, and what each of them was really saying
The compiler rules caught three things in the achievement surfaces, and none of them was a style complaint. A component aliased into a local during render (`co...
A two-level jump published two frames and the browser kept one
`useMediaTopic` holds ONE message slot and overwrites it, so two frames arriving in the same tick are batched by React into a single render and only the last is...
The docked row has one height, and no way left to arrive at another
Resizing a docked window's top edge moves every window's top edge — the row sits on the bottom with its tops in a line, and a row of different heights is a ragg...
A redacted status event kept its type, and pin the redaction
Two things, both found by writing the test for the actorName path rather than by reading it. messageType was being read off the body AFTER redaction. redactEve...
The launchpad hid the App Shelf to say the member had no apps
A member granted an app or two and no widget right — Support and the Knowledge Base, say — opened their launchpad to "No apps yet. You don't have access to any ...
A service may change a meeting's link, and the room is told
updateEvent restated the title, description, location, colour, timezone and deep link, and dropped meetingUrl — so a link added to a callback that had already b...
A meeting link the member can set, and one guest row per guest
Two halves of "Add external guest to meetings does not send an email to that person". The link. meetingUrl came back from the API, was bound to nothing, and co...
A preference PUT was resetting every setting it did not mention
Reported as "when I enable repeating sound it does not save". It saved. Then the next preference the member touched turned it off again — and the settings page ...
A callback can carry the link to the call
The lead page composes a callback in the calendar's own dialog, and every field that dialog collects is meant to survive the trip through here. meetingUrl did n...
Stop telling people to add the text provider they already added
Reported from a real setup, and the report was right. An organization running FreePBX added Telnyx as a text provider, opened the SMS window, and was shown Free...
A meeting link can be set, not only read
meetingUrl has been on the entity, in EventDto and in meetingSignature for as long as the dialog has existed, and nothing could ever write it. EventRequest did ...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
