mORMot2 DailyLecture quotidienne des commits upstream

Les clients HTTP et WebSockets se stabilisent après une large optimisation ECC

Cette édition corrige plusieurs lacunes du cycle de vie des WebSockets HTTP.sys et le traitement des en-têtes de réponse pour WinINet, WinHTTP, le client HTTP de Delphi et libcurl. Le même lot réécrit de nombreux chemins arithmétiques ECC P-256 pour ARM, i386 et x86-64, tout en rétablissant la compilation avec Delphi 7/2007 et Delphi POSIX. Les utilisateurs Kerberos POSIX doivent aussi prendre en compte deux changements de signature publics liés aux keytabs.

En bref

  • Utilisez le build 2.4.17531 : il contient la série complète des en-têtes des clients HTTP et tous les correctifs de compatibilité.
  • Les builds 2.4.17513 à 2.4.17515 contiennent un token fixme isolé dans mormot.core.base et ne doivent pas être utilisés.
  • TServerSspiKeyTab.PrepareKeyTab renvoie désormais boolean et ServerForceKeytab accepte RawUtf8 au lieu de TFileName.
  • Le nettoyage, les callbacks idle, le suivi des ping et les échecs d'envoi des WebSockets HTTP.sys ont été revus sur sept commits.

Conseil de mise à jour

Passez directement au build 2.4.17531 plutôt qu'à une révision intermédiaire. Recompilez les appels à TServerSspiKeyTab.PrepareKeyTab et ServerForceKeytab, puis retestez l'arrêt des WebSockets HTTP.sys, les envois rejetés, les callbacks idle, les redirections libcurl et les en-têtes des clients Windows. N'utilisez pas les builds 2.4.17513-2.4.17515 : mormot.core.base contient un token fixme invalide.

Build2.4.17497 → 2.4.17531
Commits33
Lignes+3540 -1049
Lecture8 min

30 sur 30 entrées · 33 commits upstream

# Entrée Catégorie Unités
1 Élevée La gestion keytab POSIX devient verrouillée, UTF-8 et porteuse de résultat TServerSspiKeyTab protège nom de fichier et séquence avec fSafe, convertit TFileName en UTF-8 avant GSSAPI et conserve le keytab actif si le remplacement est invalide. PrepareKeyTab devient une fonction boolean et ServerForceKeytab prend RawUtf8. Ruptures mormot.lib.gssapi 4059a7dd+53-38

lib: several TServerSspiKeyTab fixes

Impact

Les appels directs doivent être recompilés pour les deux changements de signature. Les noms Delphi POSIX arrivent à GSSAPI en UTF-8 et les lecteurs concurrents ne voient plus un nom keytab non protégé.

Migration nécessaire

Recherchez PrepareKeyTab et utilisez ou ignorez explicitement son résultat boolean ; passez des valeurs RawUtf8 UTF-8 aux appels directs de ServerForceKeytab. Utilisez le build 2.4.17505 ou ultérieur.

API publique

  • TServerSspiKeyTab.PrepareKeyTabsignature-changed — La procedure devient function PrepareKeyTab: boolean.
  • ServerForceKeytabsignature-changed — Le paramètre passe de TFileName à RawUtf8 encodé en UTF-8.

Arnaud Bouchez · 09:15 UTC · voir le commit sur GitHub →

2 Élevée Le nettoyage d'alignement rend brièvement mormot.core.base non compilable Plusieurs records de taille naturelle perdent packed pour améliorer l'alignement ARM, dont THash128Rec, THash256Rec, THash512Rec, TDebugSymbol et TDebugBlock. Le même diff insère accidentellement un token fixme isolé avant InterlockedIncrement. Ruptures mormot.core.base+3 b66d0984+13-13

core: don't use "packed record" unless really needed

Impact

Les builds 2.4.17513 à 2.4.17515 ne peuvent pas compiler mormot.core.base car fixme est du Pascal invalide. Après correction, les accès ARM peuvent être plus rapides ; les consommateurs de layout brut doivent être reconstruits ensemble.

API publique

  • THash128Rec, THash256Rec, THash512Rec, TDebugSymbol, TDebugBlock and related recordsbehaviour-changed — Le modificateur packed est retiré lorsque l'alignement naturel suffit ; reconstruisez les consommateurs de layout binaire.

Arnaud Bouchez · 14:37 UTC · voir le commit sur GitHub →

3 Élevée Les échecs HTTP.sys et le teardown WebSocket deviennent visibles et bornés HttpSendResponse et SendResponse renvoient le succès réel, les chemins fichier statique et Range invalide sortent immédiatement, les handshakes WebSocket échoués libèrent les handles, OnDisconnect ne suit qu'une connexion établie et le teardown attend au plus cinq secondes. Correctifs mormot.net.server cc55fa88+58-40

net: several THttpApiServer/THttpApiWebSocketServer fixes

Impact

Les appels HTTP.sys ne prennent plus un envoi échoué pour un succès, les fichiers/ranges invalides cessent le traitement, les upgrades partielles ne fuient plus de handles et l'arrêt n'attend plus indéfiniment.

Arnaud Bouchez · 06:39 UTC · voir le commit sur GitHub →

4 Élevée Les envois WebSocket HTTP.sys échouent proprement et les files se vident Broadcast intercepte les exceptions d'envoi par connexion et lance la fermeture, les ensembles d'états actifs/fermés sont centralisés, l'arrêt ignore les connexions déjà closes et ProcessActions continue sans double complétion. Correctifs mormot.net.server 6e02ccef+37-25

net: some http.sys WebSockets fixes

Impact

Un WebSocket défaillant n'interrompt plus un broadcast, les échecs sont signalés par le résultat boolean et les actions receive/close risquent moins de bloquer ou se terminer deux fois.

Arnaud Bouchez · 06:55 UTC · voir le commit sur GitHub →

5 Élevée L'enregistrement keytab est retenté après un échec GSSAPI par thread PrepareKeyTab copie la séquence principale sous verrou mais ne met à jour la threadvar qu'après succès de ServerForceKeytab. SetKeyTab vérifie les changements et FileIsKeyTab sous fSafe. Correctifs mormot.lib.gssapi 0a647b66+29-21

lib: minor TServerSspiKeyTab fixes

Impact

Les échecs Heimdal ou transitoires sont retentés sur le même thread au lieu d'être considérés comme préparés, et le refresh concurrent ne concurrence plus les métadonnées mises en cache.

Arnaud Bouchez · 09:33 UTC · voir le commit sur GitHub →

6 Élevée De nouveaux sélecteurs assembleur ARM réparent aussi la déclaration core cassée mormot.defines.inc introduit ASMARM64 et ASMINTELARM et les annule sous NOASMBLOCK. mormot.core.base adopte ASMINTELARM pour les déclarations atomiques et retire le token fixme isolé ajouté au build 17513. Correctifs mormot.core.base+1 6f93fc70+24-16

core: new ASMINTELARM/ASMARM64 conditionals

Impact

Les builds 2.4.17513 à 2.4.17515 contiennent du Pascal invalide dans mormot.core.base ; le build 2.4.17516 rétablit la compilation et fournit des sélecteurs stables pour l'assembleur ECC suivant.

Arnaud Bouchez · 14:51 UTC · voir le commit sur GitHub →

7 Élevée Les serveurs HTTP.sys retrouvent logging, télémétrie et OnIdle périodiques THttpApiServer crée un TSynBackgroundThreadProcess nommé HttpApiIdle, appelle la méthode virtuelle DoIdle chaque seconde avec les temps monotones et libère le worker avant le teardown principal. Correctifs mormot.net.server df25cd22+25-6

net: fixed logger + telemetry + OnIdle() support in THttpApiServer

Impact

Les backends HTTP.sys Windows vident de nouveau les logs, consolident la télémétrie, appellent OnIdle et entretiennent blacklist/keytab même sans trafic.

Arnaud Bouchez · 09:54 UTC · voir le commit sur GitHub →

8 Élevée libcurl n'expose plus que les en-têtes de la réponse finale TCurlHttp installe CurlWriteLastResponseHeader comme callback d'en-têtes. Le callback efface le bloc accumulé à chaque nouvelle ligne de statut HTTP, puis ajoute les en-têtes de la réponse courante. Correctifs mormot.net.client b9bdb628+16-3

net: fix TCurlHttp intermediate response headers

Impact

Les redirections et autres échanges multi-réponses ne mélangent plus les en-têtes intermédiaires dans TCurlHttp.Header ; les appels lisent ceux du statut final.

Arnaud Bouchez · 09:32 UTC · voir le commit sur GitHub →

9 Élevée Les en-têtes Windows conservent un stockage Unicode valide et des noms propres TWinHttp.InternalAddHeader conserve le résultat Utf8ToSynUnicode dans une variable SynUnicode locale et transmet sa longueur réelle en caractères larges. TDelphiNetHttp.InternalAddHeader découpe séparément noms et valeurs. Correctifs mormot.net.client 59a88c92+11-7

net: TWinHttp and TDelphiNetHttp client fixes

Impact

TWinHttp évite un pointeur vers une chaîne temporaire et une confusion de longueur UTF-8/Unicode ; le client Delphi ne transmet plus les espaces entourant les en-têtes personnalisés.

Arnaud Bouchez · 09:23 UTC · voir le commit sur GitHub →

10 Élevée Delphi 7 et 2007 conservent un fallback de réduction P-256 compatible _modMultN est séparé par HASQWORD. Les compilateurs modernes utilisent la réduction de Barrett ; Delphi 7/2007 gardent l'algorithme précédent par décalage et soustraction sans sémantique UInt64 non signée. Compilateur & plateforme mormot.crypt.ecc256r1 597b691f+61-7

crypt: circumvent Delphi 7/2007 compiler restriction

Impact

Les anciens Delphi compilent et continuent de produire les résultats P-256 via le chemin éprouvé plus lent. Les backends récents gardent le réducteur optimisé.

Arnaud Bouchez · 17:21 UTC · voir le commit sur GitHub →

11 Élevée Les builds Delphi POSIX retrouvent l'aide de multiplication large mormot.core.base ajoute une implémentation Delphi de mul64x64 hors de la branche FPC. Les expressions de carry ECC reçoivent aussi des conversions ordinal et PtrUInt/QWord acceptées par Delphi POSIX. Compilateur & plateforme mormot.core.base+2 c763b013+23-9

crypt: fixed Delphi POSIX compilation

Impact

Les cibles Delphi POSIX compilent de nouveau la nouvelle arithmétique ECC. Le changement concerne uniquement la compatibilité du compilateur et ne modifie pas les API applicatives.

Arnaud Bouchez · 17:29 UTC · voir le commit sur GitHub →

12 Élevée Le découpage des en-têtes HTTP compile avec les Delphi pris en charge TDelphiNetHttp.InternalAddHeader stocke les résultats de TrimCopy dans des variables RawUtf8 explicites avant leur conversion en string pour THTTPClient.AddHeader. Compilateur & plateforme mormot.net.client 0a8341fb+8-5

net: fixed TDelphiNetHttp header trimming compilation

Impact

L'appel en ligne de la surcharge procedure de TrimCopy ne compilait pas ; les backends Delphi utilisant TDelphiNetHttp compilent de nouveau sans changer le code applicatif.

Arnaud Bouchez · 09:26 UTC · voir le commit sur GitHub →

13 Moyenne La fermeture et le suivi des ping WebSocket HTTP.sys partagent un chemin THttpApiWebSocketConnection.DoClose centralise le statut, le contexte et BeginClose. Le timestamp ping est fixé avant l'envoi, les ping/pong ne renouvellent plus l'activité normale et les fermetures passent par DoClose. Correctifs mormot.net.server 303139a2+23-29

net: new THttpApiWebSocketConnection.DoClose internal method

Impact

Les connexions WebSocket idle ne restent pas vivantes uniquement grâce aux ping serveur et les échecs produisent un état de fermeture cohérent. Pas de changement d'API applicative.

À regarder

Arnaud Bouchez · 10:33 UTC · voir le commit sur GitHub →

14 Moyenne WinINet et WinHTTP ne renvoient plus la ligne de statut comme en-tête RemoveHeadInHeaders supprime les espaces puis une éventuelle ligne de statut HTTP initiale. TWinHttpApi.InternalRetrieveAnswer et TCurlHttp l'appliquent avant d'exposer ou d'analyser les en-têtes. Correctifs mormot.net.client e46374f3+21-12

net: fixed WinINet/WinHttp retrieved headers

Impact

Les appels reçoivent un bloc normalisé au lieu d'un pseudo-en-tête contenant le statut HTTP/1.x. Les recherches deviennent cohérentes entre clients Windows et curl.

Arnaud Bouchez · 08:02 UTC · voir le commit sur GitHub →

15 Moyenne Les buffers et files d'actions WebSocket résistent aux échecs de callback DoOnMessage efface fBuffer dans finally, ProcessActions continue après une action d'envoi complète au lieu de tomber dans la suite, et UpgradeToWebSocket découpe chaque nom de sous-protocole demandé. Correctifs mormot.net.server a2fab1d6+8-9

net: minor THttpApiWebSocketServer tweaks

Impact

Une exception OnMessage ne laisse plus de payload périmé pour le message suivant, les fins d'envoi ne corrompent plus le traitement et les listes de protocoles espacées négocient correctement.

Arnaud Bouchez · 09:43 UTC · voir le commit sur GitHub →

16 Moyenne Les serveurs HTTP exposent un hook virtuel unique de maintenance idle THttpServerGeneric ajoute la méthode protégée virtuelle DoIdle(tix64, sec32). Les serveurs socket y déplacent logger, analyzer, OnIdle, blacklist et maintenance keytab POSIX ; le serveur async réutilise ce chemin. Nouveautés mormot.defines+2 ddb42855+37-42

net: new THttpServerGeneric.DoIdle virtual method

Impact

Les sous-classes peuvent étendre la maintenance périodique de façon cohérente, tandis que les backends socket et async conservent leurs callbacks via l'implémentation partagée.

À regarder

API publique

  • THttpServerGeneric.DoIdleadded — La procedure protégée virtuelle DoIdle(tix64: Int64; sec32: cardinal) centralise le travail périodique du serveur.

Arnaud Bouchez · 09:42 UTC · voir le commit sur GitHub →

17 Moyenne i386 reçoit les multiplications 128 et 256 bits natives mormot.crypt.core.asmx86 ajoute _mult128 et _mult256. L'unité Pascal dirige toutes les cibles ASMINTEL, dont i386, vers les routines natives de multiplication et carré. Performance mormot.crypt.core+1 afce8c72+602-98

crypt: new i386 asm for _mult256() and _mult128()

Impact

Les opérations ECC Intel/AMD 32 bits évitent le chemin Pascal générique. Le source applicatif et les formats cryptographiques restent inchangés.

Arnaud Bouchez · 17:20 UTC · voir le commit sur GitHub →

18 Moyenne La réduction du nombre premier P-256 passe en assembleur Intel _mmodP est déclaré dans mormot.crypt.core pour ASMINTEL et implémenté dans les includes i386 et x86-64. mormot.crypt.ecc256r1 garde son réducteur Pascal uniquement hors Intel. Performance mormot.crypt.core+3 15884e94+497-4

crypt: x86_64/i386 asm specific mormot.crypt.ecc256r1 computation of _mmodP

Impact

La multiplication P-256 sur i386 et x86-64 utilise une réduction modulaire spécifique à l'architecture. Clés, signatures et API publiques ne changent pas.

Arnaud Bouchez · 16:27 UTC · voir le commit sur GitHub →

19 Moyenne Les atomiques ARMv7 reçoivent des implémentations natives avec barrières L'include AArch64 devient mormot.core.base.asmarm.inc et reçoit des boucles ARMv7 LDREX/STREX entourées de DMB ISH. ASMARM les sélectionne sur AArch64 et ARMv7+ avec CPUARM_HAS_DMB. Performance mormot.core.base+2 a1079132+320-164

core: ARMv7 asm for Locked*() - in a single mormot.core.base.asmarm.inc

Impact

Les verrous et compteurs FPC ARMv7 gardent une barrière mémoire complète avec moins d'appels RTL. Les anciens ARM restent sur le fallback RTL protégé.

zen010101 · 08:22 UTC · voir le commit sur GitHub →

20 Moyenne ARMv8 reçoit une arithmétique large déroulée pour ECC mormot.core.base.asmarm.inc ajoute des routines AArch64 d'addition, soustraction, décalage et multiplication 128/256 bits. mormot.crypt.core les sélectionne via ASMARM64 plutôt que les équivalents Pascal plus lents. Performance mormot.core.base+2 284915df+357-44

crypt: new unrolled ARMv8 64-bit asm for 128-bit and 256-bit computation

Impact

Les charges cryptographiques Delphi/FPC AArch64 utilisent l'arithmétique large native, accélérant surtout les internes ECC sans changer le code applicatif.

Arnaud Bouchez · 14:52 UTC · voir le commit sur GitHub →

21 Moyenne AArch64 reçoit une réduction dédiée pour le nombre premier P-256 ASMARM64 publie maintenant une implémentation AArch64 de _mmodP depuis mormot.core.base.asmarm.inc, et mormot.crypt.ecc256r1 exclut l'implémentation Pascal sur cette cible. Performance mormot.core.base+2 1dec0f83+153-2

crypt: specific mormot.crypt.ecc256r1 computation in pure aarch64 asm

Impact

Les calculs internes de multiplication et signature ECC P-256 utilisent la réduction AArch64 native. Les formats et appels publics restent inchangés.

Arnaud Bouchez · 19:48 UTC · voir le commit sur GitHub →

22 Moyenne La réduction des scalaires P-256 passe à l'arithmétique de Barrett mormot.crypt.ecc256r1 ajoute BARRETT_N_MU_LOW et remplace la réduction bit à bit de Curve_N_32 dans _modMultN par une réduction de Barrett à largeur fixe puis au plus deux soustractions masquées. Performance mormot.crypt.ecc256r1 49108d2f+81-51

crypt: use Curve_N_32 Barret Reduction algorithm for ecc256r1

Impact

La multiplication scalaire ECDSA et la signature effectuent moins d'étapes de réduction dépendantes des données sur les compilateurs modernes. Les sorties cryptographiques doivent rester identiques.

À regarder

Arnaud Bouchez · 16:26 UTC · voir le commit sur GitHub →

23 Moyenne Les ping WebSocket HTTP.sys passent dans le cycle idle du serveur THttpApiWebSocketServer supprime TSynWebSocketGuard et surcharge DoIdle pour parcourir les connexions. Il sépare dernière activité et dernier ping, renouvelle l'activité après réception ou envoi non ping et rend PingTimeout modifiable. Sous le capot mormot.net.server 39a07c59+62-88

net: refactored http.sys WebSockets PING process

Impact

Le timeout ping partage désormais le thread idle d'une seconde et considère les envois applicatifs réussis comme activité. Le code existant peut aussi modifier PingTimeout après construction.

À regarder

API publique

  • THttpApiWebSocketServer.PingTimeoutbehaviour-changed — La propriété devient modifiable et les timeouts passent par DoIdle au lieu de TSynWebSocketGuard.

Arnaud Bouchez · 10:10 UTC · voir le commit sur GitHub →

24 Faible La mise au carré P-256 utilise un assembleur Intel et AMD dédié Des implémentations natives de _square256 sont ajoutées aux includes i386 et x86-64 ; mormot.crypt.core n'implémente plus le carré Intel via _mult256. Performance mormot.crypt.core+2 f6c7eed7+506-13

crypt: native i386/x64 asm version of _square256()

Impact

L'arithmétique ECC sur cibles Intel/AMD 32 et 64 bits utilise un chemin spécialisé. Aucun changement de source applicative ni de données sérialisées.

Arnaud Bouchez · 18:02 UTC · voir le commit sur GitHub →

25 Faible La comparaison d'entiers larges est spécialisée pour x86-64 et AArch64 _cmp256 passe à des implémentations natives pour ASMX64 et ASMARM64, tandis que la comparaison Pascal reste pour les autres cibles CPU64. Un commentaire précise aussi pourquoi TSynAngelizeState reste packed. Performance mormot.app.agl+4 7023137e+70-25

crypt: x64 and aarch64 asm for _cmp256() function

Impact

Les comparaisons ECC coûtent moins sur x86-64 et AArch64. Le layout binaire de TSynAngelizeState et le comportement public restent inchangés.

Arnaud Bouchez · 16:25 UTC · voir le commit sur GitHub →

26 Faible L'inversion modulaire P-256 effectue moins de comparaisons larges _modInv retarde _cmp256 jusqu'à ce que les deux opérandes soient impairs, remplace les couples comparaison/soustraction par le borrow de _sub256 et utilise _inc256 en place. Performance mormot.crypt.ecc256r1 a83aa6a6+38-33

crypt: slightly optimized _modInv() for ecc256r1

Impact

Les backends ECC Pascal et non spécialisés réduisent le travail interne d'inversion ; signatures, clés et comportement public restent identiques.

Arnaud Bouchez · 18:13 UTC · voir le commit sur GitHub →

27 Faible Le multiplicateur 256 bits en Pascal réduit le coût de boucle _mult256 sélectionne chaque diagonale par pointeurs de départ et nombre d'itérations explicite, combine directement les carries et écrit via PQWordArray au lieu de retester les indices. Performance mormot.crypt.core e657f90d+21-25

crypt: faster pure pascal _mult256() algorithm

Impact

Les cibles sans assembleur spécialisé, surtout ARM à ce stade de la série, effectuent la multiplication ECC interne avec moins de coût de boucle Pascal. Les API ne changent pas.

Arnaud Bouchez · 14:49 UTC · voir le commit sur GitHub →

28 Faible DoubleToAscii utilise la multiplication large native sur ARM Le chemin Grisu d2a_diy_fp_multiply utilise désormais ASMINTELARM et mul64x64 sur ARMv7 et AArch64, avec un accès au mot de normalisation via PQWordArray. Performance mormot.core.text 0fe4797b+6-6

core: slightly faster DoubleToAscii() on arm32/aarch64

Impact

Les backends Delphi et FPC ARM formatent les Double par un chemin de multiplication interne plus rapide ; le format de sortie et les API publiques ne changent pas.

Arnaud Bouchez · 09:27 UTC · voir le commit sur GitHub →

29 Faible Les wrappers atomiques FPC sont sélectionnés selon le CPU mormot.core.base réorganise Locked et Interlocked pour FPC : Intel utilise une ReadWriteBarrier vide autour des atomiques RTL, AArch64 garde son include assembleur et les autres CPU leurs barrières explicites. Les byte swaps et helpers de refcount rejoignent la branche FPC commune. Sous le capot mormot.core.base d1bb00c2+50-47

core: refactored FPC Locked*() functions

Impact

FPC Intel évite les barrières redondantes tandis que les cibles non Intel préservent l'ordre mémoire. Les signatures atomiques publiques et le code applicatif ne changent pas.

Arnaud Bouchez · 07:25 UTC · voir le commit sur GitHub →

30 Faible La conversion Decimal128 ne déclenche plus le hint FPC sur le littéral mormot.db.nosql.bson nomme le multiplicateur 100000000000000000 comme constante QWord BIGPOW10 et transmet cette constante typée à mul64x64 dans TDecimal128.FromText. Entretien mormot.db.nosql.bson 42184b30+6-3

db: fixed FPC compiler hint in TDecimal128 process

Impact

Les builds FPC perdent un hint du compilateur ; le parsing Decimal128 et sa représentation binaire ne changent pas.

Arnaud Bouchez · 14:50 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13