mORMot2 DailyLecture quotidienne des commits upstream

Les atomiques FPC ARM retrouvent leur ordre pendant la refonte des WebSockets HTTP.sys

Cette édition répare les barrières mémoire absentes des verrous mORMot sous FPC ARM et AArch64, où les données protégées pouvaient encore subir des courses malgré le mot de verrouillage. Sous Windows, la gestion des requêtes et WebSockets HTTP.sys est largement refondue puis stabilisée sur le cycle de vie, les E/S overlapped, l’envoi, l’arrêt et le ping. Les utilisateurs directs des wrappers HTTP.sys bas niveau et des index de connexion THttpApiWebSocketServerProtocol doivent migrer leur code.

En bref

  • Les verrous FPC ARM et AArch64 appliquent désormais des barrières mémoire complètes ; l’ancien code pouvait perdre des mises à jour ou corrompre l’état partagé.
  • Le moteur HTTP.sys traite les corps chunked sans limite, déconnecte les échecs laissant un corps non lu et isole l’état par requête.
  • Les connexions WebSocket HTTP.sys utilisent maintenant des ID TLockedList, des structures overlapped séparées pour lecture/réveil et un arrêt protégé.
  • THttpServerRequest.FullUrl devient RawUtf8, HttpApiRequest est supprimé et plusieurs signatures HTTP.sys bas niveau changent.
  • optCleanMagicJson peut retirer JSON_BASE64_MAGIC des réponses SOA ; SetErrorText, HtmlEscapeShortVar et TLockedList.Find sont nouveaux.
  • Adoptez le build 2.4.17497 ; ne restez pas sur les builds de transition HTTP.sys 2.4.17464 à 2.4.17496.

Conseil de mise à jour

Adoptez le build final 2.4.17497. Les déploiements FPC ARM/ARM64 doivent mettre à niveau pour la correction d’ordre mémoire et tester sous charge verrous, pools de threads et timers. Les déploiements Windows HTTP.sys/WebSocket doivent éviter les builds 2.4.17464–2.4.17496, migrer les symboles publics modifiés, puis tester uploads chunked, upgrades, send/close concurrents, déconnexions, arrêt et timeouts de ping.

Build2.4.17462 → 2.4.17497
Commits35
Lignes+3088 -2371
Lecture8 min

32 sur 32 entrées · 35 commits upstream

Sujets
# Entrée Catégorie Unités
1 Critique ARM centralise la correction des barrières dans les wrappers atomiques Le suivi définit des wrappers InterlockedIncrement/InterlockedDecrement avec barrières pour les cibles FPC weak-atomic, ajoute des entrées assembleur AArch64 et redirige verrous, compteurs async et références ECC vers ces primitives. Correctifs mormot.core.base+4 c1a131a8+158-133

core: huge refactoring on arm32/64 about atomic operations

Impact

C’est l’implémentation stabilisée de l’ordre mémoire FPC ARM32/ARM64. Elle protège l’état concurrent au-delà du mot de verrouillage, notamment pools de threads, timers et travail référencé.

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

2 Critique Les verrous FPC non-Intel deviennent des barrières mémoire complètes FPC_WEAKATOMICS marque les cibles non-Intel, les chemins AArch64 LDXR/STLXR ajoutent l’ordre DMB et les autres CPU FPC entourent les atomiques RTL de barrières dans TLightLock, TRWLightLock, TRWLock, TMultiLightLock et TOSLightLock. Correctifs mormot.core.base+2 b2b195da+190-8

core: Locked*() are now full memory barriers on FPC non-Intel CPUs

Impact

Sous FPC ARM et AArch64, l’exclusion du mot de verrouillage n’ordonnait pas la mémoire protégée. Le commit documente des incréments et contextes TSynThreadPool perdus ainsi qu’une corruption heap TSynBackgroundTimer.

zen010101 · 11:55 UTC · voir le commit sur GitHub →

3 Critique La refonte dangereuse des connexions WebSocket en classes est annulée Ce commit annule entièrement la refonte class précédente car TOverlapped doit rester les premiers octets de la structure transmise à IOCP. Correctifs mormot.net.server 1ff6986c+120-69

revert "net: rewritten http.sys WS connections list"

Impact

Il supprime un layout Windows invalide pouvant faire interpréter les métadonnées d’objet comme TOverlapped. Les travaux record puis TLockedList le remplacent.

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

4 Critique Une liste de connexions WebSocket en classes introduit un layout IOCP invalide Le commit convertit temporairement THttpApiWebSocketConnection d’un record/object enraciné sur TOverlapped en class et restructure les tableaux du protocole. Le commit non-merge suivant l’annule entièrement. Sous le capot mormot.net.server 91f43c69+69-120

net: rewritten http.sys WS connections list

Impact

Cette révision ne doit pas être déployée : IOCP exige TOverlapped à l’offset zéro, absent d’une instance class. Aucun effet API durable après l’annulation.

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

5 Élevée Les connexions WebSocket HTTP.sys passent des index aux ID stables THttpApiWebSocketServerProtocol stocke les connexions dans TLockedList, attribue un ID à chaque THttpApiWebSocketConnection et fait accepter THttpApiWebSocketConnectionID à Send et Close. Des structures overlapped lecture/réveil séparées coordonnent IOCP et arrêt. Ruptures mormot.net.server 8bcdf7e7+281-196

net: http.sys WebSockets server now uses TLockList

Impact

Le code qui conservait un index de tableau ou appelait Send/Close avec un integer doit garder Conn.ID et passer cet ID stable. Le runtime gagne un recyclage résistant à l’ABA et un arrêt concurrent plus sûr.

Migration nécessaire

Recherchez THttpApiWebSocketServerProtocol.Send/Close et les index stockés ; capturez plutôt THttpApiWebSocketConnection.ID dans les callbacks.

API publique

  • THttpApiWebSocketConnectionIDadded
  • THttpApiWebSocketConnection.IDadded
  • THttpApiWebSocketServerProtocol.Sendsignature-changed
  • THttpApiWebSocketServerProtocol.Closesignature-changed

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

6 Élevée Un état WebSocket par requête remplace la dernière connexion partagée THttpApiWebSocketServer stocke la connexion en attente dans THttpApiServerRequest plutôt que fLastConnection, rendant les upgrades concurrents locaux à la requête. THttpServerRequest.FullUrl devient virtual RawUtf8 et la propriété publique HttpApiRequest est supprimée. Ruptures mormot.lib.winhttp+1 c852c8cf+92-103

net: several fixed to THttpApiWebSocketServer

Impact

L’état partagé déclaré non thread-safe disparaît. Le code attendant FullUrl en SynUnicode doit utiliser RawUtf8 ; celui lisant HttpApiRequest doit employer les champs supportés ou une extension Windows interne.

Migration nécessaire

Recherchez les déclarations/affectations FullUrl et références HttpApiRequest ; migrez avant compilation puis testez les upgrades concurrents.

API publique

  • THttpServerRequest.FullUrlsignature-changed
  • THttpServerRequest.GetFullUrlsignature-changed
  • THttpServerRequest.HttpApiRequestremoved

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

7 Élevée Les helpers HTTP.sys bas niveau changent leurs contrats de sortie HTTP_RESPONSE.SetStatus renvoie désormais PRawUtf8 au lieu de remplir var RawUtf8, RetrieveHeadersAndGetRemoteIPConnectionID devient une procedure avec var Headers, et LookupTokenVar ainsi que VERB_TEXT sont ajoutés. Ruptures mormot.core.os.security+1 9c149153+41-16

lib: some http.sys API wrapper refinements

Impact

Les utilisateurs directs de ces wrappers Windows bas niveau ne compileront plus avant adaptation des paramètres de retour et sortie. Les utilisateurs de haut niveau THttpServer ne sont pas affectés.

Migration nécessaire

Recherchez les appels SetStatus et RetrieveHeadersAndGetRemoteIPConnectionID, supprimez les chaînes status temporaires et passez une variable Headers.

API publique

  • HTTP_RESPONSE.SetStatussignature-changed
  • RetrieveHeadersAndGetRemoteIPConnectionIDsignature-changed
  • LookupTokenVaradded
  • VERB_TEXTadded

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

8 Élevée Les upgrades et lectures WebSocket échoués sont désormais drainés proprement Le serveur finalise les upgrades échoués, refuse les nouveaux upgrades pendant l’arrêt, valide les écritures complètes, limite chaque connexion à une lecture en attente, termine les lectures échouées avec zéro octet et attend la fin des E/S avant recyclage. Correctifs mormot.net.server 97ab4cc4+64-24

net: some THttpApiWebSocketServer fixes

Impact

Les chemins d’erreur et d’arrêt WebSocket HTTP.sys Windows ne recyclent plus les enregistrements tant que des completions peuvent arriver. Aucune nouvelle migration source n’est introduite.

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

9 Élevée La completion websocket.dll est traitée comme une opération void WebSocketApi.CompleteAction passe d’une fonction HRESULT à une procedure, les contrôles de résultat disparaissent et la réception ne démarre qu’après la réponse HTTP 101. Correctifs mormot.lib.winhttp+1 6f0344bf+19-45

net: fixed WebSocketApi.CompleteAction usage

Impact

La déclaration Windows correspond désormais à websocket.dll et ne lit plus un résultat inexistant. La séquence d’upgrade ne commence pas non plus la lecture avant la validation du handshake HTTP.

API publique

  • WebSocketApi.CompleteActionsignature-changed

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

10 Élevée L’état de réponse HTTP.sys et les échecs Range sont durcis Le serveur marque les réponses avant envoi, sort après l’échec d’ouverture d’un fichier statique, renvoie 416 pour un Range hors fichier, intercepte les exceptions OnBeforeBody et nettoie l’état de réponse. Correctifs mormot.net.server 3b4da68d+34-23

net: some THttpApiServer fixes and cleanup

Impact

Les applications HTTP.sys Windows évitent de poursuivre ou doubler une réponse après erreur et renvoient le bon status pour les ranges invalides.

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

11 Élevée Les opérations WebSocket send et close concurrentes sont sérialisées THttpApiWebSocketServerProtocol verrouille désormais Close et Send, et la suppression du tableau pending-close reçoit le pointeur du compteur plutôt que celui du tableau. Correctifs mormot.net.server 3383af99+28-18

net: some THttpApiWebSocketServerProtocol fixes

Impact

Les backends WebSocket Windows évitent les courses entre threads applicatifs et maintenance du protocole, ainsi que la corruption mémoire due au mauvais compteur pending.

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

12 Élevée La déclaration d’envoi WebSocket rejoint son implémentation La mise à jour de déclaration manquante fait renvoyer à WriteData le succès et le nombre écrit, supprime l’ancien overlapped partagé pour send et envoie les corps de réponse en mode synchrone. Correctifs mormot.net.server c9bcf0ea+16-24

net: missing file in previous commit

Impact

Le commit précédent était incomplet sans cette unité et pouvait ne pas compiler ou conserver un comportement d’envoi incohérent. Aucune API applicative publique ne change.

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

13 Élevée HTTP.sys ferme les connexions dont le corps reste non lu SendError peut ajouter Connection: close et HTTP_SEND_RESPONSE_FLAG_DISCONNECT. Les corps trop grands, rejets de bot, abandons OnBeforeBody et erreurs de lecture utilisent ce chemin. Correctifs mormot.net.server 6a2970d5+21-9

net: properly disconnect http.sys client when needed

Impact

Le serveur ne réutilise plus une connexion HTTP.sys dont le corps n’a pas été consommé, évitant de polluer la requête suivante.

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

14 Élevée Les échecs de ping n’arrêtent plus le guard WebSocket THttpApiWebSocketConnection.CheckIsActive ignore désormais les états inactifs, ferme les peers expirés avant un nouveau ping et intercepte les exceptions Ping pour ne fermer que la connexion concernée. Correctifs mormot.net.server 21b62bc8+18-9

net: fixed http.sys ping process

Impact

Les services WebSocket HTTP.sys Windows conservent leur thread guard après un échec de ping et ne pingent plus les connexions en fermeture. Les API applicatives Delphi et FPC ne changent pas.

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

15 Élevée La réception du corps HTTP.sys respecte le contrat de l’API Windows La déclaration ReceiveRequestEntityBody remplace var cardinal par PCardinal pour pBytesReceived. Les lectures synchrones passent @bytesread, les lectures overlapped WebSocket nil, et les erreurs d’écriture remettent le compte à zéro. Correctifs mormot.lib.winhttp+1 e795d965+14-13

net: fixed http.sys API incorrect usage

Impact

Le wrapper accepte désormais le pointeur de sortie nul requis pour les E/S overlapped. Les appels directs au champ fonction doivent passer une adresse ou nil ; ce même commit a temporairement inversé un test d’envoi, corrigé juste après.

Migration nécessaire

Mettez à jour les appels directs à ReceiveRequestEntityBody avec @count ou nil, et adoptez 2.4.17497 plutôt que cette révision intermédiaire.

API publique

  • THttpApiFunction.ReceiveRequestEntityBodysignature-changed

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

16 Élevée Les écritures WebSocket et réponses de fermeture suivent les bons chemins WriteData ne réussit que pour une écriture complète du corps HTTP.sys, la boucle d’envoi teste l’échec avec la bonne polarité et une frame close cliente reçoit la réponse close correspondante. Correctifs mormot.net.server 072bba0e+11-11

net: THttpApiWebSocketConnection fixes

Impact

Cela corrige des régressions de la refonte WebSocket : les builds antérieurs pouvaient interrompre des envois réussis ou mal gérer le handshake de fermeture sous Windows.

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

17 Élevée Les envois réseau WebSocket déclarent les octets réellement écrits WEB_SOCKET_SEND_TO_NETWORK_ACTION écrit désormais chaque buffer websocket.dll, cumule les octets réels pour CompleteAction et déconnecte lors d’un échec d’écriture HTTP.sys. Correctifs mormot.net.server 4730c107+9-6

net: fixed WEB_SOCKET_SEND_TO_NETWORK_ACTION with http.sys

Impact

Les envois WebSocket HTTP.sys Windows ne déclarent plus la taille demandée si moins d’octets atteignent le réseau, améliorant la détection d’échec et l’état du protocole.

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

18 Élevée Les corps chunked HTTP.sys illimités ne reçoivent plus 413 La garde de longueur n’applique MaximumAllowedContentLength que si la limite est supérieure à zéro ; zéro conserve donc son sens illimité pour les corps chunked. Correctifs mormot.net.server 7b05e490+4-3

net: fixed #642 THttpApiServer chunked body gets 413

Impact

Les endpoints HTTP.sys Windows configurés sans limite acceptent les uploads chunked au lieu de répondre HTTP 413.

Arnaud Bouchez · 08:24 UTC · PR #642 · voir le commit sur GitHub →

19 Élevée Le traitement HTTP.sys devient un objet par requête Le chemin monolithique THttpApiServer.DoExecute est séparé en THttpApiServerRequest privé avec requête, réponse, buffers, logging et méthodes send/error. La réutilisation par thread demeure, mais l’état de réponse et d’exception devient explicite. Sous le capot mormot.net.http+1 5adc88f8+507-518

net: huge THttpApiServer refactoring/rewrite

Impact

Windows HTTP.sys gagne une meilleure isolation et gestion d’erreurs, mais ce commit ouvre une refonte multi-commit et ne doit pas être adopté seul.

À regarder

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

20 Élevée Les enregistrements de connexion gardent overlapped à l’offset zéro Les connexions reviennent à un stockage record/object avec TOverlapped en premier champ, tandis que l’allocation, la recherche et les tableaux pending-close sont réorganisés autour de pointeurs. Sous le capot mormot.net.server 22a41512+61-94

net: some THttpApiWebSocketConnection refactoring

Impact

Cela restaure le layout requis par les callbacks IOCP après la tentative class annulée, mais reste une architecture intermédiaire ensuite remplacée par TLockedList.

À regarder

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

21 Moyenne Un contenu HTTP compressé invalide ne remonte plus en exception THttpSocketCompressList.UncompressContent entoure le décompresseur d’un try/except, efface le résultat et renvoie nil si le codec lève une exception. Correctifs mormot.net.http f1ec718b+11-7

net: hardened THttpSocketCompressList.UncompressContent

Impact

Une entrée gzip/deflate invalide devient un échec normal au lieu de propager une exception dans le chemin HTTP Delphi/FPC. Les appelants doivent déjà gérer nil.

API publique

  • THttpSocketCompressList.UncompressContentbehaviour-changed

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

22 Moyenne Les listes verrouillées peuvent résoudre des identifiants résistants à l’ABA Un alias public TLockedListID type les séquences et TLockedList.Find recherche un ID non nul sous le verrou de liste. Le carry de LockedInc64 sous FPC 32 bits utilise aussi LockedInc32 pour sa barrière. Nouveautés mormot.core.base+1 4824b5db+32-8

core: new TLockedList.Find method

Impact

L’infrastructure peut retrouver des entrées recyclées sans dépendre de pointeurs instables. Les appels Delphi/FPC existants ne changent pas sauf adoption du helper.

À regarder

API publique

  • TLockedListIDadded
  • TLockedList.Findadded

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

23 Moyenne Les méthodes SOA peuvent renvoyer du JSON sans préfixes binary magic TInterfaceMethodOption gagne optCleanMagicJson. TInterfaceFactoryServer.ExecuteJson appelle RemoveMagicFromJson sur la réponse lorsque l’option est présente. Nouveautés mormot.core.interfaces+1 2ff79bbd+6-2

soa: new optCleanMagicJson option for #402

Impact

Les méthodes d’interface sélectionnées peuvent émettre des chaînes JSON sans le préfixe interne JSON_BASE64_MAGIC. Les services existants ne changent pas sans activation.

À regarder

API publique

  • TInterfaceMethodOption.optCleanMagicJsonadded

Arnaud Bouchez · 06:43 UTC · PR #402 · voir le commit sur GitHub →

24 Moyenne Le retrait du magic JSON devient un scan copy-on-write plus rapide RemoveMagicFromJson analyse d’abord les limites de chaînes, détecte les préfixes JSON_BASE64_MAGIC et n’alloue une copie modifiable que lorsqu’un marqueur doit être retiré. Performance mormot.core.json 367cdf5a+46-43

core: rewritten RemoveMagicFromJson()

Impact

Les appels SOA et directs gardent la même procedure publique mais évitent de copier le JSON ordinaire. Le comportement reste limité aux chaînes préfixées magic.

À regarder

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

25 Faible Le texte d’erreur système peut être affecté directement à RawUtf8 Une procedure publique SetErrorText remplit un RawUtf8 existant depuis un code d’erreur OS, par défaut l’erreur courante. GetErrorText lui délègue et le code HTTP réutilise le helper. Nouveautés mormot.core.os+2 f47c802c+263-237

core: new SetErrorText() function

Impact

Les appelants peuvent réutiliser une chaîne destination et éviter un temporaire ; le code GetErrorText reste compatible sous Delphi et FPC.

API publique

  • SetErrorTextadded

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

26 Faible L’échappement HTML peut remplir une short string fournie La procedure publique HtmlEscapeShortVar écrit le RawUtf8 échappé dans une ShortString avec le format choisi ; HtmlEscapeShort délègue désormais au wrapper. Nouveautés mormot.core.fmt 5ec9601b+14-4

core: new HtmlEscapeShortVar() wrapper function

Impact

Les appelants Delphi et FPC possédant déjà la destination peuvent éviter un résultat temporaire. Les appels existants restent compatibles.

API publique

  • HtmlEscapeShortVaradded

Arnaud Bouchez · 12:53 UTC · voir le commit sur GitHub →

27 Faible Le réseau async reçoit un nettoyage sans effet fonctionnel mormot.net.async est reformaté et simplifié sans modifier les branches exécutées ni les déclarations publiques. Sous le capot mormot.net.async 29b15f39+17-17

net: some code cleanup with no functional change

Impact

Aucun impact n’est attendu sur le code applicatif Delphi ou FPC.

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

28 Faible L’objet de requête HTTP.sys réécrit reçoit un nettoyage Le suivi simplifie et reformate la nouvelle implémentation THttpApiServerRequest après la grande refonte, sans modifier son comportement prévu. Sous le capot mormot.net.server 6dfbaf34+13-17

net: THttpApiServer cleanup after previous commit

Impact

Aucun impact sur le code applicatif n’est visible ; il s’agit de maintenance interne à HTTP.sys Windows.

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

29 Faible L’exemple documente ses dossiers interface et implementation Le SAD, README et les guides décrivent la séparation app/<entity>/interface et app/<entity>/implementation, le sens des dépendances et l’exception du mode local. Documentation recommended-patterns documentation 76e144c0+147-119

Document the app/<entity>/interface|implementation layout

Impact

Le runtime mORMot ne change pas ; les équipes suivant l’exemple obtiennent un guide architectural plus clair.

joaopauloschuler · 22:52 UTC · voir le commit sur GitHub →

30 Faible La documentation du layout CQRS intègre les corrections de revue Les documents d’architecture et de développement clarifient les dépendances interface/implementation et ajustent les références du service exemple après revue. Documentation recommended-patterns documentation 4ecaf74e+16-15

Address review notes on the interface/implementation docs

Impact

Aucun impact runtime ni API publique ; le commit améliore seulement l’explication recommended-patterns.

joaopauloschuler · 22:58 UTC · voir le commit sur GitHub →

31 Faible Les instructions de build et dépendances de l’exemple sont corrigées La documentation recommended-patterns retire les étapes de build obsolètes et aligne les dépendances sur l’arborescence réorganisée. Documentation recommended-patterns documentation 5b856937+22-8

Fix stale build steps and dependency list in the example docs

Impact

Aucun changement de framework ou runtime ; seuls les développeurs construisant l’exemple voient des instructions corrigées.

joaopauloschuler · 23:01 UTC · voir le commit sur GitHub →

32 Faible L’exemple CQRS sépare contrats et implémentations Les unités query, command et DTO de recommended-patterns passent dans app/<entity>/interface, les mappers et handlers dans implementation ; les chemins Delphi et FPC sont mis à jour. Entretien recommended-patterns example 323eb2c9+70-62

Move CQRS interfaces from dom/ to app/<entity>/interface

Impact

Seuls le layout de l’exemple et ses chemins de build changent. Les utilisateurs du framework ne sont pas affectés sauf copie de cette structure.

joaopauloschuler · 22:45 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