Mirror Maven Central through the Google GCS copy
Build 19 failed fetching tomcat-embed-core from repo.maven.apache.org with 'Tag mismatch' — a corrupted transfer, not a code error: the same commit builds clean...
Validate add-on codes before they can grant an app
active_addon_codes was written straight from the request body. That was harmless while nothing read the column, but it is now an authorization input: an add-on ...
Hide unreleased apps from the Plans & Billing catalog
**************** back the tab where a customer chooses what to subscribe to, so it must not offer a product still in the Not Available list — the same rule the ...
Keep the is-prefix on PlatformAccountSummary's wire names too
Same Lombok/Jackson hazard as PlatformOrgRow: isTopLevel() loses its `is` on serialization, so the DTO put `topLevel`/`platformProduct` on the wire while the fr...
Keep the is-prefix on the wire for isTopLevel/isPlatformProduct
Lombok generates isTopLevel() for a `boolean isTopLevel` field and Jackson strips the `is` prefix, so the live endpoint was serializing `topLevel` and `platform...
Declare security matchers explicitly so the service can start
The service has not deployed since 2026-07-03; every pod since has crash-looped before the context loaded: This method cannot decide whether these patterns a...
Serve the org directory as a filtered, sorted, paginated page
GET /orgs takes page/size/q/sort/dir plus seven filters and returns the house page envelope with estate-wide aggregates. GET /orgs/{orgId} serves full detail fo...
Batched page hydration at a constant query count
Parent titles, primary domain, the plan/market behind the entitlement and the subscription-catalog flag are each one batched IN (:ids) over the whole page, so a...
Directory row/page DTOs and the native query repository
PlatformOrgRow carries the two facets separately: entitlement (inbound subs targeting the org -- what governs it) and billing held (accounts the org owns -- non...
Org directory SQL with per-facet CTEs
Held accounts, inbound subscriptions, members, licensees and children each aggregate in their own CTE before being joined to orgs. Joining them in one pass woul...
Validated, clamped org directory request
Size clamps to [1,100] and an unrecognised sort falls back to title, so a hand-edited URL can neither request the whole estate nor reach the SQL as free text. T...
Derive entitlement mode through one shared, deterministic resolver
TrialAdminService picked its trial subscription with findFirst() over an unordered list, so an org holding both a pending and an active trial could report eithe...
Harden the kubectl download against flaky egress [skip ci]
dl.k8s.io over the runner's egress intermittently drops mid-transfer: curl: (56) OpenSSL SSL_read: decryption failed or bad record mac which fails the deploy ...
Serialize Long ids as strings to stop org-id precision loss
Org ids are CockroachDB unique_rowid() values that exceed JS MAX_SAFE_INTEGER. BillingService was serializing them as raw JSON numbers, so kamo-internal's JSON....
Expose trialExpiresAt on platform org summary for the admin trials UI
Platform-admin apply/extend/status trial endpoints + DTO trialExpiresAt
Migrate to k1m1 (clone+registry+kubeconfig from k1m1, drop k2m1, simple kubectl install)
Register esign repositories for the meter submission bean
EsignMeterSubmissionService needs EsignUsageRecordRepository, but @EnableJpaRepositories didn't scan com.kamo.z.shared.esign.repos, so the context failed to sta...
E-sign usage metering + consumer self-serve checkout
#4 metering: - EsignMeterSubmissionService (@Scheduled daily): aggregates API-origin EsignUsageRecords per org+period; first 40/period included, the rest subm...
Back metered add-on prices with a Billing Meter
Stripe (>= 2025-03-31.basil) rejects the legacy usage_type+aggregate_usage metered model ('metered prices must be backed by meters'), so USAGE_BASED add-on pric...
Manage Organization.isPlatformProduct from Platform → Orgs
PlatformAccountSummary exposes isPlatformProduct + hasSubscriptionMarket; new PUT **************** (platform-admin gated) sets the flag and invalidates the org'...
Scope concurrency to build jobs, not Kubernetes deploys
Workflow-level concurrency serialized the whole pipeline (including kubectl rollouts). Move the group to the build job only so deploy jobs from different runs c...
Add @JsonProperty to is*-prefixed boolean DTO fields
Lombok generates isXxx() is-getters for boolean fields named isXxx. Jackson strips the leading 'is' from is-getters and serializes them as 'xxx' rather than 'is...
Include subscription-targeting accounts in org list
listForOrg now also returns accounts whose subscriptions target the requested org — not just accounts directly owned by it. In the multi-org model the paying Ac...
Subs target a sub-org; per-sub members split from account admins
Subscriptions now require targetOrganizationId on create — the (account, market, target_org) triple is the new uniqueness key. AccountBillingMemberService is sp...
Use Account.members via AccountMember; rename isGroupPlanManager -> isAccountManager
The Account is now the group, so all references to the old AccountBillingMember entity are pointed at the new generic **************** entity. The "group plan m...
Rewrite BillingService onto Account-based entities
The BillingService is now Account-centric. Member-driven flows (e.g. "add a card", "subscribe to a plan") now go through an Account that auto-creates for the me...
Use **************** primitive getter
isOrganizationOwner is a primitive boolean on TeamMember, so the Lombok- generated accessor is isOrganizationOwner() not getIsOrganizationOwner(). Fixes compile...
Rewrite BillingService around BillingGroups
Deletes the org-level **************** controllers, services, and DTOs. Introduces: - BillingGroupController mounting groups, members, subscriptions, licenses,...
Expose commerce subscription on GET /subscriptions/current
When no Stripe mirror row exists, resolve the org active commerce SubscriptionRecord (e.g. COMP grants), include paymentMethod and plan features. Fixes Apps set...
Rebuild for kamo-shared-library update (remove OrganizationType, add isTopLevel)
Rebuild for kamo-shared-library update (remove OrganizationType, add isTopLevel)
Add PlatformAdmin controller + service for comp plan grants
- PlatformAdminController at /api/billing/platform (class-level @PlatformAdminOnly) - GET /orgs, GET /orgs/{orgId} - POST /orgs/{orgId}/grants, PATCH|DELET...
Rebuild for kamo-shared-library update (CREATE_CHILD_ORG right + apply-to flags)
Pulls the new RoleRightType.CREATE_CHILD_ORG (id 131), the three apply-to flags on ChildOrgSecurityModel, the two 13-arg service overloads, and the AppliedModel...
Rebuild for kamo-shared-library update (appConfig upsert-only fix)
Pulls the hardened **************** that no longer deletes appConfig rows whose service types are absent from the caller's payload — prevents silent data loss w...
Rebuild for kamo-shared-library update (effective-feature resolver)
Picks up the new AppliedModelEnforcementService methods (computeAvailabilitiesMap, isAppEffectivelyEnabled, getEffectivelyEnabledAppTypes, computeEffectiveFeatu...
Enforce team-member pay-fees setting at Stripe customer creation
Bumps kamo-shared-library dependency to 1.5.0 so BillingService can resolve the new AppliedModelEnforcementService, and wires team-member vs org pay-fees enforc...
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.
