Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· EmailService
Lesen Sie eine Veranstaltung von id
Die Lead-Seite hält eine Callback-Event-ID und will es in der gleichen wieder zu öffnen Dialog den Kalender verwendet, so dass er in der Lage sein muss, das Ereignis selbst abzurufen. Umfanggenau wie die Liste - die eigenen Kalender des Mitglieds plus Organisation ist - so eine ID gehört zu jemand anderem Kalender liest sich als abwesend anstatt als verboten.
· kamo-internal
Schwebende Notizen werden zu einer zweiten Klasse von Hexkopffenster
Hex köpft jetzt zwei Arten von Fenster zurück: die Popup-Tool-Fenster sie immer tat, und schwebende Noten. Minimieren ersetzt den alten Roll-up minimiert klebrig lässt die Überlagerung vollständig und landet im Hexkopf Dock trägt seine eigene Notizfarbe, wo der Popover offen/schließen und throw-to-goal fahren Sie es genau, während sie ein Werkzeugfenster fahren. Die Integration ist der Ereignisvertrag, mehr nicht: Köpfe werden von Fenster-ID, so Notizen nehmen Sie eine "floating-note:<id" Namensraum innerhalb, dass Shared id space und Antwort "tool:focus" / "tool:close" für ihre eigenen. "tool:requestClose" ist absichtlich nicht Veto eingelegt, das Veto schützt Unentlassene Entwürfe, und eine klebrige Autosaves und Flushes auf unmount. Auch: - Die gesamte Titelleiste zieht sich. Der Titel ist eher ein Label als eine Eingabe, das ist, was war das, was war die Diebstahl jedes Pixel, aber die obere linke Ecke; Doppelklickt es umbeneinnen, Doppelklicken woanders maximiert. - Maximieren Sie auf Vollbild, von der Schaltfläche oder einem Doppelklick. - Eine Notiz ist an dem einen oder anderen Ort leben, nie beides. Während des Schwimmens, seine Karte in /notiert ist gedimmt und inert (nur re-attach bleibt live) und Die Trennung vom Editor schließt den Editor. "Open in Notes" gibt die Notiz zurück und schließt die klebrig. - Die Deep-Link-Klinke war ein einziger Boolean, so dass ein Zettel zurückgegeben ein zweites Mal nie wieder geöffnet. Es ist jetzt pro id eingesperrt. - Eine klebrige linke minimiert re-spawns seinen Kopf nach einer erneuten laden, und eine Vermächtnis "collapsed" klebrig migriert zu minimiert, anstatt zu verschwinden.
· kamo-internal
Eine Steuerung, die tatsächlich öffnet, was das Ereignis hervorgebracht hat
Die Beschreibung des Callbacks trug "Open the lead: /leads/View/123" als Text und Text in einem Textbereich kann nicht angeklickt werden - der Ereignisdialog bearbeitet seine Beschreibung in ein, so dass dieser Weg nie eine Verbindung dort gewesen sein könnte. Das Ziel ist auf der DeepLink der Veranstaltung gewesen, seit die Spalte hinzugefügt wurde; dies ist die Erstattung, die es nutzt. Der Dialog bietet es neben der Art der Veranstaltung, die agenda Ansicht bietet es unter der Beschreibung, und beide gehen durch den Router anstatt ein Dokument zu laden, weil beide über jede Seite geöffnet werden können und Die Navigation würde alles abreißen, was das Mitglied sonst noch hat. Abgeknallt von deepLink anstatt aus Rückrufe speziell, so was produziert Die Ereignisse erhalten als nächstes die Steuerung, ohne diesen Dialog zu berühren. Auf dem Etikett steht "Offen führen", wenn der Ursprung ist ein Rückruf und "Öffnen" sonst.
· kamo-internal
Rückrufe im Kalender und ein Marker auf der Liste
Zwei Möglichkeiten, einen Anruf zu sehen, den Sie versprochen haben, ohne die Führung zu öffnen. Auf dem Kalender, bekommt ein Rückruf seine eigene Zeile Artikel, anstatt wie jede aussehen sonstiger Termin - ein Anruf, den Sie jemandem schulden, ist eine andere Art von Verpflichtung von einem Treffen Sie vereinbart, teilzunehmen, und eine Ansicht, die sie identisch macht macht Sie lesen jeden Titel, um sie auseinander zu sagen. Die Monatssicht bricht einen Tag ein ruft in eine Zeile, die liest, wie viele es gibt, weil eine Zelle etwa drei passt Chips und ein geschäftiger Morgen der Anrufe würden sonst jedes Treffen unter eine schieben "+4 mehr". Die Wochenansicht nennt es "Lead Callback" und bringt die Führung in die schwebe, da der Block ein paar Zeichen breit an diesem Zoom ist. Tag und Tagesordnung Ansichten haben Platz für beide und zeigen beides. Auf der Lead-Liste, eine Führung mit einem hervorragenden Anruf trägt eine Telefonmarkierung in der Pinned id cell, gefärbt, wie drückend es ist: grau einen Tag oder mehr aus, bernstein heute rot, wenn die Zeit vergangen ist, ohne dass jemand markierte, dass es kontaktiert hat. Überfällig Impulse, das ist der Staat wert, während des Scrollens zu fangen. Mehr als ein Aufruf an eine Leine zeigt eine Anzahl. Dringlichkeit wird in Kalendertagen statt verstrichenen Stunden gelesen, denn das ist, was "Heute" bedeutet für die Person, die die Liste liest: Ein Anruf um 9 Uhr morgen ist nicht dringend um 17 Uhr heute, obwohl es 16 Stunden entfernt ist, und ein 9-Uhr-Anruf heute ist dringend bei 8 Uhr, obwohl es eine Stunde entfernt ist.
· SecurityService
Callback-Zusammenfassung für die Lead-Listenmarker
Antworten, die führt haben einen Anruf noch warten, und wenn die am frühesten ist, für die Organisation des Anrufers in einem Antrag. Sein eigener Endpunkt eher als ein Feld an der Leite: Rückrufe ändern sich auf ihren eigenen Zeitplan, so falten sie in die Blei-Numload würde entweder eine Join auf jeder Bleiabfrage oder einen abgestandenen Marker bedeuten.
· kamo-shared-library
In einer Anfrage anstehende Rückrufe für eine ganze Organisation
Füttert den Callback-Marker der Lead-Liste pro-Reihe. Das Gitter hält jede Führung Mitglied kann sehen, so fragen pro Leage wäre eine Anfrage pro Zeile zu machen ein Spalte; dies ist die gleiche Frage einmal gestellt. Nur eine Repository-Methode - keine Entität oder Spalte ändern, so dass nichts hier bewaffnet ist gegen das Schema.
· kamo-internal
Eine Benachrichtigungsstelle, auf jeder Seite
Erinnerungen hatten nirgendwo anzukommen. Das Popup des Kalenders war eine einfache Warnung in der Top-Ecke, welche Seite zufällig offen war, verschwand sie auf einer Zeitschaltuhr, und alles, was angehoben wurde, während das Mitglied woanders war, war einfach verloren - die Steckdose veröffentlicht, und eine Veröffentlichung, für die niemand gezeichnet ist, gelingt und verschwindet. So werden Benachrichtigungen nun sowohl gespeichert als auch veröffentlicht, und der Browser liest beides durch einen Kontext, der über dem ganzen Baum montiert ist. Was ankommt, während Sie sind hier ist geschoben; was kam, während Sie nicht waren, wird auf der nächsten beansprucht Verbindung, einmal, so dass zwei Tabs öffnen zusammen nicht beide den gleichen Stapel. Das Deck sitzt in einer Ecke des Aussichtshafens, über jede Seite, die darunter ist. Karten stapeln statt Liste - vier Erinnerungen landen zusammen, das ist, was für Firmenveranstaltung plus eigene Veranstaltung tut, würde sonst die rechte Hand nehmen Drittel des Bildschirms - und schwebende Fans sie aus. Jede Karte führt mit dem Ding Jede Benachrichtigung in diesem Produkt hat gemeinsam: eine Uhr. Es zählt bis auf die Veranstaltung, bietet jetzt, später oder gar nicht, und entwässert eine Schiene als eigene Willkommenslauf läuft aus, das stoppt, während Sie es lesen. Streichen Sie richtig, um es loszuwerden. Alles andere steckt hinter den beiden Menüs: Schlooze von fünf, zehn, fünfzehn, dreißig, eine Stunde, oder bis fünf Minuten, bevor das Ding beginnt; stummschalten diese Art von Benachrichtigung komplett; öffnen Sie die Einstellungen. Produzent-gelieferte Aktionen fahren entlang, so ein Callback bietet die Nummer des Leads und ein Treffen bietet seine Join-Link. Links gehen Sie durch den Router, nie eine Dokumentenladung - das Deck kann jeden Moment feuern und eine Navigation hier würde einen nicht zurückhaltenden Entwurf abreißen. Die Glocke im oberen Navi ist aus dem gleichen Grund Chrom fixiert, aus dem gleichen Grund die Compliance-Uhr ist: eine Glocke jemand kann sich entreißen und dann nicht gesagt werden, etwas ist schlimmer als keine. Dahinter steht die Geschichte, gefiltert durch Art oder ungelesen, mit Do-not-disturb wo ein Mitglied den Lärm bemerkt. Die Registerkarte sagt Ihnen auch. TabAchtung bereits blinkte den Titel und betitelte die favicon für Chat, Leads und Support; ungelesene Benachrichtigungen verbinden sich, oben Chat weil sie zeitlich festgelegt sind - eine Erinnerung, dass ein Anruf in fünf Minuten stoppt fällig ist von jetzt an in fünf Minuten nützlich sein. Sounds werden synthetisiert und nicht geladen, so dass die erste Benachrichtigung einer Sitzung ist nicht der stille auf einer langsamen Verbindung. Desktop-Benachrichtigungen werden nur angehoben wenn der Tab versteckt ist und die Erlaubnis in dem Moment gefragt wird, in dem sich das Mitglied dreht der Schalter anstelle von Seitenlade, das ist die Muster-Browser unterdrücken und die Menschen reflexartig leugnen.
· SecurityService
Ein Rückruf, der zurück an die Spitze führt
Der Rückruf erreichte bereits den Kalender des Mitglieds, als Ereignis mit dem Titel "Lead Callback" mit ihrem Kommentar in der Beschreibung. Nichts sagte, wessen Anruf es war, nichts sagte, welche Nummer zu wählen, und nichts führte zurück an die Spitze - so ein Mitglied Blick auf ihren Kalender musste gehen und finden Sie die Führung von Hand, die die suchen Sie den Kalendereintrag, um sie zu speichern. Es trägt jetzt den Namen des Leads im Titel, ihre Nummer in der Lage, und eine Site-relative tiefe Link zurück zum Lead auf der Veranstaltung und in seiner Beschreibung. Die Beschreibung wiederholt die Kontaktdaten bewusst: ein Kalender wird gelesen Wo das CRM nicht ist und ein Rückruf Sie nicht tätig werden können, ohne ein weiteres zu eröffnen Anwendung ist eine Erinnerung zu gehen und etwas nachschlagen. Die Lead-Seite komponiert nun einen Rückruf im kalendereigenen Ereignisdialog, also Anfrage kann eine ganze Veranstaltung tragen - Titel, Gäste, Erinnerungen, Farbe - und die geht alles durch. Jedes Feld außer dem Augenblick ist optional; ein Anrufer, der sendet nur die Original-Drei noch eine richtig betitelt, richtig verlinkt Eintrag von der Leitung gebaut. Die Lösung eines Rückrufs zieht seine Benachrichtigung zurück und sagt die Veranstaltung ab. Ansonsten hinterlässt ein Anruf, der zwei Minuten hinterher gemacht wurde, eine Karte immer noch danach fragt, und ein benoozed einer, der morgen wieder kommt, um wieder zu fragen.
· InitializerService
Mitgliedsmitteilungstabellen und die Ursprungsspalten einer Veranstaltung
Zwei Hälften von einem Feature. Ein Rückruf an einer Leitung geplant ist auf die Terminplanung Mitgliedskalender, und der Punkt des Spiegels ist es, wieder auf die Lead - also trägt calendar_events source_type, source_id und deep_link und Die von ihr erhobene Mitteilung trägt die gleichen drei weiter. Bestell 0: CalendarEvent bildet die drei neuen Spalten von dem Moment an ab startet, so dass jeder Läufer, der eine Veranstaltung lädt sie in seinem SELECT und ddl-auto kann sie noch nicht hinzugefügt haben. Verspätet bestellt würde es nie ausführen. Angewandt und verifiziert gegen Yugabyte 2026-08-13.
· kamo-shared-library
Mitgliedsmeldezentrum und Herkunft der Veranstaltung
Fügt MemberNotification und MemberNotificationPreference hinzu: eine Zeile pro Mitglied Benachrichtigung, weil gelesen, entlassen und benoozed sind pro Person Antworten und ein Share Row hat nirgendwo, um sie zu setzen. Die Vorzüge decken die beiden Hälften getrennt ab - Gedämpfte, ruhige Stunden und Do-not-Störung werden angewendet, wenn die Benachrichtigung Angehoben; Ton, Lautstärke und Desktop-Benachrichtigungen sind Eigenschaften des Browsers. CalendarEvent gewinnt SOURCE_TYPE, SOURCE_ID und DEEP_LINK so ein Ereignis von einem Service kann zurück zu dem führen, worum es geht. Ein Lead-Callback spiegelt sich auf ein Kalender war zuvor mit dem Titel "Lead Callback" und wies nirgendwo hin, so ein Mitglied Blick auf sie musste gehen und die Führung von Hand zu finden. CalendarEventReminderReminderRepository gewinnt pro Veranstaltung Lookups und holt den Besitz Kalender mit einer fälligen Erinnerung, die ist, was die Lieferung Fan-out fragen lässt ob eine Veranstaltung ohne Abfrage pro Erinnerung zur Organisation gehört. Schema von KamoInitializers MemberNotificationMigration angewendet und verifiziert in Yugabyte, bevor dies gelandet.
· kamo-internal
Notizen in schleppbare, resizable schwimmende Stickies abheben
Jede Notiz in der Liste (und der Editor) bekommt eine Ablösesteuerung, die es knallt auf ein bildschirmweites Overlay. Jede Zahl kann auf einmal schweben; jede kann überall hin gezogen, von jeder Kante oder Ecke auf einen 220x170 Boden verkleinert, gerollt bis zu seiner Titelleiste, neu gefärbt und an Ort und Stelle bearbeitet. Platzierung, Größe, Stapeln und Farbe bestehen im pro-Mitglied DB-Backed ui-Preferences speichern unter einem "floatingNotes"-Schlüssel -- der gleiche Mechanismus der nav Layout verwendet. Dieser Laden, nicht SessionStorage, ist der Punkt: Stickies müssen überleben und wieder in, und Logout räumt sessionStorage Großhandel. Anmerkungen: - Klebender Text ist immer fast schwarz, so dass jeder wählbare Hintergrund gehalten wird über ein 7:1 Kontrastverhältnis gegen ihn durch einen Einheitstest. Die Palette kann nicht Drift unleserlich später. - Inline-Editierung wird nur für Notizen mit gespeichertem Lexical Zustand angeboten trägt keine Formatierung; etwas reicheres öffnet nur lesbar statt abgeflacht durch eine Klartext-Rundreise. - note.color war zuvor eine Hex in eine KlasseName Slot fallen gelassen, wo es Gemacht gar nichts. Es ist jetzt eine Paletten-ID gelöst, um eine Inline Hintergrund, und eine farbige Karte pins seinen Text dunkel, so dunklen Modus kann nicht Farbe weiß auf Pastell. - Das Overlay wird auf <body> das Inhaltsfeld der Shell ist overflow:auto und würde es sonst beschneiden.
· EmailService
Eine Integer für die Postplakette, und zählen, was der Index-Pfad wert ist
Drei Dinge, alles über Wissen statt anzunehmen. Das niv-top ungelesene Abzeichen holte den gesamten Ordnerbaum und holte INBOX aus das Ergebnis - der teuerste Anruf, den das Mail Backend macht, um eine Nummer zu geben. MailReader hat getUnreadCount für genau diese getragen, da es geschrieben wurde (a einzelne STATUS auf den IMAP-Anbietern, ein Inline-Feld auf Graph) und nichts jemals es über HTTP ausgesetzt. Jetzt ist es soweit. Dies ist ein Fallback-Pfad, der nur feuert, wenn die ungelesene Steckdose hat versagt, so ist es selten und war teuer genau, wenn Die Dinge liefen schon schief. Die index-Backed-Liste berichtet nun, warum es diente oder nicht, wie ************ und der Aktuator legt Metriken so aus Die Zähler können gelesen werden. Das Verhältnis von served zu modseq_moved ist die Zahl, die sagt ob dieser Pfad seine Komplexität verdient, und er ist nicht verantwortlich, indem er die Code: ein Ordner ungültig seinen eigenen Checkpoint, sobald jemand eine Nachricht liest in ihm, so dass die Trefferquote ist eine Tatsache darüber, wie Mitglieder durch ihre Post bewegen. Die Beweis es berichtet, ist jetzt ein enum und kein boolean, so dass jede Ablehnung ist zugeschrieben, anstatt in einen Topf geworfen, und die Tests behaupten, den spezifischen Grund ein Test, der jede Verweigerung akzeptierte, würde diese Eimer in Unsinn abdriften lassen. Behebt auch eine schuppige Prüfung sah ich scheitern dreimal an diesem Nachmittag und das ist nicht meine: ImapIdleRegistryTest befragte eine Attrappe mit Mockito Timeout(), um die async schließen Land, und auf einer geladenen Maschine, die abläuft, während die Schließung ist nur quetscht hinter Thread-Erstellung. Es scheitert als "Null-Interaktionen", die sich wie liest eine kaputte Registry und ist wirklich eine voll besetzte CPU. Es wartet jetzt auf einer Verriegelung, die aufwacht die sofortige schließen() wird eingegeben, passend zum Geschwistertest zwei Methoden nach unten, und der geparkte Faden wird in einem Endblock unterbrochen - ein ausfallender Lauf, der zum Leck verwendet wird ein schlafender Nicht-Darun-Faden für dreißig Sekunden und verlangsamen alles nach es, einschließlich des nächsten Versuchs auf dem gleichen Test. Drei volle Suiten laufen Gleichzeitig: 257 bestanden, dreimal.
· kamo-internal
Marke Chrom um eine Entwurfstafel im Signing Room
Der Schreibtisch war mit der Farbe der Org getönt und wurde in beiden Themen dunkel. die die Marke unter das Dokument stellen und das Chrom neutral . genau rückwärts. Invertiert: - CHROME ist das primäre der Org auf jeder Seite der Seite: Header, Docket Schiene und Dock. Jede Markierung darauf ist weiß, durch eine symbolische Leiter (--legal-on-chrome / -dim / -faint / -line), so dass drei Regionen nicht jeweils erfinden ihre eigene Idee von "Sekundärtext auf Marke". - DER DESK ist ein Entwurfsbrett - sehr hellgrau mit einem 45-Grad-Grad regiert axonometrisches Gitter, in reinen CSS-Gradienten (kein Asset, keine Anfrage, Waage Hintergrund-Anhängung: lokales Brett das Gitter an die gescrollte Inhalte, damit es mit den Seiten reist. Es ist absichtlich NICHT abgeleitet von --color-primary: ein White-Label org mit einem blassen primären würde Die Oberfläche waschen, auf der das Dokument liegt, und die Seite muss als Papier lesen auf einer Arbeitsfläche, nie als Papier auf der Marke. Das Gitter ist, was trennt die Seitenkante vom Hintergrund, so dass keine Grenze gezogen wird. - Der Seitenschatten ist jetzt zwei Würfe - eine breite weiche für den Aufzug, eine enge dunkle eine für die Kante des Blattes. Eine einzige Unschärfe auf einer leichten Oberfläche liest sich wie ein Verwischen statt einer Seite. - Ein kompletter Docket-Knaber ist fest weiß mit der Farbe der Org darin, Knoten und Schiene genau dann invertieren, wenn das Mitglied die Arbeit überzieht. Grün Es gäbe eine dritte Farbe, die die Marke um eine Bedeutung bekämpft. - Die Attestation bewegte sich auf das gleiche Brett wie ein weißes Blatt mit dem gleichen Aufzug, denn die Aussage ist auch ein Instrument und fällt auf eine Ebene Panel las sich wie den Raum verlassen. EIN DOCK, IMMER. Ein Dokument Schritt besitzt die untere Leiste - nur weiß es ob es einen Spinner, ein Zustimmungstor, eine Signierfläche oder ein erfasste Signatur - so der Assistent gibt seine Rückseite und Nächste steuert DOWN anstatt eine zweite Bar unter der ersten zu stapeln und zieht das Dock sich nur auf der Bescheinigungsstufe. GuideBar gewann einen Ton der Marke und Startschlitz dafür: auf Marke malt es das Chrom, fällt die Grenze und Schatten, der den Raum in zwei Hälften schneiden würde, kehrt seinen Ring und Text zu weiß, und seine Pille liest sich in der Farbe der Org. Seine allDone Halo war ein Hardcoded Signer-App blau, unsichtbar auf einem farbigen Dock. Die Verladung, die fehlgeschlagene Sitzung, die Zustimmung und die Step-up-Gatter halten jetzt den Schreibtisch unter ihnen und das Dock darunter, so dass der Raum nie verliert eine Wand Mid-Flow und Zurück ist von einem Bildschirm aus erreichbar, den das Mitglied sonst nicht verlassen kann.
· EmailService
Prozzieren Sie einen Ordner unverändert mit HIGHESTMODSEQ, dann servieren Sie es aus dem Index
Dreht die index-gedeckte Nachrichtenliste an, indem Sie die Sache reparieren, die sie unsicher gemacht hat anstatt die Flagge umzudrehen. Der alte Scheck verglich die Nachrichtenzählungen und UIDNEXT. Beide sind blind für eine Flagge sich bewegen, und nichts re-indiziert eine Nachricht, wenn jemand liest es auf ihrem Handy, so ein Ordner, der diese Überprüfung mit jeder Nachricht gelesenen Zustand serviert werden könnte eingefroren in dem Moment, als es ankam - ein Posteingang, der gelesene Post als ungelesen zeigt. Das ist warum es ausgeliefert deaktiviert. CONDSTORE hat die Nummer, die sich bewegt. HIGHMODSEQ ist ordnerweit und Fortschritte auf alles überhaupt: eine Ankunft, eine Auslassung, eine Flagge von jedem Client gesetzt überall. So "bei modseq N wurden die neuesten K-Nachrichten indiziert" plus ein frischer modseq von N ist ein Beweis dafür, dass sich seitdem nichts geändert hat, Flaggen eingeschlossen. Verifiziert auf der Live-Server vor dem Bau darauf - /usr/libexec/dovecot/imap (2.3.20) trägt CONDSTORE, QRESYNC und LIST-STATUS. UIDVALIDITY wird neben überprüft, da Server, der ändert, hat es den Ordner neu nummeriert und nichts unter dem indiziert alter Wert beschreibt die gleiche Mail. Jakarta Mails eigener STATUS fragt immer nur nach den fünf klassischen Artikeln, also erweiterte Form wird direkt ausgegeben und die Antwort hier geparst - im Test, gegen wörtliche Drahtdaten, denn diese eine Zahl ist das ganze Sicherheitsargument. Der Checkpoint wohnt in Redis, nicht an einem Tisch. Es ist ein Sync-Marker, dessen richtige Verhalten auf Verlust ist "vergessen und neu gelesen", so eine Shared-Bibliothek Einheit, ein Migration und ein KamoInitializer Run wären der falsche Preis dafür. Kein Backfill-Job, absichtlich. Wenn der Beweis versagt, liest sich die Anfrage von IMAP genau wie zuvor und gibt das Ergebnis zurück, um indiziert zu werden, so Ordner füllen sich als sie werden betrachtet - die gleiche Reihenfolge, in der es sich gehört, schnell zu sein, und nichts, das kann über jede Mailbox auf der Plattform weglaufen. Das spricht auch, warum dies wäre vorher sinnlos gewesen: Der Index hielt insgesamt 31 Reihen. Zwei Bestellungen sind wichtig und beide scheitern nur in eine Richtung. Der gespeicherte modseq ist die eine vor dem Holen lesen, nie nach, so eine Änderung Landung Mitte-Fetch Blätter der Checkpoint hinter der Realität und kostet ein verschwendetes holen - das Gegenteil wäre Paar ein aktuell aussehender Modseq mit abgestandener Post. Und Reihen bereits im Index haben nur ihre Flaggen aktualisiert, nie ihre Körper, weil eine Zeile der vollständige Indexer geschrieben trägt die Textsuche ist aus gebaut, und es aus einem Umschlag wieder aufzubauen würde ruhig Drop-Nachrichten aus der Suche, während die Liste schneller.
· kamo-shared-library
Karte is_answered, jetzt, wo die Spalte existiert
KamoInitializer hinzugefügt ************ am 2026-08-13 ************ in Yugabyte verifiziert: boolean, Standard falsch, keine Nullen). Mapping ist jetzt sicher und war nicht vor ein natives SELECT * dessen Zeilen Hibernate in diese Klasse hydratisiert, also eine Spalte Tabelle fehlt breaks E-Mail-Suche selbst, nicht nur schreibt. Darum ging es aus und kam vor ein paar Stunden zurück. SearchIndexService zeichnet es von hier an auf, so dass neu indizierte Nachrichten alle tragen drei IMAP-Fahnen statt zwei.
· EmailService
Servieren Sie eine Ordnerauflistung aus dem Index, wenn es beweisen kann, dass es aktuell ist
Die Zeilen hinter einer Nachrichtenliste befinden sich bereits in Postgres - der Metadatenindex hält Absender, Betreff, Datum, Größe, Anhang und Flaggen für jede Nachricht, die es hat gesehen. Eine Seite von dort aus zu lesen ist eine Abfrage; das Lesen von IMAP ist ein SELECT plus eine fünfzig-Umschlag FETCH und macht den Server bauen Sie den Mailbox-Index zu Antwort. Was jemanden davon abhielt, es zu benutzen, war nicht Geschwindigkeit, sondern Vertrauen. Der Index wird von einem gefüllt Push-Indexer, der nur läuft, während jemand hat die Mailbox geöffnet, so ist es erlaubt, willkürlich abgestanden zu sein, und nichts zeichnete eine aktuelle Mappe von eine abgestandene. Ein STATUS unterscheidet sie. Es ist die billigste Frage IMAP beantwortet . nein SELECT, keine Nachrichtendaten - und es gibt die Nachrichtenanzahl des Ordners und seine nächste UID. Der Index wird nur verwendet, wenn beide mit dem übereinstimmen, was er hält: die Anzahl Fänge alles hinzugefügt oder entfernt, und maxUid + 1 == UIDNEXT fängt den Fall eine Zählung kann nicht sehen, wo so viele angekommen sind, wie gelöscht wurden. UIDNEXT bewegt sich nur vorwärts, so ein Anhängen des Index verpasst lässt es über dem höchsten UID der Index gestrandet weiß. Jedes andere Ergebnis fällt zurück auf IMAP: ein fehlender Ordner, ein Server, der Decoder STATUS, ein leerer Index, ein Datenbankfehler. Das schlechteste verfügbare Ergebnis ist die Verhalten, das vorher existierte. Ein Ordner, der den Test nicht besteht, heilt sich selbst wenn die nächste Nachricht ankommt und indiziert wird. Aus in der Standard hinter ****************, weil die Antwort marker hängt von search_index.is_answered ab, das bis zum KamoInitializer ist gelaufen. Das Einschalten ist dann eher eine vorsätzliche Tat als ein Nebenwirkung eines Einsatzes. Das Abkommen Vordiz ist, wo falsch zeigt jemand die falsche Post, so dass es ist rein, verpackungsprivat und aus dieser Richtung getestet - jeder Fall fragt, ob es kann den Index verwenden, wenn es nicht darf.
· InitializerService
is_answered zum Mail-Suchindex hinzufügen
Fügt ************ hinzu, so dass der Index alle drei aufzeichnet IMAP-Flaggen statt zwei. Die Nachrichtenliste zeichnet daraus einen Antwort-Marker eins, und die index-unterlegte Auflistung in EmailService kann nicht eingeschaltet werden, bis die Spalte existiert. Bestell 0, aus dem üblichen Grund: SearchIndexEntity erstellt die Spalte vom Moment aus die gemeinsame Bibliothek trägt es gebaut, so dass jeder Läufer, der diese Einheit lädt emittiert es in seinem SELECT und ddl-auto kann es nicht für uns hinzufügen. Ein spät bestellter Läufer würde nie ausführen - ein früherer würde auf "Spalte existiert nicht" sterben und nehmen Sie den Lauf mit ihm. Null mit einem FALSE-Standard und einer Verfüllung bestehender Zeilen. Nicht zurücklesen von den Mail-Servern: Falsch ist bereits richtig für die überwältigende Mehrheit von Nachrichten, und der Lesepfad weigert sich, jeden Ordner zu dienen, kann es nicht beweisen stimmt mit dem Server über, so dass eine Reihe, die hier abgestanden ist, ist eine Zeile, die es nicht verwenden. Die Neuindizierung korrigiert sie.
· kamo-shared-library
Aufgezeichnet, auf die eine Nachricht im Mail-Index geantwortet wurde
email_metadata.search_index hat is_read und is_starred durchgeführt, seit es war erstellt, aber nie die dritte IMAP-Flagge, \Answered. Das war harmlos, während die Index nur Volltextsuche gefüttert, die sich nicht darum kümmert. Es hört auf, harmlos zu sein, jetzt, da der Index eine Seite eines Ordners dienen kann direkt: die Nachrichtenliste zieht ihre Antwortmarkierung von dieser Flagge, also eine Zeile serviert von einem Index, ohne dass es würde sagen, still und falsch, dass die Mitglied hatte nie auf diese Nachricht geantwortet. Die Spalte wird von KamoInitializer's ************ hinzugefügt und existiert nicht, bis das gelaufen ist - weshalb der Lesepfad, der ihn braucht hinter einer Flagge, die standardmäßig ausgeschaltet.
· kamo-internal
Clock-out-Anzeige trägt den gleichen Puls wie Legal & Compliance
Die Punschuhr atmete einen roten radialen Glanz, während die Verpflichtungsplakette drei Pixel links an seiner Seite pulsierten zwei sich ausdehnende Ringe. Beide Kontrollen fragen die Mitglied zu gehen und etwas zu tun, und zwei verschiedene Animationen, die schließen zusammen lesen sich wie zwei nicht verwandte Systeme - jedes einzeln gelernt. Eine Ringanimation dient nun beiden, so dass der Keyframe von der Verpflichtungen Feature es begann in. Reduzierte Bewegung verschlechtert sie noch anders, weil sie nicht den gleichen Betrag verlieren: die Abzeichen zählen und die Fehlerfarbe sagen immer noch "Sie etwas schulden", so dass diese Ringe einfach aufhören; nichts sonst auf dem Bildschirm sagt "Sie sind von der Uhr", so dass man eine einzige hält Ring öffnen mit einer stetigen Intensität und lässt die hintere ein.
· kamo-internal
Auf dem Bildschirm ist nicht das gleiche wie lesen
Ein Support-Gespräch wurde markiert lesen Sie den Augenblick sein Fenster geladen, so dass die eine Art von Fenster, das NICHT als gelesen zählen muss - die Art, die sich selbst erhöht, von einem Zuweisung, eine Umwidmung oder eine ankommende Antwort - räumte die Plakette vor der Mitglied hatte sich irgendetwas angeschaut. isFocused kann diese nicht auseinanderhalten: es wird von z-order abgeleitet, und ein Fenster, das gerade eröffnet ist top mit der Konstruktion. Die Shell-Maus-und Touchstart sind die einzigen Signale im System, die bedeuten, dass eine Person etwas getan hat, so dass der Anbieter jetzt kündigt sie als Werkzeug:userFocus von dem einen Ort beide Land. Daraus folgt die Regel, die das Mitglied beschrieb: geöffnet bewusst lesen, sobald es lädt von selbst ungelesen angehoben, bis berührt gerührt gelesen, beide Marken Sie wieder ungelesen zugeordnet, keine neue Nachricht erforderlich Zwei Briefmarken, denn es gibt zwei Arten ungelesen und jeder muss geklärt werden: markAsRead bringt den Lesezeiger an den Meldungen des Antragstellers vorbei und Zuweisung-eröffnet zieht die Übergabe zurück. AssignedTicketOpener streicht nicht mehr die Übergabe, wenn es ein Fenster anhebt - das war der Käfer in Miniatur, ein Bestätigung, dass der Agent etwas gesehen hatte, was sie nicht gesehen hatten. Seine pro-tab Wache trägt das Gewicht statt. TicketChat gehorcht dem Fenster, anstatt für sich selbst zu entscheiden, auch für Nachrichten, die ankommen, während es geöffnet ist: eine Antwort Landung in einem Gespräch Mitglied liest gelesen wird, ist eine Landung hinter ihnen nicht.
· MediaService
Ungelesen bedeutet, dass der Antragsdeponder gesprochen hat, oder das Ticket wurde einfach zu dir
Die Plakette gezählt "Live-Tickets niemand abgeholt hat, plus die, die ich halten" Nachricht-blind, und es fiel immer nur, wenn ein Ticket einen Terminal-Status erreicht. Also es saß bei fünf über einer Liste, die nichts markiert, und öffnen ein Gespräch bewegt weder. Es zählt jetzt, was es sagt: Gespräche mit etwas in ihnen für dieses Mitglied zu lesen. Beide Hälften des alten Prädikats sind verschwunden. Ungelesen ist eine native Abfrage mit die Ticketliste, so dass die Zahl und die markierten Zeilen die gleiche Tatsache sind, anstatt zwei Annäherungen, die zweimal drifteten. Die Rücknahme einer Übergabe sendet nun die Plakette. Es ist eine der beiden Möglichkeiten, Konversation hört auf, ungelesen zu sein, und ohne die Sendung blieb die Nummer stehen für den Fall ohne neue Nachrichten . Das ist genau der Fall Übergabe-Stempel existiert für. Die eigenen Tests der Plakette bewegen sich damit: Sie stub zwei HQL-Hälften nicht mehr, sondern behaupten was die Zahl bedeutet - ein Gespräch, das die andere Seite in zählt geschrieben, eine nur überreicht zählt auch mit nichts Neues in ihm, und jedes Ticket zählt einmal wie viele Arten, wie sie sich qualifiziert.
· kamo-shared-library
Eine Definition eines ungelesenen Support-Gesprächs
Der niviert und die Ticketliste sind zweimal auseinander gedriftet, indem sie antworten verschiedene Fragen. findUnreadStateForViewer ist die Einzelantwort, die beide jetzt gelesen haben, so können sie nicht wieder widersprechen. Ungelesen bedeutet, dass die andere Seite des Gesprächs gesprochen hat und Sie haben nicht geschaut. Für den zugewiesenen Agenten, der speziell der REQUESTOR spricht - Der Zettel des Kollegen auf dem gleichen Ticket ist nicht etwas, das der Agent schuldet eine Antwort auf, damit es keine Flagge hisst. Für den Antraggeber ist es jeder auf der Support-Seite. Jedermann aber ist keine Partei im Gespräch und sieht nichts, weshalb die Abfrage wird durch Rolle und nicht durch Org begrenzt: eine Cross-Orgie-Anfrage wird von einem Agenten beantwortet in einer anderen Org von der Person, die es angehoben, so dass keine Seite oder identifiziert beides. ÜbergabeUnread ist der zweite Weg, um ungelesen zu sein, ohne neue Botschaft beteiligt. Ein Gespräch überreicht zu bekommen ist selbst das, was man nicht gesehen hat, also ein Umwidmung landet ungelesen, aber alt seine letzte Nachricht - sonst ein Ticket verschoben für Sie am Morgen bleibt unsichtbar, bis der Kunde wieder spricht. ZuweisungenGeöffnet hat bereits genau das: geklärt auf jeder (re) Zuweisung, Stempelt nur, wenn der Agent hat es wirklich auf dem Bildschirm gestellt. RESOLVED bleibt zweckmäßig. Ein Antraggeber antwortet auf etwas, das ein Agent markiert gelöst ist der Fall am meisten wert durch, und derjenige, der würde sonst stillschweigend fallen gelassen werden; nur GESCHLOSSEN und VOID beenden.
· kamo-internal
Geben Sie der erweiterten Schiene eine Scrollleiste anstelle von Endpfeilen
Die Aufwärts-/Abwärtspfeile existieren, weil eine eingestürzte Schiene 80px von Fliese ohne Raum für alles andere zu verbringen. Erweitert, die Schiene ist 248px und die Optionen als eine Liste gelesen - da sind die Pfeile das schlechtere Instrument: Sie sagen nur "Mehr auf diese Weise", wo ein Scrollbalken sagt, wie viel mehr und wo in ihm Sie sind es schon, und sie schweben auf zwei Reihen, anstatt daneben zu sitzen sie. So nimmt der Scroller jetzt eine "Erbe", und NavPri fragt nach der Scrollleiste wenn die Schiene breit ist (persistente Ausdehnung oder ein Live-Hege-Peek). Alles andere am Band ist in beiden Modi unverändert: grab-and-throw, das Rad, berühren und scrollen die Option der aktuellen Seite in Sicht. Zwei Details zwingt der Schalter: - die weiche Kante steht nach unten, weil eine Maske den Scrollbalken eines Elements malt zusammen mit seinem Inhalt, und ein Fade über die Enden der Bar ist es gemeint zu begleiten sieht aus wie ein Fehler machen; - grab-to-slide ignoriert jetzt eine Presse, die auf der Dachrinne landet. Chrome liefert pointer-down dort, so dass ohne es ein Ziehen des Daumens bewegt der Streifen zweimal - der Browser scrollt es in eine Richtung und der Pan Handler der andere.
· kamo-internal
Verwenden Sie die echten Payroll-Anbieter-Logos auf den Anbieterkarten
Fügt die zehn Lieferanten Vermögenswerte und macht sie anstelle des Briefmarkes Platzhalter. Dies sind WORDMARKS, nicht quadratische Symbole wie die E-Mail-Provider-Set, und ihre Seitenverhältnisse von 0,72:1 (Tagforce, höher als breit) bis 6,2:1 (Paychex). Die 44px-Quadratkachel der E-Mail-Karten würde die meisten von ihnen zerquetschen und die breite schrumpfen diejenigen zu einem unleserlichen Abstrich, und eine Grenze um eine Wortmarke gezogen liest sich wie ein Fehler und kein Rahmen. So wird die Marke nun bei einer festen HEIGHT mit automatischer Breite und eigener Seitenverhältnis, begrenzt, so dass Paychex eine Karte nicht dominieren kann. Eine gleichmäßige Höhe Über zehn verschiedene Formen ist es, was das Gitter bedächtig aussehen lässt. Jeder Vermögenswert intrinsic viewBox Dimensionen werden neben seinem Pfad aufgezeichnet, weil next/image muss sie die richtige Box reservieren - Hand ihm ein Quadrat für ein 6:1 Asset Führt genau die Verzerrung wieder ein, die dies vermeidet. Auf der Karte nimmt das Logo eine eigene Reihe über dem Namen und Status-Chip, sondern als neben ihnen sitzen, wie es eine Ikone tun würde. Das Logo ist dekorativ überall dort gekennzeichnet, wo der Name des Anbieters neben ihm wiedergegeben wird, so ein Bildschirmleser liest den Namen einmal und nicht zweimal; die Lettermark-Fliese bleibt für GENERIC_CSV, das eher ein Verbindungszustand als ein Anbieter ist und kein Vermögen.
· kamo-shared-library
Tragen Sie, ob ein Ticket einer der Punkte ist, die der Stützabzeichen zählt
Die schiffs Plakette und die Ticketliste beantworteten verschiedene Fragen und Niemand konnte es sagen. Die Plakette zählt Gegenstände, die auf Aufmerksamkeit warten - überwältigend Tickets hat noch niemand abgeholt, was eine Tatsache über die TICKET ist. Die Liste markiert ungelesene Chat-Nachrichten, eine Tatsache über seine CONVERSATION. So lautete die Plakette "5" über eine Liste, die nichts markiert, und die beiden Zahlen hatten keine sichtbar Beziehung. needsAttention trägt den eigenen Mitgliedstest des Abzeichens pro Zeile, so dass die Liste kann markieren genau, was die Plakette zählt. uneenCount bleibt: "jemand sagte etwas, das Sie nicht gelesen haben" ist immer noch wert zu zeigen, und es ist nicht das gleiche Sache als "niemand handhabt das".
· kamo-internal
Payroll Provider Setup, und Map Menschen zu zahlen bei der Einschreibung
Ersetzt den Platzhalter HRS Übersicht Registerkarte durch die reale Sache. Die Registerkarte ist jetzt "Provider Setup" und der Bildschirm ist "Payroll Provider Setup", nach der E-Mail-Provider-Bildschirm ist es modelliert auf - die Registerkarte bleibt "Übersicht", so dass die Einstellungen Menü, die Launchpad-Karte und jedes vorhandene Lesezeichen arbeiten weiter. Gebaut, so dass ein HR-Administrator ohne technischen Hintergrund kann drei beantworten Fragen, ohne jemanden zu fragen: ist dies verbunden, hat es synchronisiert, und ist irgendetwas falsch ist jetzt. - Provider-Karten zeigen, was jeder Anbieter tatsächlich tun kann VOR der Org-Commits, so die Wahl ist ein Vergleich und nicht eine Vermutung, und eine abwesende Fähigkeit ist sichtbar vorne statt am Payroll Day entdeckt. - Die Anmeldeformulare werden aus dem Feldschema des BACKEND wiedergegeben. Hinzufügen eines Feld für einen Anbieter ist eine Java-Änderung anstelle einer neuen React-Komponente E-Mail-Bildschirm handgeschrieben eine Komponente pro Anbieter und hat zwölf. - Geheimnisse werden nie zurück an den Browser gesendet, nur ein "This is set"-Flagge und Blanko-Box bedeutet unverändert statt klar. - Das Gesundheitspanel führt mit den zwei Möglichkeiten Stunden stillschweigend nicht zu erreichen Gehaltsabrechnung - unermapped Menschen und ungeprüfte verdienen Codes - weil beide sind zu der Zeit unsichtbar und nur als Lohnbeschwerde auftauchen. - Ein Teillauf ist seine eigene Farbe. "412 von 415 Personen" ist kein Erfolg und nicht ein Versäumnis, und es als entweder versteckt drei unbezahlte Menschen. - Führen Sie detailgezeigt die Person und die Korrektur, nicht eine Stack-Spur. Ausgabe-Codes kommen vom Server als stabile Token und hier lokalisiert. Einschreibung gewinnt die Gehaltsabrechnung Mapping Spalte, weil die Anmeldung jemanden und Die Gehaltsabrechnung zu sagen, wer sie sind, ist eine Arbeit. Auto-Match schlägt auf genaue Arbeits-E-Mail Gleichheit und ein Mensch bestätigt - ein Name ist keine Identität und ein falsches Glied sendet einer Person die Stunden einer Person zu dem Lohn. Ein bereits beanspruchter Anbieter record bleibt sichtbar, aber unpickbar. Dieser Bildschirm hatte auch keine Übersetzungen überhaupt und machte rohes 19-stelliges Mitglied IDs; beide fixiert, mit dem Display-Name-Nachahmung zu einem Hook extrahiert, da jeder Zeitkartenbildschirm hat die gleiche Lücke. Plattform erweiterte Konfiguration gewinnt die sieben Lohnabrechnung Anbieter, wo Kamo hält eine Registrierung der Partner. Bewusst keine Karte für Dayforce, Workday oder UKG: sie Ausgabe Anmeldeinformationen pro Kunde, und der Bildschirm macht eine Karte für jedes enum konstant, so dass man für sie ein Formular wäre, das kein Operator ausfüllen könnte. RoleRightType-Spiegel gewinnt 197, 198 und 199 - die ersten beiden existierten Server-Seite und fehlten bereits hier, so checkRight hatte nichts getippt zu verweisen.
· InitializerService
Index und REVOKE die Lohnabrechnungsanbieter-Tabellen-Tabellen
Was Hibernate nicht für die neuen hr_timecard_payroll_*-Tabellen ausdrücken kann. Zwei REVOKEs. PayrollDispatch und PayrollSyncIssue Müll-Updates und löscht in Java über @PreUpdate/@PreRemove, aber Enterleide-Rückrufe feuern nur für Zeilen in einen Persistenzkontext geladen . Bulk JPQL, delete AllInBatch() und native SQL Gehen Sie direkt an ihnen vorbei. Ein Lohnübertragungsversuch ist ein Geldereignis, und Beweise über eine abgeschlossene Synchronisation müssen überleben, um Beweise zu sein. Zwei Teilindizes, die das Unternehmen nicht tragen kann, weil sie Prädikate haben: die Arbeitsliste des Sweeps (Org mit Synchronisierung aktiviert und eine Synchronisation fällig, eine kleine Minderheit der Zeilen) und Sync-Fehler pro Mitglied (ERROR-Reihen, in der Überzahl von INFO ungefähr durch die Größe des Dienstplans). Angewandt und verifiziert gegen Yugabyte.
· kamo-internal
Größe einen Anhang durch das, was die API des Anbieters tatsächlich trägt
Der Komponist hielt jede soziale DM zu einer flachen 10 MB, die Telegram Foto ist Limit gilt für vier Anbieter, die es nicht teilen. Jeder bekommt jetzt seine eigenen Decke, und innerhalb eines Anbieters jeder Medientyp bekommt seine eigene, wo die API spaltet sie: Telegramm 10 MB Foto, 50 MB Dokument/Video/Audio (sendPhoto vs sendDocument) Messenger 25 MB, für jede Art gleich Instagram 8 MB Bild, 25 MB Video/Audio/Datei Discord 8 MB (die Bot-Upload-Decke) X keine Eigenmittel unbekannt 8 MB, die engste der oben genannten Dies sind die Grenzen der API jeder Adapter Beiträge zu, NICHT der Consumer-App gleichen Namens. Die beiden unterscheiden sich und es spielt eine Rolle: Messenger-App angehoben Datei teilen Sie zu 100 MB, während seine Send API mit 25 MB dokumentiert ist, und es ist die API Nummer, die entscheidet, ob der Kunde die Datei erhält. Sizing auf die App Figur würde der Komponist etwas akzeptieren Meta dann verweigert, lange nach dem Agenten wurde gesagt, dass es ausgegangen ist. X bekommt keine Büroklammer statt einer, der alles ablehnt: XAdapter's sendImage und sendMedia fallen beide durch zu sendenText - Medien-Upload war out of V1's scope - so dass eine angehängte Datei nirgendwo hingehen würde, während die Beschriftung ankam allein. Seine eigene ProviderCapabilities sagt das gleiche. AttachmentPolicy wächst "maxBytesByClass" dafür, von einem neuen Vier-Wert-Tal AttachmentClass (Image/video/audio/file), das mit der Aufteilung der Anbieter übereinstimmt Endpunkte und wie MediaService ausgehende Medien umgibt. SVG ist eine Datei in beiden.
· DaemonService
Nächtliche Lohnabrechnung-Anbieter synchronisieren Job
Drives TimecardService's ************, das synchronisiert jede Organisation, deren nächster Synchronisation fällig ist. Cron lebt hier und nicht in TimecardService, weil dieser Einsatz ist RollingUpdate mit maxSurge 1, so dass zwei Hülsen überlappen auf jedem Rollout und einem @Scheduled Methode feuert zweimal - was für eine Lohnabrechnung Sync bedeutet zwei Schubereien von die gleichen Stunden. DaemonService ist Repliken 1, Strategie Rektekieren. Geplant um 03:00 Uhr, vierzig Minuten nach der Zeitkarte fegt: die in der Nähe offen Schichten und erkennen Ausnahmen, und Senden von Stunden zu einem Lohnabrechnung Anbieter vor sie haben laufen würde Zahlen übertragen, die sich ändern werden. Weigert sich, auf einem leeren mlos.internal-auth-secret laufen, anstatt eine falsche Protokollierung Erfolg - eine Gehaltsabrechnung Sync, die ruhig nie läuft sieht genau wie eine, die gefunden nichts zu tun, und der Unterschied ist eine Lohnperiode von Stunden, die nie den Anbietern erreicht.
· SecurityService
Die Berechtigungsgrenze für die Einrichtung von Lohnabrechnungsanbietern
Relays die neue ************ Oberfläche und erzwingt, wer kann es zu erreichen. TimecardService hält den Motor und keine Sitzung; diese hält die Sitzung und entscheidet. SecurityService läuft anrequest().permitAll() mit Handgerollt pro Handler auth, so dass ein Handler, der seine Wache vergisst, nicht schwach ist kontrolliert - es ist unkontrolliert und aus dem öffentlichen Internet zu erreichen. Gemaegt unter dem bestehenden /api/security/payroll prefix absichtlich: kamo-intern erreicht es durch eine Catch-all BFF-Route, und ein neues Präfix würde 404 in der Browser, während jeder Dienst ist gesund und jeder Build ist grün. Vier Stufen: - MANAGE_PAYROLL_PROVIDER (199) schreibt Anmeldeinformationen und verbindet oder trennt OAuth. Dies ist die Fähigkeit, zu entscheiden, wo die Stunden einer Organisation sind übertragen, deshalb ist es sein eigenes Recht. - MANAGE_HRS_SETTINGS (45) liest die Verbindung und ihre Gesundheit. - MANAGE_TIMECARDS (183) deckt Mitarbeiter-Mapping und Synchronisierungshistorie ab. - FINALIZE_PAY_PERIODS (198) überträgt eine engagierte Charge - die gleiche Stufe wie den Export zu begehen, weil es der gleiche Akt ist. Test Connection sitzt mit dem Schreiben rechts statt der gelesenen: es ist ein ausgehende Anruf mit gespeicherten Anmeldeinformationen gemacht, und lassen Sie jeden, der die anzeigen kann Seite Feuer es gibt ihnen eine Möglichkeit, die Org Lohnabrechnung Anbieter zu ergründen. Die OAuth-Austausche leitet KEINE org-ID weiter. TimecardService nimmt es aus der HMAC-signierte Zustand, so dass ein Code für einen Mieter erhalten kann nicht eingelöst werden gegen einen anderen sogar von einem Anrufer, der das Recht in beiden hält. Fügt Put/Löge zu TimecardServiceClient hinzu, der nur erhalten/post hatte.

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