Live Change Log

See what we're building, in real-time. Every feature, fix, and improvement shipped across the platform.

17,856
Total Changes
4,574
Features
4,510
Fixes
32
Projects
Filter by project
All Projects17,856AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService347InitializerService299KBService74KlusterServices539MCPGatewayService43MediaService460RAGService61SecurityService1,518TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,550kamo-login318kamo-marketing580kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore670Docs226Feature4,574Fix4,510Other6,781Performance136Refactor273Revert23Style48Test68Upgrade1
September 11, 2026
FixSecurityService

The General tab counts what the Organizations tab calls Active

6c8d789 moved the platform overview's organization count onto findAllLive(), which also drops orgs created by synthetic (is_fake) accounts β€” so the General tab ...

KamoΒ·11m ago
FeatureSecurityService

Say which locales each entry is really translated into

The marketing site's sitemap now lists every language version of every entry, and each entry page names the others as its hreflang alternates. A translation row...

KamoΒ·17m ago
FeatureSecurityService

Void an organization, and let no way in reach a voided one

Platform -> Configuration -> Organizations can now void an organization. The void is orgs.is_active = FALSE; this commit adds the action and makes every way INT...

KamoΒ·49m ago
FeatureSecurityService

Give every public entry an address, and page the list on the server

The public changelog served entries with no identifier, so the marketing site could neither link to one nor list them in a sitemap. Each entry now carries a slu...

KamoΒ·4h ago
FeatureSecurityService

Bake the careers site's logo overlay into config.json

kamo-careers paints the org's logo in its header and has no OrgContext; it reads the theme config.json on the server, the same file login, register and apps tak...

KamoΒ·16h ago
September 10, 2026
FixSecurityService

Quote and borrower-portal links only name a live domain

QuoteEmailClient settled for any active domain, verified or not, so an org still setting up its white-label domain had quote links mailed to sign.<that domain>....

KamoΒ·22h ago
FixSecurityService

An organization's .svg names show its own art, not the platform's

A new organization's folder is seeded from the base theme, so it starts out with KamoCRM's art under img/logo-full.svg and favicon/favicon.svg. An organization ...

KamoΒ·22h ago
FeatureSecurityService

Say when the desk changes

Granting or revoking Exec2Exec Access now publishes exec2exec.desk.changed, so MediaService can put an executive on every chat β€” or take them off β€” as the toggl...

KamoΒ·1d ago
FeatureSecurityService

Store the Welcome Message

The greeting the platform sends first over Exec2Exec, on the platform config singleton where every other platform-wide setting already lives. Two new endpoints...

KamoΒ·1d ago
September 9, 2026
FixSecurityService

An org without the app must not accrue achievements either

The award gate asked for VIEW_ACHIEVEMENTS and stopped there. Rights are not entitlement-filtered, so that right stays granted β€” and keeps answering true β€” in a...

KamoΒ·2d ago
FixSecurityService

Refuse to award a member whose security type excludes it

AchievementController checks VIEW_ACHIEVEMENTS on all four of its endpoints, and that read like the rule being enforced. It was not: it is the rule enforced on ...

KamoΒ·2d ago
September 8, 2026
FixSecurityService

The same-commit-rebuild guard could never fire, so every dispatch failed

Rebuilding this service without a commit of its own β€” a workflow_dispatch, a re-run, or a kamo-shared-library change it must pick up β€” has been failing at deplo...

KamoΒ·3d ago
September 7, 2026
FixSecurityService

A pane lock survives the editor alt-tabbing away

The client heartbeats its pane lock every 15s and the sweeper released any lock unheard from for 45s β€” three missed beats, which reads like a generous margin an...

KamoΒ·3d ago
FeatureSecurityService

Probes for the eleven derived easter eggs

Eleven of the fifty secrets are questions about durable data rather than about whether a member has SEEN something, so they are DERIVED and they backfill: a mem...

KamoΒ·3d ago
FeatureSecurityService

Award Loitering from the session that is still open

The measure is the age of the *** the member is holding, so the session had to start carrying the instant it was minted β€” nothing anywhere recorded it, because ...

KamoΒ·3d ago
FeatureSecurityService

Serve the three layers of the contact-effect stack

GET /api/security/contact-effects returns the platform, org and member layers in one round trip; PUT and DELETE on /{scope} write and reset one layer. The servi...

KamoΒ·4d ago
ChoreSecurityService

Baseline the single-action event endpoint

Same door and same reasoning as its sibling one line above: X-Internal-Auth, constant-time, fail-closed. Genuinely pre-session β€” a mobile sign-in is reported by...

KamoΒ·4d ago
FeatureSecurityService

Award and backfill the single-action achievements

Twenty-six of the thirty-five are questions the database can already answer, so they are awarded by asking it. SingleActionProbes holds one EXISTS per achieveme...

KamoΒ·4d ago
FeatureSecurityService

Award the six tracking-link achievements, and backfill them

**************** reads all six of a member's marketing counters in one row and settles all six tracks against them. Wired into /self and /self/pending beside th...

KamoΒ·4d ago
ChoreSecurityService

Baseline the growth-mission sync endpoint

**************** caught the new internal endpoint, which is what it is for: with anyRequest().permitAll(), a handler that resolves no caller is reachable throug...

KamoΒ·4d ago
FeatureSecurityService

An owner's storage position, carried on a payload that already exists

The launchpad is getting a storage meter, and the obvious way to feed it is a request of its own on every page load. The numbers do not deserve one: "used" come...

KamoΒ·4d ago
FeatureSecurityService

Award SPREAD_THE_WORD from the Growth Hub

**************** counts a member's APPROVED Growth Hub submissions and settles their SPREAD_THE_WORD level against that count. It RECOUNTS rather than being to...

KamoΒ·4d ago
FixSecurityService

The baseline award was two transactions, not one

`ensureBaselineFor` calls `ensureBaseline` on `this`, and Spring's transaction advice is a PROXY β€” a self-invocation does not pass through it, so the inner REQU...

KamoΒ·4d ago
FeatureSecurityService

Award Join The Team to everybody, without a backfill

SecurityService owns the member, so it owns the achievement. It awards, reads, acknowledges and publishes; MediaService only relays. EVERY MEMBER GETS JOIN THE...

KamoΒ·4d ago
FixSecurityService

A callback can carry the link to the call

The lead page composes a callback in the calendar's own dialog, and every field that dialog collects is meant to survive the trip through here. meetingUrl did n...

KamoΒ·4d ago
FeatureSecurityService

A callback can invite the lead it is with

Scheduling a callback told the lead nothing. The dialog said so outright β€” "The lead is not notified" β€” and the only way to get a customer the time in writing w...

KamoΒ·4d ago
September 6, 2026
FeatureSecurityService

Send To AI tells everybody on the thread, not just the reporter

The dispatch sends the same letter MediaService does, so its audience has to move the same way: every participant in the report's thread minus whoever acted, ea...

KamoΒ·5d ago
FixSecurityService

Wire the god guard into the identity-rights test's policy

UserAccountEditPolicy took a third constructor argument and this test still built it with two, so test-compile failed β€” and CI runs `mvn package -DskipTests`, w...

KamoΒ·5d ago
FeatureSecurityService

Only a god may administer a god, and no god is impersonable

MANAGE_USERS reached the break-glass identity. UserAdminController guarded only the System User, so a non-god holder could disable a god account and revoke its ...

KamoΒ·5d ago
FeatureSecurityService

Say which plan an organization is on, and who may change it

The console could tell that a trial was running and nothing else. entitlementSource is "TRIAL" or null, so free, expired-trial, paid and comped organizations we...

KamoΒ·5d ago
FixSecurityService

Keep the dispatch's status write in step with the denial reason

Two services move a system bug's status, and only one of them knew about the new denial_reason column. A dispatch applying IN_PROGRESS to a report that had been...

KamoΒ·5d ago
FeatureSecurityService

An administrator may grant a peer or a lesser, never a superior

MANAGE_PLATFORM_ADMINS is the right to administer the platform's access list, not a right to invent access. Without a ceiling it was silently every right at onc...

KamoΒ·5d ago
FeatureSecurityService

Sweep the dev machine for coder usage and publish what moved

Feeds the two meters the Linux Desktop menu now draws β€” how much of a member's A sweep rather than a push, because the numbers are born on the machine and stat...

KamoΒ·5d ago
FeatureSecurityService

Deliver ribbon wording, and generate favicons from a tab icon

Provisioning learns two things: what an organization wants its public corner ribbons to say, and which artwork its browser-tab icons should be cut from. **Ribb...

KamoΒ·5d ago
FixSecurityService

Log a referral code that arrives with no visitor guid

A signup carrying a marketing code but no visitor guid had its referral dropped in complete silence β€” the branch that publishes the attribution event is gated o...

KamoΒ·5d ago
FeatureSecurityService

Record the advert for a candidate who signs in instead of registering

Registration already wrote recentlyAppliedForId when an account was CREATED. This is the other half of the same funnel: plenty of people who press Apply on the ...

KamoΒ·5d ago
September 5, 2026
FeatureSecurityService

Record the advert a candidate registered for, and welcome them when hired

Registration on the /team path now accepts appliedJobId β€” the uid kamo-register parked when the careers board sent the candidate to /team?jobId= β€” and writes it...

KamoΒ·5d ago
FixSecurityService

Publishing an application opens its chat key to the page it is on

The support widget on a published application loaded with Kamo's default config instead of the org's: it auto-opened on desktop with auto-open turned off, wore ...

KamoΒ·5d ago
FeatureSecurityService

Publish an application deliberately, and give its page a chat key

`PUT **************** publishes or retires a product's public page and records which web chat its support widget speaks through. Enabling without one is refused...

KamoΒ·5d ago
FixSecurityService

Close the last two catalog-bump gaps, and stop echoing exceptions

Two reads and nine response bodies, both halves of the same report. SessionRefreshController loaded the member one statement before the rights read that was fi...

KamoΒ·5d ago
FixSecurityService

Stop handing the database's own error text to whoever is signing in

The catch-all at the end of login() put e.getMessage() in the response body, and that body is rendered verbatim on the sign-in screen. On 2026-09-05 the excepti...

KamoΒ·6d ago
FixSecurityService

Send the application receipt after the commit, not inside it

The submit handler is @Transactional, and it was calling EmailService inline β€” blocking HTTP into blocking SMTP with a 30-second read timeout, while holding a d...

KamoΒ·6d ago
FeatureSecurityService

Serve the public mortgage application, addressed by product

Three unauthenticated endpoints under **************** plus the CRUD behind the organization's own state licences. **The organization is named by the PATH, nev...

KamoΒ·6d ago
FixSecurityService

Stop stranding phones on a rotation they never received

KamoMobile was signing itself out at random, most visibly across app updates, and the exchange endpoint was doing it. Three separate ways: The secret rotated F...

KamoΒ·6d ago
FixSecurityService

Merge the digest output instead of declaring a second outputs block

The previous commit added an `outputs:` key to a job that already had one. Forgejo's parser rejects a duplicate mapping key and skips the workflow entirely, so ...

KamoΒ·6d ago
FixSecurityService

A rebuild of the same commit deployed nothing and reported success

The image is tagged with the commit SHA, so rebuilding the same commit produces an identical image reference. `kubectl set image` then changes nothing, the Depl...

KamoΒ·6d ago
FixSecurityService

The lockout warning promised the wrong rung, and the wrong count

The strike meter on the sign-in screen was telling people something the server then did not do. tierFor starts the five-second delay at the SIXTH failure, but a...

KamoΒ·6d ago
FeatureSecurityService

Expose what a seat change will cost before it is made

Raising a subscription's seat count now raises an invoice β€” a per-seat startup fee follows the person, so ten hires on a $99 plan is $990 and a large account ru...

KamoΒ·6d ago
FeatureSecurityService

Record which domains authorize us, so their mail can go out as them

Transactional mail currently picks its From address by asking who hosts an organization's MAILBOXES. That is the wrong question. Whether we may send as chinilaw...

KamoΒ·6d ago
FixSecurityService

A catalog-version bump must not read as "this host has no organization"

Org resolution funnels every lookup through one query helper that swallows the exception and answers Optional.empty(). For an organization that genuinely is not...

KamoΒ·6d ago

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing