EZ Setup menu (setup wizard + admin shortcuts) replaces Getting Started and the admin bar
Revert "style: every white surface takes the organization's Lightest primary"
A menu's own scrollbar counts as the menu — hover and press no longer close it
Storage label takes the bar ink; scrollbar hover no longer closes a nav menu
Tab icons and record names, lighter-primary gradient bar, flat right-hand controls
Call, Email and Organizer fixed after the language flag; Knowledge Base fixed beside Support
Accounts and Settings fixed beside My Profile; My Branches gets the network icon
One scroller for the whole rail, lower options seated at its foot
Revert the Settings fly-out. The lower options sit at the bottom of the SAME NavOverflowScroller (margin-top: auto): the top ones push down as they open, the bo...
Keep the lower options pinned at the foot; Settings opens as a fly-out
The rail scroller holds only the movable options again. Settings, which sits in the footer, opens its tree to the right of its row (NavToolButton flyout) instea...
One rail scroller for every option, not a second scrollbar for the lower ones
Mobile app, My Branches and Settings now live inside the NavOverflowScroller with the movable options; the ad-hoc capped overflow box is gone.
The square-headed robot is the one SI icon, everywhere
Replaces every SmartToy robot and the sparkle icons that stood for the SI.
Bound the rail's lower options so an open Settings tree cannot squeeze out the scrollbar
Break glass under Support; Settings and My Branches fixed in the rail footer
Halve pane spacing and corner radii, keep the picture frame's own radius
SI Agent, Support and Achievements become fixed chrome at the left of the top bar
Not draggable or pinnable, absent from navigation settings, behind a rule of their own after My Branches.
Halve the bar's width, 32px to 16px
Buttons halve with it so they stay squares that fill their cells.
No padding around the buttons or the bar
The thumb fills the bar's full thickness and each button fills its cell.
Linux Desktop rows move under My Computers; the Linux Desktop option is removed
Setting change lines read in the reader's language; plural filter chips on the activity trail (SIS14)
Recent Changes, the undo confirm and the activity trail (line, summary, detail) word a line a service wrote through the dictionary (settingsKit.phrase); older l...
My Reports menu, Cameras under Devices, profile menu leads the bar
- Reports becomes a dropdown: All Reports | Favorites, Recent, Shared with you, Scheduled (with the library's counts) | Analytics. The Analytics option is remov...
Describe A Change changes only what the request names (SIS14)
The drafting prompt now says a switch changes only when asked to turn it on or off (run/set/make never do) and every proposal quotes the request words that ask ...
Provider, tool, persona and model change lines carry codes for the reader's language (SIS14)
My Profile becomes a dropdown of profile tabs, with clock and Log Out inside
Legal & Compliance, Timecard clock and Log Out leave the bar and become rows of the My Profile menu. Attention marks carry over; the trigger pulses when any row...
A YugabyteDB restart-read while the upload commits is retried, not fatal
Third live finding on the removed-after-hold path: the relay's lookup raced the upload's commit and got 40001 "Restart read required", which aborted the relay. ...
The live chat relay also finds a refused hold's attachment
Found by the live removed-after-hold re-test: findByBlake3AndSize is a dedup lookup and skips is_missing dats, and a refused hold's dat stays missing forever, s...
The live chat relay waits for an attachment whose verdict beat its commit
Found by the live removed-after-hold test (sp00verify): a held EICAR variant was judged ~260 ms before the visitor's upload answered; the hold completer's refus...
Index backfill candidate query without a '::' cast
Hibernate's native-query parser read ':text' in ARRAY[]::text[] as a named parameter and the first live run answered 500. (attachment_types IS NULL OR NOT (mark...
The store sync schedule tells Spring which constructor to use
With a second (test) constructor and no @Autowired, the new pod failed to start: "No default constructor found". The running pods were untouched.
Live chat verdicts match by imgId or message link (completes aa060187d)
ATTACHMENT_SCAN now names the file (imgId) and its message links (objImgIds; mediaservice 5e5d837). The store keeps both, and the chip looks up its imgId first,...
ATTACHMENT_SCAN names the attachment the way rows do (imgId + objImgIds)
Completes 27c9644. Found by the live test: message rows carry objImgId = the MediaObjImg link id and imgId = the Img id; the frame sent the Img id under objImgI...
A held photo's PDF rendition is marked converted by a targeted update
Found by the live held-JPEG test: on LegalHeldUploads' background thread the stored rendition ImgDat is detached, and save() merged its orphan-removal 'images' ...
Online store connections say what they do — one way in, Sync Now, sync history, honest keys
- The connection form asks each platform for exactly what Kamo's reader uses (Shopify's Admin API token, Wix's API key and Site ID, Ecwid's secret token…), sa...
Scheduled online store sync, Sync Now in the background, honest connection test
- RetailStoreSyncScheduler: every 5 minutes, under the singleton lock (one pod), syncs each active store connection whose own interval (15 minutes to a day) h...
Online store sync saves what it reads — products, stock, customers and orders, idempotently
Until now a sync read the store, counted the records and threw them away, and every run said it worked. - StoreReader per platform (Shopify, WooCommerce, BigCo...
A held chat attachment clears live for every viewer
ConversionService publishes antivirus.content.settled when a held upload is stored or refused. AttachmentScanRelay consumes it in a core queue group (media-anti...
A chat file Antivirus was checking clears live in member chat
MediaService now sends ATTACHMENT_SCAN {sessionGuid, objImgId, scan} on the conversation topic when a held attachment's check finishes. useChatWebSocket hands i...
Create Invoice makes a real invoice, with an Invoice tab and payments
"Mark Invoiced" only flipped the status; nothing was billed. It is now Create Invoice: a confirmation showing the customer, the labor and parts lines and the to...
A work order's invoice — create it, read it, open its PDF, record payments
ServiceJobInvoiceController, under **************** relays to InvoicingService's CommerceInvoice (issue-from-job, payments, PDF). Rights are the work order's: c...
Announce a settled hold on core NATS (antivirus.content.settled)
When a held upload is stored after its check, or judged harmful, publish {blake3, sha3_256, size, imgDatIds, result, org, verdict{status,family}} so MediaServic...
Job numbers from a locked per-org counter, never a count; payments on a commerce invoice
Work order numbers were COUNT(jobs)+1, so two jobs raised at once could share one, and jobs raised from a paid order (ServiceFulfillmentPolicy) got no number at...
MediaService may hear antivirus.content.settled (held chat attachments clear live)
ConversionService publishes a core event when a held upload's check finishes; MediaService consumes it in a core queue group and fans the new attachment state o...
Describe A Change and Recent Changes And Undo on the record pages (SIS12)
SIS11's page tools, extended (no second mechanism) to the pages that hold a list: Alerts & On Call, Providers, Provided By Kamo, Connected Tools, Web Chat Perso...
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.
