Mabadiliko
Nini kipya.
Kila kuboresha jukwaa, kama ni meli.
· BillingService
Rewrite BillingService around BillingGroups
Deletes the org-level **************** controllers, services, and DTOs. Introduces: - BillingGroupController mounting groups, members, subscriptions, licenses, payment methods, and invoices under /api/billing/groups. - BillingGroupService (lifecycle + Default Group + Free baseline), BillingGroupMemberService (one-group-per-member enforcement), BillingGroupSubscriptionService (Stripe sync with fallback to FREE_DEFAULT on cancel/lapse), **************** BillingGroupInvoiceService, LicenseService (auto-deactivation priority + inverse-priority reactivation). - PlanCatalogService + PlanCatalogController at **************** - StripeWebhookService consuming subscription / invoice / payment-method events. - EntitlementInvalidator publishing Redis invalidation signals. - PlatformAdminService + PlatformAdminController returning per-org roll-ups.
· kamo-shared-library
Replace org-level billing with BillingGroup model
Introduces BillingGroup, BillingGroupMember, BillingGroupSubscription, BillingGroupLicense, BillingGroupPaymentMethod, BillingGroupInvoice, and BillingGroupConfig entities (all under shared commerce/billing/billinggroup). Drops the old BillingSubscription / BillingCustomer / BillingConfig / BillingPaymentMethod / BillingInvoice / BillingCredit / BillingUsageSnapshot entities entirely — every org now gets a Default Group with a FREE_DEFAULT KamoCRM subscription as its baseline. Adds SecurityModelCommerceMarket junction linking security models to commerce markets with per-scope enablement.
· SecurityService
Interaction Center member line uses job titles
Replace RBAC role title with jobTitleOfficial, fallback to JobTitle catalog title for TeamMember, and the label Member for base Member records in the by-department payload role field.
· kamo-internal
Official job title field for team members on my-profile Position card
· kamo-shared-library
Add TeamMember.jobTitleOfficial optional string column (60 chars)
· SecurityService
Expose and persist jobTitleOfficial for team members on profile and member-security APIs
· KlusterServices
Use ECDSA P-256 for cert-manager Certificate specs and migrate RSA
· kamo-shared-library
Add findTeamMemberById for reliable TeamMember resolution
· kamo-shared-library
Load branch types with security models by org id
· kamo-shared-library
Optional Cache-Control on object upload
Used by theme provisioning so globals.css and config.json instruct browsers and proxies to revalidate instead of serving stale cached objects.
· SecurityService
ThemeRevision in config and cache headers on theme assets
Emit themeRevision (epoch ms) in config.json on each write; set Cache-Control on config, globals.css, and site.webmanifest uploads so edge caches revalidate.
· kamo-shared-library
Add **************** for avatar cleanup
Used when removing an avatar so member overrides referencing the same row can be cleared before delete.
· kamo-internal
Clear wizard sessionStorage on fresh create via ?fresh=1
Navigate from Network to create with ?fresh=1, strip the query, and use a short-lived lock so React Strict Mode does not restore an old draft before persist runs. Wizard draft lives in sessionStorage (not localStorage).
· kamo-shared-library
Alcohol/tobacco/firearms compliance policies
- CHILD_ORG_SECURITY_MODELS columns and entity defaults MEMBER_SELECT - DTO and ChildOrgSecurityModelService create/update normalization - AppliedModelEnforcementService applies policies to child org ATF flags and singleton ages
· SecurityService
Expose ATF compliance policies on models and creatable branch types
- OrganizationController applies model enforcement before age assertions - SecurityModelController and MasterModelController pass policy fields - BranchTypeController includes policies in /branch-types/creatable
· kamo-internal
Compliance wizard from security model policies
- Branch types API maps alcohol/tobacco/firearms policies into wizard state - Dynamic Compliance step: omit from nav when model fixes all ATF and ages - Age and ATF controls only when MEMBER_SELECT or multiple age options - Review shows only fields the user was prompted for; title Compliance Settings - Settings: ATF policy radios under Allowed Member Age Ranges (security model) - Submit uses effectiveComplianceForSubmit for enforced values
· SecurityService
Align KnownAliases with DNS and auto-cert (add mail, play, apps, sign; drop app, media)
· kamo-marketing
Show live state with changelog link and daily count
Replace preview countdown and signup copy with a compact "Now LIVE" callout, keep the changelog link, and always show today’s change count from the API after it loads. Update previewBanner strings across locales.
· SecurityService
Make RoleRightsSyncService fully self-healing on every boot
Adding or removing a RoleRightType must never again require running KamoInitializerService. syncAll() now runs three phases on every startup: 1. Heal constraints — drop every CHECK constraint on every right-bearing table and ensure the two upsert-required unique constraints exist. Hibernate bakes enum values into CHECK constraints at CREATE TABLE time and never updates them, and @UniqueConstraint only takes effect on CREATE TABLE, so both drift whenever enums evolve. @Enumerated already enforces valid values at the Java layer. 2. Delete orphan rights — DELETE WHERE right_type NOT IN (current enum) across all six right-bearing tables: org_role_rights, **************** member_rights, member_rights_applied, job_title_rights, dept_rights. Handles both ORDINAL int and STRING enum-name storage. 3. Insert missing rights — unchanged; relies on the unique constraints ensured in phase 1. Idempotent — safe to re-run. Adding/removing enum values now requires only restarting SecurityService.
· kamo-internal
Add Platform Administration settings — org plan grants, events, plan catalog
- New pages under /settings/platform (guarded by hasPlatformAdminAccess): - /organizations — list every org, grant/modify/revoke COMP plans with reasons - /events — audit feed of **************** - /plans — read-only catalog including internal (isPublic=false) plans - useUserInfo: derives hasPlatformAdminAccess from isGodModeActive() OR (teamMember.isOrganizationOwner AND organization.isTopLevel) - billingApi: platform namespace (listOrgs, grantPlan, modifyGrant, revokeGrant, listPlans, listEvents) + X-God-Mode-Active header when localStorage flag set - /api/billing proxy: forwards X-God-Mode-Active from client to BillingService - Settings hub + SettingsStatusWindow: new "Platform Administration" group - BillingManager: platform-owner banner replaces Stripe form for top-level org (wired into /settings/account as the billing tab) - FeaturesManager: "Platform Owner — Internal" header and suppressed upgrade CTAs when org is top-level and current sub is COMP - Organization class / OrgNetwork / PublicProvider: add isTopLevel; remove dead `type` field and the leftover consumers in network page + relationship manager - Remove deprecated OrganizationType.ts
· BillingService
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|DELETE /orgs/{orgId}/grants/{subId} - GET /plans (includes isPublic=false) - GET /events - PlatformAdminService: grant creates COMP SubscriptionRecord, cancels prior active sub, emits SubscriptionEvent **************** 5s idempotency - @PlatformAdminOnly + HandlerInterceptor: allow god-mode-active OR (TeamMember.isOrganizationOwner AND Organization.isTopLevel, re-read from DB) - SubscriptionRenewalScheduler: COMP branch cancels on expiry (COMP_EXPIRED) and never calls Stripe - BillingAdminService: MRR/ARR aggregation excludes paymentMethod=COMP - Long ids exposed as String (CockroachDB unique_rowid precision)
· InitializerService
Seed Organization.isTopLevel for kamocrm and OWNER_UNLIMITED self-comp plan
- DataLoader: drop OrganizationType arg from createOrg, set isTopLevel=true on kamocrm - KamoCRMAgeReqUpdateRunner + test: match on IS_TOP_LEVEL = TRUE instead of TYPE - OrganizationTypeRemovalRunner: idempotent ALTER TABLE DROP COLUMN type - PlatformOwnerPlanSeeder: idempotently ensure kamocrm-owned OWNER_UNLIMITED plan covers every feature and holds a permanent COMP subscription for itself
· kamo-shared-library
Add Organization.isTopLevel, PaymentMethod.COMP, COMP_* event types; remove OrganizationType enum
- Organization: replace dead `type` field with `isTopLevel` flag for platform-owner identification - PaymentMethod: add COMP for complimentary platform-admin grants (no Stripe) - SubscriptionEventType: add COMP_GRANTED, COMP_REVOKED, COMP_EXPIRED, COMP_MODIFIED - OrganizationRepository: add findFirstByIsTopLevelTrue() - OrganizationService: drop setType() call; fields are now driven by isTopLevel
· kamo-internal
Hide unsubscribe button for user's original org on network page
· SecurityService
Set orgOriginal on registration and expose isOriginalOrg in my-networks
· kamo-shared-library
Add orgOriginal field to User to track registration org
· kamo-internal
Member-requestor support rights gating and dual-mode ticket view
- NavTop: show SupportButton for any support right (agent or member) - SupportButton: gate each dropdown item by right — Create/View Tickets, Request Webinar, My Webinars shown only when the right is held - SupportTicketListTab: dual-mode — agents see full table with topic filter and assigned-to-me toggle; member-requestors see their own tickets only (createdByMe=true), simplified columns, New Ticket CTA - support/page.tsx: gate Tickets/My Webinars/Analytics tabs by right - Settings pages (account, departments, integrations, operations): add CONFIGURE_SYSTEM redirect guard; settings dashboard My Account section gated by CONFIGURE_SYSTEM
· kamo-shared-library
Add member-requestor support rights (133-136)
Adds four new SUPPORT-scoped rights for non-agent members: - **************** (133) - CREATE_SUPPORT_TICKET (134) - REQUEST_WEBINAR (135) - VIEW_MY_SCHEDULED_WEBINARS (136)
· kamo-internal
Remove column filters from members and team members tabs
· kamo-internal
Add Sync Rights button to SecurityRoleManager for top-level orgs
Button is only visible when organization.hasParent is false. Calls POST /api/security/roles/sync-rights then reloads the roles table.

Ulimwengu wako unasubiri.
Kuanza bure katika dakika. Ongeza bidhaa wakati wowote wewe ni tayari - hakuna uhamiaji, hakuna logins mpya.
Bure milele - hakuna kadi ya mkopo inahitajika