Stop forking the signing surface, and offer the whole signed record
kamo-internal carried a hand-copied fork of the external signer app β fifteen files under app/lib/esign, app/stores/esign and app/components/esign/signing, each...
One table per game, and drop the cast the union forced
Follow-up polish on the Games entitlement gate. No behaviour change; the tests that pin it are unchanged and still pass. **************** was typed `GamesOrgan...
Move the balance out of the top bar and into the Games menu
The bar is fixed chrome and already crowded β greeting, branches, availability, the compliance clock, the bell, chat, language, account β and a balance is not s...
The frame stops carrying an archive nothing renders
The window's notation panel is gone β the captured pieces have that space β so `moveList` and `fenHistory` came off the published view. `fenHistory` alone was s...
Drop aiThinking from the client mirror too
It was always false on the wire and nothing rendered it. Removed alongside the server field so the two shapes stay identical β a mirror that keeps a field the s...
Drop a field that was always false and a statement that did nothing
`aiThinking` was on every published board and was never once true β the AI answers inside the request that provoked it, so the window that asked already knows i...
Delete the Telnyx code nothing calls
Three methods I added that no caller reaches, removed while the reason is still fresh β this feature's worst bug was TelnyxProvider.provision() being defined an...
One module owns the link from the plan page to the billing tab
Every action on /myplan is a link into Plans & billing, and it has to land on the right sub-tab or "Payment and invoices" opens on Subscriptions and looks broke...
Keep "is this member connected" in one place
RingCentralMemberOAuthService had its own hasConnection and connectedExtensionNumber, and both answered only for the sign-in half. A member can hold either cred...
Drop the unused dense prop from OrgOAuthAppSection
No call site passed it, and all eight embeds want the full header. A prop kept for a caller that does not exist is API surface someone has to reason about later...
The reaper used `su` too β runuser, and no shell anywhere
Dropping su from the exec path left it in reap_idle, which runs on every terminal connect. Same three objections, and the last one is the one that bites: `su - ...
Say plainly why every JustCall agent reads as ACTIVE
The user listing decided its status with "available is Yes or No -> ACTIVE, else UNKNOWN", which is a roundabout way of asking whether JustCall answered at all,...
Expose repricing as a static so a backfill can reuse it
Quote money columns are written, not computed on read, so an engine correction leaves existing rows carrying the old arithmetic until something saves them. A mi...
Drop a @Transactional that never applied
loadCatalogue is reached from catalogue() on the same bean, and self-invocation does not pass through the proxy, so the annotation was decoration. The query is ...
Drop the container ref nothing reads
containerRef was declared and attached to MessageBrowser's root element, but containerRef.current is never read anywhere in the file β it has been dead since it...
Rename Copilot Mobile App to KamoMobile
The mobile app is KamoMobile now. This renames every reference to it in this repo β the strings members read, the route, the i18n namespace, the components, the...
The per-plan allowance is per seat, and says so
Rename only β PlanStorage.gbPerUser is private to this class and the three call sites are all in it. The comment above it was the misleading half: the allowance...
Eight clinical reasons were being collected by window.prompt
Stopping a medication, closing an order loop, cancelling an appointment, merging two patients, declaring two records not a match, withdrawing portal access, dec...
The tab's own session names its organization; `?org=` leaves the URL
Builds directly on 05ff51b3, which established the right source of truth β the tab asks its own session which workspace it is in, over a call the per-tab token ...
One request-body parser, not three
The three clinical write controllers each grew their own string/uuid/integer/ date helpers within a week of each other β identical except for which ones each fi...
One window per session, and the shared column
AI chat was the only tool deriving "maximized" from a ResizeObserver threshold instead of reading the flag every other tool reads, and the only one switching co...
Render the shared pane, and widen to 550
NavTopPanel's Chats tab now renders ConversationsPane instead of the old ChatsList, keeping its own search field and passing **************** so members keep th...
Lift the free/busy engine out of the webinar feature
The interval arithmetic β expand, restrictionMask, candidateStarts, and the whole of AvailabilityInterval β was never webinar-specific. All the coupling sat in ...
Use the shared availability engine
MemberAvailabilityService keeps the CRUD and becomes a BusySource; the arithmetic it used to own now lives in kamo-shared-library. Call sites are unchanged β th...
Map the account timeline beside the account's other things
Everything belonging to an account already lives under **************** β its leads, orders, members, notes and history. Communications was the one at a plural ...
The settings tab opens the calendar's editor
Sharing the day picker was the half-measure. It left two forms that still had to agree with each other about recurrence, times, effective range, note, save sema...
Rebuild the console on the house design language
The first pass was wrong and it was wrong in a way that should have been obvious before a line was written: I built Tailwind divs, MUI Tabs and hardcoded rgba c...
Retire Sent to AI, and store the status by name
Removing SENT_TO_AI is not a one-line enum edit. It sat at ordinal 3, and system_bug.status was an ORDINAL column: dropping it shifts AWAITING_INFO onto 3, CANN...
Separate the credential check from org authorization
Signing in was two questions fused into one query. "Are these credentials good" is answered by the users row -- the password lives there, so it was never org-sc...
Lift the wallpaper and widget shortcuts above the media pod
The profile header band laid "My Wallpapers", "My Widgets" and the media chrome out as one wrapping row, so the two shortcuts read as a fourth switch sitting al...
Open the one modified record, whichever layer asked
getOrCreateClassic and getOrCreateFormFillable collapse into getOrCreateModified: "open this for editing" means the same thing whichever editor asked, and the a...
One modified record with two layers, not two records
A document had up to two derived rows β CLASSIC for edited bytes, FORM_FILLABLE for fields β and something had to decide which was based on the other, repointin...
Stop seeding a palette colour on the org master note
Both master notes are painted from the ORGANISATION's brand now β primary for "Our Master Note", secondary for "My Master Note", each as a pastel β so a stored ...
Hand the editor what it needs instead of re-asking
DocumentEditor fired POST /api/docs/form-fillable/{id} on every mount purely to read classicEditable β a write used as a query, re-deriving a row the call that ...
Make the Modify rules testable, and drop a dead field
Both rules the Modify menu encodes have shipped wrong once β form fillable was disabled on the rows whose fields are meant to stay editable, and it was offered ...
Delegate AvatarObjectPaths to the shared library
MediaService now names avatar objects too β the support chats list shows the requestor's photo, and a support requestor is in somebody else's organization, so n...
Drop the masthead stat rail, move the filter to the bar
The five counted tiles are gone from the header. It now states what the page is and gives the rest of its width to the primary action. They were also the only ...
One loading screen instead of four, all on the full logo
There were four copies of the same full-screen loading markup β the navigation screen, both of /validate's pre-result screens, and /logout β identical down to t...
The player is a module singleton, not a React value
Firing a sound read a context, which made every call site's POSITION IN THE TREE part of its correctness. A component rendered above SoundProvider got a no-op a...
Sign inside the app shell, behind one page header
The wizard opened as a fullScreen MUI Dialog, so signing a package threw the member out of the product: NavTop and NavPri were covered, there was no rail and no...
Fold the back arrow and book icon into the header title
The /kb body repeated the gradient header title verbatim. Drop the duplicate, move its book icon onto the h1 and park the back arrow to the right of it.
Drop the speed dial heading
The tab is reached by its own icon and the rows say what they are, so a title and a sentence of explanation above them only cost vertical space in a panel that ...
One Plans & Billing screen instead of two that each answered half
The platform had two billing screens. /settings/account?tab=billing answered what the organization pays; Plans & Billing on the member profile answered what a p...
One strip β filter and refresh beside the sub-tabs
The controls sat in a second full-width row under the tab strip holding three short words and an icon, spending a whole band of the pane on what fits in the spa...
Follow the subscription finder rename
**************** is gone from the shared library. Its Optional return depended on a unique constraint that no longer exists, so once one account holds both a pe...
One writer of the *** TTL, and it is the activity tracker
/api/user-info wrote the session TTL straight to Redis, bypassing every service-side rule β and useUserInfo polls it every five minutes forever, so that one lin...
Reading a session no longer renews it
The expiration on the Redis record IS the session; when it lapses the member is signed out. This service holds its own copy of KSessionService against that SHAR...
Reading a session no longer renews it
The expiration on the Redis record IS the session; when it lapses the member is signed out. This service holds its own copy of KSessionService against that SHAR...
Reading a session no longer renews it
The expiration on the Redis record IS the session; when it lapses the member is signed out. This service holds its own copy of KSessionService against that SHAR...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.