)]}'
{
  "log": [
    {
      "commit": "e1d01032363583776ce98b999e102cb437146758",
      "tree": "8447c146da1e86b7df83c99ca9e652b8e50ebf45",
      "parents": [
        "52548c55f566f7a2c7fc0cf27737a1c3a13ad97f"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Fri Aug 14 12:02:17 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Sat Aug 15 11:22:41 2026 +0700"
      },
      "message": "JAMES-4218 Selection should reset applicable flags\n"
    },
    {
      "commit": "52548c55f566f7a2c7fc0cf27737a1c3a13ad97f",
      "tree": "c02562aab9443331597734eadb97b57768b89a2e",
      "parents": [
        "9972dfe3c67d119ec9d80beb5a8c2749cf207d88"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Fri Aug 14 11:31:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Sat Aug 15 11:22:41 2026 +0700"
      },
      "message": "JAMES-4218 APPEND should trigger flag unsolicited notifications\n"
    },
    {
      "commit": "9972dfe3c67d119ec9d80beb5a8c2749cf207d88",
      "tree": "5d22996fe658140164f4b22a74b3ba2d577c2a27",
      "parents": [
        "c49ef4d1ba863b235e1995b89df7175b93e127e4"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 31 17:10:47 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Aug 10 09:47:51 2026 +0700"
      },
      "message": "JAMES-4210 Drop SaslExchange.abort\n\nSimplify the SaslExchange usage. Just rely on SaslExchange.close() to cleanup exchange.\n"
    },
    {
      "commit": "c49ef4d1ba863b235e1995b89df7175b93e127e4",
      "tree": "695907f4d5dbe6fee97aae3726f728da4e482134",
      "parents": [
        "7711ad16f8d44b8bbce59155a6cc6ad58ea362c2"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jul 29 08:54:53 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Aug 10 09:47:51 2026 +0700"
      },
      "message": "JAMES-4210 IMAP: close SASL exchanges upon disconnection\n\nTrack the active SASL exchange as an IMAP session attachment and close it when the connection terminates or encounters a transport exception.\n\nIMAP authentication processing can run asynchronously. A disconnect may therefore race with SASL exchange creation and registration. Keep the tracker sealed after disconnect so delayed registrations are rejected and immediately closed.\n\nSynchronize tracker lookup and creation on the individual IMAP session because getAttribute and setAttribute are not atomic together. This ensures authentication and disconnect paths use the same tracker without introducing cross-session contention.\n\nEnsure normal completion, cancellation, failure, and disconnect paths release each exchange at most once. Add real IMAP server lifecycle tests for disconnect, cancellation, and terminal exchanges.\n"
    },
    {
      "commit": "7711ad16f8d44b8bbce59155a6cc6ad58ea362c2",
      "tree": "7ff4de0d19a593b531d9690c81f4e25ada081fae",
      "parents": [
        "a5465b3219fb6eec80a931190441cfe952340b80"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Tue Jul 28 09:44:30 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Aug 10 09:47:51 2026 +0700"
      },
      "message": "JAMES-4210 SMTP: should close SASL exchange upon client disconnection\n"
    },
    {
      "commit": "a5465b3219fb6eec80a931190441cfe952340b80",
      "tree": "96413818d4ca85c005c9a574031e4c5ff63e6f30",
      "parents": [
        "c779705ec183df99fdcf43e2a3bcdabff8ce97f9"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 27 16:42:41 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Aug 10 09:47:51 2026 +0700"
      },
      "message": "JAMES-4210 POP3: add a test to verify SASL exchange closure upon client disconnection\n\nFor POP3, the SASL exchange is well closed upon client disconnection, as `AuthCmdHandler` already implement `DisconnectHandler` to close the SASL exchange.\nDropping that piece of code indeed would make the test fail.\n"
    },
    {
      "commit": "c779705ec183df99fdcf43e2a3bcdabff8ce97f9",
      "tree": "9ab2048c1106cbe8cd955839b46df2f1158f7b13",
      "parents": [
        "d445433ebe7a338fe56eeb223f3a3d74bd3bef8a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jul 23 09:42:08 2026 +0000"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Thu Jul 30 12:20:37 2026 +0700"
      },
      "message": "Bump org.postgresql:postgresql in /server/apps/scaling-pulsar-smtp\n\nBumps [org.postgresql:postgresql](https://github.com/pgjdbc/pgjdbc) from 42.7.7 to 42.7.12.\n- [Release notes](https://github.com/pgjdbc/pgjdbc/releases)\n- [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.7.7...REL42.7.12)\n\n---\nupdated-dependencies:\n- dependency-name: org.postgresql:postgresql\n  dependency-version: 42.7.12\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "d445433ebe7a338fe56eeb223f3a3d74bd3bef8a",
      "tree": "9d062fc32205ad92e2edb51c5f91a14831f6557e",
      "parents": [
        "548b5ac543a42a73dcd0eb32c0f67e93d9c2c9bc"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jul 29 14:43:17 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Thu Jul 30 09:00:30 2026 +0700"
      },
      "message": "[ENHANCEMENT] WebAdmin: create a Guice bean for default password generation value\n\nDefault to `true` still. Allow extension app to override the default value easily.\n"
    },
    {
      "commit": "548b5ac543a42a73dcd0eb32c0f67e93d9c2c9bc",
      "tree": "6ed52f79944d5a096b036422d260a2d43bb0f946",
      "parents": [
        "827d747872d508026a1cc943db06e34a512d2db5"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jul 29 10:31:51 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Thu Jul 30 09:00:30 2026 +0700"
      },
      "message": "[DOCUMENTATION] Webadmin: ease custom route demo setup\n"
    },
    {
      "commit": "827d747872d508026a1cc943db06e34a512d2db5",
      "tree": "c296227d99320f5f443c13117057c630d3203e0b",
      "parents": [
        "c39529ee71cc74423c7e72b89c43fefcb3918de7"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jul 29 10:31:38 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Thu Jul 30 09:00:30 2026 +0700"
      },
      "message": "[DOCUMENTATION] Webadmin: ease 15-minute demo setup\n"
    },
    {
      "commit": "c39529ee71cc74423c7e72b89c43fefcb3918de7",
      "tree": "d5c1bbdb64b4244faf91b6d116c42356c3f19100",
      "parents": [
        "24c23e76d64a054f70d4c9664b7824b33cf66742"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jul 29 10:20:56 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Thu Jul 30 09:00:30 2026 +0700"
      },
      "message": "[DOCUMENTATION] Webadmin: authenticate Postgres provisioning scripts\n\nNow Postgres app requires webadmin password by default, the script should have an optional webadmin password param.\n"
    },
    {
      "commit": "24c23e76d64a054f70d4c9664b7824b33cf66742",
      "tree": "2f0a4b8cbbc1d931f3efbc31507724ff9778e3b0",
      "parents": [
        "9118d30a2834b6efcffc9dfffa82ee54ab083eb5"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Tue Jul 28 23:11:07 2026 +0200"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Thu Jul 30 09:00:30 2026 +0700"
      },
      "message": "[ENHANCEMENT] Webadmin: default to auto-generate creds\n"
    },
    {
      "commit": "9118d30a2834b6efcffc9dfffa82ee54ab083eb5",
      "tree": "513c716e3968b79c6940ed13edb7f53c8f93efad",
      "parents": [
        "72b9500d359f96dcbad23925401764aaf37a496e"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 29 09:54:09 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 14:54:09 2026 +0700"
      },
      "message": "Leverage strong consistency within SolveMailboxInconsistenciesService (#3101)"
    },
    {
      "commit": "72b9500d359f96dcbad23925401764aaf37a496e",
      "tree": "13092cdba4b936b2cd5a52e67b339b538de6c347",
      "parents": [
        "a92d8cea1865abc99d57f6a867e2f616894a0606"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Mon Jul 27 23:33:08 2026 +0200"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 28 11:59:18 2026 +0700"
      },
      "message": "[FIX] IMAP: Examine should honor its read-only promises\n"
    },
    {
      "commit": "a92d8cea1865abc99d57f6a867e2f616894a0606",
      "tree": "d0ed5650aac47e1b017b78b096967a4d4fee27c4",
      "parents": [
        "ddf2749e1f9a21f5f0666985a5e625aaa7c1eca6"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Mon Jul 27 10:59:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 15:59:17 2026 +0700"
      },
      "message": "JAMES-4216 Allow HTML templating for overquota emails (#3097)"
    },
    {
      "commit": "ddf2749e1f9a21f5f0666985a5e625aaa7c1eca6",
      "tree": "a56b11b0a1169a62f5954d610a0b5baf2c3d0f6c",
      "parents": [
        "a4e1e4fffaba86e6b6e4e6d74518dae458bfca9d"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 27 10:33:32 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Jul 27 15:58:28 2026 +0700"
      },
      "message": "JAMES-4215 SubjectSaslServer class shall not be final\n"
    },
    {
      "commit": "a4e1e4fffaba86e6b6e4e6d74518dae458bfca9d",
      "tree": "cca84df1b6b101187f43cd96d42f40f155dd091c",
      "parents": [
        "f9b60bfdee7d32e06dad35ac8383b8d962adbf5a"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 24 16:49:13 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Jul 27 15:58:28 2026 +0700"
      },
      "message": "JAMES-4215 Document Kerberos GSSAPI authentication\n\nDocument installation and configuration of the optional Kerberos extension for IMAP and SMTP.\n\nDescribe service principals, keytabs, identity mapping, TLS policy, supported QOP, extension loading, and SMTP token line limits.\n"
    },
    {
      "commit": "f9b60bfdee7d32e06dad35ac8383b8d962adbf5a",
      "tree": "d7c5ffc3725327c874bcf8c24928f307b353728d",
      "parents": [
        "ab27aba9324635f12b35ac5c74e511563ed4c574"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 24 16:49:13 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Jul 27 15:58:28 2026 +0700"
      },
      "message": "JAMES-4215 Test GSSAPI authentication through IMAP and SMTP\n\nStart a memory James server backed by an embedded Kerberos KDC and load the GSSAPI mechanism through the extension factory.\n\nCover IMAP and SMTP authentication, STARTTLS availability, exchanges without an initial response, invalid tokens, and unauthorized identities.\n"
    },
    {
      "commit": "ab27aba9324635f12b35ac5c74e511563ed4c574",
      "tree": "16ef11655a925be4f943f7158e6c63d24af31adc",
      "parents": [
        "68384c181a08c5f1ce4dbd82d748eb7acfacf904"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 24 16:49:13 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Jul 27 15:58:28 2026 +0700"
      },
      "message": "JAMES-4215 Add optional SASL GSSAPI Kerberos mechanism\n\nIntroduce a dedicated optional SASL Kerberos module implementing GSSAPI authentication according to RFC 4752 through the JDK SASL provider.\n\nValidate the configured service principal and keytab at startup, accept only the auth QOP, inherit auth.requireSSL, and reject Kerberos identities that cannot be mapped injectively to James usernames.\n\nCover configuration, authorization, resource cleanup, keytab validation, and JDK GSSAPI interoperability with an embedded Kerberos KDC.\n"
    },
    {
      "commit": "68384c181a08c5f1ce4dbd82d748eb7acfacf904",
      "tree": "fa2f485c2515570540c5cce9da76dbd3c6dcedfc",
      "parents": [
        "e374c630d94dc11bd789dd5384de5d6067563e74"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 24 16:49:13 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Jul 27 15:58:28 2026 +0700"
      },
      "message": "JAMES-4215 Make SMTP maximum line length configurable\n\nKerberos GSSAPI SASL tokens can exceed SMTP\u0027s existing 8,192-byte line limit.\n\nAllow administrators to increase the SMTP command and SASL continuation line limit while preserving the existing default. Restrict configured values to between 1,000 bytes and 1 MiB to limit memory exposure.\n"
    },
    {
      "commit": "e374c630d94dc11bd789dd5384de5d6067563e74",
      "tree": "264e264ed8f6a65172312ef667ecbd7153e23681",
      "parents": [
        "26d0b6d74c82ff1639b54a23b3c07333309fe500"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Jul 26 23:54:57 2026 +0000"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Mon Jul 27 09:19:27 2026 +0700"
      },
      "message": "Bump json from 2.19.2 to 2.19.9 in /src/homepage\n\nBumps [json](https://github.com/ruby/json) from 2.19.2 to 2.19.9.\n- [Release notes](https://github.com/ruby/json/releases)\n- [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md)\n- [Commits](https://github.com/ruby/json/compare/v2.19.2...v2.19.9)\n\n---\nupdated-dependencies:\n- dependency-name: json\n  dependency-version: 2.19.9\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "26d0b6d74c82ff1639b54a23b3c07333309fe500",
      "tree": "3cce22f77a4d211ee5e2693d99f9f9bfd5eab57f",
      "parents": [
        "3977b551b17171a9f6c99a51d40e5d9ca16fff87"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Fri Jul 24 09:50:11 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Mon Jul 27 09:05:31 2026 +0700"
      },
      "message": "JAMES-4209 Manage concurrency\n"
    },
    {
      "commit": "3977b551b17171a9f6c99a51d40e5d9ca16fff87",
      "tree": "fa71417ad994d2e31db6168c3923550b81d15743",
      "parents": [
        "2f3d9adc4a33563e32824ded33f6744998594cb3"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Fri Jul 24 09:08:53 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Mon Jul 27 09:05:31 2026 +0700"
      },
      "message": "JAMES-4209 Leverage blob prefixes\n"
    },
    {
      "commit": "2f3d9adc4a33563e32824ded33f6744998594cb3",
      "tree": "90254c5fa456197b107a421b0e1e591e6f3d5d17",
      "parents": [
        "4ad14dfb16d16eb964079445c3cbe06d26a916df"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Fri Jul 24 08:40:40 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Mon Jul 27 09:05:31 2026 +0700"
      },
      "message": "[DOCUMENTATION] Provide backup guidance\n"
    },
    {
      "commit": "4ad14dfb16d16eb964079445c3cbe06d26a916df",
      "tree": "27119a4833264ee72439c0b6c7c478db111f52bf",
      "parents": [
        "f4b8d3711065787de2593bc85009f923dd7e6094"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Fri Jul 24 08:14:31 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Mon Jul 27 09:05:31 2026 +0700"
      },
      "message": "JAMES-4209 Distributed app content recovery runner\n"
    },
    {
      "commit": "f4b8d3711065787de2593bc85009f923dd7e6094",
      "tree": "5062adb96e8b11ca5a14322c9422bb1422ac21de",
      "parents": [
        "75a3c1e7a4ae0656ffc8558c5853aba00a4f9009"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 23 09:18:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 09:18:37 2026 +0200"
      },
      "message": "[METRICS] Mesure LWT time for UID and ModSeq (#3095)\n\nCo-authored-by: Rene Cordier \u003crcordier@linagora.com\u003e"
    },
    {
      "commit": "75a3c1e7a4ae0656ffc8558c5853aba00a4f9009",
      "tree": "a1f808afc479d984337be63f4879fdd4389f1711",
      "parents": [
        "6bc8a97e94456a69c4d4f8879288ab6d43471594"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 22 08:43:07 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 13:43:07 2026 +0700"
      },
      "message": "[ENHANCEMENT] Prevent FETCH fragmentation (#3094)"
    },
    {
      "commit": "6bc8a97e94456a69c4d4f8879288ab6d43471594",
      "tree": "6c140f097f277d073b1c9393d5ba0f78c22d23f0",
      "parents": [
        "9b957b990ce667692c11593431c964b5d5a9cc1f"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 20 20:37:47 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 POP3: reuse SaslCodex\n"
    },
    {
      "commit": "9b957b990ce667692c11593431c964b5d5a9cc1f",
      "tree": "ff9e1b2185df35933d9f847e657f8812b2248ced",
      "parents": [
        "170ecf1e7b6e00dce0b3298dabbd07acfd35f8d9"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Sun Jul 19 16:57:50 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 CrowdsecIntegrationTest: preserve clear text authentication\n"
    },
    {
      "commit": "170ecf1e7b6e00dce0b3298dabbd07acfd35f8d9",
      "tree": "afa6703eb8b70e6321915745ac194f6979d46343",
      "parents": [
        "a3d3d3e83c88ac9663cc4ced2db609886cbfd7b8"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 16:52:17 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Fasten `DistributedPOP3ServerTest`: apply per_class lifecycle\n\nBefore: 2 min 10 sec\nAfter: 30 sec\n"
    },
    {
      "commit": "a3d3d3e83c88ac9663cc4ced2db609886cbfd7b8",
      "tree": "cc0cbc06dfa89d3d22273c750e2df4cce3ac6e14",
      "parents": [
        "31bc950aa9b839ef5a669241b13773ee3bf93486"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:52:52 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Document POP3 authentication configuration\n"
    },
    {
      "commit": "31bc950aa9b839ef5a669241b13773ee3bf93486",
      "tree": "3c7463b62795ab1dd00426577b6d2a2209ea6034",
      "parents": [
        "b988d2cfc8430239ff66cd14861dc31a30f7f3a3"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:52:41 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Test POP3 SASL production wiring\n\nCover Guice mechanism configuration and distributed CAPA and AUTH PLAIN behavior.\n"
    },
    {
      "commit": "b988d2cfc8430239ff66cd14861dc31a30f7f3a3",
      "tree": "a1113c33043174b9a47326ce7d97e3fa4d16446f",
      "parents": [
        "725b57bb67f5745c82e4bc94dca54a9dbd7d9d4d"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:52:32 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Test POP3 AUTH and TLS behavior\n\nCover PLAIN and OAuth flows, STARTTLS capability changes, line limits, cancellation, cleanup, and TLS defaults.\n"
    },
    {
      "commit": "725b57bb67f5745c82e4bc94dca54a9dbd7d9d4d",
      "tree": "5676b7b2e0697fd9c42761d102f69bd86ef1c755",
      "parents": [
        "883f25db2c8093825cd71859a53dcda917891615"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:52:15 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Remove obsolete PLAIN SASL constant\n"
    },
    {
      "commit": "883f25db2c8093825cd71859a53dcda917891615",
      "tree": "0a7d8c30d7a1558b0a2d382c9db54bc436ac75f6",
      "parents": [
        "07981e23169a51197f240ea3901f8e6b77835084"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:52:07 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Wire configurable POP3 SASL mechanisms\n\nLoad built-in and custom SASL factories with Guice and wire Spring to the default PLAIN and OAuth mechanisms.\n"
    },
    {
      "commit": "07981e23169a51197f240ea3901f8e6b77835084",
      "tree": "fa22637abedd4cd69b8fd012099d82471c1f69ec",
      "parents": [
        "80a11bbbcbef8d9eff90631965975e21058bcb2d"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:51:54 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Wire POP3 AUTH and secure USER/PASS\n\nRegister AUTH, configure PASS through the PLAIN SASL policy, and require TLS for plaintext USER/PASS by default.\n"
    },
    {
      "commit": "80a11bbbcbef8d9eff90631965975e21058bcb2d",
      "tree": "60a1bd79a808939f99008cf21ec540128edce603",
      "parents": [
        "88f762eedfe2b6d8d7e86a0b237f0b8c7cdc9c4f"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:51:35 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Enforce POP3 AUTH and continuation line limits\n\nPreserve regular POP3 and initial AUTH command limits while allowing bounded long SASL continuation responses.\n"
    },
    {
      "commit": "88f762eedfe2b6d8d7e86a0b237f0b8c7cdc9c4f",
      "tree": "879b97eaec446e13bcf8bc5e532d394855c5fe72",
      "parents": [
        "01d33d1bc535636c79b636493fcf7d5cd7f04047"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:51:26 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Implement POP3 AUTH command handler\n\nImplement AUTH parsing, transport availability checks, exchange lifecycle management, capability advertisement, and mailbox authentication.\n"
    },
    {
      "commit": "01d33d1bc535636c79b636493fcf7d5cd7f04047",
      "tree": "6d1b028dc2e61801a7eefd04f3a105b79469acd2",
      "parents": [
        "8023d2703ac27f0298130fd7916b77d69e36cc88"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:50:33 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Add POP3 SASL protocol bridge\n\nTranslate POP3 Base64 challenges and responses to shared SASL exchanges, including cancellation, final server data, and cleanup.\n"
    },
    {
      "commit": "8023d2703ac27f0298130fd7916b77d69e36cc88",
      "tree": "7e80ba9d9888886975fc4d11176bf5ed9f5d9a41",
      "parents": [
        "6ca83f999d7a104e9e984fa60586cc7088381fc9"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 17 11:50:19 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Tue Jul 21 15:25:40 2026 +0700"
      },
      "message": "JAMES-4210 Add shared POP3 mailbox provider\n\nExtract mailbox opening and INBOX provisioning into a reusable component shared by USER/PASS and AUTH.\n"
    },
    {
      "commit": "6ca83f999d7a104e9e984fa60586cc7088381fc9",
      "tree": "d7e81b5c6bed748ca78cad673ecd1bb22c55a72a",
      "parents": [
        "412078bf29e51db727f581aa1a2a25619aad689a"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Mon Jul 20 12:02:19 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:02:19 2026 +0200"
      },
      "message": "JAMES-4210 Reduce boilerplate: Prefer SaslCodec over SaslBridges (#3093)"
    },
    {
      "commit": "412078bf29e51db727f581aa1a2a25619aad689a",
      "tree": "a289b0b5d2e8527652068418f7674c33e8064799",
      "parents": [
        "c3ad68ab9ce3da317fe2b2a551b89d5cf1272bc7"
      ],
      "author": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Thu Jul 16 08:53:05 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 08:53:05 2026 +0700"
      },
      "message": "JAMES-4210 [POP3] Pass command shall rely on PlainSaslMechanism logic (#3089)"
    },
    {
      "commit": "c3ad68ab9ce3da317fe2b2a551b89d5cf1272bc7",
      "tree": "067039c329bdaba405d7113a21c73df22ffdcf6e",
      "parents": [
        "0e4f2f5c66499555e9e409706f3f9e04a46fe01e"
      ],
      "author": {
        "name": "Felix Auringer",
        "email": "felix.auringer@protonmail.com",
        "time": "Tue Jul 14 17:18:16 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Thu Jul 16 08:52:20 2026 +0700"
      },
      "message": "docs: add documentation for the new checks in ValidRcptHandler\n"
    },
    {
      "commit": "0e4f2f5c66499555e9e409706f3f9e04a46fe01e",
      "tree": "cc2b1aa8279c7d44323232accd5c0a7aaaebb655",
      "parents": [
        "3e32f1a87cb1e7b340e7508e3ce9650d3668893a"
      ],
      "author": {
        "name": "Felix Auringer",
        "email": "felix.auringer@protonmail.com",
        "time": "Tue Jul 14 17:17:54 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Thu Jul 16 08:52:20 2026 +0700"
      },
      "message": "test: add additional tests for the new checks in ValidRcptHandler\n"
    },
    {
      "commit": "3e32f1a87cb1e7b340e7508e3ce9650d3668893a",
      "tree": "e41d96a8c45b365647432df26b4e4420e4ab5645",
      "parents": [
        "c20a917d444fd0bcfa9fe22ef8827e1f7075026e"
      ],
      "author": {
        "name": "Felix Auringer",
        "email": "felix.auringer@protonmail.com",
        "time": "Tue Jul 14 17:16:09 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Thu Jul 16 08:52:20 2026 +0700"
      },
      "message": "fix: ValidRcptHandlerTest\n\nSome tests were not named properly and one test did not test what\nthe name described.\n"
    },
    {
      "commit": "c20a917d444fd0bcfa9fe22ef8827e1f7075026e",
      "tree": "8d567cb9f4b84eb18608625ed8c1fdc8cc55ed9d",
      "parents": [
        "a2632375e6a307a7201e23f83285fc7aa638fca6"
      ],
      "author": {
        "name": "Felix Auringer",
        "email": "felix.auringer@protonmail.com",
        "time": "Mon Jun 29 10:06:18 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Thu Jul 16 08:52:20 2026 +0700"
      },
      "message": "feat: optional stricter checks of RRT when receiving email\n\nCurrently, James only checks whether either the recipient exists\nor any alias for it exists. There is no guarantee that the alias\nactually points to an existing mailbox.\n\nThe optional behavior checks whether any or all resolved mailboxes\nof the intended recipient actually exist locally.\nThis allows to abort directly after the RCPT command instead of\naccepting the email and then error because the mailbox could not be\nfound.\nHowever, with this additional check enabled, it is not possible\nanymore to forward emails to other email servers via the RRT.\n"
    },
    {
      "commit": "a2632375e6a307a7201e23f83285fc7aa638fca6",
      "tree": "2178c7a11e1c630e39f276ec512cd2106d574569",
      "parents": [
        "3294aacee39dd122c5d3a63a1306eda8fc15a600"
      ],
      "author": {
        "name": "Felix Auringer",
        "email": "felix.auringer@protonmail.com",
        "time": "Wed Jun 24 18:23:07 2026 +0200"
      },
      "committer": {
        "name": "Rene Cordier",
        "email": "rene.cordier@gmail.com",
        "time": "Thu Jul 16 08:52:20 2026 +0700"
      },
      "message": "refactor: split mailbox and RRT checks into two methods\n\nThis enhances the extensibility as only one of them can be\noverwritten without having to touch the logic of the other.\n"
    },
    {
      "commit": "3294aacee39dd122c5d3a63a1306eda8fc15a600",
      "tree": "af07a96c2715b70be7bef3ab652731788d01f9f1",
      "parents": [
        "f7cc31b039679e432b3de59bd100d9fd037b0d55"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Tue Jul 14 12:08:08 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] ProvisioningContract: isolate using different users\n\nUse a generated Basic-auth user and account per test while retaining the fixed signed JWT fixture. Reuse servers for Memory, Postgres, and Distributed implementors.\n"
    },
    {
      "commit": "f7cc31b039679e432b3de59bd100d9fd037b0d55",
      "tree": "5a739e472862dbee61b2a42e6298a54f02a78db4",
      "parents": [
        "167b726c04450e70134ce58dca9ac1a92c1722ec"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Tue Jul 14 12:07:55 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] BackReferenceContract: isolate using different users\n\nUse a generated user and account per test while reusing the server for the Memory implementor.\n"
    },
    {
      "commit": "167b726c04450e70134ce58dca9ac1a92c1722ec",
      "tree": "99bc781716c3f3a266574b687b1fc3b4d4336d26",
      "parents": [
        "84b4e7a7aee6cbf80f55d9e2d4261592041a9542"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:40 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] WebPushContract: isolate using different users\n"
    },
    {
      "commit": "84b4e7a7aee6cbf80f55d9e2d4261592041a9542",
      "tree": "c36e4249fdf533e539e381e2c8fbd94f94dea153",
      "parents": [
        "4dbf55e1ffaa199193b65c1a5bb28942c97bcc2c"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:40 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] VacationRelayIntegrationTest: isolate using different users\n"
    },
    {
      "commit": "4dbf55e1ffaa199193b65c1a5bb28942c97bcc2c",
      "tree": "5a8e7c8c3c557178469e59ac5066b5806c17c8fe",
      "parents": [
        "50adb87ec2a6f73da293bb7d9ae88c1342579d40"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:40 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] VacationIntegrationTest: isolate using different users\n"
    },
    {
      "commit": "50adb87ec2a6f73da293bb7d9ae88c1342579d40",
      "tree": "ef7462f75bae72e87bed4ac889ef9e726c7ddd60",
      "parents": [
        "51829a1cd533689491b88708c4a1b48f2750f0c9"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:40 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] UploadContract: isolate using different users\n"
    },
    {
      "commit": "51829a1cd533689491b88708c4a1b48f2750f0c9",
      "tree": "a186366a38941773ac09fbd7a3e0213c68a97e4d",
      "parents": [
        "fd7a49549c32c9efff7f3ddb29a61cb591770fc2"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:40 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] ThreadGetContract: isolate using different users\n"
    },
    {
      "commit": "fd7a49549c32c9efff7f3ddb29a61cb591770fc2",
      "tree": "c2495860ef220278c4a240abce512683a82fe0cf",
      "parents": [
        "730cab60026116e18e666619e06f5054040b9e11"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:40 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] ThreadChangesContract: isolate using different users\n"
    },
    {
      "commit": "730cab60026116e18e666619e06f5054040b9e11",
      "tree": "99823df5195cdb262c9f6e728fd7d0abf198026f",
      "parents": [
        "d22bcd991f56303b192899d28675049d11be3709"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:40 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] SessionRoutesContract: isolate using different users\n"
    },
    {
      "commit": "d22bcd991f56303b192899d28675049d11be3709",
      "tree": "87afddd46d1f471c01695961a834545ca64cff77",
      "parents": [
        "81d1529deaacbcd12cca15ea2119b5bba627e5ed"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:40 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] QuotaMailingTest: isolate using different users\n"
    },
    {
      "commit": "81d1529deaacbcd12cca15ea2119b5bba627e5ed",
      "tree": "5a41fa24c420b84ac9e798440290e4c35c4d87b1",
      "parents": [
        "d622e87867f8bd79fbc5b832f7d768693efd80e7"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] MailboxQueryChangesContract: isolate using different users\n"
    },
    {
      "commit": "d622e87867f8bd79fbc5b832f7d768693efd80e7",
      "tree": "b85119b23a14873bf52b16884e7e5dcd21ef6691",
      "parents": [
        "65547008e042c143ca7073708a4d03d4e0a6949b"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] JmapPreviewContract: isolate using different users\n"
    },
    {
      "commit": "65547008e042c143ca7073708a4d03d4e0a6949b",
      "tree": "582e442d8b806993bade77549ab444083d112f4d",
      "parents": [
        "5eb5153619c4f7e8c4fce39b3ffa7af3aa4c4a26"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] ImapSetMessagesMailboxesUpdatesCompatibilityContract: isolate using different users\n"
    },
    {
      "commit": "5eb5153619c4f7e8c4fce39b3ffa7af3aa4c4a26",
      "tree": "c75eabfd2d3b1997cf2a3ac53671f403ca7724bb",
      "parents": [
        "3bdf857b0ba1ae0feb5fa3b39cf2f73c947cbbd1"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] ImapKeywordsConsistencyContract: isolate using different users\n"
    },
    {
      "commit": "3bdf857b0ba1ae0feb5fa3b39cf2f73c947cbbd1",
      "tree": "053cf610d78d8a240933614c11eef13a48f207ed",
      "parents": [
        "486dc6516e72daf6ba734f2c0461e8edd86dedff"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] IdentityChangesContract: isolate using different users\n"
    },
    {
      "commit": "486dc6516e72daf6ba734f2c0461e8edd86dedff",
      "tree": "854be3cd206156377101f5b5f58241ba63395201",
      "parents": [
        "b00095c89d6171323a5de2fd0b4eaae16d2b28c8"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] EchoMethodContract: isolate using different users\n"
    },
    {
      "commit": "b00095c89d6171323a5de2fd0b4eaae16d2b28c8",
      "tree": "fcc2033257681034d0ec82be79f65862b9f173b6",
      "parents": [
        "fe64016a8cb85437ab027152ac702be5eea5331e"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] DisabledCapabilityContract: isolate using different users\n"
    },
    {
      "commit": "fe64016a8cb85437ab027152ac702be5eea5331e",
      "tree": "a7b1282a5c5292f91b1ac5b541e4bb402606242f",
      "parents": [
        "1daa2be6b0635381455acef1242d23afbebe924a"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:38 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] DelegatedAccountSetContract: isolate using different users\n"
    },
    {
      "commit": "1daa2be6b0635381455acef1242d23afbebe924a",
      "tree": "7a611998a2f96578c3536155fa7d26c2f3618108",
      "parents": [
        "cd983da9e17071d2f4de6e9cba2e99c6f18ce396"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:38 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] CustomNamespaceContract: isolate using different users\n"
    },
    {
      "commit": "cd983da9e17071d2f4de6e9cba2e99c6f18ce396",
      "tree": "5da2d6d14cc565cc7cc20207d5e4227d44bf2c73",
      "parents": [
        "2b999fde7137bd981555d89f087da4f39454d4bd"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:38 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] CustomMethodContract: isolate using different users\n"
    },
    {
      "commit": "2b999fde7137bd981555d89f087da4f39454d4bd",
      "tree": "5d55677d2dca91c23e63df967077a10dfbe51152",
      "parents": [
        "9b413320f8923b54914232611be015569137b845"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 22:58:38 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] CorsHeaderAPITest: isolate using different users\n"
    },
    {
      "commit": "9b413320f8923b54914232611be015569137b845",
      "tree": "5564e2e12c26977da36cac7d2f0c7dd346a61102",
      "parents": [
        "a239d393ceb941412da8123e9a6d6f4e7b06be3b"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 20:04:45 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] BlobCopyContract: isolate using different users\n"
    },
    {
      "commit": "a239d393ceb941412da8123e9a6d6f4e7b06be3b",
      "tree": "f03b0819e54c982b4518df397a41c86a86845d4e",
      "parents": [
        "abe7afbdefc134969fb5be9c04b65a3a9a50e6a4"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 20:02:33 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] MailboxQueryMethodContract: isolate using different users\n"
    },
    {
      "commit": "abe7afbdefc134969fb5be9c04b65a3a9a50e6a4",
      "tree": "dcb7e1709198035f8b56386ca65526f08a97f857",
      "parents": [
        "2f08ce4d79543e5097a2831a22cef86979ee1845"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 20:00:59 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] QuotaChangesMethodContract: isolate using different users\n"
    },
    {
      "commit": "2f08ce4d79543e5097a2831a22cef86979ee1845",
      "tree": "b41d5942ab2f5f5200e98affd916a66113420f2c",
      "parents": [
        "d5c5690a5c176aca2a8162d1e5448ef47ea25346"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:56:28 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] AuthenticationContract: isolate using different users\n"
    },
    {
      "commit": "d5c5690a5c176aca2a8162d1e5448ef47ea25346",
      "tree": "662ec8a75dfe2a559316ae6f7294a538fa8db702",
      "parents": [
        "ed582466bdcbdcc280f11628a38dac896f432cbd"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:52:51 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] EmailParseMethodContract: isolate using different users\n"
    },
    {
      "commit": "ed582466bdcbdcc280f11628a38dac896f432cbd",
      "tree": "6c780cfbd6a15b5c39fec86f291800996baab5f0",
      "parents": [
        "2d6826ddca3812c392571991863ad65a8dc7e9ab"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:51:26 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] IdentityGetContract: isolate using different users\n"
    },
    {
      "commit": "2d6826ddca3812c392571991863ad65a8dc7e9ab",
      "tree": "ab9c7cb4332b9aea1b301c735fb14a234a965a8f",
      "parents": [
        "5872227559be3eafda63d59a4739499b8b8059ce"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:49:12 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] DelegatedAccountGetMethodContract: isolate using different users\n"
    },
    {
      "commit": "5872227559be3eafda63d59a4739499b8b8059ce",
      "tree": "c7d1ff2fab2f2239dd2970b3f0c410cec4b8b4da",
      "parents": [
        "af158592c94920500190d066f8f8955d73a4ba96"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:47:50 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] DelegateGetMethodContract: isolate using different users\n"
    },
    {
      "commit": "af158592c94920500190d066f8f8955d73a4ba96",
      "tree": "514554200905d00cd52ae40d9d49d8038a027424",
      "parents": [
        "70c5e713248890e41e79168f89fe8f6104a6f8de"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:46:30 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] MDNParseMethodContract: isolate using different users\n"
    },
    {
      "commit": "70c5e713248890e41e79168f89fe8f6104a6f8de",
      "tree": "1c16f154fa972f82479441b1ace58ddb500145bc",
      "parents": [
        "91fdda13fb314f79679361293a34100723aca3ea"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:45:22 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] DelegateSetContract: isolate using different users\n"
    },
    {
      "commit": "91fdda13fb314f79679361293a34100723aca3ea",
      "tree": "af96ef6578c8b561cb3ed0923cd4b9c81f8e0d52",
      "parents": [
        "0cc2fba4aa1298b55d0e007bb0b2a7a9941a67bf"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:43:49 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] VacationResponseGetMethodContract: isolate using different users\n"
    },
    {
      "commit": "0cc2fba4aa1298b55d0e007bb0b2a7a9941a67bf",
      "tree": "a9367163aa5deb0785df80663417d1bf1ae1add9",
      "parents": [
        "fa93023ae17a3123caadd64d620482c7dd5bd090"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:42:50 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] VacationResponseSetMethodContract: isolate using different users\n"
    },
    {
      "commit": "fa93023ae17a3123caadd64d620482c7dd5bd090",
      "tree": "3e3fbba95d9a06559027fe458b694d5d5e8dd1fc",
      "parents": [
        "7b84d33a0d1096d1cc2908741b58629df36c950d"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:41:51 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] EmailImportContract: isolate using different users\n"
    },
    {
      "commit": "7b84d33a0d1096d1cc2908741b58629df36c950d",
      "tree": "fe41615d0c8500c481feaafaffa84bb08d5e3a38",
      "parents": [
        "d3cbe5a6e6a9fbcc5abf39e0ea20243b9b26d4ea"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:39:49 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] SearchSnippetGetMethodContract: isolate using different users\n"
    },
    {
      "commit": "d3cbe5a6e6a9fbcc5abf39e0ea20243b9b26d4ea",
      "tree": "fe4732caeb4c554bc839422d701536c36de49e13",
      "parents": [
        "2398f98fbc5277580d5d7ceb2bf4f493b409ed65"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:38:39 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] QuotaQueryMethodContract: isolate using different users\n"
    },
    {
      "commit": "2398f98fbc5277580d5d7ceb2bf4f493b409ed65",
      "tree": "85ba6af61ea385be4b731b53850cc7516a0976da",
      "parents": [
        "affd019d91d9199a74a9b1e286478176f0f75c25"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:36:30 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] EmailChangesMethodContract: isolate using different users\n"
    },
    {
      "commit": "affd019d91d9199a74a9b1e286478176f0f75c25",
      "tree": "3d3a5662fcf0753ef28ac00e0ab6908c096eb25c",
      "parents": [
        "6c1bdb2137796db69241c3f6e6b13eadcd52daaa"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 19:32:56 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] EventSourceContract: isolate using different users\n"
    },
    {
      "commit": "6c1bdb2137796db69241c3f6e6b13eadcd52daaa",
      "tree": "c7fc50849e242aa15379befc7f603d67eb51bf1d",
      "parents": [
        "791bb3a664ec4da6353717c014a6a155ce3e046a"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jul 13 16:51:26 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Wed Jul 15 12:17:07 2026 +0200"
      },
      "message": "[BUILD] EmailSubmissionSetMethodFutureReleaseContract: isolate using different users\n"
    },
    {
      "commit": "791bb3a664ec4da6353717c014a6a155ce3e046a",
      "tree": "447e1dd29707d94ea3e58b76d05a129b2bedcb56",
      "parents": [
        "d520a0e70c73d821fee075a8cbb68b8973e6dadf"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Fri Jul 10 15:49:15 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Jul 13 09:07:50 2026 +0700"
      },
      "message": "JAMES-4210 [FIX] Reuse protocol default SASL factories for explicit configuration\n\nResolve explicitly configured SASL factory names against protocol-provided defaults before falling back to Guice loading.\n\nThis enables constructor-configured factories such as SMTP LOGIN and preserves protocol-specific PLAIN policies for explicit configuration. Support both simple and fully qualified factory names.\n"
    },
    {
      "commit": "d520a0e70c73d821fee075a8cbb68b8973e6dadf",
      "tree": "5d0f5deafc6a8526ef88482d0c01b09e898f8c6b",
      "parents": [
        "657749132f5a2034ee2daa402cca83af5eb47cce"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Thu Jul 09 15:33:36 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Jul 13 09:07:50 2026 +0700"
      },
      "message": "JAMES-4210 Add a test to cover SMTP explicit PLAIN SASL requireSSL behavior\n\nAdd an SMTP integration test proving that explicitly configured `PlainSaslMechanismFactory` still accepts AUTH PLAIN on clear-text connections when `auth.requireSSL` is true, preserving SMTP legacy command behavior while requireSSL controls capability announcement.\n"
    },
    {
      "commit": "657749132f5a2034ee2daa402cca83af5eb47cce",
      "tree": "6e9c762714291ab36026af60ad87ab14cce20955",
      "parents": [
        "c8f260998b7ddee763d49e13c7eaa94c3f634411"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Thu Jul 09 15:14:16 2026 +0700"
      },
      "committer": {
        "name": "Trần Hồng Quân",
        "email": "55171818+quantranhong1999@users.noreply.github.com",
        "time": "Mon Jul 13 09:07:50 2026 +0700"
      },
      "message": "JAMES-4210 Add SMTP explicit LOGIN SASL integration test\n\nAdd a Guice-backed SMTP integration test proving auth.saslMechanisms can explicitly configure LoginSaslMechanismFactory and authenticate with AUTH LOGIN. Extend the test SMTP configuration template to render auth.requireSSL and explicit SASL mechanism entries.\n"
    },
    {
      "commit": "c8f260998b7ddee763d49e13c7eaa94c3f634411",
      "tree": "1eed7295d848cb4283b6c99a41c45ee921f14c67",
      "parents": [
        "41e75f427fd16509f7d3407459bf9161da214977"
      ],
      "author": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 10:36:57 2026 +0200"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 12:00:48 2026 +0200"
      },
      "message": "[CHANGELOG] Refresh changelog\n"
    },
    {
      "commit": "41e75f427fd16509f7d3407459bf9161da214977",
      "tree": "5ee908da7ce00850bb3471741cea627412fc1327",
      "parents": [
        "25c19629fec22c397dcff008ddf90fedf03f3fb4"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jul 01 09:26:06 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 AuthCmdHandler: improve code style following review suggestion\n"
    },
    {
      "commit": "25c19629fec22c397dcff008ddf90fedf03f3fb4",
      "tree": "24c8927105ff2f98fdb2d361eb0dc647e5c5f207",
      "parents": [
        "e46d2f2fc28a4f1b7ecc2918bf9753081a2ff780"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Tue Jun 30 09:40:17 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Wire LOGIN into SMTP SASL defaults\n\nRegister LOGIN as an SMTP default SASL mechanism before PLAIN in both Guice and non-Guice SMTP server creation paths, while preserving SMTP\u0027s legacy explicit PLAIN/LOGIN behavior when auth.requireSSL controls announcement.\n"
    },
    {
      "commit": "e46d2f2fc28a4f1b7ecc2918bf9753081a2ff780",
      "tree": "f0b971a83e69dcac76193497f38d466a61082a24",
      "parents": [
        "440f7546405b81d99f239cbbcfab473e64122c2b"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Tue Jun 30 09:40:02 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Drive SMTP AUTH LOGIN through SASL exchanges\n\nRemove LOGIN-specific username/password framing from AuthCmdHandler and let SMTP AUTH drive LOGIN through the generic SASL exchange path. Add SMTP regression coverage for LOGIN advertisement, success, invalid credentials, ordering, and transport availability.\n"
    },
    {
      "commit": "440f7546405b81d99f239cbbcfab473e64122c2b",
      "tree": "6a0bbd32a4fa6971d116a398c3f7d65953f56182",
      "parents": [
        "c849032d66f465bb7e17c4520d93a69529705e98"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Tue Jun 30 09:39:46 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Preserve legacy SMTP AuthHook behavior with SASL LOGIN\n\nApply the legacy AuthHook SASL adapter to the effective PLAIN mechanism and to LOGIN\u0027s delegated PLAIN mechanism, preserving legacy AuthHook behavior for both AUTH PLAIN and AUTH LOGIN without leaking AuthHook-specific startup logic into AuthCmdHandler.\n"
    },
    {
      "commit": "c849032d66f465bb7e17c4520d93a69529705e98",
      "tree": "066855f8bad5b3345b35ca637bcd0bc944e94b3d",
      "parents": [
        "36d0fad9a93f95975e9e52c0c3e0eac98cc48579"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Tue Jun 30 09:39:31 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Add SMTP LOGIN SASL mechanism\n\nIntroduce an SMTP-only LOGIN SASL mechanism and factory. The mechanism owns the username/password challenge flow and delegates final credential validation to the configured PLAIN mechanism.\n"
    },
    {
      "commit": "36d0fad9a93f95975e9e52c0c3e0eac98cc48579",
      "tree": "ea01f094a0495c94d3c705be01fda9a222b7924c",
      "parents": [
        "9adeef0b66e4caa1ba1d94aff3c3a68d7cbfc454"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jun 29 13:42:51 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Preserve legacy SMTP behavior: PLAIN authentication should still be available on clear text channel upon `requireSSL\u003dtrue`\n\nFix following failing tests:\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithKeyStoreFileIntegrationTest.checkSMIMESignatureShouldAddGoodSMIMEStatusWhenSignatureIsGood\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithKeyStoreFileIntegrationTest.checkSMIMESignatureShouldAddBadSMIMEStatusWhenSignatureIsBad\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithKeyStoreFileIntegrationTest.checkSMIMESignatureShouldAddGoodSMIMEStatusWhenSignatureIsGoodAndContentTypeIsXPkcs7Mime\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithKeyStoreFileIntegrationTest.checkSMIMESignatureShouldDoNothingWhenItIsNonSMIMEMail\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithKeyStoreFileIntegrationTest.checkSMIMESignatureShouldAddGoodSMIMEStatusWhenSignatureIsGoodAndMailContainsMultiCerts\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithKeyStoreFileIntegrationTest.checkSMIMESignatureShouldAddNotSignedStatusWhenNoSignature\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithPemFileIntegrationTest.checkSMIMESignatureShouldAddGoodSMIMEStatusWhenSignatureIsGood\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithPemFileIntegrationTest.checkSMIMESignatureShouldAddBadSMIMEStatusWhenSignatureIsBad\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithPemFileIntegrationTest.checkSMIMESignatureShouldAddGoodSMIMEStatusWhenSignatureIsGoodAndContentTypeIsXPkcs7Mime\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithPemFileIntegrationTest.checkSMIMESignatureShouldDoNothingWhenItIsNonSMIMEMail\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithPemFileIntegrationTest.checkSMIMESignatureShouldAddGoodSMIMEStatusWhenSignatureIsGoodAndMailContainsMultiCerts\norg.apache.james.mailets.crypto.SMIMECheckSignatureWithPemFileIntegrationTest.checkSMIMESignatureShouldAddNotSignedStatusWhenNoSignature\norg.apache.james.mailets.crypto.SMIMEDecryptIntegrationTest.cryptedMessageShouldNotBeDecryptedWhenCertificateDoesntMatch\norg.apache.james.mailets.crypto.SMIMEDecryptIntegrationTest.cryptedMessageShouldBeDecryptedWhenCertificateMatches\norg.apache.james.mailets.crypto.SMIMEDecryptIntegrationTest.cryptedMessageWithAttachmentShouldBeDecryptedWhenCertificateMatches\norg.apache.james.mailets.crypto.SMIMESignIntegrationTest.authenticatedMessagesShouldBeSigned\norg.apache.james.transport.mailets.DlpIntegrationTest.dlpShouldBeAbleToReadMailContentWithAttachments(File)\n"
    },
    {
      "commit": "9adeef0b66e4caa1ba1d94aff3c3a68d7cbfc454",
      "tree": "b9b30f8470314cc7fd82a3e33d56aabf4d4f7618",
      "parents": [
        "62ee7e058a0ddb9162d0905268f695d629c284e8"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Mon Jun 29 11:09:00 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Fix failing JPAJamesServerTest\n"
    },
    {
      "commit": "62ee7e058a0ddb9162d0905268f695d629c284e8",
      "tree": "2f1d7e215df0e762fa3a5633fde1b3a5b773563f",
      "parents": [
        "5d661a35648a50ba4ce1c2e00859262e652fc7e2"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jun 24 14:35:23 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Align custom SMTP command example with SASL AUTH defaults\n\nStop the custom SMTP command example from explicitly registering UsersRepositoryAuthHook; default SMTP authentication is now handled by the SASL AUTH command path.\n"
    },
    {
      "commit": "5d661a35648a50ba4ce1c2e00859262e652fc7e2",
      "tree": "a0acd7ba5747a77fd14062e100997be006e994ef",
      "parents": [
        "ba6abe993d9829fc05c0beee1d48d8e829eb7a67"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jun 24 14:35:11 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Remove obsolete SMTP auth config stubs from LMTP\n\nRemove LMTP test and server implementations of SMTP authentication configuration methods that no longer exist after SMTP AUTH moved to SASL mechanisms.\n"
    },
    {
      "commit": "ba6abe993d9829fc05c0beee1d48d8e829eb7a67",
      "tree": "20808d0e01393e060e3d24097b7e7dc0063f4de4",
      "parents": [
        "bc6b4e16c50cdfc6c24fa63a7663a42bca03f4d3"
      ],
      "author": {
        "name": "Quan Tran",
        "email": "hqtran@linagora.com",
        "time": "Wed Jun 24 14:20:21 2026 +0700"
      },
      "committer": {
        "name": "Benoit TELLIER",
        "email": "btellier@linagora.com",
        "time": "Thu Jul 09 06:39:52 2026 +0200"
      },
      "message": "JAMES-4210 Wire SMTP SASL support for Spring and scaling Pulsar apps\n\nAdapt non-Guice and Spring SMTP server creation to provide default SASL mechanisms and authenticator wiring. Add a UsersRepository-backed authenticator for the scaling Pulsar SMTP app.\n"
    }
  ],
  "next": "bc6b4e16c50cdfc6c24fa63a7663a42bca03f4d3"
}
