)]}'
{
  "log": [
    {
      "commit": "1e19095c5287eff82ae0d5cc07502d87017944f2",
      "tree": "6c76130e7e0852bacc916d6d38b91bc88a8488bf",
      "parents": [
        "27d2b2d3663f536a3466d16b5ce00878fc9cd968"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Oct 10 02:29:41 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Oct 10 02:29:41 2026 +0800"
      },
      "message": "fix: avoid cache key collisions in cached enforcer\n"
    },
    {
      "commit": "27d2b2d3663f536a3466d16b5ce00878fc9cd968",
      "tree": "1919f9ed4b9f9a60958b3b7d1bb2710bdea50bd6",
      "parents": [
        "24d5dc40db0c7f61b17ce752cfdf90aa0632f2e8"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Oct 10 02:26:54 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Oct 10 02:26:54 2026 +0800"
      },
      "message": "fix: invalidate decision cache on policy change\n"
    },
    {
      "commit": "24d5dc40db0c7f61b17ce752cfdf90aa0632f2e8",
      "tree": "8305ae8064ed793c6a93a5d252af2fd29a26978b",
      "parents": [
        "5506d7f7e4f0457f794cf8b1886818a385b885dd"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Thu Oct 08 23:59:58 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Thu Oct 08 23:59:58 2026 +0800"
      },
      "message": "docs: add Trendshift badge to README\n"
    },
    {
      "commit": "5506d7f7e4f0457f794cf8b1886818a385b885dd",
      "tree": "0f63c4b64e1a3fa311be9f7753134650322d59d8",
      "parents": [
        "524f3f2dc9baef696d748db491d49b3055d359d1"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Mon Oct 05 11:45:23 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Mon Oct 05 11:45:23 2026 +0800"
      },
      "message": "docs: add OpenSSF Best Practices badge to README\n"
    },
    {
      "commit": "524f3f2dc9baef696d748db491d49b3055d359d1",
      "tree": "d82814231752fc2473f726478eafae4124b1b202",
      "parents": [
        "9e2e9977d8b5c76d601fb516d1f8b419fba29b6f"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Sep 11 10:01:08 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Sep 11 10:01:08 2026 +0800"
      },
      "message": "fix: propagate policy parse errors in string adapter\n"
    },
    {
      "commit": "9e2e9977d8b5c76d601fb516d1f8b419fba29b6f",
      "tree": "35c2bb3d6bb771f13df772b058670658742c69ea",
      "parents": [
        "071dce14a438ae5b30549bebee268c8443746044"
      ],
      "author": {
        "name": "Zhao Jianing",
        "email": "18910855655@163.com",
        "time": "Wed Sep 09 23:50:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 23:50:16 2026 +0800"
      },
      "message": "fix: return error instead of panic on missing policy type in LoadPolicyArray (#1757)"
    },
    {
      "commit": "071dce14a438ae5b30549bebee268c8443746044",
      "tree": "d22dd61ec899db06e4ec8773156620ed90489036",
      "parents": [
        "5341c6b4211167e8144975c805cfd57a8c9e7965"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Sep 09 23:03:23 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Sep 09 23:03:23 2026 +0800"
      },
      "message": "fix: don\u0027t sort arguments in place in SetEquals, SetEqualsInt and Set2DEquals\n"
    },
    {
      "commit": "5341c6b4211167e8144975c805cfd57a8c9e7965",
      "tree": "a59137fc93b00c9740ac9ebb94dfb4998e1e0361",
      "parents": [
        "e7dafeda12869bda050b411a98cc80a0dbd0fbec"
      ],
      "author": {
        "name": "Arshil-Khan",
        "email": "arshilk10000@gmail.com",
        "time": "Wed Sep 09 20:24:20 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 22:54:20 2026 +0800"
      },
      "message": "fix: use ptype in GetNamedPermissionsForUser for subject index (#1760)"
    },
    {
      "commit": "e7dafeda12869bda050b411a98cc80a0dbd0fbec",
      "tree": "ded102fccb6d0daa6ca266c76272edc38cc9cbcb",
      "parents": [
        "34297a19bd65cd52d40d146452c20aea7b45c205"
      ],
      "author": {
        "name": "Zhao Jianing",
        "email": "18910855655@163.com",
        "time": "Wed Sep 09 22:01:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 22:01:10 2026 +0800"
      },
      "message": "fix: size cache key buffer per rule in cached enforcers (#1756)"
    },
    {
      "commit": "34297a19bd65cd52d40d146452c20aea7b45c205",
      "tree": "46bed26c378843c04235b5880ece7d8f5317aa85",
      "parents": [
        "b8c049a251672902d8aeb1d0ccbc5cb9c352c0d6"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Aug 21 16:53:50 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Aug 21 16:53:50 2026 +0800"
      },
      "message": "feat: add grouping, batch update and filtered remove APIs to Transaction\n"
    },
    {
      "commit": "b8c049a251672902d8aeb1d0ccbc5cb9c352c0d6",
      "tree": "639ddd4f19fc0fdbc8b45c53e4dd9a978366018f",
      "parents": [
        "e872532ea83a3af62e36c6e567a7d12628e20667"
      ],
      "author": {
        "name": "Nikolaus Schuetz",
        "email": "nikolauspschuetz@gmail.com",
        "time": "Thu Aug 20 23:42:12 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 14:42:12 2026 +0800"
      },
      "message": "fix: guard LRUCache against non-positive capacity (#1749)"
    },
    {
      "commit": "e872532ea83a3af62e36c6e567a7d12628e20667",
      "tree": "0c582612a7b18a81d5a9be243960064b89f29c7e",
      "parents": [
        "e275c6cf02dc8b4d8bb573efb940dcab03ca2efd"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Thu Aug 20 11:11:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 11:11:24 2026 +0800"
      },
      "message": "docs: remove Sourcegraph badge from README\n\nRemoved Sourcegraph badge from README."
    },
    {
      "commit": "e275c6cf02dc8b4d8bb573efb940dcab03ca2efd",
      "tree": "1913f25b8b28865ad5a7a1203600af86d60d5879",
      "parents": [
        "0936f2c3ff4962f2910118348220068367541557"
      ],
      "author": {
        "name": "PingouinFerreux",
        "email": "212632237+PingouinFerreux@users.noreply.github.com",
        "time": "Thu Aug 13 09:16:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 15:16:17 2026 +0800"
      },
      "message": "docs: fix broken star history chart in README (#1748)"
    },
    {
      "commit": "0936f2c3ff4962f2910118348220068367541557",
      "tree": "26647472932d1f8c62944b2112c97c0e0e368b43",
      "parents": [
        "9a94fde4757836d1327ac8f8df0877ffc97ca66b"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Aug 07 00:38:52 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Aug 07 00:38:52 2026 +0800"
      },
      "message": "perf: cache compiled patterns by key2 in KeyMatch/KeyGet\n"
    },
    {
      "commit": "9a94fde4757836d1327ac8f8df0877ffc97ca66b",
      "tree": "548f83d765b4629d28722d0ad260ebc5e8b8661a",
      "parents": [
        "e9df34e092f925e0031f7db4e062f2fbddf3dc86"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Thu Aug 06 23:14:57 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Thu Aug 06 23:14:57 2026 +0800"
      },
      "message": "feat: expose Transaction.GetAdapter() to share the tx with GORM\n"
    },
    {
      "commit": "e9df34e092f925e0031f7db4e062f2fbddf3dc86",
      "tree": "27054b124a1b2e28ee9785eefc6435578dc75fe2",
      "parents": [
        "b32cfd3c36e482f1ed1eb5ba94bb4ecb183c90d4"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 17:03:20 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 17:03:20 2026 +0800"
      },
      "message": "ci: migrate golangci-lint to v2 and fix lint issues\n"
    },
    {
      "commit": "b32cfd3c36e482f1ed1eb5ba94bb4ecb183c90d4",
      "tree": "1986faa2de203a79b7aa23018b6cd6c263c41148",
      "parents": [
        "cfa80fc4a04fcfdf528dd739d37d46323340d149"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 16:18:58 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 16:18:58 2026 +0800"
      },
      "message": "fix: fix go linter\n"
    },
    {
      "commit": "cfa80fc4a04fcfdf528dd739d37d46323340d149",
      "tree": "6459d37074370704942a06dc64e9bedbfa604e19",
      "parents": [
        "d3e9928ab07b200efa0132f99fa095c084597897"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 16:17:28 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 16:17:28 2026 +0800"
      },
      "message": "feat: add RBAC with ABAC condition example\n"
    },
    {
      "commit": "d3e9928ab07b200efa0132f99fa095c084597897",
      "tree": "e9c7c2fa6738b43615867313a3c97c91599f8850",
      "parents": [
        "0dd2ea76ef0c7007b3fe22ce3c6905799bac0f4f"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 16:11:57 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 16:11:57 2026 +0800"
      },
      "message": "fix: preserve policy order in Model.RemovePolicy\n"
    },
    {
      "commit": "0dd2ea76ef0c7007b3fe22ce3c6905799bac0f4f",
      "tree": "51fa2ea448cee4a54a6cc484f3831e6a0eab6740",
      "parents": [
        "65cb98506a474e2dddd5f24ad534999306c14ec6"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 16:08:42 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 16:08:42 2026 +0800"
      },
      "message": "fix: keep \", \" separator in SavePolicy output\n"
    },
    {
      "commit": "65cb98506a474e2dddd5f24ad534999306c14ec6",
      "tree": "f582e17c2d590099c0243c7b5d0e27038cff43bc",
      "parents": [
        "df166f67a798dad9da970d8c3d3726d1df6a25d8"
      ],
      "author": {
        "name": "Nhan (Nolan) Huynh",
        "email": "157712338+huynhanx03@users.noreply.github.com",
        "time": "Tue Aug 04 14:56:39 2026 +0700"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 15:59:59 2026 +0800"
      },
      "message": "perf: optimize batch policy removal (#1729)\n"
    },
    {
      "commit": "df166f67a798dad9da970d8c3d3726d1df6a25d8",
      "tree": "484fd54db6bed01bf1c8a4250fa194db8f80b448",
      "parents": [
        "c94e936ac21c68f8745361e6ce1cbfbe521941a6"
      ],
      "author": {
        "name": "legendpei",
        "email": "804141866@qq.com",
        "time": "Tue Aug 04 15:53:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 15:53:42 2026 +0800"
      },
      "message": "test: add key get wrapper coverage (#1730)"
    },
    {
      "commit": "c94e936ac21c68f8745361e6ce1cbfbe521941a6",
      "tree": "cdd7eeeb43d90baa1ff46a30b427145656c5a8be",
      "parents": [
        "9e2b76713fc4d19d8d49c41dcba336696f88ce3c"
      ],
      "author": {
        "name": "zengwei",
        "email": "13350016962@163.com",
        "time": "Tue Aug 04 15:49:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 15:49:45 2026 +0800"
      },
      "message": "fix: remove deprecated comment from RemovePolicy method (#1662)"
    },
    {
      "commit": "9e2b76713fc4d19d8d49c41dcba336696f88ce3c",
      "tree": "1f11c4685464d0766ab75ae2c223ab2ed3f85496",
      "parents": [
        "e95b15ea9e732c3420dafbba2bbbefb8af3911c6"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 15:39:36 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 15:39:36 2026 +0800"
      },
      "message": "perf: fast-path KeyMatch2/3/4/5 for plain keys and \"*\"\n"
    },
    {
      "commit": "e95b15ea9e732c3420dafbba2bbbefb8af3911c6",
      "tree": "30e6a8efa3b02d66c7f871137ae60f3cb867be1e",
      "parents": [
        "6259f0370a7df23ace90d10c43bf0866fb5185fb"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 00:50:39 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 00:50:39 2026 +0800"
      },
      "message": "fix: fix Go Report Card badge\n"
    },
    {
      "commit": "6259f0370a7df23ace90d10c43bf0866fb5185fb",
      "tree": "052003f207c55b28b4d59ac313a08d933fc485e4",
      "parents": [
        "492fcc66dfca6b66fedb7a132e4c4f67672287d8"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 00:31:01 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 00:31:01 2026 +0800"
      },
      "message": "ci: publish releases from manually pushed tags\n"
    },
    {
      "commit": "492fcc66dfca6b66fedb7a132e4c4f67672287d8",
      "tree": "da0017f4724b2bb9acd1cb1dcc8aaa3835540acc",
      "parents": [
        "a918daf3e94137b9fc531a2013e962df0dd34724"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 00:17:36 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Aug 04 00:17:36 2026 +0800"
      },
      "message": "fix: remove useless asf.yaml\n"
    },
    {
      "commit": "a918daf3e94137b9fc531a2013e962df0dd34724",
      "tree": "2c5e61faf2058e0239f3a9f593a9c5f8e127f623",
      "parents": [
        "08dab401f7e78a3af923239fff1fcef20ab78464"
      ],
      "author": {
        "name": "Nikolaus Schuetz",
        "email": "nikolauspschuetz@gmail.com",
        "time": "Sun Aug 02 10:52:39 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 01:52:39 2026 +0800"
      },
      "message": "fix: preserve non-ASCII literals in EscapeStringLiterals (#1746)"
    },
    {
      "commit": "08dab401f7e78a3af923239fff1fcef20ab78464",
      "tree": "29f56d68906aca39eb5de49e2aad0b2e03b1e77b",
      "parents": [
        "a2695ae8f082533ce3ed441e025d24064d6bf0e7"
      ],
      "author": {
        "name": "Emery",
        "email": "80300166+EmryZhang@users.noreply.github.com",
        "time": "Sat Jul 25 15:00:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 15:00:02 2026 +0800"
      },
      "message": "chore: add RAT license-check policy (#1745)"
    },
    {
      "commit": "a2695ae8f082533ce3ed441e025d24064d6bf0e7",
      "tree": "116e22ff53c7347a53ce93d311d7935e88399aeb",
      "parents": [
        "6f56ed722bc0fab53cd78be36959133f5008c1b5"
      ],
      "author": {
        "name": "Emery",
        "email": "80300166+EmryZhang@users.noreply.github.com",
        "time": "Sat Jul 25 00:30:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 00:30:55 2026 +0800"
      },
      "message": "chore: complete ASF license cleanup (#1744)"
    },
    {
      "commit": "6f56ed722bc0fab53cd78be36959133f5008c1b5",
      "tree": "e3cd19309fc755becad83870c216eff307dc9162",
      "parents": [
        "db1789331bdf3e49e86d7fd73a6f117c8e2425fa"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Jul 23 00:37:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 00:37:08 2026 +0800"
      },
      "message": "chore: migrate to ASF license header (#1743)\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e"
    },
    {
      "commit": "db1789331bdf3e49e86d7fd73a6f117c8e2425fa",
      "tree": "8d2fde0e64e599e5164ee2ee5f2dce01d21d2d7b",
      "parents": [
        "fb3d1b80bbe155552d8bcec2915afe80ace69d7e"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Wed Jul 22 21:09:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 21:09:55 2026 +0800"
      },
      "message": "chore: drop yarn global setup (#1742)"
    },
    {
      "commit": "fb3d1b80bbe155552d8bcec2915afe80ace69d7e",
      "tree": "fefb38f6b1ad1132f8c4661156da1d68ac3e0231",
      "parents": [
        "95656679eac1caad13179bd209bbc87a2e8e6002"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Wed Jul 22 21:03:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 21:03:21 2026 +0800"
      },
      "message": "chore: fixup DISCLAIMER and NOTICE file (#1741)"
    },
    {
      "commit": "95656679eac1caad13179bd209bbc87a2e8e6002",
      "tree": "b900436b9263148024db0235d754e3adc20b53b8",
      "parents": [
        "c4d7f73e14d27e8f752d32d32b7d2bf35dfc2685"
      ],
      "author": {
        "name": "Emery",
        "email": "80300166+EmryZhang@users.noreply.github.com",
        "time": "Wed Jul 01 23:49:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 23:49:19 2026 +0800"
      },
      "message": "fix: add NOTICE file (#1738)"
    },
    {
      "commit": "c4d7f73e14d27e8f752d32d32b7d2bf35dfc2685",
      "tree": "652a2ec4689f4b467a5cfb4ae5d64958ae11e3a5",
      "parents": [
        "1571e4f34fdad9106d05ab8d8ef59f5efc7fe987"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Jul 01 23:43:42 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Jul 01 23:43:42 2026 +0800"
      },
      "message": "ci: remove automatic snapshot release workflow\n"
    },
    {
      "commit": "1571e4f34fdad9106d05ab8d8ef59f5efc7fe987",
      "tree": "f495d32e3df8ff6fbcbe6d1fbdd338231ca2d534",
      "parents": [
        "f64a3c0bb196de76f4621fdd829298dfc1e2bba1"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Jun 24 00:44:58 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Jun 24 00:44:58 2026 +0800"
      },
      "message": "fix: pass domains in ConditionalRoleManager transitive link check\n"
    },
    {
      "commit": "f64a3c0bb196de76f4621fdd829298dfc1e2bba1",
      "tree": "731b599d01511602d452a67ceed24566ee5012ff",
      "parents": [
        "52c2b032e89f977fe63e118f9d91afb2c5974a7d"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Jun 16 21:46:33 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Jun 16 21:51:19 2026 +0800"
      },
      "message": "feat: quote CSV fields containing commas in SavePolicy\n"
    },
    {
      "commit": "52c2b032e89f977fe63e118f9d91afb2c5974a7d",
      "tree": "ed6faef04353fd3666f1c5af6e87f99fa0645bc7",
      "parents": [
        "6c09ba275d42c0e03c46c1aae132e3254a3594dc"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Jun 16 21:44:47 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Jun 16 21:45:36 2026 +0800"
      },
      "message": "fix: update repo path in README\n"
    },
    {
      "commit": "6c09ba275d42c0e03c46c1aae132e3254a3594dc",
      "tree": "e29b0fd8cc44a9b4b90daf7a1b2c967f4f697a8d",
      "parents": [
        "12ac0c9a42e0245be6da0244737309e369aa4869"
      ],
      "author": {
        "name": "Aurélien Pupier",
        "email": "apupier@ibm.com",
        "time": "Tue Jun 16 15:12:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 21:12:21 2026 +0800"
      },
      "message": "fix: Configure GitHub workflows to use concurrency cancel-in-progress for (#1734)"
    },
    {
      "commit": "12ac0c9a42e0245be6da0244737309e369aa4869",
      "tree": "bb2d122f94444d768b717ab52f977f419a5701a2",
      "parents": [
        "16b0c8954262c7fbb4f4ecc01add73cf86281a8d"
      ],
      "author": {
        "name": "TT",
        "email": "70463940+Herrtian@users.noreply.github.com",
        "time": "Wed May 06 13:15:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 19:15:36 2026 +0800"
      },
      "message": "perf: pre-compile regex in RegexMatch using cached compilation (#1721)\n\nRegexMatch() called regexp.MatchString() which recompiles the pattern on\nevery invocation. Use the existing mustCompileOrGet() cache instead.\n\nRef #1690\n\nCo-authored-by: tengtian \u003ctengtianmoemoe@gamil,com\u003e"
    },
    {
      "commit": "16b0c8954262c7fbb4f4ecc01add73cf86281a8d",
      "tree": "f5c956e357329b6f489266b14e55f5011bfd207b",
      "parents": [
        "74322db8ebd2fa7a9e15e7369db6add65498f83b"
      ],
      "author": {
        "name": "cooronx",
        "email": "54298598+cooronx@users.noreply.github.com",
        "time": "Mon Apr 27 00:58:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 00:58:17 2026 +0800"
      },
      "message": "feat: auto release snapshot versions now (#1728)"
    },
    {
      "commit": "74322db8ebd2fa7a9e15e7369db6add65498f83b",
      "tree": "53a195d76b2867c2de6b61e7db01adbfa0811ca7",
      "parents": [
        "017ae0ea04fa5355fbdda91be64ce6df9feac011"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Apr 24 21:52:57 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Apr 25 17:25:39 2026 +0800"
      },
      "message": "fix: add gFunctionCache boolean option to enforcer\n"
    },
    {
      "commit": "017ae0ea04fa5355fbdda91be64ce6df9feac011",
      "tree": "291fd518e009fb2501940e7f2258fa558b511541",
      "parents": [
        "098508551fe30a208aafc7732b19c779fbc4059d"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Mon Mar 23 20:21:23 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Mon Mar 23 20:21:23 2026 +0800"
      },
      "message": "chore: add config file\n"
    },
    {
      "commit": "098508551fe30a208aafc7732b19c779fbc4059d",
      "tree": "0c832e77cfaf006905cd89395719e7481f34b95c",
      "parents": [
        "0fe9505818b12d66739b8e86887539b3ce57942a"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Fri Mar 13 00:24:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 13 00:24:31 2026 +0800"
      },
      "message": "feat: add .asf.yaml and DISCLAIMER (#1710)"
    },
    {
      "commit": "0fe9505818b12d66739b8e86887539b3ce57942a",
      "tree": "10ed16deb6af99955ba5464aed767dd1fc6638c2",
      "parents": [
        "6cfc46383e0de4c53eeaf0c9551f94563901e1b3"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Jan 25 16:47:55 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Jan 25 16:47:55 2026 +0800"
      },
      "message": "feat: add Explain() API to explain the authorization decisions via LLM API (#1678)\n"
    },
    {
      "commit": "6cfc46383e0de4c53eeaf0c9551f94563901e1b3",
      "tree": "0c3ceaf587b5c59c1b1f7f219c14022f2cd6e000",
      "parents": [
        "f1f03cceae31e8fd83d34e26cd19cad3eb370d8b"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Thu Jan 08 23:46:41 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Thu Jan 08 23:46:41 2026 +0800"
      },
      "message": "feat: integrate default detector into Enforcer (#1665)\n"
    },
    {
      "commit": "f1f03cceae31e8fd83d34e26cd19cad3eb370d8b",
      "tree": "b3c91f32a911bd387fd6c0da361d4f4700dcb1d5",
      "parents": [
        "9324df7a6efd447a7971c85106cddb232ded7d57"
      ],
      "author": {
        "name": "Konnyaku",
        "email": "50104361+AKonnyaku@users.noreply.github.com",
        "time": "Thu Jan 08 12:29:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 08 12:29:00 2026 +0800"
      },
      "message": "fix: improve CI benchmark table in PR (#1663)\n\n"
    },
    {
      "commit": "9324df7a6efd447a7971c85106cddb232ded7d57",
      "tree": "9d6eebf8be7ed323cbeced030646d6ded402d632",
      "parents": [
        "1aba8b9b0d8d2e2049bcfe60f513d45eaa9bead7"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Jan 06 17:56:14 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Jan 06 17:56:14 2026 +0800"
      },
      "message": "fix: fix \"Undefined function g\" error by copying RM fields in Assertion.copy() (#1658)\n"
    },
    {
      "commit": "1aba8b9b0d8d2e2049bcfe60f513d45eaa9bead7",
      "tree": "4c7c8dd9d8a1392e8db0d26d7230e5a436b8bf53",
      "parents": [
        "b190fce9b29ccd37ccc542d88e0df7ad451c337e"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Jan 06 15:49:32 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Jan 06 15:49:32 2026 +0800"
      },
      "message": "feat: add GetAllUsers() API to separate users from roles (#1652)\n"
    },
    {
      "commit": "b190fce9b29ccd37ccc542d88e0df7ad451c337e",
      "tree": "0215a39da36aeef20f90ad1ac1cb4c2c517b8d86",
      "parents": [
        "61c876f439e98aa51523403dd3e6531e9f4463e3"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Jan 04 23:04:00 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Jan 04 23:04:00 2026 +0800"
      },
      "message": "feat: add logger integration to Casbin core enforcement and policy APIs (#1651)\n"
    },
    {
      "commit": "61c876f439e98aa51523403dd3e6531e9f4463e3",
      "tree": "eb760d4d66733cd89a766d16e1ea9eabab013060",
      "parents": [
        "6b688f06f1316d71601208dbdf9b5a3f3324ad62"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Jan 03 23:08:30 2026 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Jan 03 23:08:30 2026 +0800"
      },
      "message": "feat: add DefaultLogger (#1648)\n"
    },
    {
      "commit": "6b688f06f1316d71601208dbdf9b5a3f3324ad62",
      "tree": "43928d80ae9bd9c1d7e101a53d184f5bef1752ff",
      "parents": [
        "2d7173fe9c6fc4c40c3fe163e05ac740760ab72e"
      ],
      "author": {
        "name": "Zhifan Cui",
        "email": "beifengxuanxiao@126.com",
        "time": "Fri Jan 02 21:09:26 2026 +0800"
      },
      "committer": {
        "name": "Zhifan Cui",
        "email": "beifengxuanxiao@126.com",
        "time": "Sat Jan 03 22:08:29 2026 +0800"
      },
      "message": "fix: add new Logger interface (#1639)\n"
    },
    {
      "commit": "2d7173fe9c6fc4c40c3fe163e05ac740760ab72e",
      "tree": "1435adae817ba93bae35a6473d2f0056f0878b0e",
      "parents": [
        "ea5872b2df9fa3598dc5867dbb719b88f2410c6c"
      ],
      "author": {
        "name": "Zhifan Cui",
        "email": "beifengxuanxiao@126.com",
        "time": "Fri Jan 02 00:37:37 2026 +0800"
      },
      "committer": {
        "name": "Zhifan Cui",
        "email": "beifengxuanxiao@126.com",
        "time": "Fri Jan 02 00:37:37 2026 +0800"
      },
      "message": "feat: remove legacy logger implementation (#1638)\n"
    },
    {
      "commit": "ea5872b2df9fa3598dc5867dbb719b88f2410c6c",
      "tree": "0a67547f38723555a8e631607772235f9cab7010",
      "parents": [
        "c4072514d08df83773ea942a3bdc29dc766ef89d"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Thu Jan 01 01:10:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 01 01:10:49 2026 +0800"
      },
      "message": "fix: remove opencollective links in README"
    },
    {
      "commit": "c4072514d08df83773ea942a3bdc29dc766ef89d",
      "tree": "fc41c21410b47bf2200243230bfb5f83f4f65bcf",
      "parents": [
        "53fb4e4f952c1669038ddcea7c7b7d731d895434"
      ],
      "author": {
        "name": "Zhifan Cui",
        "email": "beifengxuanxiao@126.com",
        "time": "Thu Jan 01 01:08:33 2026 +0800"
      },
      "committer": {
        "name": "Zhifan Cui",
        "email": "beifengxuanxiao@126.com",
        "time": "Thu Jan 01 01:08:33 2026 +0800"
      },
      "message": "fix: add DefaultDetector with DFS-based RBAC cycle detection (#1632)\n"
    },
    {
      "commit": "53fb4e4f952c1669038ddcea7c7b7d731d895434",
      "tree": "aaf309d0bc19ea6f8ff640672d2a9b5cf90993be",
      "parents": [
        "0b35dfaa868cf42ce32b1eb5149dfa856260b0b0"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Dec 31 21:05:01 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Dec 31 21:05:01 2025 +0800"
      },
      "message": "feat: remove github-action-benchmark workflow from CI (#1631)\n"
    },
    {
      "commit": "0b35dfaa868cf42ce32b1eb5149dfa856260b0b0",
      "tree": "2f10928ad7a44fc05e8d25ca1b031689f33e2057",
      "parents": [
        "8ed48c5edc2cf76128d1dfe714cdb7df7ed98e5b"
      ],
      "author": {
        "name": "Zhifan Cui",
        "email": "beifengxuanxiao@126.com",
        "time": "Wed Dec 31 20:22:27 2025 +0800"
      },
      "committer": {
        "name": "Zhifan Cui",
        "email": "beifengxuanxiao@126.com",
        "time": "Wed Dec 31 20:22:27 2025 +0800"
      },
      "message": "fix: add Detector interface (#1629)\n"
    },
    {
      "commit": "8ed48c5edc2cf76128d1dfe714cdb7df7ed98e5b",
      "tree": "0d2fc6dfe9566279a8208ee6d73fdbdd17a6ae8a",
      "parents": [
        "f560001334c59afe896b55591c4550e7f37fecd6"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Mon Dec 29 02:22:59 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 29 02:22:59 2025 +0800"
      },
      "message": "chore: update Casbin version to v3 in README"
    },
    {
      "commit": "f560001334c59afe896b55591c4550e7f37fecd6",
      "tree": "d755545b53642b6b53646a099e1f5e6ed56364db",
      "parents": [
        "b3f44909b23dc03bc88504f175fbd890c0cf1761"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 28 12:54:38 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Dec 28 12:54:38 2025 +0800"
      },
      "message": "chore: improve README"
    },
    {
      "commit": "b3f44909b23dc03bc88504f175fbd890c0cf1761",
      "tree": "4bc3cd71ffc9acede188852ce0e4dabbc9c3be96",
      "parents": [
        "0fd3ee80dac487d976cae4cb4344ee01ec63c1a3"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 21 20:42:23 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 21 20:42:23 2025 +0800"
      },
      "message": "fix: disable benchmark comments on merged commits (#1615)\n"
    },
    {
      "commit": "0fd3ee80dac487d976cae4cb4344ee01ec63c1a3",
      "tree": "8b7f75fa5ef4c65171862752cb8bf000c7f27ceb",
      "parents": [
        "4d32aaf15824c9207be385946400df03e01845ba"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 21 18:09:38 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 21 18:09:38 2025 +0800"
      },
      "message": "feat: fix enforcement failure when renaming domain parameter from \u0027dom\u0027 to arbitrary names (#1611)\n"
    },
    {
      "commit": "4d32aaf15824c9207be385946400df03e01845ba",
      "tree": "c3242833edd48ddc87e9b02f979a1c0340293f17",
      "parents": [
        "80dccb76f4a3eb6e9ad04fbf232a1b02dedb4de9"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 21 15:02:31 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 21 15:02:31 2025 +0800"
      },
      "message": "feat: add performance comparison CI for pull requests (#1613)\n"
    },
    {
      "commit": "80dccb76f4a3eb6e9ad04fbf232a1b02dedb4de9",
      "tree": "f07b29db5b698863858dded314b04b6daf64f4d9",
      "parents": [
        "65d40974e5a17d3defd0700fd24ada6a83b06f57"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Dec 19 21:58:52 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Fri Dec 19 21:58:52 2025 +0800"
      },
      "message": "feat: return clear error for invalid JSON when EnableAcceptJsonRequest is enabled (#1610)\n"
    },
    {
      "commit": "65d40974e5a17d3defd0700fd24ada6a83b06f57",
      "tree": "fa5f6c21b23e9a3b7e61d42072b06080c4f94bcd",
      "parents": [
        "cc7d03a05e024f12567f0acf2a3dbad4af9c1b3c"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Dec 13 22:53:26 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Dec 13 22:53:26 2025 +0800"
      },
      "message": "feat: add \"constraint_definition\" section for RBAC policy validation (#1600)\n"
    },
    {
      "commit": "cc7d03a05e024f12567f0acf2a3dbad4af9c1b3c",
      "tree": "083f0cb57caf0c21c4724427f4a83e09f528b500",
      "parents": [
        "3ced5d7f04a5bbfdc439b5dd4c75a3571130e805"
      ],
      "author": {
        "name": "yuhui",
        "email": "166301612+ctfy66@users.noreply.github.com",
        "time": "Sat Dec 13 20:49:50 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Dec 13 20:49:50 2025 +0800"
      },
      "message": "fix: improve line ending for TestCasbinJsGetPermissionForUser() (#1597)\n\n"
    },
    {
      "commit": "3ced5d7f04a5bbfdc439b5dd4c75a3571130e805",
      "tree": "cf8a62c48df1d1a63d470d393599c7f7cc7e256d",
      "parents": [
        "5fc9fd80389499ebc0603c136db5ac98a357bff2"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Dec 10 00:42:44 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Wed Dec 10 00:42:44 2025 +0800"
      },
      "message": "feat!: upgrade to Casbin v3 (#1595)\n\nBREAKING CHANGE: Module path changed from github.com/casbin/casbin/v2 to github.com/casbin/casbin/v3. All import paths must be updated to use v3.\n"
    },
    {
      "commit": "5fc9fd80389499ebc0603c136db5ac98a357bff2",
      "tree": "1de825dd9c1eb7e86190b085e88a21b8f133b41d",
      "parents": [
        "5d3134d00cfcd6af0adb55224ece2e174c8c9d53"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Dec 09 23:44:48 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Dec 09 23:44:48 2025 +0800"
      },
      "message": "feat: remove Travis script and issue templates\n"
    },
    {
      "commit": "5d3134d00cfcd6af0adb55224ece2e174c8c9d53",
      "tree": "51ba43301426c3b348d5767acbe4ea8b27231f9e",
      "parents": [
        "0a136642d96a93a7a0b668bc42e3ec05ec90a330"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Nov 15 01:33:10 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Nov 15 01:33:10 2025 +0800"
      },
      "message": "feat: fix inconsistent backslash handling between matcher literals and CSV-parsed values (#1577)\n"
    },
    {
      "commit": "0a136642d96a93a7a0b668bc42e3ec05ec90a330",
      "tree": "e9ff1cdd8dd070e0c9a31b4ed06bf80f7cb14437",
      "parents": [
        "4b6c4c81ba9ba40193f1e7d48ac9c2f6ef3b51a8"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Nov 15 00:29:08 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Nov 15 00:29:08 2025 +0800"
      },
      "message": "feat: fix stale g() function cache in BuildRoleLinks causing incorrect permissions (#1580)\n"
    },
    {
      "commit": "4b6c4c81ba9ba40193f1e7d48ac9c2f6ef3b51a8",
      "tree": "92874f5ff81d69061023115fe70480bcb17c0be8",
      "parents": [
        "1eef59a0116b31efe66f924e00449f15d3fb457f"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Nov 04 20:29:19 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Tue Nov 04 20:29:19 2025 +0800"
      },
      "message": "feat: improve README\n"
    },
    {
      "commit": "1eef59a0116b31efe66f924e00449f15d3fb457f",
      "tree": "a042efd49b3faf5dc7d2b7203c2e508b8c353407",
      "parents": [
        "bb1e44390d97b9fc9da463a5e690adc96bf33ebe"
      ],
      "author": {
        "name": "Copilot",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Sun Nov 02 11:34:37 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 02 11:34:37 2025 +0800"
      },
      "message": "feat: fix EscapeAssertion (matcher) incorrectly matching p./r. patterns inside quoted strings (#1572)\n\n"
    },
    {
      "commit": "bb1e44390d97b9fc9da463a5e690adc96bf33ebe",
      "tree": "c309aaabc5dd2daf688980380a36e504a2595c05",
      "parents": [
        "91b9cf29fd28f55624ca7b5ae2d495524b88efd1"
      ],
      "author": {
        "name": "Copilot",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Sun Nov 02 01:36:11 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 02 01:36:11 2025 +0800"
      },
      "message": "feat: fix duplicate CI workflow runs and optimize to test only Go 1.21 (#1571)\n\n"
    },
    {
      "commit": "91b9cf29fd28f55624ca7b5ae2d495524b88efd1",
      "tree": "84d1923738468fa59b3ffd6c5838c89157f3d5db",
      "parents": [
        "87e9956dfd0209e5148faa65f6ef06814e8c704f"
      ],
      "author": {
        "name": "Copilot",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Sat Nov 01 14:18:28 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Nov 01 14:18:28 2025 +0800"
      },
      "message": "feat: add OrBAC (Organisation-Based Access Control) model support (#1567)\n\n"
    },
    {
      "commit": "87e9956dfd0209e5148faa65f6ef06814e8c704f",
      "tree": "d1fe996886489736587171fcd9b4c9c1b01025d8",
      "parents": [
        "1ef00acc917aac9da6b5fdef187fa32e97e8a0bc"
      ],
      "author": {
        "name": "Zhendong Liu",
        "email": "148350506+bugoutianzhen123@users.noreply.github.com",
        "time": "Thu Oct 09 23:03:02 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 09 23:03:02 2025 +0800"
      },
      "message": "feat: add ContextEnforcer: add ctx to AddPolicy and other APIs (#1553)\n\n"
    },
    {
      "commit": "1ef00acc917aac9da6b5fdef187fa32e97e8a0bc",
      "tree": "6591c1053a5333a8bcf64ae7b8ca1422273ed8d2",
      "parents": [
        "0c5a5740886f3964361506e92bc5679334ea16f5"
      ],
      "author": {
        "name": "D0000M",
        "email": "62919166+D0000M@users.noreply.github.com",
        "time": "Sun Sep 21 20:55:57 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 21 20:55:57 2025 +0800"
      },
      "message": "feat: enable concurrent transactions using optimistic locking, versioning and conflict detection (#1552)\n\n"
    },
    {
      "commit": "0c5a5740886f3964361506e92bc5679334ea16f5",
      "tree": "703d1d82a7e4f2c80d9f5a5ff66c21a9b77c5d2b",
      "parents": [
        "ea911954aa403f489a13c19a82a9442e35ac67ea"
      ],
      "author": {
        "name": "Zhendong Liu",
        "email": "148350506+bugoutianzhen123@users.noreply.github.com",
        "time": "Thu Sep 18 22:07:51 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 18 22:07:51 2025 +0800"
      },
      "message": "feat: add PBAC model support and test (#1548)\n\n"
    },
    {
      "commit": "ea911954aa403f489a13c19a82a9442e35ac67ea",
      "tree": "4a440cb69babf001816164e141f66bdb6a478c7e",
      "parents": [
        "c2f3635eaf2b5a176916434721421e58ac32cffa"
      ],
      "author": {
        "name": "FAUST.",
        "email": "126341483+FAUST-BENCHOU@users.noreply.github.com",
        "time": "Wed Sep 17 15:37:43 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 17 15:37:43 2025 +0800"
      },
      "message": "feat: add sync to GetRoleManager methods in SyncedEnforcer (#1544)\n\n"
    },
    {
      "commit": "c2f3635eaf2b5a176916434721421e58ac32cffa",
      "tree": "e90b0a10a9be241f2d6ff1f3dfc530655c313abd",
      "parents": [
        "e50e0f2dd8979481790d68e1d04cd49de012badd"
      ],
      "author": {
        "name": "FAUST.",
        "email": "126341483+FAUST-BENCHOU@users.noreply.github.com",
        "time": "Wed Sep 17 15:22:59 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 17 15:22:59 2025 +0800"
      },
      "message": "feat: resolve golangci-lint issues in transaction code (#1545)\n\n"
    },
    {
      "commit": "e50e0f2dd8979481790d68e1d04cd49de012badd",
      "tree": "e4fbff8df88bddcf3a4864ffb4bb539ae4819279",
      "parents": [
        "33e2e501842315865ab105c73b0d6a985df23d0c"
      ],
      "author": {
        "name": "D0000M",
        "email": "62919166+D0000M@users.noreply.github.com",
        "time": "Sun Sep 14 16:10:53 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 14 16:10:53 2025 +0800"
      },
      "message": "feat: add TransactionalEnforcer (#1541)\n\n"
    },
    {
      "commit": "33e2e501842315865ab105c73b0d6a985df23d0c",
      "tree": "a34231bfe98560063888f66c069a54b7327be862",
      "parents": [
        "b75a3e7cc841610a9436e68349ec6af4ffa7af1b"
      ],
      "author": {
        "name": "FAUST.",
        "email": "126341483+FAUST-BENCHOU@users.noreply.github.com",
        "time": "Thu Sep 04 19:40:58 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 04 19:40:58 2025 +0800"
      },
      "message": "feat: add mutex protection for FieldIndexMap to prevent concurrent writes (#1537)\n\n"
    },
    {
      "commit": "b75a3e7cc841610a9436e68349ec6af4ffa7af1b",
      "tree": "51907f040f679ef0b4d8dadf72b88c1aebf05d8a",
      "parents": [
        "c33fbc287d5d8116286647e6e72351d5cc903b50"
      ],
      "author": {
        "name": "yxrxy",
        "email": "1532529704@qq.com",
        "time": "Wed Aug 27 23:38:36 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 27 23:38:36 2025 +0800"
      },
      "message": "feat: add GetImplicitObjectPatternsForUser API to get user\u0027s resource access patterns (#1532)\n\n"
    },
    {
      "commit": "c33fbc287d5d8116286647e6e72351d5cc903b50",
      "tree": "9b56d6095da589d933f349a00eb61372a7761b41",
      "parents": [
        "e92c4ca95f76fe025a047749cef38d472b435ff8"
      ],
      "author": {
        "name": "yxrxy",
        "email": "1532529704@qq.com",
        "time": "Thu Aug 14 23:33:55 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 14 23:33:55 2025 +0800"
      },
      "message": "feat: add GetNamedImplicitUsersForResource() API to support g2 resource roles (#1523)\n\n"
    },
    {
      "commit": "e92c4ca95f76fe025a047749cef38d472b435ff8",
      "tree": "982ace90c5cf282a3a1953975cbc233db1e7c9c0",
      "parents": [
        "5bddec572032391a126459157f6c7564f4161167"
      ],
      "author": {
        "name": "yxrxy",
        "email": "1532529704@qq.com",
        "time": "Tue Aug 12 13:15:17 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 12 13:15:17 2025 +0800"
      },
      "message": "feat: add LBAC model and test case (#1522)\n\n"
    },
    {
      "commit": "5bddec572032391a126459157f6c7564f4161167",
      "tree": "c462f151fbabd9342ed78556b6480bb34e1d7ee8",
      "parents": [
        "5d4a973070592f23ca4fb23a2d8164da1e3b28d9"
      ],
      "author": {
        "name": "Zhendong Liu",
        "email": "148350506+bugoutianzhen123@users.noreply.github.com",
        "time": "Sun Aug 10 21:26:31 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 10 21:26:31 2025 +0800"
      },
      "message": "feat: add Biba model and test case (#1520)\n\n"
    },
    {
      "commit": "5d4a973070592f23ca4fb23a2d8164da1e3b28d9",
      "tree": "7ad6effdb6d6c8986ab9943e814a0fd5014dc938",
      "parents": [
        "a2a6c3aecabb730b741f16ac17d534489c20985a"
      ],
      "author": {
        "name": "yxrxy",
        "email": "1532529704@qq.com",
        "time": "Sat Aug 09 17:10:58 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 09 17:10:58 2025 +0800"
      },
      "message": "feat: improve BLP model example by removing levelMatch() custom function (#1519)\n\n"
    },
    {
      "commit": "a2a6c3aecabb730b741f16ac17d534489c20985a",
      "tree": "36c64e1df6c2ad8680ae45ac9b6b698bbe485f50",
      "parents": [
        "78ef2c179deed40f0d695a9d914fe8f508ea7c5d"
      ],
      "author": {
        "name": "yxrxy",
        "email": "1532529704@qq.com",
        "time": "Fri Aug 08 00:07:40 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 08 00:07:40 2025 +0800"
      },
      "message": "feat: add BLP (Bell-LaPadula) model support and test (#1512)\n\n"
    },
    {
      "commit": "78ef2c179deed40f0d695a9d914fe8f508ea7c5d",
      "tree": "e7de1ac2ae5f96ea67f08ab2bfb80bdd47493c8a",
      "parents": [
        "8701b5ad446f0fd4d563e3cb2aa68345eeee2f91"
      ],
      "author": {
        "name": "yxrxy",
        "email": "1532529704@qq.com",
        "time": "Sun Aug 03 21:52:09 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 03 21:52:09 2025 +0800"
      },
      "message": "feat: ensure consistent maxHierarchyLevel behavior across RBAC functions (#1508)\n\n"
    },
    {
      "commit": "8701b5ad446f0fd4d563e3cb2aa68345eeee2f91",
      "tree": "878f18b12c416b133b5f0ab1a7921d14812416ea",
      "parents": [
        "a58af29ae9d76517da00d751fd84c11ed2540ada"
      ],
      "author": {
        "name": "yxrxy",
        "email": "1532529704@qq.com",
        "time": "Sat Aug 02 14:50:17 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 02 14:50:17 2025 +0800"
      },
      "message": "feat: fix issue that RBAC pattern doesn\u0027t work with conditions (#1506)\n\n"
    },
    {
      "commit": "a58af29ae9d76517da00d751fd84c11ed2540ada",
      "tree": "aa5333a412be2c2a8f496b879bcb0bebbf0b4838",
      "parents": [
        "10e1cbf75e2d0df81ee9d1a03d0d710556afa705"
      ],
      "author": {
        "name": "bugoutianzhen123",
        "email": "148350506+bugoutianzhen123@users.noreply.github.com",
        "time": "Sat Aug 02 13:49:59 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 02 13:49:59 2025 +0800"
      },
      "message": "feat: resolve issue where Enforcer could not retrieve roles from ConditionalRoleManager (#1504)\n\n"
    },
    {
      "commit": "10e1cbf75e2d0df81ee9d1a03d0d710556afa705",
      "tree": "daac86c5bd2ad47500155851b1bd68c4b3e9aa41",
      "parents": [
        "48aadaf619011d1c1eb9c48dbe589d4efcd1d8f1"
      ],
      "author": {
        "name": "Oleksandr Redko",
        "email": "oleksandr.red+github@gmail.com",
        "time": "Fri Aug 01 15:13:38 2025 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 01 20:13:38 2025 +0800"
      },
      "message": "feat: fix typo in the file name (#1505)\n\n"
    },
    {
      "commit": "48aadaf619011d1c1eb9c48dbe589d4efcd1d8f1",
      "tree": "217efb20dd7c701acf71c8625f671a726aa684f4",
      "parents": [
        "85f9da713a738d2d2403b8e5e948f4b2fa0c9ccd"
      ],
      "author": {
        "name": "yxrxy",
        "email": "1532529704@qq.com",
        "time": "Thu Jul 31 20:14:01 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 31 20:14:01 2025 +0800"
      },
      "message": "feat(rbac): resolve GetRolesForUserInDomain issue with conditional role managers (#1503)\n\n"
    },
    {
      "commit": "85f9da713a738d2d2403b8e5e948f4b2fa0c9ccd",
      "tree": "4bd2ac242bd4c83c2babd367f70c4846219a29dd",
      "parents": [
        "992f81819e031523e4cadde2ae84fcfef77f15eb"
      ],
      "author": {
        "name": "D0000M",
        "email": "62919166+D0000M@users.noreply.github.com",
        "time": "Mon Jul 21 20:41:36 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 21 20:41:36 2025 +0800"
      },
      "message": "feat: add ReBAC model test case (#1501)\n\n"
    },
    {
      "commit": "992f81819e031523e4cadde2ae84fcfef77f15eb",
      "tree": "241bb0ecc35ea00a8c37359ecedc95238b177d8e",
      "parents": [
        "f2818d03173236338bd9cc64b9cb0df1a9470284"
      ],
      "author": {
        "name": "D0000M",
        "email": "62919166+D0000M@users.noreply.github.com",
        "time": "Thu Jul 10 14:54:45 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 10 14:54:45 2025 +0800"
      },
      "message": "feat: completely remove domain from RoleManager when calling DeleteDomains (#1496)\n\n"
    },
    {
      "commit": "f2818d03173236338bd9cc64b9cb0df1a9470284",
      "tree": "abe40ec5d1be4352db52818eab6ea422d7a5e725",
      "parents": [
        "c6f6cfcd1a0b22667290b2aba93290a5ee78ca5d"
      ],
      "author": {
        "name": "Yang Tang",
        "email": "tangyang9464@163.com",
        "time": "Sat Jun 21 23:11:39 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 21 23:11:39 2025 +0800"
      },
      "message": "feat: prevent race condition in HasLink with temporary roles (#1491)\n\n"
    },
    {
      "commit": "c6f6cfcd1a0b22667290b2aba93290a5ee78ca5d",
      "tree": "de605753bfef5ffd6c549ddd3937527e4ed20a2a",
      "parents": [
        "79a635bce75f349776d53a6967bd7063f9999206"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Jun 07 16:53:33 2025 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Jun 07 16:53:33 2025 +0800"
      },
      "message": "feat: refactor out abac_test.go\n"
    },
    {
      "commit": "79a635bce75f349776d53a6967bd7063f9999206",
      "tree": "ebc689c74db70057770cd61356c07d7434d3c3a6",
      "parents": [
        "cbeafe9d65b66640346652ab6f4beb4862fa7ca3"
      ],
      "author": {
        "name": "nohup",
        "email": "hi@nohup.life",
        "time": "Wed Jun 04 10:03:31 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 04 10:03:31 2025 +0800"
      },
      "message": "feat: optimize the complexity of `RemovePolicy` from O(n) to O(1) (#1485)\n\n"
    },
    {
      "commit": "cbeafe9d65b66640346652ab6f4beb4862fa7ca3",
      "tree": "7a87187effa3a8829c1577641be677ee4e314424",
      "parents": [
        "133cffdab5d1d4fd4b01da6043f986f4ad164dc6"
      ],
      "author": {
        "name": "Bishoy",
        "email": "Bishoy.Magdy.Adeeb@gmail.com",
        "time": "Sat Apr 19 17:30:00 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 19 23:30:00 2025 +0800"
      },
      "message": "feat: improve SortArray2D() to support variable-length rows and prevent panics (#1481)\n\n"
    },
    {
      "commit": "133cffdab5d1d4fd4b01da6043f986f4ad164dc6",
      "tree": "0d9f781da21bf4854302a43001f2364a83484318",
      "parents": [
        "d4fc6976a9111013a372c6f60953ec92b1d4cf28"
      ],
      "author": {
        "name": "SMALL-head",
        "email": "skyzyc@126.com",
        "time": "Tue Mar 18 08:53:54 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 18 08:53:54 2025 +0800"
      },
      "message": "feat: fix addPolicyWithoutNotify()\u0027s affected value (#1475)\n\n"
    },
    {
      "commit": "d4fc6976a9111013a372c6f60953ec92b1d4cf28",
      "tree": "194b3dbd9cef45349ecb3b9517ed8249c9b66516",
      "parents": [
        "a98973beed58c2236ee453a126970f00d68c0f34"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Dec 28 20:11:50 2024 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sat Dec 28 20:11:50 2024 +0800"
      },
      "message": "feat: upgrade govaluate to v1.3.0\n"
    },
    {
      "commit": "a98973beed58c2236ee453a126970f00d68c0f34",
      "tree": "7c0a3ba99bffd5b6da2700ecb0d5586a70f1bb3f",
      "parents": [
        "bf330b3f9e4498561890da0ff854cf9e8bf6de5e"
      ],
      "author": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 01 22:33:35 2024 +0800"
      },
      "committer": {
        "name": "Yang Luo",
        "email": "hsluoyz@gmail.com",
        "time": "Sun Dec 01 22:33:35 2024 +0800"
      },
      "message": "feat: improve error handling in LoadPolicyArray()\n"
    }
  ],
  "next": "bf330b3f9e4498561890da0ff854cf9e8bf6de5e"
}
