)]}'
{
  "log": [
    {
      "commit": "3f263156a9a4ea3fd3c2eb78dbd796314958fd0b",
      "tree": "769d087a249bd71c57f7f02e436c3bab7dd9da50",
      "parents": [
        "7e7955fce49282e050c786a8e33c2c394c92c67c"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Oct 09 11:45:52 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Oct 09 12:22:28 2026 -0400"
      },
      "message": "PROTON-2988, PROTON-2864: Bump version for 0.42.0-dev\n"
    },
    {
      "commit": "7e7955fce49282e050c786a8e33c2c394c92c67c",
      "tree": "130198f57efea79a63e301c9a96ab62e50ff4f37",
      "parents": [
        "b330e3fe7d0b3e90e6081ca71cfe8b628c5e8134"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Oct 09 02:14:50 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Oct 09 12:22:28 2026 -0400"
      },
      "message": "PROTON-2864: update versions for 0.41.1-rc1\n"
    },
    {
      "commit": "b330e3fe7d0b3e90e6081ca71cfe8b628c5e8134",
      "tree": "3c49d0e8c6e09c6f4aaba53f92d798e0e6689977",
      "parents": [
        "7a3dc78ac85ca5044c58757fc5164da4dd951ae4"
      ],
      "author": {
        "name": "Robbie Gemmell",
        "email": "robbie@apache.org",
        "time": "Thu Oct 08 12:21:42 2026 +0100"
      },
      "committer": {
        "name": "Robbie Gemmell",
        "email": "robbie@apache.org",
        "time": "Thu Oct 08 12:21:42 2026 +0100"
      },
      "message": "NO-JIRA: update year in NOTICE file\n"
    },
    {
      "commit": "7a3dc78ac85ca5044c58757fc5164da4dd951ae4",
      "tree": "7b3de0377dd40ddf31ace7910446a9401fb6ae0e",
      "parents": [
        "2ffca2d99f80d86eaf6f704141b3ed68d31ec15a"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Oct 06 17:39:01 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Oct 07 20:43:36 2026 -0400"
      },
      "message": "PROTON-2987: Always release the proactor lock in work_start()\n\nWe were only unlocking in the \u0027if\u0027 which could make the lock/unlock not\nmatch. A latent bug today, as every caller passes a freshly created item,\nbut it would deadlock any caller that does not.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "2ffca2d99f80d86eaf6f704141b3ed68d31ec15a",
      "tree": "9199ee3b9528bdb4ebddb0004bae3ca2e6600e45",
      "parents": [
        "ec5742577cb08bf8c707bcf5bb212ab4e60d1c79"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Oct 06 17:03:21 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Oct 07 20:43:36 2026 -0400"
      },
      "message": "PROTON-2986: Don\u0027t crash closing a listener that never listened\n\nBoth libuv and win_iocp proactors would crash if you close a listener that\nwas never added to the proactor, because they would try to access the NULL\nproactor on closing.\n\nAdded a test to ensure there is no regression in this behaviour.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "ec5742577cb08bf8c707bcf5bb212ab4e60d1c79",
      "tree": "3f445db354eb945cbd9de0cb45e42238b5cd7244",
      "parents": [
        "c44b683b11edca99f21bbead013c2052d00a10d2"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Aug 24 21:44:02 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Oct 07 20:43:36 2026 -0400"
      },
      "message": "PROTON-2984: Close connections from the leader on proactor disconnect\n\non_proactor_disconnect() ran pn_connection_driver_close() directly from the\nuv_walk(), which leader_lead_lh() performs with p-\u003elock dropped. A worker\nthread can own that connection\u0027s driver at the time, so the walk could touch\ndriver state concurrently with the worker. Set pc-\u003edisconnecting and let\nleader_process_pconnection() do the close instead; that only runs for work\nitems the leader owns.\n\nDeferring the close exposed a second problem with the disconnect condition.\npn_proactor_disconnect() writes p-\u003edisconnect_cond under p-\u003elock, but the\nreaders run with the lock dropped: the walk itself, and now the deferred\nper-connection close as well. Once the leader has cleared p-\u003edisconnect a\nsecond pn_proactor_disconnect() is no longer suppressed, so it can\npn_condition_copy() into disconnect_cond while those readers copy out of it.\nBoth sides go through pn_string, so a reallocation there is a use-after-free\nrather than merely a torn condition. The listener path had the same unlocked\nread before this change.\n\nTake a copy of the condition under the lock when the disconnect request is\nconsumed, and have both readers use that. Only the leader touches the copy, so\nthey need no lock.\n\nThe condition race is only reachable when an application calls\npn_proactor_disconnect() more than once, so it is latent for single-disconnect\nusers.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "c44b683b11edca99f21bbead013c2052d00a10d2",
      "tree": "ca130da0ee48c97c3ce4cbaf6b8839e618a2f164",
      "parents": [
        "14018a5d74f48538a8df4e3e4ee3292d8dc2b123"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Oct 06 13:27:14 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Oct 07 20:43:36 2026 -0400"
      },
      "message": "PROTON-2984: Don\u0027t restart an in-flight libuv connect\n\nleader_process_pconnection() called leader_connect() on every pass while\npc-\u003econnected was still 0, including while an outbound connect was already in\nflight. That re-ran uv_tcp_init() on the live uv_tcp_t, which unconditionally\nre-initializes its io_watcher; if the loop still had that watcher queued,\nloop-\u003ewatcher_queue was left with a self-linked node that uv__queue_remove()\ncan never unlink. uv__io_poll() then spun forever, so the leader thread never\nreturned from uv_run() and never picked up any further proactor state. The\nother proactor threads stayed parked on pn_proactor_t::cond, hanging the\nprocess with one core pegged.\n\nAny work_notify() during the connect window triggered it, e.g.\npn_connection_wake() from another thread.\n\nStart the connect sequence once; retries are already driven by the libuv\nconnect callbacks, and a later pass only needs to deliver pending driver\nevents so that a terminal connect failure is still reported.\n\nReproduced with c-threaderciser, which hung roughly 1 run in 10 before this\nchange and 70 of 70 clean after it.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "14018a5d74f48538a8df4e3e4ee3292d8dc2b123",
      "tree": "52b41a70693c64331eaa636eb84c98e99bebcb00",
      "parents": [
        "73f4fb090cc76fdcc3eb33545f030ca8fc326a7e"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Oct 06 17:17:28 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Oct 07 20:43:36 2026 -0400"
      },
      "message": "PROTON-2985: Add a -perturb option to threaderciser\n\nProactor races rarely reproduce under normal scheduling, because the locks\naround task scheduling are held only briefly. -perturb randomly yields or\nsleeps for up to 2ms immediately before and after this file\u0027s own calls to\npn_proactor_connect(), pn_connection_wake(), pn_proactor_listen(),\npn_listener_close(), and around the pn_proactor_wait()/pn_event_batch_next()/\npn_proactor_done() loop, varying when concurrent threads arrive at those entry\npoints.\n\nIt changes only the timing of the actions, never which ones are taken, and is\noff unless asked for, so the default test run is unaffected. The start banner\nreports perturb\u003don/off.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "73f4fb090cc76fdcc3eb33545f030ca8fc326a7e",
      "tree": "5c1103acab423b42eadaae6f3fabf8a6e737ce70",
      "parents": [
        "b73b874e1d47e1a2765b5379c6345e984a617276"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Oct 05 23:14:47 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Oct 05 23:35:49 2026 -0400"
      },
      "message": "PROTON-2938: Fix use after free when error happens in Win IOCP proactor\n\nThe rarely used pn_error_copy tried to strdup a string it had just\nfreed if it was copying from and to the same error.\n"
    },
    {
      "commit": "b73b874e1d47e1a2765b5379c6345e984a617276",
      "tree": "eb2e631a346562ac95c075252ab76ff4dce0c2b9",
      "parents": [
        "092232d2ac127751f343761b6695225adeb94c84"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Oct 05 21:42:19 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Oct 05 22:01:47 2026 -0400"
      },
      "message": "NO-JIRA: Protect non portable compiler pragmas\n"
    },
    {
      "commit": "092232d2ac127751f343761b6695225adeb94c84",
      "tree": "20291d695654fe729bd0b780c306af5c0a39ad7a",
      "parents": [
        "dde465d218e06064600732e52f07923e38bfe6cb"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Oct 05 20:10:11 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Oct 05 21:30:14 2026 -0400"
      },
      "message": "PROTON-2981: Really change Windows minimum to Win7+\n\nWe document the minimum version of Visual Studio is 2019: This implies a\nminimum Windows version of 7, API version 6.1.\n"
    },
    {
      "commit": "dde465d218e06064600732e52f07923e38bfe6cb",
      "tree": "74354c9f5616d5e6bf094472e90a7ee6c8af1478",
      "parents": [
        "6800ee7ea87a25f79e5406a97a6c3a1755cf4442"
      ],
      "author": {
        "name": "Alberto Maschietto",
        "email": "albertomaschietto9@gmail.com",
        "time": "Thu Sep 10 09:09:29 2026 +0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Oct 05 19:24:34 2026 -0400"
      },
      "message": "NO-JIRA: Restrict build workflow to read-only contents\n\nThis was picked up by the Github CodeQL security scan.\n"
    },
    {
      "commit": "6800ee7ea87a25f79e5406a97a6c3a1755cf4442",
      "tree": "f89f644be552a3bd1b25b12366b28ec1576b9fba",
      "parents": [
        "c58a802706858da15f742086ecdda776d14eef5d"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Oct 02 02:25:00 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Oct 05 18:57:32 2026 -0400"
      },
      "message": "PROTON-2980: Correct installed pkgconfig files\n\nAlso take this opportunity to update to using the more standard macros\navailable in newer versions of CMake to simplify and make the build more\nconventional.\n"
    },
    {
      "commit": "c58a802706858da15f742086ecdda776d14eef5d",
      "tree": "b4b3eb626e7e788121c1d75b0cb858f5854de2c9",
      "parents": [
        "9e02ba75dcaf4b257646ccb5c633a533b224e478"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 30 23:02:11 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Oct 01 09:03:51 2026 -0400"
      },
      "message": "PROTON-2979: Omit delivery-id, tag and message-format on continuation transfers\n\nThese three fields are carried on the first transfer of a delivery and may be\nomitted on the continuation transfers that follow. We already accept peers that\nomit them, but always sent them on every frame of a multi-frame delivery.\n\npni_post_amqp_transfer_frame now takes a continuation flag and passes it as the\npresence bool for the three fields. The frame loop sends as many frames as it\ncan from one encoded performative, so the flag has to be maintained as it goes:\na transfer is a continuation exactly when the preceding one set \u0027more\u0027, so it\nfollows more_flag and marks the performative stale when that changes.\n\nContinuation frames carry a little more payload as a side effect, their\nperformative being shorter by the length of the delivery-tag.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "9e02ba75dcaf4b257646ccb5c633a533b224e478",
      "tree": "195858f13368cea1e7a5c6cdcf06e25c40951859",
      "parents": [
        "d793f97e4a2d0f960eda32724a2e867236468337"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Aug 24 21:43:50 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Oct 01 09:03:51 2026 -0400"
      },
      "message": "PROTON-2978: Improve transfer performative validation\n\n- Ensure that our transfer frame will fit inside the allowed frame size\n- Correct checking for delivery-id, delivery-tag and message-format\n  - Every delivery must have an id. If present in continuation\n    transfers it must be the same id\n  - Every delivery must have a tag. If present in continuation\n    transfers it must be the same tag\n  - Every delivery must have a message-format. If present in\n    continuation transfers it must be the same message-format.\n    This field was not previously decoded at all\n- Add tests for the above, and for discarding the remaining frames of a\n  partial delivery that the application has already settled\n"
    },
    {
      "commit": "d793f97e4a2d0f960eda32724a2e867236468337",
      "tree": "7d5ae706faeb354a7b83edde1858b357197d2e23",
      "parents": [
        "3794f2d2bdd64b59c6b1989cd3a00898a84fcc99"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Sep 28 21:20:01 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 30 20:36:48 2026 -0400"
      },
      "message": "PROTON-2976: Make pn_ssl_domain_set_trusted_ca_db replace the default CAs\n\npn_ssl_domain_set_trusted_cs_db is using SSL_CTX_load_verify_locations(). This\nloads the new CAs into the store that already holds the system certificates, so\nadding to those CAs rather than overriding them.\n\nOverriding is what the documentation has always described, and what SChannel\nalready does.\n\nInstall a fresh X509_STORE instead, in both the ssl and tls backends.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "3794f2d2bdd64b59c6b1989cd3a00898a84fcc99",
      "tree": "0016f2c3e77cf16bc5127ca8ae2c48217c0f030b",
      "parents": [
        "2ce88c34e066bff2f97874b1db95a1fe1249c58b"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Sep 18 16:20:52 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 30 18:13:37 2026 -0400"
      },
      "message": "PROTON-2977: Enforce the 32 octet maximum on outgoing delivery tags\n\nThe spec allows a delivery-tag of at most 32 octets, but nothing enforced it.\npn_delivery() duplicated whatever the caller passed and the encoder wrote it\nout.\n\nTruncate rather than reject. Rejecting would mean pn_delivery() returning NULL\nfor a reason no existing caller distinguishes, and the tags that overrun come\nfrom application code we don\u0027t control.\n\nTruncate in pn_delivery() rather than when encoding the performative, so that\npn_delivery_tag() reports what actually goes on the wire. Truncating only on\nthe way out would leave sender and receiver permanently disagreeing about a\ndelivery\u0027s identity, breaking anything that correlates by tag - the unsettled\nmap used for link resume in particular.\n\nOutgoing tags only. A receiver\u0027s tag comes off the wire, and an over long one\nthere is the peer\u0027s violation to report rather than something to rewrite\nsilently underneath our own application.\n\nThe major potential issue is a tag scheme that puts its distinguishing part last,\n\"producer-instance-7-000001\" and the like will stop having unique tags. So warn\nonly once per link, quoting the tag actually sent so it can be matched against\na wire trace: Warning per delivery would flood the log of a busy sender.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "2ce88c34e066bff2f97874b1db95a1fe1249c58b",
      "tree": "b49815a96e6ca72e8c5176067e67da9cc18f3ba9",
      "parents": [
        "2d202d4445106223013b6f5bd992971c85260f6a"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Sep 15 14:07:33 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Sep 25 18:04:14 2026 -0400"
      },
      "message": "PROTON-2950: More robustness for pn_buffer\n\n- Tightened up one possible buffer wraparound case\n- Test for more robust pn_string\n"
    },
    {
      "commit": "2d202d4445106223013b6f5bd992971c85260f6a",
      "tree": "b198d6e0b79d016c454ccf8ce87f6687c1ba9334",
      "parents": [
        "d65168bbef23cac2dda2fbef05cdc9aa6e71651e"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 23 21:23:03 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 23 21:23:19 2026 -0400"
      },
      "message": "PROTON-2975: Bump patch level\n\nThis is to help skupper distinguish new APIs\n"
    },
    {
      "commit": "d65168bbef23cac2dda2fbef05cdc9aa6e71651e",
      "tree": "55f4b2825017a9c422382fe2e631c04b3b30c63d",
      "parents": [
        "93ecd4448cb75387face9b0678b35f3cec77afc0"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 23 13:28:00 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 23 21:17:26 2026 -0400"
      },
      "message": "PROTON-2974: Verify TLS peer hostnames according to RFC 9525\n\nThe hand-rolled wildcard matcher computed the start of its suffix comparison as\nslabel + (strlen(slabel) - suffix_len). strlen() returns size_t, so when a name\nin the peer certificate had a longer suffix than the corresponding label of the\nconfigured hostname the subtraction wrapped and the comparison read stack memory\npreceding the buffer. A certificate name of \"*abcdef.example.com\" checked\nagainst \"x.example.com\" reads six bytes starting five bytes before it.\n\nHand the name check to OpenSSL instead, via X509_VERIFY_PARAM_set1_host() with\nX509_CHECK_FLAG_NO_PARTIAL_WILDCARDS, and delete the matcher. That also settles\ntwo ways the old code diverged from RFC 9525 s6.3: a wildcard is now honoured\nonly as the complete left-most label and spans exactly one label, so\n\"ba*.example.com\" and \"a.*.example.com\" are rejected; and the subject CommonName\nis consulted only when the certificate carries no DNS SubjectAltName, where\nbefore it was tried whenever no SubjectAltName matched, letting a permissive\nlegacy CN override tighter SANs. A mismatch now reports\nX509_V_ERR_HOSTNAME_MISMATCH rather than X509_V_ERR_APPLICATION_VERIFICATION.\n\nNot SSL_set1_host(), which looks like the obvious call: from 3.0 it converts a\nname that parses as an IP literal into an iPAddress-SubjectAltName-only check,\nso a peer addressed as \"127.0.0.1\" presenting a certificate with CN\u003d127.0.0.1 -\nwhich is what our own client-certificate.pem is - stops verifying. Older OpenSSL\ndoes not convert, so the same call would mean different things on different\nbuilds. X509_VERIFY_PARAM_set1_host() asks for the name check and nothing else.\nAn iPAddress SubjectAltName is picked up in verify_callback instead, by trying\nX509_check_ip_asc() on a name that got no DNS match - a form the old matcher\nnever handled at all.\n\nOpenSSL reads a reference name with a leading dot as \"any sub-domain of\", so\ndelegating to it would have widened what a peer may present - \".one.com\" would\nmatch \"alternate.name.one.com\". A DNS name cannot begin with a dot, so treat\nthat as a configuration error and fail the handshake, alongside the existing\ncheck for VERIFY_PEER_NAME configured with no hostname at all. Both are rejected\nin verify_callback rather than where the name is set, so the outcome does not\ndepend on whether the name arrives before or after the socket exists.\n\nSChannel keeps its own matcher, tightened to the same rules and given the same\nSubjectAltName precedence. It compares only against DNS names, as it always has,\nso the iPAddress match is OpenSSL-only and the two cases covering it are skipped\non Windows.\n\nSSL_set_hostflags() arrived in OpenSSL 1.1.0, which becomes the minimum;\nDrop the version guards that distinguish between earlier versions.\n\nserver-wc is reissued with \"*.wildcard.domain.com\" and 127.0.0.1 as\nSubjectAltNames. Its CommonName is left as \"*.prefix*.domain.com\" deliberately:\na CN the old matcher would have accepted is what makes the SubjectAltName\nprecedence testable, and it means 127.0.0.1 can only match through the iPAddress\nentry. The four wildcard cases become a table of eleven, plus two more where an\niPAddress SubjectAltName is matched, and the two\nneighbouring cases that asserted nothing now assert that the handshake\ncompleted.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "93ecd4448cb75387face9b0678b35f3cec77afc0",
      "tree": "c3c268307b09a5f015df9a19d1270f95f0e56933",
      "parents": [
        "75ad2aa0225c7db64400f4eaaf213e2458143ea7"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 23 19:37:40 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 23 21:09:44 2026 -0400"
      },
      "message": "PROTON-2973: Do not dereference a NULL credential path\n\npn_ssl_domain_set_credentials() tests each of its two credential arguments with\nis_pkcs11_uri(), which calls strncmp() on them unconditionally. Both arguments\ncan legitimately be NULL: the private key is documented as optional.\n\nBefore PKCS#11 support the NULL reached SSL_CTX_use_PrivateKey_file(), which\nrejects it and leaves the function returning -4. The new check was simply\ninserted ahead of the call that absorbed it. Restore that behaviour by treating\na NULL path as what it is - not a PKCS#11 URI - which covers the certificate\nargument at the same time.\n\n[Caused by PROTON-2594]\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "75ad2aa0225c7db64400f4eaaf213e2458143ea7",
      "tree": "b8765c5f17a3c8e1014d9883f81644c7cd1a5a1b",
      "parents": [
        "5586eb3694d4c5b95125dd350a4e5cea6280cbd6"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Aug 24 21:43:01 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 16 21:48:18 2026 -0400"
      },
      "message": "PROTON-2950: Make pn_buffer/pn_string allocations more robust\n"
    },
    {
      "commit": "5586eb3694d4c5b95125dd350a4e5cea6280cbd6",
      "tree": "db78b6a7ef50a51019c294a7e50b06cefe08f9ff",
      "parents": [
        "b7fb4507bb233db10825e6ffd456086dedca22f6"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 16 21:07:10 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 16 21:07:10 2026 -0400"
      },
      "message": "PROTON-2972: Stop recent clang++ warning about __COUNTER__\n\nThis is used in Catch2 tests to create unique names.\n"
    },
    {
      "commit": "b7fb4507bb233db10825e6ffd456086dedca22f6",
      "tree": "2d263123adbecc3844f85e541246486f60001d7e",
      "parents": [
        "0ec4d39707285d12608e6597671747c541ba245d"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 16 19:18:53 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Sep 16 19:18:53 2026 -0400"
      },
      "message": "PROTON-2945: Remove now unused code\n"
    },
    {
      "commit": "0ec4d39707285d12608e6597671747c541ba245d",
      "tree": "adcdda3e7eee5fe18838c41ace0cba85a3fff479",
      "parents": [
        "6e237cc6ce73dace6e7334062040e90eccbcb83a"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Aug 24 21:43:15 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Sep 14 16:59:23 2026 -0400"
      },
      "message": "PROTON-2970: Validate the SASL state before handling a frame\n\nEach SASL body handler checked that the frame was one its role could receive - but not that it was one it was expecting at this point in the protocol exchange.\n\nCheck the state of the exchange as well. A server takes an init only once it\nhas posted its mechanisms, and a response only once it has posted a\nchallenge. A client takes a mechanisms frame only before it has posted\nanything, and a challenge or an outcome only once it has posted an init or a\nresponse. Anything else is PN_ERR, as a frame arriving at the wrong role\nalready was.\n\nThe state tested is desired_state rather than last_state. A pipelining peer\ncan legitimately send its next frame before we have actually written our own,\nso last_state can still be lagging behind the frame we have already committed\nto sending.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "6e237cc6ce73dace6e7334062040e90eccbcb83a",
      "tree": "2c6e688bf3d7f50dfc07b940a0e905f8436e798a",
      "parents": [
        "040c0993f3b85205607740f2c847ea7ef754693d"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 28 13:50:02 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Sep 14 16:44:35 2026 -0400"
      },
      "message": "PROTON-2969: Stop dumping a value once the output buffer is full\n\npn_value_dump_nondescribed_value() kept walking a value\u0027s children after the\noutput buffer had filled up, with nothing left to write. Return as soon as\nthe buffer is full.\n\nAlso:\n\n- Skip a chain of descriptors iteratively rather than recursively, so dumping a\n  value uses a bounded amount of C stack whatever it contains.\n\nClean ups to pn_fixed_string_t:\n- Assert that we only make pn_fixed_string_t with at least 1 byte of storage\n  otherwise there is nowehere for the terminating \u0027\\0\u0027.\n\n- Make that all users of pn_fixed_string (which is internal oinly) pass in at least one\n  byte.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "040c0993f3b85205607740f2c847ea7ef754693d",
      "tree": "3400f49c49ed2a185b25b776b1ac36d6644443cc",
      "parents": [
        "aaf4c2ce7669c19453bc09c8f49147b73ed37f5e"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Sep 11 16:08:57 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Sep 14 16:33:35 2026 -0400"
      },
      "message": "PROTON-2968: pn_decoder_decode rejects too large compound counts\n\nElements of a zero width type (null, true, ...) take up no input bytes at all, so the child count together with the input size in an array of these does not bound the size of the decoded array.\n\nA compound with more children than the allowed number of nodes in a pn_data_t couldn\u0027t fit in the node array, so reject the count outright with PN_OUT_OF_MEMORY, which is what a decode that ran out of nodes would report anyway.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "aaf4c2ce7669c19453bc09c8f49147b73ed37f5e",
      "tree": "ba3dd37a81e97f333344a0dc133e2b37e9579379",
      "parents": [
        "c1c48bcb3c559644969ba48c4cec130894224165"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Aug 24 21:43:23 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Sep 14 16:05:26 2026 -0400"
      },
      "message": "PROTON-2967: Decode AMQP values iteratively rather than recursively\n\npn_decoder_decode() recursed once per level of nesting, so the C stack it\nconsumed grew with the nesting depth of the value being decoded.\n\nDecode iteratively instead. The state a recursive decoder keeps in its stack\nframes - how many children of the enclosing container are still to come, and,\nfor an array, the constructor its elements share - is now kept in the\ncontainer\u0027s own node, in the scratch space the encoder also uses. The tree\nbeing built is therefore also the decoder\u0027s stack, so the only bound on\nnesting is the node array: PNI_NID_MAX, and any limit set with\npn_data_set_decode_limits().\n\nEvery open node - list, map, array and described alike - carries a count of\nthe children still to be decoded, which lets a single loop close each node as\nits last child arrives.\n\nThe AMQP standard is contradictory about whether described types\nare allowed to be directly nested:\n\nIn the descriptive text for described format code it says \"prmitive\nformat code\" which would disallow a described type. The formal syntax\nallows it, merely specifying \"constructor\". The section on transactions\nrequires the message body to the transaction coordinator to be an amqp\nvalue (a described type) with a direct value of another described type\nfor declaring and discharging transactions.\n\nSo to sanity check incoming AMQP values we only allow a single directly\nnested described type. This is all that is required per the standard,\nand it\u0027s hard to see a valid use for more deeply nested described types.\n\nAssisted-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "c1c48bcb3c559644969ba48c4cec130894224165",
      "tree": "fea8c10bd4f32dcebc007a55395a1f7254e864cc",
      "parents": [
        "364e3951121e2181e42324748a863c3fc22e4713"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 28 00:40:37 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Sep 14 15:47:24 2026 -0400"
      },
      "message": "PROTON-2966: Improve the error reporting from pn_decoder_decode\n\n"
    },
    {
      "commit": "364e3951121e2181e42324748a863c3fc22e4713",
      "tree": "ec32523da3828c4a7c338a15e016c6e67ad55b62",
      "parents": [
        "caf0f45c5652d1576ca5af882fbc2be9b53800c0"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Sun Aug 30 01:19:34 2026 +0000"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Sep 14 00:38:58 2026 -0400"
      },
      "message": "PROTON-2954: Simplify pn_data_t\n\n- The different compound types now all have the same node data\n- Call out the scratch space in compound nodes explicitly"
    },
    {
      "commit": "caf0f45c5652d1576ca5af882fbc2be9b53800c0",
      "tree": "7207691dd74b937b4e935e1d71d6efc7d9f4a14b",
      "parents": [
        "00180a07096b2904886ce787eb55267000bc00ab"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 17:12:40 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 17:48:52 2026 -0400"
      },
      "message": "PROTON-2960: Don\u0027t pass uncast 0 as null pointer into pn_data_fill\n\nVarargs requires pointers to be explicitly pointers, otherwise it\u0027ll use\nthe wrong number of bits on most 64 bit ABIs.\n"
    },
    {
      "commit": "00180a07096b2904886ce787eb55267000bc00ab",
      "tree": "e0c801dd3991c93c470cef2ae0be5a29e729c39d",
      "parents": [
        "55c98c724d1f5e9141dfc2e7b5e121683449f526"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 01:48:21 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 17:48:52 2026 -0400"
      },
      "message": "PROTON-2961: Make CMake use of libuv align with the libuv conventions\n"
    },
    {
      "commit": "55c98c724d1f5e9141dfc2e7b5e121683449f526",
      "tree": "7947a21c43dc33a2a1b13f5903670bff9ec50421",
      "parents": [
        "717d1bde2dc95fc1b259b9b5eaaec1647e73b4fd"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Jul 21 02:16:31 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 12:45:48 2026 -0400"
      },
      "message": "PROTON-2958: Implement small encoding in pn_data_t for lists/maps/arrays\n\nWe do this by shifting back the content if we detect it is small enough\nat the point where we would go and back fill the size.\n\nA major limitation of this approach is that arrays have to contain identical\ntypecodes so we assume that everything in one cannot be shortened to avoid a\nmix of typecodes.\n"
    },
    {
      "commit": "717d1bde2dc95fc1b259b9b5eaaec1647e73b4fd",
      "tree": "8f00356439a1fe51ac4df95c076a0866ae9cf1ab",
      "parents": [
        "48dc5688d5aa51d668434237c665685884f83ae5"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Aug 17 19:27:53 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 12:41:18 2026 -0400"
      },
      "message": "PROTON-2954: Further reduce pn_data_t memory use\n\nReduced the per node memory use to 16 bytes from 24 bytes. This is a \n4.5 times reductions over the original 72 bytes. This now mitigates\nsignificantly the maximum node storage that could occur to 1MiB.\nPractically the intern buffer storage should always be limited by the\nsize of the raw protocol bytes that are being decoded.\n\nAchieved by:\n- Moving navigation links into the specific node type that uses them.\n- Removing members that could be computed.\n- Using spare packing space for the base type of an AMQP array.\n- Splitting arrays into regular and arrays of described types.\n\nSurprisingly this hasn\u0027t made the code significantly more complex and\nhas simplified a few things.\n"
    },
    {
      "commit": "48dc5688d5aa51d668434237c665685884f83ae5",
      "tree": "8cf8ff5b6456f05dd6e9c9170d8d138745d8f372",
      "parents": [
        "ad3e3f489b086c40de3952dabd59fd8546d54e01"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Jul 20 13:47:49 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 12:41:18 2026 -0400"
      },
      "message": "PROTON-2954: Slim down pn_data_t memory use\n\nReduce the per node memory cost from 72 bytes to 24 bytes (⅓ what it was)\nso that even complex AMQP values representions use much less memory."
    },
    {
      "commit": "ad3e3f489b086c40de3952dabd59fd8546d54e01",
      "tree": "91115c07be0c6d74959fddb66f68b41b3ee019bf",
      "parents": [
        "d7fbad0487f9f9d9466187026ec9d3f8fb646852"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Aug 19 13:39:23 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 12:41:18 2026 -0400"
      },
      "message": "PROTON-2954: Improve testing for pn_data_t\n"
    },
    {
      "commit": "d7fbad0487f9f9d9466187026ec9d3f8fb646852",
      "tree": "3031d3e776e916f9f1bfbf2abe5a126e1f2341a8",
      "parents": [
        "497447f3b9a3745baf266d6e4795328ef6745101"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Aug 20 12:08:32 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Aug 21 12:41:18 2026 -0400"
      },
      "message": "PROTON-2959: [Python] Fix heap use after free in SASL tests\n\nTests were using self.s1 after replacing self.t1 with a new transport,\nleaving a dangling pointer to the freed original transport.\n\nThis demonstrated a (longstanding) issue in the bindings: If a Transport\nobject is destroyed but the application has created SASL or SSL objects\nthose python objects now refer to a C object that has also been\ndestroyed as it is owned by the transport object.\n\nThe fix is for the SASL and SSL object to hold a weakref to the\nTransport object and to check if it is alive before every C level\noperation, throwing an exception if it isn\u0027t. This is much better\nthan the previous segv!\n"
    },
    {
      "commit": "497447f3b9a3745baf266d6e4795328ef6745101",
      "tree": "aaed0b6291b4e3a168cb7610d16fc6ee3d91a728",
      "parents": [
        "8d359708048ddd065ea71eb23de219014cf89e2c"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Jul 21 02:16:31 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Aug 19 23:02:21 2026 -0400"
      },
      "message": "PROTON-2946: Fix interop round trip comparision for ruby tests\n\n- Previous fix was only for python tests\n"
    },
    {
      "commit": "8d359708048ddd065ea71eb23de219014cf89e2c",
      "tree": "3917ffc896497174ceb7c13af4ce4b1787ccba1c",
      "parents": [
        "c4643cd31f3852906ed7a70b798a69a07541fc4b"
      ],
      "author": {
        "name": "Robbie Gemmell",
        "email": "robbie@apache.org",
        "time": "Mon Aug 17 11:02:49 2026 +0100"
      },
      "committer": {
        "name": "Robbie Gemmell",
        "email": "robbie@apache.org",
        "time": "Mon Aug 17 11:03:00 2026 +0100"
      },
      "message": "NO-JIRA: refresh releasing doc\n"
    },
    {
      "commit": "c4643cd31f3852906ed7a70b798a69a07541fc4b",
      "tree": "8aae1e3048f18a93802bb6f9e7dc4b2a10b53d8b",
      "parents": [
        "d2d4b5ccdd344f1e7dbb92d82636e43dac500934"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Aug 13 15:48:46 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Aug 13 15:49:43 2026 -0400"
      },
      "message": "NO-JIRA: Modernize ruby build\n"
    },
    {
      "commit": "d2d4b5ccdd344f1e7dbb92d82636e43dac500934",
      "tree": "c6b21588d9c81c9a49ecd814f6cff43f1447f84f",
      "parents": [
        "70c1c58da2f348030f5f4ea9ace476d0f6b30fa6"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Aug 13 13:55:13 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Aug 13 15:49:29 2026 -0400"
      },
      "message": "NO-JIRA: Fix/silence ruby configure and build time warnings\n"
    },
    {
      "commit": "70c1c58da2f348030f5f4ea9ace476d0f6b30fa6",
      "tree": "eb96407fa8ef5c2ea1d3c268782d9628dc31dc12",
      "parents": [
        "91aed9a113adb1e8f403999ecbb39380317b3968"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Jun 19 14:19:21 2026 +0100"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Aug 12 22:09:40 2026 -0400"
      },
      "message": "PROTON-2954: Limit memory use in decoding performative properties\n\n* Introduce a new pn_data_set_decode_limits API which limits the number\n  of nodes and the amount of buffer memory that can be used for decoding\n  an AMQP value.\n* The default on making a new pn_data directly is not to limit the memory use.\n  This is because the users application has full control of any pn_data\n  made like this and is in full control of its value. If this pn_data is\n  going to be used for values coming from an unknown source then its\n  memory use can be limited explicitly.\n* When the API itself creates pn_data instances to decode protocol\n  fields and pass them to the user then it will impose memory limits to\n  ensure application robustness:\n  - The amount of buffer memory that can be used when decoding property values\n    in performatives to the size of the raw memory in the property list. The\n    number of nodes is limited to 1024\n  - For a value read directly from a message again the buffer memory is\n    limited by the raw data size being decoded, but there is no limit to\n    the number of nodes.\n"
    },
    {
      "commit": "91aed9a113adb1e8f403999ecbb39380317b3968",
      "tree": "bb0f9dc591bd7e9a23f665008afc2c39d1476687",
      "parents": [
        "8654067b0b742a173632d4d51c17fcd87f737e88"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Jun 19 14:19:21 2026 +0100"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Aug 11 15:18:45 2026 -0400"
      },
      "message": "PROTON-2952: Limit memory use in transfer performatives\n\n* Limit the amount of memory that can be used for messages\n  using multiple transfer performative for a single message.\n* New transport APIs to set and get the message buffer limit\n* A new transport is created with a defauly 4MiB limit\n* Any transfer using more buffer space will error\n"
    },
    {
      "commit": "8654067b0b742a173632d4d51c17fcd87f737e88",
      "tree": "8a727378c1f1233334962a09e4c89f045fddb000",
      "parents": [
        "f41881d6be1b59f7de370b1a21d6a9885a0cc22b"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Jul 16 15:32:22 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Aug 11 02:58:18 2026 -0400"
      },
      "message": "PROTON-2950: Make pn_buffer_t use more resilient to allocation failure\n\n* Also use a more efficient scheme for doubling buffer size"
    },
    {
      "commit": "f41881d6be1b59f7de370b1a21d6a9885a0cc22b",
      "tree": "63de254cc54e62f81c41d2a47a80eb5553fea734",
      "parents": [
        "94e2df384a493cbb8a4870a40d90e08708e131eb"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jul 22 17:35:04 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Aug 06 12:05:08 2026 -0400"
      },
      "message": "PROTON-2946: Fix interop round trip comparison to be semantic\n\nPreviously we used a byte for byte comparison but it is legitimate to encode using small encodings where the value will fit even if the bytes decoded used a large encoding.\n"
    },
    {
      "commit": "94e2df384a493cbb8a4870a40d90e08708e131eb",
      "tree": "f17fd7c458d205c660655cb939ccf4f1bebc111b",
      "parents": [
        "c1861a9207fa1fd2b327c75ba1926e515666a42c"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Aug 04 17:53:35 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Aug 05 22:19:52 2026 -0400"
      },
      "message": "PROTON-2945: Allow only applicable performatives\n\n* Only AMQP performatives when dispatching AMQP\n* Only SASL performatives when dispatching SASL\n"
    },
    {
      "commit": "c1861a9207fa1fd2b327c75ba1926e515666a42c",
      "tree": "ce2b16946725351d519a4b9c182ebdbf12b5e738",
      "parents": [
        "976e2181c4c1daa6b84fd81465a0ca5cb98b39b8"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Aug 05 15:35:19 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Aug 05 20:05:51 2026 -0400"
      },
      "message": "NO-JIRA: Stop ruby tests creating sasl_conf directory in source tree\n"
    },
    {
      "commit": "976e2181c4c1daa6b84fd81465a0ca5cb98b39b8",
      "tree": "4e8b421c8c8666df4bd4a8be4bc85f86b6ddbffe",
      "parents": [
        "fd11bb59e416cb1416ec58e331a837de5a7d0239"
      ],
      "author": {
        "name": "Kevin SERIN",
        "email": "kevin.serin@viveris.fr",
        "time": "Fri May 22 17:45:13 2026 +0200"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jul 01 21:37:08 2026 -0400"
      },
      "message": "NO-JIRA: avoid logging AMQP credentials in python binding\n"
    },
    {
      "commit": "fd11bb59e416cb1416ec58e331a837de5a7d0239",
      "tree": "3e34671b485000c1386d6fd8ded5f6adfd2eeec3",
      "parents": [
        "32d84a4eeeafb94f810ae40977caa72613182bfd"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Feb 21 18:00:21 2022 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Jun 18 13:20:26 2026 -0400"
      },
      "message": "NO-JIRA: Allow azure CI to test sasl properly\n"
    },
    {
      "commit": "32d84a4eeeafb94f810ae40977caa72613182bfd",
      "tree": "6bfb92468b813a5ffc39bd1de197e395e9731666",
      "parents": [
        "bb73a2269b560ff847fb034db3e3c45724006736"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Feb 21 13:06:56 2022 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Jun 18 13:20:26 2026 -0400"
      },
      "message": "PROTON-2502: Stop testing using MD5 SASL mechanisms\n\nMD5 based mechanisms are now considered insecure and future systems will\nbe configured without them available. We should stop using them to test\nProton so we can build on securely configured machines.\n"
    },
    {
      "commit": "bb73a2269b560ff847fb034db3e3c45724006736",
      "tree": "5d5e271ef0bfbf4f9e46b12b5f72ca1f3341941d",
      "parents": [
        "3f4a08cdaf7d177be91d5ff83c77d5aaba790351"
      ],
      "author": {
        "name": "The Apache Software Foundation",
        "email": "root-asf-gitbox-commits@apache.org",
        "time": "Fri May 15 17:44:33 2026 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 17 18:12:02 2026 -0400"
      },
      "message": "Set up default protection ruleset for default and release branches"
    },
    {
      "commit": "3f4a08cdaf7d177be91d5ff83c77d5aaba790351",
      "tree": "7d7f13c8688d9df206cbba74d4e8810d40499fad",
      "parents": [
        "7be093d8d96104caab3fa858ab9886f23d62ee04"
      ],
      "author": {
        "name": "Stephen Baldwin",
        "email": "stephen.baldwin@syncromsp.com",
        "time": "Fri Oct 31 13:56:31 2025 -0700"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 17 17:54:18 2026 -0400"
      },
      "message": "[PROTON-2907] Check what parser URI::DEFAULT_PARSER is set to instead of ruby version\n"
    },
    {
      "commit": "7be093d8d96104caab3fa858ab9886f23d62ee04",
      "tree": "f6701b75b5c241d71916c0e8629678d5b2205a07",
      "parents": [
        "253ec1b4769b752e0609394e0b0cea0b6be5cb41"
      ],
      "author": {
        "name": "Thomas Goirand",
        "email": "zigo@debian.org",
        "time": "Wed Jun 17 15:31:31 2026 +0200"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 17 16:39:52 2026 +0100"
      },
      "message": "PROTON-2937: Add OpenSSL 4.x compat\n\nFixes this Debian bug: https://bugs.debian.org/1138394\n\nIt retains compatibility with OpenSSL 3\n\nCloses #447\n"
    },
    {
      "commit": "253ec1b4769b752e0609394e0b0cea0b6be5cb41",
      "tree": "b9ef5e7e977d59b0c8ccde2922c02b0cfdee8ee3",
      "parents": [
        "a1d52dfe07bbfdc269a3377444682e13b7dd5a8f"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Jun 12 15:04:39 2026 +0100"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Jun 12 15:04:39 2026 +0100"
      },
      "message": "PROTON-2864: Bump library .so versions for 0.41.0\n"
    },
    {
      "commit": "a1d52dfe07bbfdc269a3377444682e13b7dd5a8f",
      "tree": "d27246cee7d4ff66d843e71e3b25da89f0bf8eaa",
      "parents": [
        "a932ea4322f18b72ee924317dd336d36c924620d"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 03 00:21:22 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:17:04 2026 -0400"
      },
      "message": "PROTON-2922: Add comprehensive C++ API transaction tests\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "a932ea4322f18b72ee924317dd336d36c924620d",
      "tree": "a8e6731129d0d7ffdf6aaefbb9ef2e51c2f0cf48",
      "parents": [
        "d153c3a8ae627d03e08e31e976d18f121ff30646"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 29 01:46:29 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:17:04 2026 -0400"
      },
      "message": "PROTON-2922: Transaction testing\n\nImprove interactive tester so that it is capable of automatically\ntesting transactions at build time.\nIt still requires a transaction supporting broker to test against.\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "d153c3a8ae627d03e08e31e976d18f121ff30646",
      "tree": "e4b739bc5c3000ec6d4efeacd81bf1d26f237a9b",
      "parents": [
        "329edf8e1e281806f024c9f79ea8f7e86c067c67"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 13:32:49 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:17:04 2026 -0400"
      },
      "message": "PROTON-1442: Ensure that transaction id is empty outside transaction\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "329edf8e1e281806f024c9f79ea8f7e86c067c67",
      "tree": "ec9ee763bbadeeffe38406d9974035eabd46780e",
      "parents": [
        "7cfcc8344fb4a36ba6ba6d35819a1bf25fca4247"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu May 21 16:12:56 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:17:04 2026 -0400"
      },
      "message": "PROTON-1442: Make sure we only respond if we are in a transaction\n\nIf the peer is misbehaved it could send us a transactioned disposition\nwhen we\u0027re not in a transaction or it could be for a different\ntransaction.\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "7cfcc8344fb4a36ba6ba6d35819a1bf25fca4247",
      "tree": "48c462eb5004452f179b741a4adcd888b9ed3a52",
      "parents": [
        "4db5f231edcfef0dd9f630383db945cba7f89510"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 01 19:00:26 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:17:04 2026 -0400"
      },
      "message": "PROTON-1442: Correct outgoing message callbacks\n\nMake sure that the correct callbacks for the final committed\ndisposition of messages happens on commit.\n\n[On abort or commit error, then there is no callback as there is no\nfinal disposition update - but there may be a provisional update\ncallback which happened during the transaction]\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "4db5f231edcfef0dd9f630383db945cba7f89510",
      "tree": "6ff0af7308e35e6551a9bd218f2bb0a56805de2a",
      "parents": [
        "e99e6306489a71d47cc3aaee516720c2700420be"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Apr 20 16:37:13 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:17:04 2026 -0400"
      },
      "message": "PROTON-2921: Change default message rollback behaviour\n\n* Default rollback behaviour is now is to use a modified disposition\n  with failed delivery.\n* Do this by default on receiving transactional messages within a failed\n  or rolled back transaction.\n* Create options to change transactional defaults:\n  Currently there is only one option which sets the default behaviour\n  for received messages in a rolled back transaction.\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "e99e6306489a71d47cc3aaee516720c2700420be",
      "tree": "31f58c973f14e1b32d03e89088550843eed13364",
      "parents": [
        "84048049f964ed325c6fa71bb6584cb4555600c3"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue May 05 23:42:11 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:17:04 2026 -0400"
      },
      "message": "PROTON-1442: Improve C++ transaction API documentation\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "84048049f964ed325c6fa71bb6584cb4555600c3",
      "tree": "c358fabee151cda797c00860ae10fd1098d7a599",
      "parents": [
        "0a4c7b2bb9fc093505e5d451fe2d9660f2213622"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue May 26 14:26:54 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:19:29 2026 -0400"
      },
      "message": "NO-JIRA: [Python example broker] Improve readability of timeout\n"
    },
    {
      "commit": "0a4c7b2bb9fc093505e5d451fe2d9660f2213622",
      "tree": "311589cfddda49883ab8b8e575ae27521c47b655",
      "parents": [
        "e64c9fada89a940448fdf578c01a4e57f2c34844"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 15 18:53:49 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 18:17:04 2026 -0400"
      },
      "message": "PROTON-2936: [C++] Add container quiescent callback\n\nThis callback will be invoked when the event loop has no immediate\nevents to process - it indicates that there is nothing currently to do,\nso is a good place for an application to do short lived background\nprocessing, or to wait for the immediate effects of some protocol action\nto complete, for example to initiate an interactive prompt.\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "e64c9fada89a940448fdf578c01a4e57f2c34844",
      "tree": "853e8cc3f98a88bdf3b4f0811a40f07de3ff6601",
      "parents": [
        "3206e809dafd09dfd771aee51bfc1d19ae8893be"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Jun 09 14:53:17 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Jun 10 14:22:51 2026 -0400"
      },
      "message": "PROTON-2873: Work around transacted modified dispositions\n\nThe disposition API currently gives no access to the nested outcome of a\ntransacted modified disposition - however the usual case has the\ndelivery-failed boolean set for this disposition and this is the default\nbehaviour for this disposition (otherwise the release disposition could\nbe used instead in most cases). So we need to work around this until we\nhave a better fix:\n\n- When fix a transacted modified outcome to be delivery-failed and\n  redeliverable on the wire.\n- In the example python broker we assume that any received transacted modify\n  will be failed delivery, redeliverable.\n- In the C++ API we change the processing of modify to allow transacted\n  modifies to work.\n"
    },
    {
      "commit": "3206e809dafd09dfd771aee51bfc1d19ae8893be",
      "tree": "8cbf13d99e284087b1d4e764f7a8dc1843ba11e0",
      "parents": [
        "ee41bfc9d37e0cd1bc534082cf92030ca28788a1"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 15 18:53:49 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 29 17:09:28 2026 -0400"
      },
      "message": "PROTON-2834: [C++] Container stop should ignore cancelled timers\n\nContainer stop is documented to stop the container after queued qork is\ncompleted. However if shouldn\u0027t wait for any timer work that has already\nbeen cancelled. So if there are only cancelled timers left it should\nexit immediately.\n"
    },
    {
      "commit": "ee41bfc9d37e0cd1bc534082cf92030ca28788a1",
      "tree": "5deb915d575f8cbbcb0aa99ff3671818af446470",
      "parents": [
        "f2030b7774ec51d4d4939db40815c80aea1ad28c"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 15 18:53:49 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 29 17:09:28 2026 -0400"
      },
      "message": "NO-JIRA: [Ruby] Fix tests for recent ruby with removed minitest/unit\n"
    },
    {
      "commit": "f2030b7774ec51d4d4939db40815c80aea1ad28c",
      "tree": "9067975ca282044d90ba8f3b32ff52689a402344",
      "parents": [
        "9a1664f2b4b66d924e56b6a4238ea876121d9d25"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed May 06 17:23:04 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 29 17:09:28 2026 -0400"
      },
      "message": "NO-JIRA: [C++] Make output of binary types prettier\n\nAvoid including formatting (newlines, tabs etc.) in the output for\nbinary values.\n"
    },
    {
      "commit": "9a1664f2b4b66d924e56b6a4238ea876121d9d25",
      "tree": "46b86ed11925c6cb100c35cbc9a1fb3eb4168582",
      "parents": [
        "dd905346d9bfaea02d4604321126b5840669ebda"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon May 11 17:10:44 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 29 17:09:28 2026 -0400"
      },
      "message": "NO-JIRA: [C++ docs] Improvements to description of proton::work_queue\n"
    },
    {
      "commit": "dd905346d9bfaea02d4604321126b5840669ebda",
      "tree": "6022633e1c86cb659a31700ab2b59be607113fbe",
      "parents": [
        "29844e81ec8ba15ddac82cf61d4d54fed1c5893c"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon May 11 15:13:52 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 29 17:09:28 2026 -0400"
      },
      "message": "NO-JIRA: Update github build action for latest runners.\n"
    },
    {
      "commit": "29844e81ec8ba15ddac82cf61d4d54fed1c5893c",
      "tree": "7c0f7f7b544a90a0ba24b1f88d51b365d9dece53",
      "parents": [
        "48209807deb6ae3a36c28915a78656cd1acdf0be"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu May 21 16:12:56 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 29 17:09:28 2026 -0400"
      },
      "message": "PROTON-1442: Reorder messaging_handler callbacks to maintain ABI\n"
    },
    {
      "commit": "48209807deb6ae3a36c28915a78656cd1acdf0be",
      "tree": "828c23a9749790c9ed1b7e5c43a79dd93c38a89f",
      "parents": [
        "13275ca2710d4f659bda540e8358f22b0a10be24"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue May 26 14:26:54 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 29 17:09:02 2026 -0400"
      },
      "message": "PROTON-2935: Setting default logger sink doesn\u0027t fully work\n\nIf you change the default logger sink before creating a transport then\nthe context that you set for the default logger would get overwritten.\n"
    },
    {
      "commit": "13275ca2710d4f659bda540e8358f22b0a10be24",
      "tree": "41790a9abcf23cc21b84c68e87e36e78d22f3751",
      "parents": [
        "490d64a25d6b526c6df2de9d8b35f42ef66a5fc6"
      ],
      "author": {
        "name": "Cliff Jansen",
        "email": "cjansen@redhat.com",
        "time": "Fri May 01 11:52:47 2026 -0700"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed May 20 21:04:03 2026 -0400"
      },
      "message": "PROTON-2931: epoll proactor thread races using async c-ares name resolver library\n"
    },
    {
      "commit": "490d64a25d6b526c6df2de9d8b35f42ef66a5fc6",
      "tree": "4810da97a1365336e8c06520b3e1684aa02b006e",
      "parents": [
        "e1695bc5e1013f65777af8ef2a92a62b9609e047"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri May 01 18:45:46 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon May 04 21:26:09 2026 -0400"
      },
      "message": "PROTON-2932: [C++] Allow proton::transfer to be hashed\n"
    },
    {
      "commit": "e1695bc5e1013f65777af8ef2a92a62b9609e047",
      "tree": "dc46f3678b21718700aab7c8a68e90fd56a018b9",
      "parents": [
        "169e19a757ca8a3c998e29266f319a41a70d39ba"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Sun Apr 26 19:45:29 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Sun Apr 26 21:12:19 2026 -0400"
      },
      "message": "PROTON-2873: Make it easier to switch between disposition types\n\nAdd pn_disposition_clear to exposed API so that you can set a\nchange the disposition type and parameters of a disposition that is\nalready set using the new disposition API.\n\nDoing this is an unusual case, but occurs when you have an incoming\ndelivery inside a transaction which has been transactionally\nacknowledged but the transaction aborts or commit fails and now needs to\nbe have a modified disposition.\n"
    },
    {
      "commit": "169e19a757ca8a3c998e29266f319a41a70d39ba",
      "tree": "643adc1c0fcda554e1c8850983905a0f8e95df04",
      "parents": [
        "0643d7c769744515d88f2eec629513ae308c52ad"
      ],
      "author": {
        "name": "Cliff Jansen",
        "email": "cjansen@redhat.com",
        "time": "Thu Apr 16 08:44:08 2026 -0700"
      },
      "committer": {
        "name": "Cliff Jansen",
        "email": "cjansen@redhat.com",
        "time": "Thu Apr 16 08:44:08 2026 -0700"
      },
      "message": "PROTON-2930: epoll proator repeated epoll_wait on disconnected socket\n"
    },
    {
      "commit": "0643d7c769744515d88f2eec629513ae308c52ad",
      "tree": "33bc3f512794dba61ed7322d27e1d71817088a6b",
      "parents": [
        "7474c4b64ac7bce2ffbf24b3650d74dda0f4f6c7"
      ],
      "author": {
        "name": "Cliff Jansen",
        "email": "cjansen@redhat.com",
        "time": "Sun Apr 12 11:06:49 2026 -0700"
      },
      "committer": {
        "name": "Cliff Jansen",
        "email": "cjansen@redhat.com",
        "time": "Sun Apr 12 11:06:49 2026 -0700"
      },
      "message": "PROTON-2928: epoll proactor: fix amqp connection task scheduling if Proton events are pending\n"
    },
    {
      "commit": "7474c4b64ac7bce2ffbf24b3650d74dda0f4f6c7",
      "tree": "bbfc36dac6247175c094878b83c7891dc73f9eb2",
      "parents": [
        "d90c70637fed77c18e62fb12b84613d6ffc865df"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Mar 19 17:51:12 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Mar 25 21:30:57 2026 -0400"
      },
      "message": "PROTON-2926: Message ttl\u003d0 improvements\n\n- Document that ttl\u003d0 represents no ttl for the proton-c API.\n- Change python API to accept None and treat it as no expiry\n- Change python API to return float inf for no expiry\n  This is the closest correct semantic value that can be represented in a\n  python float.\n\nCloses #348\n"
    },
    {
      "commit": "d90c70637fed77c18e62fb12b84613d6ffc865df",
      "tree": "457b52400e1ed1a729ef328a4b0c87ff4bb06095",
      "parents": [
        "e595ce6c3b61b397ab4d48a3c9dfd8daf3c2ffd7"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 06 17:10:56 2026 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 13 13:40:08 2026 -0400"
      },
      "message": "PROTON-1442: [C++] Interactive transaction tester\n\nYou can interactively declare, commit, abort transactions;\nfetch/send messages;\nlist pending unsettled messages;\nrelease unsettled messages\n\nThis needs to be run against a broker that supports transactions\n\nProbably shouldn\u0027t be in examples as it\u0027s really a tester\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "e595ce6c3b61b397ab4d48a3c9dfd8daf3c2ffd7",
      "tree": "b85f8144698264e72bcb175d4d8744ec25ec9a73",
      "parents": [
        "63559f3c97e3ed42ee82617b6626e9843415d4e7"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Feb 17 12:52:43 2026 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 13 13:40:08 2026 -0400"
      },
      "message": "PROTON-1442: [Python] Interactive tx recv example\n\nAdded callback to note aborted/failed transaction\n"
    },
    {
      "commit": "63559f3c97e3ed42ee82617b6626e9843415d4e7",
      "tree": "0b88fdbec6be7c464523f428173ddac4e0a8a9a8",
      "parents": [
        "b6673de70e5d0d0d9d09a35c1dbf657f675bafbb"
      ],
      "author": {
        "name": "Rakhi Kumari",
        "email": "rakhi.cs61@gmail.com",
        "time": "Sat Oct 04 01:20:17 2025 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 13 13:40:08 2026 -0400"
      },
      "message": "PROTON-1442: [C++] Some examples using transactions\n\nThese examples are also useful for manually testing transactions against\na broker that supports them.\n"
    },
    {
      "commit": "b6673de70e5d0d0d9d09a35c1dbf657f675bafbb",
      "tree": "f292caa2de1e798e15a0340dadb0404641dc44a8",
      "parents": [
        "2ccfe74438ba283428a22a251e80bf25f6060457"
      ],
      "author": {
        "name": "Rakhi Kumari",
        "email": "rakhi.cs61@gmail.com",
        "time": "Sat Oct 04 01:20:17 2025 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 13 13:39:58 2026 -0400"
      },
      "message": "PROTON-1442: [C++] Implement local transactions\n\nImplement handling for declaring and discharging transactions on AMQP\nsessions.\n\nAdded new callbacks which allow the application to respond to\ntransaction events: declaring, committing and aborting transactions;\nprovisionally accepting, rejecting \u0026 releasing deliveries in a\ntransaction.\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "2ccfe74438ba283428a22a251e80bf25f6060457",
      "tree": "fb0d819b856915dcc65c88449827a5535efdac56",
      "parents": [
        "344e0bd6772fcaca5c3f1b7c2463898ee7de27ea"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 06 17:01:12 2026 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 13 13:39:04 2026 -0400"
      },
      "message": "PROTON-1442: [C++] Implement iterator for unsettled transfers\n\nThis returns an iterator for all unsettled transfers on a link.\n\nUsed to access transfers within a transaction or left unsettled after\none has failed.\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "344e0bd6772fcaca5c3f1b7c2463898ee7de27ea",
      "tree": "c795f42a73928112c7ed9ec3983ef1b4d6599aaf",
      "parents": [
        "e654cd91ba96732d47b69be82b228973e9936a9a"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Mar 12 16:54:05 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 13 13:38:44 2026 -0400"
      },
      "message": "PROTON-1442: [C++ examples] Allow string cli options to contain spaces\n\nThis code was written with the assistance of Cursor.\n"
    },
    {
      "commit": "e654cd91ba96732d47b69be82b228973e9936a9a",
      "tree": "37924596e4730b4619512dca561274bf08ff6c85",
      "parents": [
        "ea0985f643c6019050a40f69753f4cceaeccb9b2"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Mar 12 16:54:05 2026 -0400"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Mar 13 03:32:07 2026 -0400"
      },
      "message": "NO-JIRA: Add build as a symlink to .gitignore\n"
    },
    {
      "commit": "ea0985f643c6019050a40f69753f4cceaeccb9b2",
      "tree": "0e4b24e25027e0de85eb085b3f4c54a32e796491",
      "parents": [
        "e5d5c2badb964684bf41ba509a110bf06a24712a"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Jan 30 02:15:32 2026 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Feb 10 13:11:12 2026 -0500"
      },
      "message": "PROTON-2812: Implement async name lookup with c-ares\n\n* TODO: Would be useful to implement a specific async name lookup call\n  with a specific proactor event signalling the completed lookup for use\n  in code that just provides us with fds.\n"
    },
    {
      "commit": "e5d5c2badb964684bf41ba509a110bf06a24712a",
      "tree": "4276ea427dbb88cbdc7ca23fec3ee10e41fcbe34",
      "parents": [
        "88888895737b21e48b19cb13d5654c151dd859ba"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Feb 06 16:34:25 2026 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Feb 06 16:43:51 2026 -0500"
      },
      "message": "PROTON-2916: Speed up c++ reconnect test\n\nWe were using bad names to make name lookup fail - these were valid top\nlevel domains and caused the full name lookup timeout for them to fail.\n\nChanging these absent names to use the .invalid domain which is reverved\nfor non existent names makes the test run much faster.\n"
    },
    {
      "commit": "88888895737b21e48b19cb13d5654c151dd859ba",
      "tree": "2ca0b21765703f5a8fb390481c237e2cb1ab3f4b",
      "parents": [
        "2dd96803da21c37ccfd8dca6db3bffabe4d02fbe"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Dec 19 11:03:10 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Dec 19 11:03:10 2025 -0500"
      },
      "message": "NO-JIRA: Git ignore .cache\n"
    },
    {
      "commit": "2dd96803da21c37ccfd8dca6db3bffabe4d02fbe",
      "tree": "a492cc699bffaa69cce6ce66fb7ff15284d165ec",
      "parents": [
        "d7fc8e5d8237f968c2afe846936aa3254d755402"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Dec 19 01:05:44 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Fri Dec 19 01:05:44 2025 -0500"
      },
      "message": "NO-JIRA: More reliably run the tox tests\n"
    },
    {
      "commit": "d7fc8e5d8237f968c2afe846936aa3254d755402",
      "tree": "cc59c79d78b20f4afe43972a1084e412cf8eb872",
      "parents": [
        "746b8b7722e2f7320cbf3089a741b1bc5485e235"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 18 20:29:37 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 18 21:43:04 2025 -0500"
      },
      "message": "PROTON-2890: [Python] Broker example: reorganised disposition handling\n"
    },
    {
      "commit": "746b8b7722e2f7320cbf3089a741b1bc5485e235",
      "tree": "fbd78a253dd65546b4786c04dea9660de5db768e",
      "parents": [
        "040578eb7b5a9711b3de7f96ac78d2d4e8a3567b"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Dec 17 22:53:28 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 18 21:43:04 2025 -0500"
      },
      "message": "PROTON-2890: Restructure broker to allow transaction timeout abort\n\nAlso rollback shouldn\u0027t requeue transactionally updated outgoing\nmessages.\n"
    },
    {
      "commit": "040578eb7b5a9711b3de7f96ac78d2d4e8a3567b",
      "tree": "44544c1b23a268e3e0d36ec6b027ec90fa60052e",
      "parents": [
        "32bcfccbd295bf576c8b5e02ed50afb8d6fbb7a1"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 11 23:34:28 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 18 21:43:04 2025 -0500"
      },
      "message": "PROTON-2890: [Python] Example broker shouldn\u0027t settle on rollback\n\nRollbacks shouldn\u0027t settle incoming deliveries.\n"
    },
    {
      "commit": "32bcfccbd295bf576c8b5e02ed50afb8d6fbb7a1",
      "tree": "e3c22813279f911316f8cb25c6f815824007559c",
      "parents": [
        "3e8ca41542901987496ce53ad6fb4bd9cc897ab0"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 18 21:06:28 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 18 21:43:04 2025 -0500"
      },
      "message": "PROTON-2873: [Python] Remove caching for delivery remote disposition\n\nWe can\u0027t cache the remote disposition because it might be updated by the\nremote peer, but we have no way to know it has been changed in the\ndelivery to invalidate the cache entry.\n"
    },
    {
      "commit": "3e8ca41542901987496ce53ad6fb4bd9cc897ab0",
      "tree": "9050a9088f9b52fe3c426f6505f7fde206cdd91b",
      "parents": [
        "6ff983d1c3a67c8ffe3702d1e58d27697b3254a3"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 18 21:36:45 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 18 21:43:04 2025 -0500"
      },
      "message": "NO-JIRA: [Python] Don\u0027t return inside a finally block\n\nDetected by Python 3.14\n"
    },
    {
      "commit": "6ff983d1c3a67c8ffe3702d1e58d27697b3254a3",
      "tree": "c059adb2e6e6db7bbe03db06a1976a7aee1c7a24",
      "parents": [
        "67b5455445de6c97fb656f83b2af3331a9d899ab"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Dec 10 19:16:38 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Dec 10 20:01:46 2025 -0500"
      },
      "message": "NO-JIRA: Update github actions build to use latest MacOSX image\n\n- Also stop Azure dev MacOS build using wrong version of OpenSSL\n- Remove deprecated MacOSX linker flag\n"
    },
    {
      "commit": "67b5455445de6c97fb656f83b2af3331a9d899ab",
      "tree": "4872dd89110e8792fcafa88f0e668d31dbad26f1",
      "parents": [
        "b053795579f4269fdbd956efe5e06a2a3445e671"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Dec 10 19:00:48 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Dec 10 19:00:48 2025 -0500"
      },
      "message": "PROTON-2913: pn_message_encode could generate an illegal message\n\nIf given a message with no message body, pn_message_encode would\ngenerate a message with no body which is illegal in AMQP.\n\nWould have preferred to generate an error in this case, but this would\nbe a change to a very long standing behaviour.\n"
    },
    {
      "commit": "b053795579f4269fdbd956efe5e06a2a3445e671",
      "tree": "30407e24c0cf37a9a9900d6858ca4c68d1a0875f",
      "parents": [
        "912158e646b562ccacd815e38348c5361ac881c6"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Dec 09 16:15:03 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Dec 09 16:15:03 2025 -0500"
      },
      "message": "PROTON-2890: Elaborate python transaction send example...\n\n... to more correctly handle transactioned disposition updates to the\nmessages it sends. Including handling erroneous disposition updates from\nbuggy brokers.\n"
    },
    {
      "commit": "912158e646b562ccacd815e38348c5361ac881c6",
      "tree": "409f49469b91c4081ac5a55cd97c0c3546f0128d",
      "parents": [
        "478d99301d8c44ab7372400ee71faf21b10c14b7"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Dec 09 11:12:15 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Dec 09 16:10:08 2025 -0500"
      },
      "message": "PROTON-2890: [Python] Broker should send transactioned updates\n\nFor a messages sent in a transaction any accept/reject etc. disposition\nupdates must be sent in a transactional state disposition update.\nSection 4.4.1 of the AMQP spec.\n"
    },
    {
      "commit": "478d99301d8c44ab7372400ee71faf21b10c14b7",
      "tree": "466938728f9da99d549f8c75d5723ef3c4da9d39",
      "parents": [
        "35536253534af8984d74cbc52ca07827788832f9"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Dec 09 15:38:21 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Tue Dec 09 16:06:51 2025 -0500"
      },
      "message": "PROTON-2873: [Python] Allow Delivery.update to take Disposition\n\nTo allow more convenient local delivery disposition updates allow update\nto take a LocalDisposition object and use that for the update as well as\na disposition type.\n\nAlso allow TransactionalDisposition to take a Disposition outcome as\nwell as a disposisiton type for convenience of creating a more complex\ntransactional disposition update. At this point the underlying C API\nonly allows the outcome type to be recorded though.\n"
    },
    {
      "commit": "35536253534af8984d74cbc52ca07827788832f9",
      "tree": "20dc592f6358e781c1cd4b379f351005104e94c0",
      "parents": [
        "b1b9b07a2552c69ad6512d5e272534d26538f692"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Mon Nov 24 22:06:23 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 04 21:47:48 2025 -0500"
      },
      "message": "PROTON-2911: [C++] Correctly handle terminus capabilities\n\nTerminus capabilities can be a single AMQP symbol as well as an AMQP array of\nsymbols.\n"
    },
    {
      "commit": "b1b9b07a2552c69ad6512d5e272534d26538f692",
      "tree": "587f7de7afefc1a3211cc5db8fa244f4446d0884",
      "parents": [
        "5aa83a6d162fc4bf405149756b9f67dcfc43d0cc"
      ],
      "author": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Wed Dec 03 22:53:02 2025 -0500"
      },
      "committer": {
        "name": "Andrew Stitcher",
        "email": "astitcher@apache.org",
        "time": "Thu Dec 04 18:43:33 2025 -0500"
      },
      "message": "PROTON-2910: [core] Changed generated code to use better names\n\nThe generated code now uses the specs to generate the frame\nencode/decode functions, but allows you to specify their names. This\nallows the actual code to read a whole lot better.\n\nAlso now documented the spec codes at the top of the generate.py code.\nI think this doc can still be improved.\n\n(Also removed some holdovers from the initial PROTON-2451 work)\n"
    }
  ],
  "next": "5aa83a6d162fc4bf405149756b9f67dcfc43d0cc"
}
