Compose template engine, view models, helpers, partials and wrapper
Empty ineligible members on every write path and notify rights-change listeners
A chunk notifies its AI members before its humans, so a supervisor cascade's fresher recalculation of an AI is that AI's last notification.
Capability and provider-type catalogs, typed attribute codec
The codec also refuses, as invalid_attribute, a null list item (a bare NullPointerException before), a list or object where text belongs (stored as the text "[e...
Compose manifest, JavaScript text semantics and icon URIs
ComposeText also ports logoVariants.ts (PNG logo rungs, SizedLogo) and badges.ts (uploaded-badge ?h= scaling), and follows JavaScript exactly where Java differs...
Bound AI members by their supervisor's applied rights and the never-grantable floor
Compose manifest, fixtures and 232 goldens from the legacy renderers
The fixtures carry the logo ladders (full: header rung with ?v=, a laddered logo badge; company: header and signature rungs without a revision) and the uploaded...
Registry entities, capability/value/price/opt-out rows, repositories
AiProvider and AiModel gain the registry columns (scope, hosting, auth, facts, platform key, lifecycle, origin); provider type and cost tier map through the dig...
ARTIFICIAL template resolution and the rights-change listener seam
Task columns, links, comments, Inbox kind, note links and authorship
Never-grantable AI rights, ARTIFICIAL template type, AI access-log events
Recurrence bound, reminder coder and EXDATE entity; UTC zone default
STRING registry enums, 24 provider types, digit-tolerant converters
AI member state, org pause and kill-switch columns (read-only in JPA)
Task status, priority, record-link kinds, Inbox and master-note sections
Keep kamo-shared-library at 1.6.1, the one version every consumer can resolve
db737a54 moved the library to 1.6.2, and only emailservice and initializerservice moved with it. About thirty other services pin 1.6.1. Their CI clones this rep...
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...
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 ...
AI platform services and kill switch rights, and the switch's column
Layout choices for a published loan application
Three columns on LEAD_VENDOR_PRODUCTS, chosen on the publish dialog and read by kamo-apps to lay the public mortgage form out: - APPLICATION_LAYOUT NORM...
Arive as a second external LOS, and a provider seam that is real
Arive is reachable only through its invite-only Zapier app, so the connection is Zapier in both directions: Kamo posts commands (create loan, update loan stage,...
An org domain's DKIM private key never serializes
5de57705 added OrgDomain.dkimPrivateKey — the key that signs a domain's transactional mail — with a comment saying it is never sent to the browser, but nothing ...
History records what happens after a lead exists, not its starting form
recordCreated wrote the CREATED row and then diffed the new lead against an empty snapshot, so every non-null starting field became a FIELD_CHANGED row — and th...
Add a per-org primary application, and an APPLY domain alias
LeadVendorProduct gains isPrimaryApplication: at most one published application per org is "primary" and is the one kamo-apps renders at the root of the org's a...
DKIM key fields for an org domain's transactional mail
Adds **************** to org_domains, mirroring the spf_verified/spf_checked_at pair already there — so a domain can hold a generated DKIM keypair and whether i...
CommitLog carries a maintained translation_count
Adds CommitLog.translationCount and **************** the library side of replacing the changelog translation-backfill sweep's GROUP BY .. HAVING scan with a pla...
Member_rights_applied writes only the difference, and reads roles in bulk
Two related fixes to MemberRightsAppliedService, both in the same file: 1. **************** (via recalcChunk) and **************** unconditionally deleted a...
Stop eager-fetching LeadVendorProduct's org chain for a single-id read
findById() on LeadVendorProduct pulls its default-EAGER vendor, which itself eager-fetches its own org AND its market (which eager-fetches ITS org again) — and ...
Batch two translation lookups the planner was doing badly per row
kbservice's public KB endpoints and its translation-retry sweep both asked KbArticleTranslationRepository one row at a time. Production's pg_stat_statements sho...
A gift card's balance is editable again, by whoever may manage pricing
19505faf stopped updateGiftCard from reading currentBalance so a member of one org could not rewrite another org's card by uid. The org-scoped lookup already cl...
Org-scope RetailService and ****************
Every get/update/delete-by-uid handler under CommerceMarketController's retail sub-resources (categories, brands, attributes/values, images, variants, tags, rev...
UpdateMemberAccess rejects an editor and target in different orgs
**************** compared only security levels and the editor's owner flag, never the two members' organizations. Its one caller today (SecurityService's Member...
RegisterExistingDocument checks the dat's org, and a template can be found by imgId within one
Two org-scoping gaps the esig/imaging audit found, both in shared entry points other services build on: - **************** (the conversion service's dedup-skip...
Count an org's unconfirmed talent-alert rows for the anonymous form's cap
DocsService's public talent-alert subscribe endpoint sends a confirmation email on every accepted call, with no limit on how many not-yet-confirmed rows one org...
UpdateDocType now requires the doc type to belong to the document's own org
ImageService.updateDocType loaded the target ImgDocType by UUID alone; requireEditableAndOwned proves the caller may edit the Img, but says nothing about whose ...
Org-scoped counterparts for the thumbnail-backfill candidate queries
DocsService's /backfill-thumbnails admin endpoint selected candidates from **************** (platform-wide, no organization predicate) or, as a last resort, a r...
The Notes app is "Notes & Checklists"
The Notes app holds checklists as well since 2026-09-23 (steps ticked off as they are done, a step that waits until the steps before it are finished, a checklis...
A notification can say whose doing it is
MemberNotification gains ACTOR_MEMBER_ID (INT8) and ACTOR_NAME (255): the member who caused it - who dealt you in, whose meeting is starting, who wrote to you -...
UpdateDocType now requires the doc type to belong to the document's own org
ImageService.updateDocType loaded the target ImgDocType by UUID alone; requireEditableAndOwned proves the caller may edit the Img, but says nothing about whose ...
Org-scoped counterparts for the thumbnail-backfill candidate queries
DocsService's /backfill-thumbnails admin endpoint selected candidates from **************** (platform-wide, no organization predicate) or, as a last resort, a r...
Count an org's unconfirmed talent-alert rows for the anonymous form's cap
DocsService's public talent-alert subscribe endpoint sends a confirmation email on every accepted call, with no limit on how many not-yet-confirmed rows one org...
Audio uploads pass the MIME check, and slides carry media metadata
Every audio upload but MP3 was refused as a MIME mismatch. An upload is accepted only when the browser's type and Tika's sniff resolve to the same ImageMimeType...
A Hosted Computer is never provisioned automatically
Hosted Computers was reachable by both automatic provisioning paths, and either one would have put it in front of every organization on the platform at once. F...
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.
