Task types, the session and lead clients, and due times in the member's zone
Task columns, links, comments, Inbox kind, note links and authorship
Pinned, hash-verified model fetch and a warm-up that holds the pod until every model is resident
The warm-up also drops a model whose load failed: Speaches 0.9.0-rc.3 keeps the entry of a failed load, so the next startupProbe would get 409 and /api/ps would...
Never-grantable AI rights, ARTIFICIAL template type, AI access-log events
AI member client library and BFF proxies
The client for an AI member's state, pause/resume/retire, hiring checklist and retry, seats, the organization's workforce controls and the platform kill switch,...
Recurrence bound, reminder coder and EXDATE entity; UTC zone default
The Tasks tab is tasks — served by KBService, gated here like the lead itself
STRING registry enums, 24 provider types, digit-tolerant converters
Kamoai-hire-steps job drives SecurityService's hire-step sweep every minute
The SP06 schema — tasks, links, comments, Inbox, note links and authorship
AI member state, org pause and kill-switch columns (read-only in JPA)
Svc_ai publishes ai.registry.changed.> (KamoAI SP01 registry events)
Task status, priority, record-link kinds, Inbox and master-note sections
Svc_security publishes kamoai.platform.state, svc_kamoai subscribes to it (KamoAI SP02)
SecurityService announces the platform AI kill switch on kamoai.platform.state and KamoAI Service listens for it. rt.org.<org>.ai-workforce needs no new grant: ...
Image bubbles draw a 480px preview; the lightbox keeps the original
A chat image is drawn at most 240x240 CSS px and the bubble downloaded the whole original to do it — 3-8 MB per phone photo, per viewer. AttachmentChip now draw...
Image attachments are drawn from a 480px preview, not the original
A chat bubble draws an image at most 240x240 CSS px and every viewer downloaded the original to do it — 3-8 MB per phone photo. GET **************** now answers...
/image/preview cuts a chat photo into one 480px WebP
A chat image attachment is drawn at most 240x240 CSS px and every viewer downloaded the original to do it — a phone photo is 3-8 MB. MediaService will store one...
Draw logos from the server's pre-sized variants, never the multi-MB original
A member saw the org header logo small in the composer but a >3 MB image in the sent mail: every logo surface linked `img/logo-full.svg` / `img/logo.svg`, which...
Register logos load a pre-sized copy, and the original when it is missing
Each theme folder now carries img/sized/<stem>/h<rung>.webp beside every logo. A PNG org's logo.svg / logo-full.svg is its whole upload wrapped in base64 (sever...
Sign-in logos load a pre-sized copy, and the original when it is missing
Each theme folder now carries img/sized/<stem>/h<rung>.webp beside every logo. A PNG org's logo.svg / logo-full.svg is its whole upload wrapped in base64 (sever...
Inline pre-sized PNG logos; footer badges served at the drawn height
Transactional emails only inlined a logo when the original was an SVG under 512 KB. A PNG logo org's email linked the whole upload instead — crm's 2.2 MB logo-f...
Pre-sized copies of every org logo beside the original
Every surface drew org logos from the original upload: 2.2 MB for crm's full logo at a 30-56px nav/header, 2.95 MB (its .svg stand-in) in the email composer, 4....
Draw the org's logo from its pre-sized variant, the original only if it is missing
A signing page drew the org's uploaded logo — crm's logo-full.svg is 2.95 MB — at 28-44px tall. The theme service now cuts img/sized/<stem>/h<rung>.webp beside ...
Logos ask for a pre-sized variant, and fall back to the original
An organization's logo is drawn 30-180px tall here but downloaded whole: crm's logo-full.png is 2.2 MB, its .svg stand-in 2.95 MB. ThemeLogo now asks for img/si...
/image/logo-variants cuts a logo into pre-sized PNG + WebP rungs
Org logos are uploaded once and drawn everywhere at 24-120px, and every surface downloaded the original: crm's logo-full.png is 2.2 MB (its .svg stand-in 2.95 M...
Sending mail needs a seat, for people and AI members alike
A member without a licensed seat is refused with the shared 403 SEAT_REQUIRED body before anything is sent: POST /api/email/send, the shared-mailbox send, and t...
Meetings, group chats, attachments and calls need the seat that includes them
The chat picker lists only the models the member may pick
The picker read the administrator's model list (403 without MANAGE_AI_MODELS) and offered providers, which never selected a model. It now reads GET /api/ai/mode...
Migration for org_alias_domains, seeding the platform org's two
Creates **************** and seeds the platform org (is_top_level) with kamouniverse.com (default, carrying forward the old hardcoded platform.mail.domain) and ...
Read the composer's alias-domain default from org_alias_domains
**************** used one hardcoded domain (platform.mail.domain, kamouniverse.com) as a synthetic send-as default, and only for the platform org **************...
Add org_alias_domains, the per-org form of the platform mail domain
Generalizes the single hardcoded platform.mail.domain (kamouniverse.com, and only for the platform org) into a table any org can hold any number of rows in. Ema...
The AI Workforce app and its four rights; the app-mirror guard reads Java again
A private inbox prefix for new services, and the LOS webhook worker is opt-in
Services log in to Redis with a username and password when given one
One seat rule for the console and every service that enforces it
The resolver reads the member with its organization fetched and opens no transaction of its own, so a seat is decided correctly on a thread with no persistence ...
Log in to Redis as mail_rspamd
rspamd reads its password from Secret mail/rspamd-redis-auth, included into local.d/redis.conf. The pod gains fsGroup 11333: the image runs as 11333:11333 and a...
AI platform services and kill switch rights, and the switch's column
ACL users for the platform, rspamd and operators (default still open)
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.
