Outbreak alerts reach the platform owner; import and rate-sheet detections name the member
Every platform operator holds MANAGE_PLATFORM_ANTIVIRUS only implicitly (owner floor), so the explicit holder list was empty and an outbreak told nobody. Recipi...
A market customer is deactivated, never deleted — and the dialog says so
The Customers tab offered Delete with "This cannot be undone" and a type-to-confirm box, while the server only switches the account off (its orders and history ...
A customer added or edited in market settings keeps its name, email and phone
**************** ignored firstName, lastName, email and phone, so the market Customers tab created empty accounts and its edits to the person never saved. Prese...
Request Withdrawal reads commission-service's own gate on the withdrawals list first
commission-service, the side that enforces, now attaches 'gate' to the member's withdrawals read and fails closed ('could not ask' is blocked, with its own sent...
"Upload One I Already Completed" opens DocsService's reviewed upload request
DocsService answers POST **************** with a reviewed "upload your completed copy" assignment. The checklist buttons carry the requirement to the sign wizar...
Read DocsService's own shapes — counts, fromLibrary, per-member records, assign, filter
- Requirement tallies come as counts {onFile, inProgress, missing}; a Platform Library requirement is fromLibrary + key. Matrix cells that do not apply to a m...
Stamp a vendor on every credit pull so a reseller order saves
Connection.VENDOR is NOT NULL; a reseller key (Xactus, Credit Plus, MeridianLink, CBC Innovis, Factual Data) mapped to no ConnectionVendor, so the pull ran and ...
A reseller credit pull records a vendor instead of failing to save
Connection.VENDOR is NOT NULL, but CreditOrderService only stamped a vendor when the key was a direct bureau. Every reseller key (Xactus, Credit Plus, MeridianL...
Drop the duplicated dynamicRooms field (unblocks the build)
Two SIS commits each declared SiSectionDef.dynamicRooms with the same comment; tsc fails with "Duplicate identifier 'dynamicRooms'" (run 2314) and no kamo-inter...
Resource previews stream through the app instead of an unreachable MinIO link
KBService now hands out /api/kb/media/{id}/content as presignedUrl (it was a MinIO signature for the in-cluster host, which no browser can resolve). This adds t...
Resources upload to a real bucket and stream back through the app
The resource library has never stored a file. KbMediaService wrote to the constant bucket "kb" — two characters, below S3's three-character minimum — so minio-j...
Align with the live SecurityService API — 'switching on' while scanning is off, member names on threat rows
API_LIVE.md: overview.protected=false means scanning is not enabled yet, so the Center shows a calm 'Antivirus is switching on' instead of 'catching up' (which ...
Type the Safety tips' articles as help article paths (unblocks the build)
HelpArticleLink takes a HelpArticlePath; the record widened every entry to string, which failed the type check and stopped every kamo-internal deploy since SIS9...
A subscription can only be ordered or priced from a catalog on offer to the org
createOrder and calculatePrice looked a plan up by id alone, so a member of one tenant could order, or read the pricing of, another tenant's plan. A plan is now...
Unblock the i18n guard on the Record a Delivery dialog
check-i18n-keys resolved t("stillToCome", {count}) in ReceiveDialogBody against the lines namespace ("Still to Come", no placeholder) and failed every kamo-inte...
Commerce_request_rental names the renter's account
SecurityService now refuses a rental request without a customer account (every rental has a renter), so the tool takes a required accountUid and passes it on. T...
Keep ThemeBackgroundController's CRLF line endings (completes 73e6499c)
The member's package button names what is actually owed
A Quick Request that only asks for uploads showed "Continue Signing" with nothing to sign. memberActionFor now labels from the row's new signableOutstandingCoun...
Version History authors use the shared member hover card (photo and who they are)
BLAKE3-256 that is 32 bytes on every BouncyCastle on the classpath
new Blake3Digest(256) is 256 BITS on bcprov 1.78 but 256 BYTES on bcprov-jdk15on 1.70, which this library brings and which loads FIRST in services that also dec...
Certificates name people by name and email, never by member id
The Executed Package Certificate and the Review Certificate printed raw member ids ("Sam Supervisor (1200096283021512387)"). They now show the name plus a human...
A 40001 while preparing completion notices no longer rolls the signature back
The first press of Finish failed with a 500 and the retry succeeded. Completion notices were composed INSIDE the signing transaction under a catch-all: their re...
An approved package is filed, not left EXECUTION_INCOMPLETE
**************** called imgDatRepository.save on the ImgDat that uploadDocument returned from its own transaction. The entity is detached, so save() merges it a...
An SI's budget alert opens its Workbench room (SIS10)
The deep link was the bare profile; it now names the SI's Workbench room, where its budget is.
Reviewer notices skip the platform System User
The System User is an administrator of every organization, so it holds REVIEW_LEGAL_SUBMISSIONS everywhere and every submission in every org mailed hr.package_n...
Daily Work tips take a help article path; briefing numbers typed field by field (SIS8)
The SI pre-check card settles when a package has a No Review item
The pre-check reads SUBMITTED submissions only, and an item whose review is off is sealed ACCEPTED at finish, so its files were never read. The review workspace...
Legal, careers and training emails present EmailService's own secret
DocsService sent X-Internal-Auth from internal.auth.secret, which is ESigService's secret (***). EmailService's InternalAuthFilter compares against mlos-interna...
Status words and white-on-status fills read at AA, from three theme tokens
axe in the Review Studio still found three spots under 4.5:1: the rail's "1 file" on the selected item's brand tint (4.39), white on the pressed Needs Correctio...
The pale-brand spots the live sweep still found: chat windows, calendar ink, heroes, the setup pill (SIS1)
Second live pass with a pale brand (#d6f74d): - Chat/tool window chrome (ChatBoxStyles tokens, ToolWindowShell title/icon, the window buttons, terminal/camera...
Send phone JPEGs to ConversionService so they arrive upright
A portrait phone photo is stored on its side with an EXIF orientation tag. LegalUploadStore converted JPEGs in-process with ImageIO, which ignores the tag, so a...
Convert iPhone HEIC photos to PDF, and turn phone photos upright
Every HEIC a member uploaded failed: convert-to-pdf only treated png/jpg/tiff/bmp/gif as images, so a .heic fell through to Docs, which cannot open HEIF and ans...
The Usage tips no longer point to the hub's old Usage tab (SIS4)
Usage is the one Spend view now; the tip that sent people to the SI Workforce hub's Usage tab for each SI's cost described a screen that is the same page.
Every org's colour reads at AA in hand-made CSS too: brand text, words on brand fills, the nav chrome (SIS1)
The live sweep with a pale brand showed the root MUI fix was not enough: hand-made CSS drew the brand as TEXT and white ON the brand directly, so a light organi...
At the 12-language limit the other languages stay readable (SIS4)
They were greyed out like disabled controls (axe: 10 contrast failures); now they read normally, dashed and aria-disabled, with the note saying why they cannot ...
Polish from the screenshot sweep
Assistant tab pads itself; a layer that cannot be read says so in plain words; the 'locked above' note reads at AA; Who Gets What names a limit-forced value; sh...
Who Gets What says when a limit decided a value
A forced 'confirm every change' or 'memory off' answers source LIMIT in layers-preview instead of Kamo's default.
One Add label and full page width on the layered settings
SIS3: the four screens say Add A Different Setting (the shared words) and run the full page width.
Words on the brand fill read on a pale brand in Contacts and Calendar too (SIS1)
The live sweep with a pale brand (#d6f74d) showed the root theme's contained buttons black-on-lime, but the Contacts and Calendar scopes still put var(--on-prim...
The SI settings shell's Usage page is the one Spend view (SIS4)
Usage opens UsageDashboard (the old Usage & Overview tab is gone): people who read usage (VIEW_AI_USAGE) see the organization's totals, people who view the SI w...
SIS4 bug fixes — one Spend view, no dead switch, budgets and limits agree, languages, Spoken Line Reviews in Platform settings, plain words
- Usage: the broken Usage & Overview tab (expected a shape AIService never sent, errors read as zeros) is gone; the one Spend view (UsageDashboard) gains the ...
Members by id, the 30 MB limit, a HEIC fallback and the sign-again note
DocsService sends member and reviewer photos as null, so every member on the review surfaces is drawn with MemberChipById (photo and name from the member card)....
Review Studio text reads at 4.5:1 — the expired date and the rail's progress line
The Review Studio is a viewer when the submission is no longer waiting for review
Decided, withdrawn or replaced submissions open read-only: no pens, no verdicts, no draft saves and no Approve/Return — each would only be refused by DocsServic...
Drop the dead auto-select switch, and let the monthly budget default reach the job description's limit
SIS4. "Auto-select best available model" was saved and never read: the settings API no longer shows or changes it (the column stays, new rows keep its old defau...
Attestation uniqueness is per (assignment, round)
HR review lets a returned package be finished again, and each Finish writes its own attestation linked to the previous round. Ensure the (assignment_uid, round)...
A refused Zoom Server-to-Server app is explained in plain words on the SI-joins check (SIE10FU)
The live check showed Zoom's raw "ZOOM returned 400: invalid_client" to the admin.
One place for meeting providers: SI joins live in Provider Setup (SIE10FU)
Owner 2026-11-07: meeting providers are configured on Provider Setup; SIE10's separate "SI Meeting Joins" tab duplicated its provider cards, setup form, secrets...
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.
