Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· kamo-shared-library
Dodaj klawisze VENDOR_CALLBACK_RESOLVED typu zdarzenia (0.6a ingress)
· kamo-shared-library
Podłoże rejestru żytnifikatora — 42 id id (kałka kluczowy 0,5, plasterek 1)
Nowy pkg com.kamo.zshared.mlos.identity (klucz routingu z hali przylegającej): LoanIdentifierType (42 pierwszorzędne identyfikatory, z których każdy nosi Kardynalność + Własność; ?Enumerowane STRING; singleActiveTypes () pochodzące z metadanych) + + podmiot rezydenta Pożyczkobiornika (BaseuEnud;Zamknięta PożyczkaFile; write-once - Nastartować obrońca rzucić ogłówek wartości / typ / niestosowanie/niekotypu, tylko dozwolone odwrócenie statusu; "PrePersist normalizes emitr / podtyp + wymuszanie INNA>cuscomtype) + rezydentury rezydenta identyfikacyjne (wyszukiwarki resolnerskie; tylko o wartości to search-aid-only). Zweryfikowane lokalnie: mvn install BUILD SUCCESS, 49 MLOS test testowy (w tym jednoaktywny test drift-guard zapewniający zestaw enum pasuje do indeksu indeksu częściowego indeksu BDL KamoInitializer). KamoInitializer DDL: skanowanie + 3 częściowo-niepowłęcze indeksy + INNE CHECK. RESOLVER + webhook ingress - pierwszy nowy mikrousługa MLOSIdentifierService (odroczona).
· kamo-shared-library
Koło zamachowe StewardFeedback — przechwytywanie każdego werdyktu stewarda (katernat 0.11)
Nowy pkg - tylko dodajny rzędy naziemnej StewardFeedback (FK ai_decision.uid; werdykt CONFIRM/OVERRIDE/MODIFY; Reg-B-aligned uzasadniajCode; skorygowanyValue jsonb; jestTestLoan stemplowany w czasie pisania napisz o 12 euro,4; ?PreUpdate WORMTrzy klucze fazy-0 w jednym tx (spinowy osąd AiDecision + enqueues mlos.steward.feedback.recorded przez outbox event-backbone + stempluje partycję testową). Rejestrator ogrodzone mlos.governance.enabled (default off -> zero blast promieni). KamoInitializer DDL: skanowanie + indeksy steward_feedback + FK do ai_decision.
· kamo-shared-library
Niezmienny AiDecision WORM ledger + dwuścienny DecisionGate (klawiszy 0, 0,3, plaster 1)
Nowy pkg com.kamo.zshared.mlos.decision (greenfield decision kręgosłup, nigdy nie edytuje donotmodify): bez dodatku tylko AiDecision (WYRM przez ’PreUpdate guard; loanFileId to Long FK to LoanFile.uid perc01/gotchas, NOT UID; supersesy via supersEtui + AiDecisionRepository (zidentyfikowani zlokalizatorzy). DecisionGate - biblioteka dwuścienna w procesie (blizna prawna ABSOLUTE/nie-tunable; ściana zaufania do przestrajania; nietunable platformowa pod) – konfiskata . . . . . . . . . . . . . DEFERRED to intuencje: DecyzjaNieruchomości (FKs w katalogu Phase 2)), StewardTask/OrchestrationState, rejestr prawny, HMDA-firewall CHECK, ModelVersion FK. Dodano KamoInitializer DDL (index: (index indeksai_decision + oznaczony wyzwalacz DB WORM needing CRDB v24.x).
· kamo-shared-library
Brama najemcy do tylnego kręgosłupa zdarzenia (Slice 3)
Plan działania 0.10: (szwypadek subskrypcji dla klientów) + ToTenant (podmiot,orgId) pasujący do symboli, który odzwierciedla filtrowanie NATS; forEvent odrzuca teraz niepozytywny orgId (bez zdarzeń bez najemcy). MlosTenantIsolationTest to wykonalna bramka cross-tente (w tym token-boundary: org z 12 meczami lub g 123). MlosDeadLetterRepository zyskuje odkrywcę stewarda org-scoped (repo-layer org-sward) obok klatki poprzecznej z operatorem. Zakres per-najemca na chmielu X-Internal-Auth jest szeroki i odroczony do auth keystone; test izolacji na żywo jest zgodny z pierwszym betonowym konsumentem.
· kamo-shared-library
Poniżalność po stronie konsumenta, DLQ + powtórka stewarda (Slice 2)
Dodaje rdzeń niezawodności, w który wtyka się każdy konsument MLOS: PrzetwórzaWydawanie dedup (unikalna nazwa konsumenta+event_id) + MlosDeadLetter DLQ + MlosDeadLetterStatus; IdempotentEventProcessor (INSERT-or-skip dedup w tx uchwytu, więc awaria cofa się znacznika; dead-lettDeadLetterReplayer (re-enqueuues list DEAD przez skrzynkę outbox jako NEW eventId z linią(-d) -> bez msg_id-unique/dedup-window kolizja, znaki REPLAYED). MlosEventEnvelope zyskuje Jacksonized za deserylizację w obie strony. Nowe - Komponenty dzielą się opt-in mlos.outbox.enabled; repos znajduje się w już zasmonkowanym opakowaniu. Live AbstractMlosDurableConsumer (subskrypcja NASTS) odroczona do pierwszego konkretnego konsumenta.
· kamolos
Przyjęcie pola transakcyjnej MLOS (ścieżka producentowa)
Umożliwia backbone zdarzenia Phase-0 w KamoLOS: dodaje com.kamo.z.shared.mlos.event do skanowania "EnableJpaRepositories", mlos.- Id. Schemat (mlos_outbox_event + indexes) jest stosowany oddzielnie przez użytkownika KamoInitializer.
· kamo-shared-library
Koło zdarzeń transakcyjnej (Fase-0 keystone B)
Ścieżka producenta klasy pieniężnej/zgodności w NOWE rodzeństwo pkg (nigdy nie edytuj kodowanie): MlosEventEnvelope DTO + MlosOutboxEvent out by jednostka/repo + OutboxWriter (występowanie za dwuosiowe) + OutboxRelay (AFTER_COMMIT hot-path + ?Scheduled sweeper, publikuje z Nats-M)Z okienkiem dedup NatsConfig brakuje). Ponowne wykorzystanie zablokowanej fasoli NATS Connection/JetStream. Opt-in via mlos.outbox.enabled (default off), więc usługi nieprzyjmowania są nienaruszone. Dokładnie na raz efekt - transakcyjne pudełko + JetStream Nats-Msg-Id dedup. Dedup konsumencki/DLQ + CI-izolacja najemców to Slice 2/3.
· kamo-internal
Pokaż warstwy danych na etapie włącznie włącznie Maska oceaniczna EDT4 + oznaczenia TRF2
Karty sceniczne worldgen na tablicę sceniczną wymieniają teraz warstwy danych z każdej sceny z płytek, akcentowania nowo dożytych: maski oceanu EDT4 (złącze morskie) pod hydro, Oznaczenia pasa ruchu TRF2 + runtime tereny pod transportem. Czysty format / dane Etykiety (STAGE_LAYERS w types.ts) — brak nowych ciągów i18n. Stale/gatunk już się liczy Powierzchnia automatycznie, gdy pochodzenie uderza w EDT3-EDT4 / TRF1-TRF2.
· kamo-internal
Nieświeżość płytek powierzchni + ukierunkowany "Regeneruj N" na stronie
Mieszówka agenta ma teraz nośność na przesunięcie (do aktualna / nieaktualna / brakowa); Odłóż go przez API + SSE na stronie: - Zakładka usług pokazuje linię świeżości na usługę płytek, a przycisk Start staje się "Regenerate N" (nieżyjący + brak) w przypadku pracy docelowej lub "Do tej pory". - Wskazówka z płytką uzupełniającą pokazuje, ile płytek wymaga aktualizacji. Start jest już napędzany przez pochodzenie na hostze, więc przycisk uruchamia cel Regeneracja dokładnie tych nieświeżych / zaginionych komórek.
· kamo-internal
Światowa strona administratora generacji wszechświata
Dodaje /settings/platforma/światło wszechświatowe pod administracją Platformy — własna platforma Karta + trzy pod-taby (Przegląd, Usługi, Działania) — aby rozpocząć i monitorować Porarzenie danych świata KamoUniverse na żywo. Backend (Next API, platforma-admin gateed przez sesję, tak samo jak Straż graniczna klienta): - aplikacja/lib/worldgenNats.ts: jedno długotrwałe połączenie NATS + abonent statusu Ten całuje najnowszy status na etapie + migawka (w pamięci + Redis) i Powtórne informacje o autobusie w procesie dla SSE. Publikuje polecenia startowe. - aplikacja/api/uniwersalny/usługi GET aktualne stan każdego etapu (status + tile Liczby + lockHeld). - POST a start command do agenta k3m1. - aplikacja/api/uniwersalny/stream Transmisja SSE z wydarzeń o stanie/snapshot na żywo. Frontend (MUI + next-intl, mirrors strona konfiguracji): - useWorldgen: jeden współdzielony strumień SSE (auto-reconnect) + start() dla wszystkich kart. - Przegląd: agent/bata/dopełnianie/płytki płytek i kolejka na żywo. - Usługi: bogata karta na scenariusz — rola + to, co osiąga, stan na żywo Odznaka, zwiń / całkowity pasek postępu, ostatnie wydarzenie i przycisk Start (wyłączone podczas pracy Każda partia trzyma globalny zamek). - Działania: uruchomić cały rurociąg lub indywidualny etap (z potwierdzeniem), plus odświeżenie migawki. Okablowanie: NATS_URL dodany do mapy konfiguracji; dodano zależność klienta. K3m1 Agent + skręt telemetria na żywo w wszechświatach-ziemiach; ciągi w tłumaczeniu Słownik. tsc czyść na wszystkie nowe pliki.
· kamo-shared-library
Dodaj niewrażliwe na przypadek findByEmailEmailE ignoreCase
E-maile są przechowywane w niespójnym przypadku (np. Sage-KamoCRM.com) i Równość łańcuchowa CockroachDB jest wrażliwa na przypadek, więc znajdźByEmailEmail misses W sprawie sama. Potrzebny do odzyskiwania hasła lookup e-mail.
· EmailService
Samonagotne konta skrzynek pocztowych z aplikacji DB (odzyskiwanie drytu)
Aplikacja DB jest źródłem prawdy, dla której powinny istnieć skrzynki pocztowe; KamoMail Konta na żywo w serwerach poczty virtual_users. Jeśli poczta DB straci dane, Skrzynki pocztowe zaginęły w dostawcy, podczas gdy rekordy aplikacji pozostają. - MailboxSelfHealService: na starcie + codziennie, re-provision dowolnej aplikacji KAMO_MAIL Brak skrzynki pocztowej w virtual_users (świeże losowe hasło zarządzane aplikacjami). - syncMailboxes (ustawienia "Synchroniz" działanie) teraz również popycha aplikację->dostawcę dla Pominą brakującą skrzynkę pocztową, a nie tylko dostawca importu-> aplikację.
· kamo-internal
Kompozytorko/wysłać w imieniu przełączanej skrzynki pocztowej członkowzanej
- Właściciel skrzynki pocztowej wątkówId z przełącznika przez activeMailbox do Kontekst komponowania (wydarzenia + URL param). - Nowa wiadomość / odpowiedź / forward open compose dla wybranej skrzynki pocztowej dla wybranego członka: Z list rozwijanych, które skrzynki pocztowe członków + aliasy, podpisy spersonalizowane Na nie i wysyłaj / wraków uwierzytelnij jako ich skrzynkę pocztową (mailboxId). - Komponuj się bez zmian, gdy żadna skrzynka poczta nie jest aktywna.
· kamo-internal
Przenieś w sesji per-tabStorage zamiast udostępnionego pliku cookie
Id session żył w przeglądarce plików cookie udostępniany we wszystkich zakładkach Pochodzenie, więc druga zakładka (poduszina) nie mogła zorganizować własnej sesji. Przesuń przewoźnika do sessionStorage (na-tab): - sessionKlient: pomocnicy tokenów + globalne opakowanie, które dołącza Id jako X-a-Token na połączeniach z samym pochodzeniem /api, plus jednorazowy Cookies-sessionStorage Migracja. Zainstalowany przez SessionBootstrap w układzie. - - header-first (cookie fallback) używany przez generate-otk, sesja/info, sesja/rozdawnia, wyloguj, meet/invite-email. - generateOTK + getKsemIdOdZPrognozaRequest preferuj X-a--Token niż plik cookie. - /api/validate nie ustawia już pliku cookie; zwraca identyfikator id /validate page przechowuje ją w sesji tej zakładkiStorage. - useUserInfo + wszystkie haczyki WebSocket odczytują identyfikator z sessionStorage. - wylogowanie przechwytuje token przed rozliczeniu magazynu, tak aby sesja Redis Nadal jest unieważniona. Podszywa się teraz dopiero otwiera /validate?otk... w nowej karcie (ta sama ścieżka jako login: sesja Redis stworzona po stronie serwera, OTK przekazana /validate; Nowa karta dostaje własną sesję, a zakładka administratora jest nietknięta. Usuwanie Przestarzałe przechowywanie/ImpersonationBanner maszyny typu return-to-admin. Orgs pozostaje oddzielony domeną – bez zmian.
· kamo-internal
Przycisk podszywania się pod nagłówkiem ustawień członu
Dodaje najwyższej prawą prawą akcję "Impersonate" na /settings/member/[id], widoczny Tylko wtedy, gdy podpisane sesja niesie za sobą tryb godowy (getsGod) i cel Nie jest samo/nowy. Nazywa nowy /api/bezpieczeństwo/impersone, a następnie zamienia Plik cookie za pośrednictwem ścieżki OTK (/validate?otk...&keepPrev-1) w nowej karcie. keepPrev zachowuje własną sesję administratora w Redis; globalna ImpersonationBanner kwas administratora i oferuje jedno kliknięcie 'Powrót Na moje konto" (tj-twoowe ciasteczka nie mogą odbylić dwóch sesji na żywo na raz). SettingsView zyskuje opcjonalny gniazdo-nagłowoAction.
· SecurityService
Punkt końcowy podszywania się pod członka trybu bogotowego
POST /api/security/personate miętuje świeżą + OTK dla arbitrów Członek obecnego orgi dzwoniącego, zamknięty na sesji rozmówcy Tryb Boga (GD). Rejestruje członka admin id jako SUDO_MEMBER_ID dla Audyt. Ta sama budowa sesji w kształcie logowania, co EnterAsController, ale ten sam I bógowany raczej niż krzyż.
· SecurityService
Zwraca orgName + język w /user-info
Rozwiązywać nazwę wyświetlania orgi i wybrany język członka (ISO-639-1 Kod) z DB, więc kamo-universe może pokazać org + flagę językową każdego gracza Na ich tabliczce. Rozwiązana na żywo (nie z sesji), więc istniejące sesje Odbierz je natychmiast.
· kamo-internal
Karta startowa KamoUniverse + ikona nav (gated ACCESS_KAMOWORLD, OTK przekierowanie do gry.)
· kamo-shared-library
Dodaj ACCESS_KAMOWORLD po prawej stronie (145, GAMES) dla dostępu KamoUniverse
· KlusterServices
Rejestr obrazów K1m1 zastępujący emerytowany k0m1:5000 (ktysiężne referencje)
· KlusterServices
Przestrzeń nazw Kamo-universe + intaż +valkey, Kopie zapasowe CockroachDB, stos obserwacji
- wszechświat/: przestrzeń nazw + ResourceQuota, valkey-universe (AOF, hostPath k1m1), CockroachDB Backup CronJob, skrypt bootstrap operatora bootstrap - monitoring/: przypięte wartości steru ? Skrypt instaluj, grafana. Trasa, pulpit nawigacyjny wszechświata + reguły alarmowe - CI: zastosować wszechświatową przestrzeń nazw + klawisz w fazie k1m1 (Pakiet NASUS: 43030d6 już ponownie zadomowił k3m1 z izolacją konta)
· KlusterServices
Dodaj k3m1 węzeł + migrate klasat peering do adresów IP LAN
- stanowy: reklamuj/dołączenie powyżej 192.168.4.x (k1m1x2, k3m1 x .36); WireGuard spadł (k3m1 wg0 10.8.0.1 zderzył się z reklamą IP k0m1). - init-job + CI kubeconfig punkty końcowe przeniesione do adresów IP sieci LAN. - CI: dodaj sekcję wdrożeń K3M1 CockroachDB (potrzeby K3M1_KUBECONFIG_B64 tajne).
· kamo-login
Trasa płatne zapisy do kasy po zalogowaniu
Po udanym auth (manualne lub autologiczne), spożywaj domenę apex-domain ciasteczka sp_checkout_plan pozostawione przez kamo-rejestr i przekierować kupującego na Marka /subscribe?plan? page (Stripe checkout) zamiast domyślnej aplikacji Miejsce docelowe. One-shot: plik cookie wyczyszczony na czytany.
· kamo-register
Noś płatne?plan od rejestracji w kasie
Kiedy rejestracja członków pochodzi z płatnej cenowej CTA (?plan-pro|business), Upuść apex-domain ciasteczko sp_checkout_plan po zakończeniu. kamo-login zużywa po tym, jak użytkownik uwierzytelni się i przetacza je do /subscribe -> Stripe, Zachowanie rejestru -> weryfikacji -> chmielu logowania.
· kamo-shared-library
Szablony sygnatariuszy e-sygnatariuszy (weryfikacja + zaproszenie)
Dodaj dwa kanoniczne szablony wiadomości e-mail o szerokości całej platformy rozstawione leniwie na org: - esign.sign.signer_verification (step-up OTP: ?code, ?name) - esign.sign.signer_invite (zaproszenie: „nazwa”, „sender”, „message”, „link”) Przekaż je w listę kluczy CanonicalTemplateLoader + zasoby EmailService.seedForOrg odbiera je w pierwszym send. Umożliwia live OTP/invite Dostawa dla przepływu e-sygnałów (była najlepszym wysiłkiem bez szablonów).
· BillingService
E-sign użytkowania pomiar + samoobsługa dla konsumentów
4 pomiary: - EsignMeterSubmissionService (ślicany codziennie): agregaty API-oryginalne EsignUsageRecords na org/p. + okres; pierwsze 40/okres wliczone w cenę, reszta przedłożona Jak stripe MeterWydarzenia. Idempotent przez raportToStripe + rejestrowany identyfikator użycia jako Identyfikator MeterEvent (Stripe-side dedupe). Rozwiązuje nazwę zdarzenia licznika Z rzeczywistej ceny Addonu Stripe - więc Dopasowuje dowolny licznik, którego należy do niego cena (naprawia niedopasowanie do nazewnictwa). 5 EUR za kasa konsumencka: - ConsumerCheckoutService: Stripe Checkout Session (mode-subscription) przeciwko Cena planu produktu (+ linia przekroczenia dla firmy); rejestruje KonkonyWpis (źródło PAID) + SubskrypcjaMemberote + KontoLicense na Ukończenie i unieważnienie uprawnień. - ConsumerSessionResolver: uwierzytelnia kupującego własnym plikiem cookie Redis (nigdy nagłówek org z zestawem klienta). - ConsumerCheckoutController POST - StripeWebhookSUnia teraz obsługuje checkout.session. Dodatek / wstawaj do momentu subskrypcji przez konsumenta; opłata na żywo wymaga prawdziwej karty.
· kamo-internal
Zakres kluczy API_SIGNATURE (E-Signature API)
Dodaj zakres interfejsu API E-Signature do menedżera klucza API org, aby personel mógł przyznać Business orgs programmatic e-sign dostęp. Stosowanie poza wliczone w cenę miesięczny Nadmuchni się na podpis.
· APIService
Publiczna brama e-sygnazna API (zakres API_SIGNATURE)
Add /api/public/esign/' do PublicApiController: waliduje klucz API org, Wymaga zakresu API_SIGNATURE, limitów stawek i przekazuje do ESigService's Wewnętrzne API kopertowe (/api/esig/wewnętrzny/-a) z X-Internal-Auth + X-Org-Id. Odzwierciedla subskrypcję-katalogową keystu.
· ESigService
Wewnętrzne programmatic kopert API (origin-API) dla biznesu
- EsignInternalController (/api/esig/internal/'): X-Internal-Auth + X-Org-Id authed, wywołany przez APIService po poprawnieniu klucza API_SIGNATURE; Powtórnie wykorzystanie EsignEnvelopeService, tagi koperty EsignUsageOrigin.API - - zyskuje przeciążenie pochodzenia (niezwiązów ludzkich) - Podpisywanie ścieżki teraz metrów po pochodzeniu koperty (API -> overage, MANUAL nigdy) - OTKAuthFilter bypasses /api/esig/internal (internal-secret athed, a nie OTK)

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej