Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· kamo-shared-library
VENDOR_CALLBACK_RESOLVED Event-Typ-Taste hinzufügen (0.6a imgress)
· kamo-shared-library
LoanIdentifier Registrierungssubstrat 42 getippte IDs (Schlüsselstein 0,5, Scheibe 1)
Neue pkg com.kamo.z.shared.mlos.identity (die inbound-webhook Routing-Taste): LoanIdentifierType (42 erstklassige getippte IDs, jeweils mit Cardinality + Ownership; @Enumerated STRING; singleActiveTypes() abgeleitet von Metadaten) + **************** + LoanIdentifier Entity (BaseUuid Long loanFileUid + denormalized organisationsId, entkoppelt von gesperrten LoedanFile; write-once@PreUpdate Wache wirft auf Wert/Typ/CustomSubtype Änderung, nur Status Flip erlaubt; @PrePersist normalisiert Emittent / Subtyp + setzt ANDERE<="customSubtyp) + LoanIdentiverRepository (Resolver-Sucher ist nur search-aid-only). Verifiziert lokal: mvn install BUILD SUCCESS, 49 MLOS Test-Tests (inkl. Single-aktiven Drift-Guard-Test, der das Enum-Set bestätigt, entspricht dem KamoInitializer part-index DDL). KamoInitializer DDL: Scan + 3 partielle Unique Indizes + ANDERE CHECK. RESOLVER + webhook ingress = der erste neue MLOSIdentifierService Microservice (aufgeschoben).
· kamo-shared-library
StewardFeedback Schwungrad - jedes Steward Urteil (Schleimstein 0.11)
Neue pkg **************** Anhängen-only StewardFeedback Boden-Wahr-Rede (FK ai_decision.uid; Urteil CONFIRM/OVERRIDE/MODIFY; Reg-B-ausgerichteter VernunftCode; correctedValue jsonb; istTestLoan gestempelt zur Schreibzeit per doc12 .4.4; @PreUpdate WORM Wache) + StewardFeedbackRepository + StewardFeedbackRücklehneRücklage, der alle DREE Phase-0-Schlüsselsteine in einem t ausmachtx (spine Urteil einer AiDecision + enqueues mlos.steward.feedback.aufgezeichnet durch die Event-Backbone-Extbox + stampft die Test-Partition). Recorder gated mlos.governance.enabled (Standard aus --Null-Strahl-Radius). KamoInitializer DDL: scan + steward_feedback-Indizes + FK zu ai_decision.
· kamo-shared-library
Unveränderliche AiDecision WORM Ledger + Zwei-Wand-EntscheidungGate (Schlüsselstein 0,3, Scheibe 1)
Neue pkg com.kamo.z.shared.mlos.decision (Greenfield Entscheidungsgeber, redigiert nie donotmodify): unveränderliche Anhängsel AiDecision (WORM via @PreUpdate Wache; lieeFileId ist ein Long FK to LoanFile.uid per doc01/gotchas, NOT UUID; supersession via supersedesDecisionId on the NEW row to stay WORM-consistent with the DB trigger) + ************ enums + AiDecisionRepository(leihberaumoskopische Sucher). Entscheidungsgrate = in-Prozess zwei-Wand-Bibliothek (legale Wand ABSOLUTE/nicht-tunable; Vertrauen Wand abstimmbar; nicht-tunable Plattform Sicherheitsboden unter) config-only @Component, keine repo dep, sicher estate-wide. DEFERRED zu Abhängigkeitsschnitten: DecisionInput (FKs the Phase-2 Katalog), StewardTask/OrchestrationState, Rechtsregistrierung, HMDA-Firewall CHECK, ModelVersion FK. KamoInitializer DDL hinzugefügt (ai_decision index + flagged DB WORM trigger need CRDB v24.x).
· kamo-shared-library
Mieter-Isolation-Gate für das Event-Hinbone (Slice 3)
Roadmap 0.10: ************ (die Pro-Tenant-Konsumanahe) + gehört zuTenant(subjekt,orgId) Token-weise Übereinstimmung, die NATS-Filterung spiegelt; forEvent lehnt jetzt nicht-positives OrgId (keine Ereignisse ohne Mieter) ab. MlosTenantIsolationTest ist das ausführbare Cross-Tenant Gate (inkl. Token-Gericht: oderg 12 passt nie zusammen oder g 123). MlosDeadLetterRepository erhält neben dem operatorisch gelenkten Quermieter einen org-scoped. Der Umfang der Mieter auf X-Internal-Auth Hopfen ist gebietsweit und auf den authenten Schlussstein verschoben; mit dem ersten konkreten Verbraucher folgt ein Isolationstest für Live-Broker.
· kamo-shared-library
Verbraucherseitige idempotenz, DLQ + Steward Replay (Slice 2)
Fügt die Zuverlässigkeit Kern, dass jeder MLOS Verbraucher Stecker in: ProcessedEvent dedup ledger (einzigartiger consumer_name+event_id) + MlosDeadLetter DLQ + MlosDeadLetterStatus; IdempotentEventProcessor (INSERT-or-skip dedup in der Handler tx so ein Ausfall rollt zurück die Marker; Dead-Briefe Vergangenheit maxAttempts statt Looping; deadLetterUnprocessable für unparseable Gift); DeadLetterReplayer (re-re-re-Ein DEAD-Buchstaben durch den Outbox als NEUE eventId mit causationId line -- no msg_id-unique/dedup-windowow-windowll, markiert REPLAYED). MlosEventEnvelope gewinnt @Jacksonized für Hin- und Rückreise-Enterialisation. Neue @Components teilen sich das mlos.outbox.enabled opt-in; repos sind im bereits gescannten Paket. Live AbstractMlosDurableConsumer (NATS-Abonnement) hat sich dem ersten konkreten Verbraucher verschrieben.
· kamolos
Adopt MLOS transaktionale Outbox (Produzent-Pfad)
Ermöglicht das Phase-0 Event-Rückgrat in KamoLOS: fügt com.kamo.z.shared.mlos.event dem @EnableJpaRepositories scan hinzu, mlos.* config (mlos.outbox.enabled=true, MLOS_EVENTS Stream + dedup Fenster, Kehrgelage), und ein Produzent-Pfad-Verdrahtungstest enqueue-AFTER_COMMIT-Restatori veröffentlicht genau einmal mit dem UmschlagId als Nats-Msg-Id. Schema (mlos_outbox_event + Indizes) wird separat von der vom Benutzer geführten KamoInitializer angewendet.
· kamo-shared-library
Transaktionaler Outbox Event Backbone (Phase-0 Keystone B)
Money/compliance-grade Produzentenpfad in NEW Geschwister pkg **************** (nie redigiert donotmodify): MlosEventEnvelope DTO + MlosOutboxEvent outbox entity/repo + OutboxWriter (single-tx enqueue) + OutboxRelay (AFTER_COMMIT hot-path + @Scheduled Kehrseite, veröffentlicht mit Nats-Msg-Id) + MlosNatsStreamConfigur (neuer MLOS_EVENTS Stream mit dem Dedup-FensterfensterNatsConfig fehlt). Verwende die gesperrten NATS Connection/JetStream Bohnen. Opt-in via mlos.outbox.enabled (default off), so dass nicht-adoptierende Dienste nicht betroffen sind. Exactly-once-effekt = transaktionaler Outbox + JetStream Nats-Msg-Id dedup. Consumer dedup/DLQ + CI Mieter-Isolation sind Slice 2/3.
· kamo-internal
Zeigt Datenschichten pro Stufe mit. EDT4 Meeresmaske + TRF2 Markierungen
Die Stage-Karten des Worldgen-Dashboards listen nun die Datenschichten auf, die jede Fliesenstufe backt, Akzentuierung der neu hinzugekommenen: die EDT4-Ozean (Seeverbindung) Maske unter Hydro, und TRF2 Spurmarkierungen + Laufzeit Gelände Einstufung im Transport. Reines Format/Daten Labels (STAGE_LAYERS in types.ts) keine neuen i18n-Strings. Stale/regen zählt schon nach dem Bewahren der Provenienz EDT3EDT4 / TRF1-TRF2 automatisch auflaufen.
· kamo-internal
Oberflächenfliese abgestandene + gezielt "Regenerate N" auf der Seite
Der Agent-Schnappschuss trägt nun Abgestandenheit pro Rezept (up-to-date / abgestanden / fehlt); plumb es durch die API + SSE auf die Seite: - Die Registerkarte Services zeigt eine Frische-Linie per Kachel-Service und der Start-Button wird "Regenerieren Sie N" (= abgestanden + fehlt), wenn es gezielte Arbeit gibt, oder "Up to date". - Übersicht Fertigstellung Kachel-Hinweis zeigt, wie viele Fliesen aktualisiert werden müssen. Start ist bereits Provenienz-getrieben auf dem Host, so dass die Taste löst eine gezielte Regent genau der abgestandenen/fehlenden Zellen.
· kamo-internal
Universe World-Generation-Admin-Seite
Fügt /settings/plattform/Universum unter Plattform-Verwaltung hinzu - eigene Plattform Karte + drei Sub-Tabs (Übersicht, Services, Aktionen) zum Start und zur Überwachung der KamoUniverse Weltdaten-Pipeline live. Backend (Nächste API, Plattform-Admin gated über die ***-Sitzung, gleiche Regel wie die Client-Wache): - app/lib/worldgenNats.ts: eine langlebige NATS-Verbindung + Status-Abonnent dass der aktuelle Status pro Stufe + Schnappschuss (im Bild + Redis) und Re-Emits auf einem In-Pro-Process-Bus für SSE. Publiert Startbefehle. - app/api/universum/Dienstleistungen GET Aktueller Stand jeder Stufe (Status + Fliese zählt + lockHeld). - ************ POST ein Startbefehl an den k3m1 Agenten. - app/api/univers/stream SSE Stream von Live-Status/snapshot-Ereignissen. Frontend (MUI + next-intl, Spiegelung der Konfigurationsseite): - verwendenWorldgen: ein gemeinsamer SSE-Stream (auto-reconnect) + start() für alle Registerkarten. - Übersicht: Agent/Batch/Completion/tile stat Fliesen + eine Live-Pipeline-Schiene. - Dienstleistungen: eine reichhaltige Karte pro Skript - Rolle + was sie leistet, Live-Zustand Abzeichen, Haben/totalen Fortschrittsbalken, letzte Veranstaltung und eine Starttaste (entsperrt, während jede Charge hält die globale Sperre). - Aktionen: die gesamte Pipeline oder eine einzelne Etappe (mit Bestätigung) durchführen, plus einen Schnappschuss aktualisieren. Wiring: NATS_URL hinzugefügt, um die configmap; "nats" Client-Abhängigkeit hinzugefügt. Die k3m1 Agent + Script Telemetrie live in Universum-Erdedaten; Strings in der Übersetzung Wörterbuch. tsc sauber auf alle neuen Dateien.
· kamo-shared-library
Case-unsensitive findByEmailIgnoreCase hinzufügen
E-Mails werden mit inkonsistenten Fall gespeichert (z.B. Sage@KamoCRM.com) und CockroachDB String Gleichheit ist case-sensitive, so findByEmailEmail vermisst auf Fall allein. Benötigt für Passwort-Recovery-E-Mail-Nachahmung.
· EmailService
Selbstheilen Mailbox-Konten von App DB (drift Erholung)
Die App DB ist die Quelle der Wahrheit, für die Mailboxen existieren sollten; KamoMail Konten leben in den Virtual_Users des Mailservers. Wenn die Mail DB Daten verliert, Mailboxen gehen auf dem Anbieter verloren, während App-Datensätze bleiben. - MailboxSelfHealService: beim Start + täglich, neu aufstelle jede KAMO_MAIL App mailbox fehlt bei virtual_users (frisches zufälliges App-Managed-Passwort). - syncMailboxen (die Einstellungen "Sync"-Aktion) drängt nun auch App-Anbieter für jede fehlende Mailbox, nicht nur Import Provider--App.
· kamo-internal
Komponieren/senden Sie im Auftrag von Switched Member Mailbox
- Thread mailbox-Besitzer MitgliedId vom Switcher über activeMailbox in der Compokist-Kontext (Ereignung + URL-Param). - Neue Nachricht / Antwort / Vorwärts öffnen Kompose für die ausgewählte Mitgliedspostfach: Aus Dropdown-Listen, dass Mitglied Mailboxen + Aliasnamen, Signatur personalisiert an sie und senden/entwirrten Authentifizierung als ihre Mailbox (mailboxId). - Selbstkompensieren unverändert, wenn keine Mitgliedspostbox aktiv ist.
· kamo-internal
Tragen Sie *** in pro-tab sessionStorage statt eines gemeinsamen Cookies
Die Session-ID lebte in einem Browser-Cookie über alle Registerkarten von einem geteilt -Ursprung, so dass ein zweiter Tab (Imitation) seine eigene Sitzung nicht halten konnte. Verschieben Sie den Träger auf sessionStorage (per-tab): - sessionClient: Token-Helfer + ein globaler Fetch-Wrapper, der die id als X-***-Token auf gleicher Herkunft /api Anrufe, plus eine einmalige Cookie-'sessionStorage Migration. Installiert über SessionBootstrap im Layout. - ************ Kopf-erster (Cookie Fallback) verwendet von generieren-otk, Sitzung/info, Sitzung/extend, logout, meet/invite-email. - generierenOTK + getKsemIdFromRequest bevorzugen X-***-Token dem Cookie. - /api/validate setzt kein *** Cookie mehr; gibt die ID und die /validate Seite speichert es in diesem Tab sessionStorage. - verwenden SieUserInfo + alle WebSocket-Hämme lesen die ID von sessionStorage. - Logout erfasst das Token vor dem Clearing Speicher, so dass die Redis-Sitzung wird immer noch für ungültig erklärt. Imitation jetzt öffnet /validate?otk=... in einem neuen Tab (gleicher Pfad als Login: Redis-Sitzung erstellte Server-Seite, OTK an /validate übergeben; neue Registerkarte erhält seine eigene Sitzung und die Admin-Tab ist unberührt. Entfernt die veralte keepPrev/ImpersonationBanner Return-to-Admin Maschinen. Orgs bleiben durch Domäne getrennt - unverändert.
· kamo-internal
God-Modus Impersonate Taste auf Mitglieder-Einstellungen Kopf-oder
Fügt eine oben rechts 'Impersonate'-Aktion auf /settings/member/[id], sichtbar nur wenn die angemeldete Sitzung den Gott-Modus (getIsGod) und das Ziel trägt ist nicht selbst/neu. Ruft die neue /api/security/Imitative an, dann tauscht die *** Cookie über den OTK-Pfad (/validate?otk=...&keepPrev=1) in einem neuen Tab. keepPrev bewahrt die eigene Sitzung des Admins in Redis; eine globale ImpersonationBanner stashes den Admin *** und bietet einen Klick 'Return auf mein Konto' (Sam-Ursprung-Cookies können nicht zwei Live-Sessions auf einmal halten). SettingsView erhält einen optionalen HeaderAction Slot.
· SecurityService
God-Mode Mitglied Imitation Endpoint
POST /api/security/personate prägt ein frisches ***+OTK für eine beliebige Mitglied der aktuellen Org des Anrufers, in der Anrufer-Sitzung mit sich führend Gott-Modus (GD). Aufzeichnungen der Mitglieds-ID des Gott-Adminis als SUDO_MEMBER_ID für Audit. Gleiche Login-förmige Sitzung Build als EnterAsController, aber gleich-org und Gott-gated statt Cross-Org.
· SecurityService
Rückkehr orgName + Sprache in /user-info
Lösen Sie den Display-Namen der org und die ausgewählte Sprache des Mitglieds (ISO-639-1 Code) von der DB so kamo-univers kann jeder Spieler org + Sprachfahne anzeigen auf ihrem Namensschild. Aufgelöst live (nicht von der Sitzung) so vorhandene Sitzungen holen Sie sie sofort ab.
· kamo-internal
KamoUniverse Startkarte + nav icon (gated ACCESS_KAMOWORLD, OTK umleiten zu spielen.*)
· kamo-shared-library
ACCESS_KAMOWORLD rechts (145, GAMES) für KamoUniverse-Zugang hinzufügen
· KlusterServices
K1m1 Bildregistrierung ersetzt ausgeschiedenes ausgeschiedenes k0m1:5000 (gleiche Anmeldeinformationen)
· KlusterServices
Kamo-Universum namespace+quota+valkey, CockroachDB Backups, Beobachtbarkeit Stack
- Universum/: namespace + ResourceQuota, valkey-univers (AOF, hostPath k1m1), nächtliche CockroachDB Backup CronJob, Betreiber Bootstrap Skript - Überwachung/: eingeklemmte Steuerwerte ************ install script, grafana.* route, universe Dashboard + Warnregeln - CI: universe namespace+valkey in der k1m1-Phase anwenden (NATS-Paket fallen gelassen: 43030d6 bereits wieder zu Hause k3m1 mit Konto-Isolation)
· KlusterServices
K3m1 Knoten + migrieren Cluster Peering zu LAN IPs hinzufügen
- statefulset: werben/join über 192.168.4.x (k1m1=.22, k3m1=.36); WireGuard fiel (k3m1 wg0 10.8.0.1 kollidierte mit k0m1's Werbe IP). - init-job + CI kubeconfig Endpoints wurden auf LAN IPs verschoben. - CI: K3M1 CockroachDB-Einsatzstück hinzufügen (braucht K3M1_KUBECONFIG_B64 secret).
· kamo-login
Route bezahlte Anmeldungen zur Kasse nach der Anmeldung
Nach erfolgreiches Au und Auth (manual oder auto-login), verbrauchen Sie die Apex-domain sp_checkout_plan Cookie links von kamo-register und leitet den Käufer auf die brand /subscribe?plan= page (Stripe checkout) anstelle der Standard-App Ziel. One-Shot: Cookie auf gelesen gelöscht.
· kamo-register
Tragen Sie bezahlt ? Plan von der Anmeldung in die Kasse
Wenn eine Mitgliedsanmeldung von einer kostenpflichtigen Preisgestaltung stammt, wird CTA (?plan=pro|business) Drop ein apex-domain sp_checkout_plan Cookie bei der Fertigstellung. kamo-login verbraucht es nach dem Benutzer authentifiziert und leitet sie zu /subscribe -- Stripe, überleben das Register --" überprüfen -" Login-Hopper.
· kamo-shared-library
Canonische E-Zeichen-Vorlagen (verifikation + einladen)
Fügen Sie zwei plattformweite kanonische E-Mail-Vorlagen, die faul per Org ausgesät sind: - esign.signer_verification (Step-up OTP: {{code", {{name" - esign.signer_invite (signieren einladen: {{name", {{message, {{link" Wire sie in CanonicalTemplateLoader's Keylist + Ressourcen so EmailService.seedForOrg holt sie auf den ersten Senden ab. Ermöglicht Live OTP/Einladung Lieferung für den E-Sign-Flow (war Best-Bemühen-No-Op ohne Vorlagen).
· BillingService
E-Zeichen Nutzungsmessung + Verbraucher Self-Serve-Checkout
#4 Zähler: - EsignMeterSubmissionService (@Scheduled täglich): aggregiert API-Ursprung EsignUsageRecords per org+Periode; erste 40/Periode inbegriffen, der Rest eingereicht als StreifenzählerEvents. Idempotent über berichtetToStripe + der Nutzungsrekord UID als der MeterEvent-Kennungsbeschriftung (Stripe-side dedupe). Löst den Meter-Ereignis-Namen aus dem Addon aktuellen Stripe Preis **************** so dass es entspricht jedem Zähler, an den der Preis gebunden ist (behebt das Namens-Mistverhältnis). #5 Verbraucher-Checkout: - ConsumerCheckoutService: Stripe Kassensitzung (mode=Abonnement) gegen die Produkt Wurzel Plan Preis (+ Metered Overage Linie für Unternehmen); Aufzeichnungen der AccountAbonnescription (Quelle PAID) + Abonnement-Mitglied + Accountlizenz auf Vervollständigung und ungültige Ansprüche. - ConsumerSessionResolver: authentifiziert den Käufer durch sein eigenes *** Cookie über Redis (nie ein Client-Set org Header). - ConsumerCheckoutController POST **************** - StripeWebhookService übernimmt jetzt checkout.session.completed. Additive/inert, bis ein Verbraucher abonniert; die Live-Gebühr braucht eine echte Karte.
· kamo-internal
API_SIGNATURE (E-Signature API) Schlüsselbereich auszusetzen
Fügen Sie den E-Signature API-Fernergst zum org API-Schlüsselmanager hinzu, damit die Mitarbeiter zustimmen können Business orgs programmatische E-Zeichen-Zugriff. Nutzung über die monatliche Zuteilung wird pro Signatur dosiert.
· APIService
Öffentlich programmbeg nchnerisch e-sign API Gateway (API_SIGNATURE scope)
Fügen Sie /api/public/esign/** zu PublicApiController hinzu: die org API-Taste validiert, benötigt den API_SIGNATURE-Fernertrag, die Tariflimits und weiter an ESigService interne Hüllkurven-API (/api/esig/intern/**) mit X-Internal-Auth + X-Org-Id. Spiegelt den Abonnement-Katalog-Gateway Präzedenzfall.
· ESigService
Interne programmatisches Umschlag API (origin=API) für Unternehmen
- EsignInternalController (/api/esig/internal/*): X-Internal-Auth + X-Org-Id .o., von APIService aufgerufen, nachdem es die API_SIGNATURE-Sachschlüssel validiert hat; Wiederverwendung von EsignEnvelopeService, Tags Umschläge EsignUsageOrigin.API - **************** gewinnt eine Ursprungsüberlastung (MANUAL default) - Signierweg jetzt Meter nach Herkunft des Umschlags (API -- Überalterung, MANUAL nie) - OTKAuthFilter Bypasses /api/esig/intern (internlich gezeichnet, nicht OTK)

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich