A tap opens the tool, a right-click opens its menu
Clicking a hex head opened a context menu, which meant the common act — get my chat back — cost two clicks, and the menu itself was reachable no other way. The ...
A healthcare market could not be edited
The edit screen still built its picker by mapping over a hardcoded array of seven verticals. HEALTHCARE was not among them, so a healthcare market opened to a s...
Gate the population-level surfaces on their own rights
EXPORT_PATIENT_DATA, VIEW_QUALITY_MEASURES and MANAGE_PATIENT_PORTAL were added to Java in August and never mirrored into the client enum, so RoleRightType.THE_...
Define SW4's behaviour for a market-less quote
Task 1 made create() read marketUid but did not backfill, so every quote that exists today still has a null market. The converter must fall back to PurchaseLine...
The clinical rights were ungrantable
The permission editors render one section per enabled app and filter each role's rights by that section's serviceType. There was no EHR section, so all ~30 clin...
Follow Java — the EHR is TESTING in both mirrors
Java moved the app off PLANNING now the vertical is built. Neither mirror is read for its stage — consumers match on id and copy comes from GET /api/security/fe...
SW4's billing choice is per-org configuration
Owner's call, and the right one: a maintenance contractor bills each period, a capital-equipment installer bills the term up front. Either hard-coded choice cha...
Hand the patient a link, not a token
The invitation now has somewhere to go — the portal lives on apps.<practice> — so the panel shows the whole activation URL with a copy button rather than the op...
Remove the AI unread-count indicator entirely
It never told the member anything actionable: AIService has no push channel for assistant replies, so a nonzero count only ever meant "you minimized the window ...
Release the record as FHIR as well as C-CDA
§164.524(c)(2)(ii) is the form and format the individual requested if it is readily producible. Both were already producible; only one was offered. A C-CDA is ...
The new workspace is opened by a click, from /network
Creating an org disabled the form, did the work, and then appeared to do nothing: no new tab, and the button back to reading "Create Organization". window.open...
The unread badge goes red, pulses, and sits on the hexagon
Three things, all about a badge nobody notices. It was `--presence-color`, so it was GREEN whenever the member was online — the one state in which it is least ...
Bank reconciliation on the healthcare revenue cycle
The last EHR endpoint without a caller, and it belongs beside the other six revenue-cycle queues rather than anywhere new. The gap between posted and banked. A...
Plan SW4, quote to order conversion
Five defects, not the spec's three. The converter deliberately does NOT mint a Commitment: processOrderPaid returns immediately when one exists, so hand-creatin...
Who asked — unrecognised callers and Part 2 disclosures
Two compliance queues that were recorded server-side and never shown. UNRECOGNISED CALLERS. Every inbound exchange request that could not be attributed to a pa...
Resolve duplicate records, and record the ones that are not
Registration prevents duplicates; nothing could fix the ones already there — from an import, a phone booking taken before the record was found, a married name. ...
Record what the chat switcher column left undone
Ordered by what would hurt most if left alone. The first entry is the one worth from MediaService's, which was not looked at — five of the switcher's six bucket...
Patch a self-created session's guid back onto the window's props
When opened without a sessionGuid (launcher / nav / command palette), AiChatTool POSTs a new session and calls setSessionGuid(guid) but never told the tool-wind...
Switcher column opts out of presence it cannot honestly show
Passes showPresence={false} to its ConversationsPane mount. This column renders under ToolDock, a sibling of **************** (see ToolProviders.tsx's own doc c...
Thread showPresence to rows, and gate the empty state on prefsLoaded
- Adds `showPresence` (default true), forwarded to every ConversationRow — the pane-side half of the switcher-column presence fix (see ConversationRow's own...
Row honors showPresence, and formats a TEXT preview's E.164 sender
Two whole-branch-review findings against this component: - ConversationRow always read **************** directly. Mounted inside the switcher column (a sibli...
Give the Chats tab pane a definite height, not just min-height
The chats-tab motion.div had `height: undefined` (only `minHeight: '100%'`), so its containing block was auto-height and ConversationsPane's own `height: 100%` ...
Close review round 1 on the chat-switcher column
- ChatSwitcherColumn: move the collapse preference's PUT out of the setCollapsed updater into the click handler itself. The updater was impure (it fired a f...
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...
A conversation switcher beside every maximized chat
ChatSwitcherColumn mounts ConversationsPane beside a maximized chat window's own content, so a member can switch conversations without leaving the window. ToolD...
Stop the fallback-bucket flash, guard the double-click
Review found the pane had dropped the old chats-list component's prefsLoaded gate: activeBucket started at initialBucket/DEFAULT_BUCKET and was handed to useCon...
A restored maximized window remembers where it came from
A snapshot written while a window was maximized used to lose what that window would return to, so a restored session's first conversation-switch dropped it in t...
Close out SW3
Thirteen departures from plan. The two that mattered most: OrderLineItem .discountType should never have been a String, and exporting the DDL before applying it...
Pin toSessionType and backendCategoryFor
Neither had a single caller in this file before now, despite being exactly the class of function its own header warns about: a one-character typo ('Text' for 'T...
Stop the text branch's retry storm, pin the observer re-root
voipApi.getConversations goes through apiCall, which throws on any non-2xx — unlike loadMore's other two branches, which fetch() directly and check res.ok. The ...
Stop the previous commit's CRLF rewrite of memberColor
The previous commit's one-word doc-comment edit (dropping the ChatsList reference) rewrote the whole memberColor function from LF to CRLF: this file mixes line ...
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...
Visit preparation, cancellation, and vaccine lot recall
The last endpoints without a screen. CANCEL, beside no-show on the day. They were one action short of each other and they are not the same thing: somebody TOLD...
Problems, open orders and results
The clinician's working views. The endpoints existed; the chart showed a summary and nothing you could work from. THE PRESCRIBING BANNER IS THE POINT OF THE PA...
A patient's insurance, claims, and the self-pay restriction
Practice-wide revenue cycle already lives under /commerce; the PER-PATIENT half had no screen — the front desk could not see who pays before a visit, and nothin...
Register a patient, with the duplicate check first
The Register button switched tabs to Find and did nothing else — PatientSearchPanel took an onRegister callback that nothing ever passed, so a practice could no...
Take @kamo/tool-core 0.1.3
Brings setMaximized, ToolWindow.preMaximize and ToolOpenDetail.maximized — the store API the conversation switcher column swaps windows through.
Booking, and the notes-to-sign worklist
The two things a practice does all day that the app could not do. Both APIs have been on the server the whole time; neither had a screen, so the front desk coul...
Stop deriving the org's theme domain, and freeze the form while it works
The wizard derived the new org's domain from GET /org/{id}. That endpoint returns the entity, and its `domains` is LAZY — serialized as null outside a transacti...
Work the cross-practice match queue
The last exchange surface with no screen, and the one that decides whether the connection produces anything at all. A held match is another practice saying one...
The screens the backend was missing
An audit of every EHR endpoint against its frontend callers turned up surfaces that shipped server-side and could not be reached from the app at all. HEALTHCAR...
Stop the tracking-link strip clipping its own text
Marketing Tools -> Tracking Codes drew the member's link strip with the eyebrow cut through its capitals, the icon sliced top and bottom, and the line under it ...
Correct SW3's ServiceJob imports and pin the PROCUREMENT trap
Task 2 imported dao.beans.account.Account and dao.beans.organization .Organization. The real packages are accounts and orgs — it would not have compiled. Task ...
Correct the SW3 plan's policy-template claim
Task 6 pointed at RetailInventoryPolicy as the implemented member of the policy family to copy an injection shape from. It is never instantiated and never injec...
Quality and Records office
Two sections for surfaces that had none. QUALITY. The rate is the headline; the care gap is the product. A practice shown "67% controlled" can do nothing with ...
Plan SW3, the Service Work domain core
ServiceJob 1..N ServiceVisit as a sibling of FulfillmentOrder, a filled ServiceLineItem, the four classification axes, and a status machine that throws instead ...
Close out SW2
Four tasks, five departures from plan. The sharpest: the plan's own restrictionMask snippet filtered out null dayOfWeek, which means 'every day' — it would have...
The widget controls take the org's colour too
Follows 0c97c900, which did the masthead shortcuts. The same rule reaches the controls inside the panes: anything that carries a background wears var(--color-pr...
The new workspace opens once, ready, and as itself
Three faults with one cause, reported after creating Carl's Jr: the new tab said ?org=kamocrm.com, showed Kamo's logo and none of the org's colours — while its ...
Correct two errors in the SW2 plan
The rsync recipe used a bare 'rsync -a', which preserves mtimes — a file restored to an earlier version arrives older than the .class already compiled from a la...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.