{
 "number": 28690,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/28690",
 "title": "build: Introduce internal kernel library",
 "author": "sedited",
 "author_association": "MEMBER",
 "created_at": "2023-10-20T11:01:03Z",
 "updated_at": "2026-09-16T00:52:31Z",
 "age_days": 1063,
 "draft": false,
 "labels": [
  "Build system"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
 "head_ref": "kernelInternalLib",
 "head_repo": "sedited/bitcoin",
 "head_history": [
  {
   "t": "2023-10-20T14:01:38Z",
   "sha": "e37fbeee96dfcf3fe000e5ac7f2c6f042496da25"
  },
  {
   "t": "2023-10-20T15:00:38Z",
   "sha": "a5e49603f8fab1727c695bc2a783ad6a170c3f98"
  },
  {
   "t": "2023-10-21T10:15:15Z",
   "sha": "d6032c5055e8ca1a038abade036b1510bf79c4ba"
  },
  {
   "t": "2023-10-21T11:00:09Z",
   "sha": "f1b14561a7f1595c426a0ab3c6e487a25a7bbdf9"
  },
  {
   "t": "2023-10-23T20:44:57Z",
   "sha": "1239bdfd1d97dac95ec361a8b47ec0c74b9778e5"
  },
  {
   "t": "2023-10-23T21:48:01Z",
   "sha": "04d7a985b4c58a37dc3f99c05d16810720d60957"
  },
  {
   "t": "2023-10-30T13:07:24Z",
   "sha": "815eaef0e1a30b746aef2a1112bb9b7895d119de"
  },
  {
   "t": "2023-10-31T11:27:06Z",
   "sha": "4052c2d5b9f84289752093981f475ea2ca5b64e7"
  },
  {
   "t": "2023-11-02T13:29:43Z",
   "sha": "1a589335617944b755235597aafc254e28e4acf9"
  },
  {
   "t": "2023-11-09T11:26:43Z",
   "sha": "40e151697d3d1ed594364498d9e6220219d9b545"
  },
  {
   "t": "2023-11-15T11:59:49Z",
   "sha": "de6d79847537cd7d0dfc3e2dd7a57b39b4281b5a"
  },
  {
   "t": "2023-11-29T09:24:02Z",
   "sha": "5a6a0b1693cf739a5e6cc1161160a1d621d215f9"
  },
  {
   "t": "2023-11-30T20:00:14Z",
   "sha": "0af5d4d2d6c4201c7c6f1ba8b497cce23dc9f3ad"
  },
  {
   "t": "2023-12-01T22:41:47Z",
   "sha": "5a235048500a38fae691396cb59f6697032b4deb"
  },
  {
   "t": "2023-12-06T10:09:53Z",
   "sha": "2086d1d4c3f40cce34647995ead4bff22967ffd8"
  },
  {
   "t": "2023-12-06T20:43:58Z",
   "sha": "34970bde23dd87fc0fea5a1970880761f7184774"
  },
  {
   "t": "2024-07-02T12:19:37Z",
   "sha": "1a1e2dac0c657c3ee96c7faf9594aa0bed770702"
  },
  {
   "t": "2024-07-02T12:22:48Z",
   "sha": "1bc6f40c47251faddc4a76d0a51c131c435bbaab"
  },
  {
   "t": "2024-08-28T10:13:17Z",
   "sha": "ffd714accc9e611e4a6caea8a9298e0ef819febb"
  },
  {
   "t": "2024-08-29T12:35:59Z",
   "sha": "f5339148167e48caaa5277b9cfdcfaec82dfb74c"
  },
  {
   "t": "2024-08-29T12:36:51Z",
   "sha": "2e2aca6675fbb0d91a93dcdc2d9cf719f95a084a"
  },
  {
   "t": "2024-09-03T15:51:48Z",
   "sha": "4009a3568855aff215a54533763ba60ac31c473e"
  },
  {
   "t": "2024-09-04T14:57:26Z",
   "sha": "d91296b19a5bbe85f7a43c95737cca10088fa107"
  },
  {
   "t": "2025-05-16T07:51:46Z",
   "sha": "48152c07bf14980a3a9abd94d69a41b7975dafcd"
  },
  {
   "t": "2025-05-16T09:55:03Z",
   "sha": "bb3ac254fc714361ed1be46e5af08ce8a94d9a41"
  },
  {
   "t": "2025-05-16T17:21:25Z",
   "sha": "7e6e43a581c6fbf4f979206b0cabadc5476a35bd"
  },
  {
   "t": "2025-05-29T14:26:59Z",
   "sha": "01a43b24436e0aed7b8f79d3857630a4bf6a0545"
  },
  {
   "t": "2025-05-29T14:27:40Z",
   "sha": "e4d80d721b8336047fcd75eb1891e08ac156a903"
  },
  {
   "t": "2025-07-30T19:04:38Z",
   "sha": "81387424d37650e186535b9868d71c5882bc7b20"
  },
  {
   "t": "2025-08-07T10:17:49Z",
   "sha": "78ed83ba337c97798134f4bd0f9307facde3a59d"
  },
  {
   "t": "2025-10-28T20:36:31Z",
   "sha": "a9ec7cdc0a1f6d4a3bd532649e79459074ed9f3b"
  },
  {
   "t": "2025-11-25T17:07:50Z",
   "sha": "4c387e938015de197860215d94b9c9aee9a82da8"
  },
  {
   "t": "2025-12-09T12:16:54Z",
   "sha": "5656bfa9cab334cf1ab1c1a9956160c708bb15ff"
  },
  {
   "t": "2025-12-09T12:50:05Z",
   "sha": "5f096da0ae22fd60a8d44e49ed3c53269e062cf9"
  },
  {
   "t": "2026-01-13T15:30:57Z",
   "sha": "ba91c516a518dc11de1cea8e21451745c0fcd2ea"
  },
  {
   "t": "2026-01-19T21:00:58Z",
   "sha": "b828264f2b2016edc03095e625df9f79fc4bbe10"
  },
  {
   "t": "2026-02-20T10:23:54Z",
   "sha": "db85819200c3196aa6033ea59d48ddb69f41b520"
  },
  {
   "t": "2026-03-14T09:11:30Z",
   "sha": "1188944c2128fef58bc8d273acb2aba91dd915d5"
  },
  {
   "t": "2026-03-19T11:48:58Z",
   "sha": "fdf80892b305eaee17d50a665e821d356b570640"
  },
  {
   "t": "2026-04-22T10:38:38Z",
   "sha": "6cb62624cd59e74fc2b5d8bffb5c3f149f7d4d2b"
  },
  {
   "t": "2026-04-27T21:40:10Z",
   "sha": "bc54dc869bf22b8ef5dfa71debbf9fdaac5624c6"
  },
  {
   "t": "2026-04-28T10:50:34Z",
   "sha": "2a77b5fde4a7324047e0f8e480071b5b0f72de00"
  },
  {
   "t": "2026-07-09T12:45:07Z",
   "sha": "9005f4dff80a54d7b52ecaded9c340589b7d9738"
  },
  {
   "t": "2026-07-09T15:02:12Z",
   "sha": "89f6d2538ef91679a43d754c7fb0d88d5546a4ef"
  },
  {
   "t": "2026-07-22T11:51:59Z",
   "sha": "9b88b1b64b85e50a8371c611d093b7528ebd6e63"
  },
  {
   "t": "2026-08-28T09:40:40Z",
   "sha": "54ecfc9692253f8b038633e9c4e13959c03fb5c1"
  }
 ],
 "additions": 126,
 "deletions": 122,
 "changed_files": 6,
 "commit_count": 2,
 "size_bucket": "M",
 "mergeable_state": "clean",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {
    "ack": [
     {
      "login": "yuvicc",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-5581135343"
     },
     {
      "login": "w0xlt",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-5144998732"
     }
    ],
    "concept_ack": [
     {
      "login": "stickies-v",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-1734365185"
     },
     {
      "login": "theuni",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-1823568385"
     },
     {
      "login": "kashifs",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-1826843612"
     },
     {
      "login": "pablomartin4btc",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-1766232622"
     },
     {
      "login": "ismaelsadeeq",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-1843292726"
     },
     {
      "login": "Sjors",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-4101603971"
     }
    ],
    "approach_ack": [
     {
      "login": "hebasto",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-1767977106"
     },
     {
      "login": "BrandonOdiwuor",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-3997244903"
     }
    ],
    "stale_ack": [
     {
      "login": "ryanofsky",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-1768762282"
     },
     {
      "login": "janb84",
      "url": "https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-4665911344"
     }
    ]
   },
   "conflicts": [
    {
     "number": 36188,
     "title": "crypto: plug hardware optimized SHA256 into libsecp256k1's context",
     "author": "furszy"
    },
    {
     "number": 36000,
     "title": "validation: prefetch blocks while connecting",
     "author": "l0rinc"
    },
    {
     "number": 35793,
     "title": "Implement BIP 54 (Consensus Cleanup) without mainnet activation",
     "author": "darosior"
    },
    {
     "number": 35037,
     "title": "ipc: support per-address max-connections options on -ipcbind",
     "author": "enirox001"
    },
    {
     "number": 34374,
     "title": "kernel: use struct-based logging and simplify logging interface",
     "author": "stickies-v"
    },
    {
     "number": 29700,
     "title": "kernel, refactor: return error status on all fatal errors",
     "author": "ryanofsky"
    },
    {
     "number": 29491,
     "title": "[EXPERIMENTAL] Schnorr batch verification for blocks",
     "author": "fjahr"
    },
    {
     "number": 26022,
     "title": "Add util::ResultPtr class",
     "author": "ryanofsky"
    },
    {
     "number": 25665,
     "title": "refactor: Add util::Result failure types and ability to merge result values",
     "author": "ryanofsky"
    }
   ]
  }
 },
 "acks_parsed": {
  "hebasto": {
   "kind": "approach_ack",
   "hash": "2086d1d4c3f40cce34647995ead4bff22967ffd8",
   "t": "2023-12-06T15:57:03Z",
   "stale": false
  },
  "stickies-v": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2023-11-16T13:23:03Z",
   "stale": false
  },
  "theuni": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2023-11-22T22:07:39Z",
   "stale": false
  },
  "kashifs": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2023-11-26T17:36:21Z",
   "stale": false
  },
  "ryanofsky": {
   "kind": "ack",
   "hash": "34970bde23dd87fc0fea5a1970880761f7184774",
   "t": "2023-12-06T22:43:00Z",
   "stale": true
  },
  "pablomartin4btc": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2023-12-05T22:34:56Z",
   "stale": false
  },
  "ismaelsadeeq": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2023-12-06T16:58:02Z",
   "stale": false
  },
  "yuvicc": {
   "kind": "ack",
   "hash": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "t": "2026-09-08T07:35:24Z",
   "stale": false
  },
  "janb84": {
   "kind": "ack",
   "hash": "89f6d2538ef91679a43d754c7fb0d88d5546a4ef",
   "t": "2026-07-09T18:58:15Z",
   "stale": true
  },
  "Sjors": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2026-03-21T00:27:24Z",
   "stale": false
  },
  "BrandonOdiwuor": {
   "kind": "approach_ack",
   "hash": "fdf80892b305eaee17d50a665e821d356b570640",
   "t": "2026-03-24T08:33:33Z",
   "stale": false
  },
  "w0xlt": {
   "kind": "ack",
   "hash": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "t": "2026-09-08T17:31:46Z",
   "stale": false
  }
 },
 "acks_tally": {
  "ack": 2,
  "stale_ack": 2,
  "concept_ack": 6,
  "approach_ack": 2,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 2,
  "changes_requested": 0,
  "distinct_reviewers": [
   "BrandonOdiwuor",
   "Sjors",
   "achow101",
   "ajtowns",
   "fanquake",
   "hebasto",
   "ismaelsadeeq",
   "janb84",
   "kashifs",
   "maflcko",
   "pablomartin4btc",
   "ryanofsky",
   "stickies-v",
   "theuni",
   "w0xlt",
   "yuvicc"
  ]
 },
 "signals": {
  "needs_rebase": false,
  "ci_failed": false,
  "mergeable_state": "clean",
  "last_author_activity": "2026-08-28T09:40:48Z",
  "last_reviewer_activity": "2026-09-08T17:31:46Z",
  "last_reviewer": "w0xlt",
  "author_silent_days": 20,
  "waiting_on_author_days": 8,
  "days_since_update": 1
 },
 "refs": {
  "mentioned": [
   27581,
   27989,
   29015,
   29415,
   31375,
   31774,
   31829,
   33077,
   33218,
   34546,
   34848,
   35167
  ],
  "depends_on": [],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 27581,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2023-12-06",
    "title": "net: Continuous ASMap health check"
   },
   {
    "number": 27989,
    "type": "pull",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "refactor: Move sock from util to common"
   },
   {
    "number": 29015,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2024-06-12",
    "title": "kernel: Streamline util library"
   },
   {
    "number": 29415,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-01-12",
    "title": "Broadcast own transactions only via short-lived Tor or I2P connections"
   },
   {
    "number": 31375,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-05-27",
    "title": "multiprocess: Add bitcoin wrapper executable"
   },
   {
    "number": 31774,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-03-13",
    "title": "crypto: Use secure_allocator for `AES256_ctx`"
   },
   {
    "number": 31829,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-07-18",
    "title": "p2p: improve TxOrphanage denial of service bounds"
   },
   {
    "number": 33077,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-08-06",
    "title": "kernel: create monolithic kernel static library"
   },
   {
    "number": 33218,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-10-28",
    "title": "refactor: rename `fees.{h,cpp}` to `fees/block_policy_estimator.{h,cpp}`"
   },
   {
    "number": 34546,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-02-13",
    "title": "kernel: Avoid duplicating symbols in the kernel library"
   },
   {
    "number": 34848,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-03-19",
    "title": "cmake: Migrate away from deprecated SQLite3 target"
   },
   {
    "number": 35167,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "Convert check-deps.sh to python"
   }
  ],
  "conflicts": [
   36188,
   36000,
   35793,
   35037,
   34374,
   29700,
   29491,
   26022,
   25665
  ]
 },
 "stack": {
  "shares_commits_with": [],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [
  "doc/design/libraries.md",
  "src/CMakeLists.txt",
  "src/Makefile.am",
  "src/crypto/hex_base.h",
  "src/kernel/CMakeLists.txt",
  "src/util/CMakeLists.txt",
  "src/util/string.h",
  "test/sanitizer_suppressions/ubsan"
 ],
 "body": "This PR introduces a new `libbitcoin_kernel` internal library. It completes the internal library design as laid out in [doc/design/libraries.md](https://github.com/bitcoin/bitcoin/blob/master/doc/design/libraries.md). Since the `util` library contains a bunch of modules that are not required by the kernel library, a new `kernel_util` library is introduced as well that only consists of the modules required by the kernel library. The external `libbitcoinkernel` library now re-uses the compiled objects from the internal libraries.\n\nThere is a trade-off to this. Since we don't manually export symbols from the kernel library yet, this would make the library unusable if `REDUCE_EXPORTS=ON`. For now this means that the patch here introduces a separate source file list for the external library that gets populated by the source files of its static dependents.",
 "commits": [
  {
   "sha": "6b9f4a5075cec04888a6f378cc77799e74649be0",
   "date": "2026-08-27T12:54:29Z",
   "message": "Introduce internal kernel library\n\nTo facilitate compiling the external kernel library with different\nsymbol visibility, re-use the same source file list from its dependent\ninternal counterpart."
  },
  {
   "sha": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "date": "2026-08-27T12:54:33Z",
   "message": "Update docs and check-deps for util kernel lib"
  }
 ],
 "timeline": [
  {
   "t": "2023-10-20T14:01:38Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "e37fbeee96dfcf3fe000e5ac7f2c6f042496da25"
  },
  {
   "t": "2023-10-20T15:00:38Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "a5e49603f8fab1727c695bc2a783ad6a170c3f98"
  },
  {
   "t": "2023-10-21T10:04:54Z",
   "kind": "review_comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "This change should be accompanied with another one:\n```diff\n--- a/test/sanitizer_suppressions/ubsan\n+++ b/test/sanitizer_suppressions/ubsan\n@@ -62,5 +62,5 @@ shift-base:arith_uint256.cpp\n shift-base:crypto/\n shift-base:hash.cpp\n shift-base:streams.h\n-shift-base:util/bip32.cpp\n+shift-base:common/bip32.cpp\n shift-base:xoroshiro128plusplus.h\n```"
  },
  {
   "t": "2023-10-21T10:15:15Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "d6032c5055e8ca1a038abade036b1510bf79c4ba"
  },
  {
   "t": "2023-10-21T10:46:44Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "To fix the MSVC build, suggesting to apply the diff as follows:\n```diff\n--- a/build_msvc/bitcoin.sln\n+++ b/build_msvc/bitcoin.sln\n@@ -82,6 +82,10 @@ Global\n         {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Debug|x64.Build.0 = Debug|x64\n         {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Release|x64.ActiveCfg = Release|x64\n         {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Release|x64.Build.0 = Release|x64\n+        {A938586F-1016-4C60-9B82-56123264EE14}.Debug|x64.ActiveCfg = Debug|x64\n+        {A938586F-1016-4C60-9B82-56123264EE14}.Debug|x64.Build.0 = Debug|x64\n+        {A938586F-1016-4C60-9B82-56123264EE14}.Release|x64.ActiveCfg = Release|x64\n+        {A938586F-1016-4C60-9B82-56123264EE14}.Release|x64.Build.0 = Release|x64\n         {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Debug|x64.ActiveCfg = Debug|x64\n         {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Debug|x64.Build.0 = Debug|x64\n         {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Release|x64.ActiveCfg = Release|x64\n```"
  },
  {
   "t": "2023-10-21T11:00:09Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "f1b14561a7f1595c426a0ab3c6e487a25a7bbdf9"
  },
  {
   "t": "2023-10-21T14:31:49Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Thanks for the fixes @hebasto! Looks like the remaining test failure is a timeout?"
  },
  {
   "t": "2023-10-21T15:36:19Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nI believe that this PR changes are unrelated to that timeout. See: https://github.com/bitcoin/bitcoin/issues/28703."
  },
  {
   "t": "2023-10-23T20:44:57Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "1239bdfd1d97dac95ec361a8b47ec0c74b9778e5"
  },
  {
   "t": "2023-10-23T21:48:01Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "04d7a985b4c58a37dc3f99c05d16810720d60957"
  },
  {
   "t": "2023-10-27T15:44:02Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "Concept ACK on improving internal library boundaries.\n\n[quoted text omitted]\nI've tested lightly this branch. There still exist a circle dependency between `libbitcoin_crypto` and `libbitcoin_util`. In particular, the former depends on the `memory_cleanse` symbol."
  },
  {
   "t": "2023-10-30T13:07:24Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "815eaef0e1a30b746aef2a1112bb9b7895d119de"
  },
  {
   "t": "2023-10-30T13:08:36Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Thank you for taking a look at @hebasto,\n\nRebased 04d7a985b4c58a37dc3f99c05d16810720d60957 -> 84a8cae915308dcdea6c579e7e24168d3d3eb030 ([kernelInternalLib_0](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_0) -> [kernelInternalLib_1](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_0),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_0..kernelInternalLib_1))\n\n* Resolved conflicts\n\nUpdated 84a8cae915308dcdea6c579e7e24168d3d3eb030 -> 815eaef0e1a30b746aef2a1112bb9b7895d119de ([kernelInternalLib_1](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_1) -> [kernelInternalLib_2](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_2),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_1..kernelInternalLib_2))\n\n* Addressed @hebasto's [comment](https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-1783132896), moved cleanse files to crypto library."
  },
  {
   "t": "2023-10-31T11:27:06Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "4052c2d5b9f84289752093981f475ea2ca5b64e7"
  },
  {
   "t": "2023-10-31T11:27:25Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Updated 815eaef0e1a30b746aef2a1112bb9b7895d119de -> 4052c2d5b9f84289752093981f475ea2ca5b64e7 ([kernelInternalLib_2](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_2) -> [kernelInternalLib_3](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_3),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_2..kernelInternalLib_3))\n* Fixed silent merge conflict."
  },
  {
   "t": "2023-11-02T13:29:43Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "1a589335617944b755235597aafc254e28e4acf9"
  },
  {
   "t": "2023-11-02T13:30:03Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 4052c2d5b9f84289752093981f475ea2ca5b64e7 -> 1a589335617944b755235597aafc254e28e4acf9 ([kernelInternalLib_3](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_3) -> [kernelInternalLib_4](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_4),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_3..kernelInternalLib_4))\n* Fixed merge conflict."
  },
  {
   "t": "2023-11-09T11:26:43Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "40e151697d3d1ed594364498d9e6220219d9b545"
  },
  {
   "t": "2023-11-09T11:27:10Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 1a589335617944b755235597aafc254e28e4acf9 -> 40e151697d3d1ed594364498d9e6220219d9b545 ([kernelInternalLib_4](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_4) -> [kernelInternalLib_5](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_5),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_4..kernelInternalLib_5))\n* Fixed merge conflict."
  },
  {
   "t": "2023-11-15T11:59:49Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "de6d79847537cd7d0dfc3e2dd7a57b39b4281b5a"
  },
  {
   "t": "2023-11-15T16:07:54Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 40e151697d3d1ed594364498d9e6220219d9b545 -> de6d79847537cd7d0dfc3e2dd7a57b39b4281b5a ([kernelInternalLib_5](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_5) -> [kernelInternalLib_6](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_6),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_5..kernelInternalLib_6))\n* Fixed merge conflict."
  },
  {
   "t": "2023-11-16T13:23:03Z",
   "kind": "review",
   "who": "stickies-v",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "de6d79847537cd7d0dfc3e2dd7a57b39b4281b5a",
   "text": "Concept ACK\n\nIt turned out to be a bit less clean than I'd hoped, but I made this branch with a scripted-diff (with a second commit to re-order includes alphabetically) as an alternative to the manual first commit. I'm not sure it makes reviewing easier (and it needs some more manual edits to Makefile, ubsan and an unrelated include), but at least it's a helpful check:\n\nhttps://github.com/bitcoin/bitcoin/compare/master...stickies-v:bitcoin:182d54aed91bfb1c161033642c322a542c8f2e04\n\n```sh\n% git diff 515c9952829256f4c75c82d90f9ea4994b03baee 182d54aed91bfb1c161033642c322a542c8f2e04 --stat\n src/Makefile.am                   | 48 ++++++++++++++++++++++++------------------------\n src/common/sock.h                 |  1 -\n test/sanitizer_suppressions/ubsan |  1 -\n```\n\nnit: in be0b6233ec6cd21e5730380a3bc7f868189dabc9: is there a reason we move `hex_base.{h, cpp}` to `crypto`, and not `consensus`? It seems unrelated to our crypto library."
  },
  {
   "t": "2023-11-16T13:48:26Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Re https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-1734365185\n\n[quoted text omitted]\nCurrently both the `consensus` and `util` library share the `strencodings` files. This is not ideal, because the file will then have to be compiled twice (once for each of them). Further, the `util` library should not be relying on symbols from the consensus library according to the [diagram](https://github.com/bitcoin/bitcoin/blob/master/doc/design/libraries.md). So I split the symbols that both the `consensus` and `utill` library needs from the `strencodings` file and put them into a new file  in the crypto library, which both the util and consensus library depend on."
  },
  {
   "t": "2023-11-22T22:07:39Z",
   "kind": "comment",
   "who": "theuni",
   "assoc": "MEMBER",
   "text": "Concept ACK. Nice.\n\n@stickies-v Thanks! That's super helpful.\n\nI agree that crypto isn't the most ideal home for hex/string functions, but it _does_ actually make it easier to use the lib as a standalone and not have to write your own versions. I don't really see any downside to having them there (no nasty dependencies, nothing stateful, etc) other than being out of place. Curious if @sipa has any specific opposition.\n\nI'd also like to hear what @ryanofsky things about this PR, as he's been involved in many of the layout discussions."
  },
  {
   "t": "2023-11-24T16:54:50Z",
   "kind": "review_comment",
   "who": "stickies-v",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "I think this docstring needs to move as well"
  },
  {
   "t": "2023-11-24T19:56:52Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1404537710,
   "text": "Could just remove it to be honest."
  },
  {
   "t": "2023-11-24T22:12:21Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1404537710,
   "text": "Yeah, will do this on the next push."
  },
  {
   "t": "2023-11-26T17:36:21Z",
   "kind": "comment",
   "who": "kashifs",
   "assoc": "CONTRIBUTOR",
   "text": "Concept ACK. I just reviewed all the code and the design in preparation for the upcoming PR Review Club"
  },
  {
   "t": "2023-11-26T19:03:35Z",
   "kind": "comment",
   "who": "theuni",
   "assoc": "MEMBER",
   "text": "Also ping @hebasto for \ud83d\udc40 as this would require some CMake attention :\\"
  },
  {
   "t": "2023-11-28T16:54:28Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "In commit \"build: Prepare libbitcoin_util for kernel integration\" (515c9952829256f4c75c82d90f9ea4994b03baee)\n\nThe changes in this commit generally make sense, but IMO `bytevectorhash.h` `readwritefile.h` and `sock.h` feel more like general purpose utilities that fit better in with the util library than the common library. I don't think there should be a barrier to calling these functions in kernel code even if they aren't called currently.\n\nThis came before up in #27989. In general, I think it makes sense to move functions from `util` to `common` when those functions shouldn't be called by kernel code, not just when they aren't called by kernel code."
  },
  {
   "t": "2023-11-28T16:58:18Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "test/sanitizer_suppressions/ubsan",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "In commit \"build: Prepare libbitcoin_util for kernel integration\" (515c9952829256f4c75c82d90f9ea4994b03baee)\n\nIs this an unrelated change? Could the reason for it be explained in the commit description?\n\nIn general, I don't really get the commit description. I don't know what \"kernel integration\" is specifically, or why parts of util need to be moved for it to happen."
  },
  {
   "t": "2023-11-28T17:06:10Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "In commit \"build: Introduce libbitcoin_kernel as an internal compilation unit\" (1f98ed5e56230a61b699f669459e39fa101a1ca5)\n\nReason for adding strencodings.h this commit? Can it be explained in the commit description, or does it maybe belong the previous commit?"
  },
  {
   "t": "2023-11-28T17:23:59Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "In commit \"build: Introduce libbitcoin_kernel as an internal compilation unit\" (1f98ed5e56230a61b699f669459e39fa101a1ca5)\n\nIt's surprising to `coins.cpp` moving from common library to the util library instead kernel library. Curious if this is necessary.\n\nIt might be nice to explain general reasoning behind moves in the commit description and call out any special cases.\n\nI'm guessing that certain of these files that are moved to the util library like `coins.cpp` and `kernel/chainparams.cpp` probably could be split up later and mostly moved back to the kernel, since wallet and gui code shouldn't need most of what is in them."
  },
  {
   "t": "2023-11-28T17:30:54Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "In commit \"kernel: De-duplicate source file list\" (de6d79847537cd7d0dfc3e2dd7a57b39b4281b5a)\n\nCan code comment above be updated to explain why util and consensus sources are added to kernel library sources, instead of the kernel library just depending on these libraries?"
  },
  {
   "t": "2023-11-28T17:33:40Z",
   "kind": "review",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "state": "APPROVED",
   "commit": "de6d79847537cd7d0dfc3e2dd7a57b39b4281b5a",
   "text": "Code review ACK de6d79847537cd7d0dfc3e2dd7a57b39b4281b5a. I had a few questions, but most of the changes here seem good, and all look like they should work and be safe."
  },
  {
   "t": "2023-11-28T21:10:22Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1408086308,
   "text": "I think for simple utilities like the `bytevectorhash` module, I kind of agree, since it does not pull in further unwanted deps, nor is used for anything opinionated (and similarly `readwritefile.h`). `sock.h` however includes `compat.h`, which we've previously worked to remove from the kernel header tree, so I think I'll leave that one as is."
  },
  {
   "t": "2023-11-28T22:37:16Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1408135494,
   "text": "I did not want to change the way `libbitcoinkernel_la` is compiled in this pull request. The way it is now, it just follows the same pattern of `libbitcoinconsensus_la` when it comes to defining its sources. So there should be no change in linking behavior of the external `libbitcoinkernel` arising from this patchset. Besides, linking against the static internal libraries probably won't work anyway."
  },
  {
   "t": "2023-11-29T09:24:02Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "5a6a0b1693cf739a5e6cc1161160a1d621d215f9"
  },
  {
   "t": "2023-11-29T09:24:14Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Thank you for the review @ryanofsky!\n\nRebased de6d79847537cd7d0dfc3e2dd7a57b39b4281b5a -> 35ad530fd951ebdc3cb4b36aaa5ca2af77c527e4 ([kernelInternalLib_6](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_6) -> [kernelInternalLib_7](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_7),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_6..kernelInternalLib_7))\n\nUpdated 35ad530fd951ebdc3cb4b36aaa5ca2af77c527e4 -> 511e3fc74cdd03c36764eaf3bb637e7bbe98b335 ([kernelInternalLib_7](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_7) -> [kernelInternalLib_8](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_8),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_7..kernelInternalLib_8))\n\n* Addressed @ryanofsky's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r1408086308), moving `bytevectorhash` and `readwritefile` modules back to the `util` library.\n* Addressed @ryanofsky's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r1408091541), dropped change in the sanitizer suppression that became redundant after https://github.com/bitcoin/bitcoin/pull/28865 was merged.\n* Addressed @ryanofsky's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r1408102615), moved `strencodings` change to the correct commit.\n* Addressed @ryanofsky's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r1408127235), explaining in the commit message why some files are moved from `common` to `util`."
  },
  {
   "t": "2023-11-30T09:45:36Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "unrelated: What is the point of having headers in here? Wouldn't it be better to move them all to the CORE_H list, like for all other libraries (`common/*.h`, `util/*.h`, `node/*.h`, ...)?"
  },
  {
   "t": "2023-11-30T09:48:42Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1410414848,
   "text": "That point is that you can compile a more minimal `libbitcoin_consensus` without having to drag in the full `BITCOIN_CORE_H` and accidentally introduce new stuff into the consensus lib."
  },
  {
   "t": "2023-11-30T09:57:13Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1410414848,
   "text": "[quoted text omitted]\n\nIs it true? I don't think the list is enforced in any way. Nothing in C++ is holding anyone back from including a header with header-only code. Moreover, the current code includes headers that are not listed here:\n\n```\nsrc/consensus/tx_verify.cpp:#include <util/check.h>\nsrc/consensus/tx_verify.cpp:#include <util/moneystr.h>\n```\n\nAlso, it should be possible to include other headers without running into compile or link issues, as long as no new link symbols are required from other libraries, no?"
  },
  {
   "t": "2023-11-30T12:01:15Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1410414848,
   "text": "`tx_verify` is not part of the consensus library though.\n\nEDIT: To be clear, I still have a bad grasp of how our header accounting actually works and I think your point still stands, e.g. you can move any of the headers between `CORE_H` and the source definitions."
  },
  {
   "t": "2023-11-30T12:26:09Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1410414848,
   "text": "Ok, but the following diff on tx_check compiles for me, or am I missing something?\n\n```diff\ndiff --git a/src/consensus/tx_check.cpp b/src/consensus/tx_check.cpp\nindex b3fee1e8b1..1be8686bea 100644\n--- a/src/consensus/tx_check.cpp\n+++ b/src/consensus/tx_check.cpp\n@@ -7,9 +7,14 @@\n #include <consensus/amount.h>\n #include <primitives/transaction.h>\n #include <consensus/validation.h>\n+#include <util/check.h>\n+#include <util/fs.h>\n\n bool CheckTransaction(const CTransaction& tx, TxValidationState& state)\n {\n+Assert(true);\n+fs::path foo{\"bar\"};\n+(void)foo;\n     // Basic checks that don't depend on any context\n     if (tx.vin.empty())\n         return state.Invalid(TxValidationResult::TX_CONSENSUS, \"bad-txns-vin-empty\");"
  },
  {
   "t": "2023-11-30T15:20:25Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1410414848,
   "text": "Mmh, looking at the history, similar things are said in the commit message introducing the headers in `libbitcoin_crypto`: https://github.com/bitcoin/bitcoin/commit/4791b99e2dea0593775a8c75f62c8406d340191e. Maybe a regression was introduced at some point?"
  },
  {
   "t": "2023-11-30T15:23:22Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "src/Makefile.am",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1410414848,
   "text": "Or it is a typo? \"headers\"/\"modules\"? cc @theuni"
  },
  {
   "t": "2023-11-30T20:00:14Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "0af5d4d2d6c4201c7c6f1ba8b497cce23dc9f3ad"
  },
  {
   "t": "2023-11-30T20:01:30Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 511e3fc74cdd03c36764eaf3bb637e7bbe98b335 -> 0af5d4d2d6c4201c7c6f1ba8b497cce23dc9f3ad ([kernelInternalLib_8](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_8) -> [kernelInternalLib_9](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_9),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_8..kernelInternalLib_9))\n\n* Fixed conflict with https://github.com/bitcoin/bitcoin/pull/28451"
  },
  {
   "t": "2023-12-01T15:19:11Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-1823568385 and earlier discussion about libcrypto starting https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-1734365185:\n\n[quoted text omitted]\nJust want to note that `libbitcoin_crypto` and `src/crypto/` are not currently mentioned in the libraries document: https://github.com/bitcoin/bitcoin/blob/master/doc/design/libraries.md. It'd be good to mention `libbitcoin_crypto` there, especially if the intent is for libbitcoin_crypto to be a standalone library that doesn't depend on any other bitcoin libraries, not just a normal internal library using some util functions."
  },
  {
   "t": "2023-12-01T22:41:47Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "5a235048500a38fae691396cb59f6697032b4deb"
  },
  {
   "t": "2023-12-01T22:42:04Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 0af5d4d2d6c4201c7c6f1ba8b497cce23dc9f3ad -> 5a235048500a38fae691396cb59f6697032b4deb ([kernelInternalLib_9](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_9) -> [kernelInternalLib_10](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_10),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_9..kernelInternalLib_10))\n\n* Fixed conflict with https://github.com/bitcoin/bitcoin/pull/28368"
  },
  {
   "t": "2023-12-05T22:34:56Z",
   "kind": "review",
   "who": "pablomartin4btc",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "5a235048500a38fae691396cb59f6697032b4deb",
   "text": "Concept ACK\n\nI'd recommend reading Review Club [notes](https://bitcoincore.reviews/28690) from @stickies-v (thanks!) since those are great, well structured and very useful in order to have a wider context of most of the changes involved."
  },
  {
   "t": "2023-12-05T23:18:58Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/util/string.h",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "In commit \"build: Prepare libbitcoin_util for internal kernel library\" (8b3623769e1307c122959fbdc8c4c93ddd81d5c9)\n\nIt seems like a bug to have a util header depending on a common header. I think I'd suggest splitting up the spanparsing header and renaming it, since right now it is not very focused. Would suggest moving the spanparsing Split function to `src/util/string.h` where it is being used, and probably moving the rest of the functions to `src/script/parsing.h` since they are only used for descriptor and miniscript parsing. Would suggest doing these things in a separate commit to avoid adding complexity to this commit."
  },
  {
   "t": "2023-12-06T09:11:43Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/util/string.h",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1416392404,
   "text": "Good catch, I think though this file also falls in the category of https://github.com/bitcoin/bitcoin/pull/28690#discussion_r1408086308, and since it does not introduce any further potentially controversial headers, I'd rather drop this change altogether. This can be re-visited once/if we have some accounting of the headers."
  },
  {
   "t": "2023-12-06T10:09:53Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "2086d1d4c3f40cce34647995ead4bff22967ffd8"
  },
  {
   "t": "2023-12-06T10:10:09Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Thank you for the review @ryanofsky,\n\nRebased 5a235048500a38fae691396cb59f6697032b4deb -> 2086d1d4c3f40cce34647995ead4bff22967ffd8 ([kernelInternalLib_10](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_10) -> [kernelInternalLib_11](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_11),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_10..kernelInternalLib_11))\n\n* Addressed @ryanofsky's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r1416392404), undo changes to the `spanparsing` module."
  },
  {
   "t": "2023-12-06T15:07:51Z",
   "kind": "review",
   "who": "hebasto",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "2086d1d4c3f40cce34647995ead4bff22967ffd8",
   "text": "I've reviewed the first commit (7651c93749557839f7db3b73eb6df6357649e2d3).\n\nNot counting the symbols from the `libbitcoin_crypto` library, the `libbitcoin_util` has undefined symbols as follows:\n- on the master branch:\n```\n- `ArgsManager::AddArg`\n- `ArgsManager::SelectConfigNetwork`\n- `CKey::SignCompact`\n- `CPubKey::RecoverCompact`\n- `DecodeDestination`\n- `gArgs`\n- `G_TRANSLATION_FUN`\n- `IsValidDestination`\n- `PKHash::PKHash`\n```\n- for 7651c93749557839f7db3b73eb6df6357649e2d3:\n```\n- `G_TRANSLATION_FUN`\n```\n\nIt looks good."
  },
  {
   "t": "2023-12-06T15:57:03Z",
   "kind": "review",
   "who": "hebasto",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "2086d1d4c3f40cce34647995ead4bff22967ffd8",
   "text": "Approach ACK 2086d1d4c3f40cce34647995ead4bff22967ffd8.\n\nStill reviewing the 4th commit (983d0978a973a12c3128b2c8e13b73ed08155e67)."
  },
  {
   "t": "2023-12-06T16:58:02Z",
   "kind": "comment",
   "who": "ismaelsadeeq",
   "assoc": "MEMBER",
   "text": "Concept ACK\nDid a light review this looks good to me"
  },
  {
   "t": "2023-12-06T20:43:58Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "34970bde23dd87fc0fea5a1970880761f7184774"
  },
  {
   "t": "2023-12-06T20:44:06Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 2086d1d4c3f40cce34647995ead4bff22967ffd8 -> 34970bde23dd87fc0fea5a1970880761f7184774 ([kernelInternalLib_11](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_11) -> [kernelInternalLib_12](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_12),  [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_11..kernelInternalLib_12))\n* Fixed conflict with #27581"
  },
  {
   "t": "2023-12-06T21:05:50Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "src/crypto/hex_base.h",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": null,
   "text": "Is this commit needed? I guess there could be issues if the same translation unit is compiled twice?\n\nNot sure if Hex is correct to put into \"crypto\".\n\nIf this isn't needed, maybe leave this for a follow-up?\n\nAn alternative would be to just remove it from the util library and keep it only in consensus?"
  },
  {
   "t": "2023-12-06T22:37:54Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/crypto/hex_base.h",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1417977573,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/28690#discussion_r1417977573\n\n[quoted text omitted]\nNot sure about the current state, but when this was asked previously https://github.com/bitcoin/bitcoin/pull/28690#pullrequestreview-1734365185, I think the idea was to have it in crypto since util and consensus libraries depend on the crypto library."
  },
  {
   "t": "2023-12-06T22:43:00Z",
   "kind": "review",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "state": "APPROVED",
   "commit": "34970bde23dd87fc0fea5a1970880761f7184774",
   "text": "Code review ACK 34970bde23dd87fc0fea5a1970880761f7184774.\n\nMain change since last review is no longer moving the spanparsing.h file here, to avoid making util depend on common. I have since opened a separate PR #29015 to remove spanparsing.h functions from util by splitting it up."
  },
  {
   "t": "2023-12-06T22:49:07Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/crypto/hex_base.h",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1417977573,
   "text": "Re https://github.com/bitcoin/bitcoin/pull/28690#discussion_r1417977573\n[quoted text omitted]\n\nThese functions are used by components of `bitcoin-cli`. The `bitcoin-cli` binary should not have to rely on the consensus library, so I don't think that is an alternative."
  },
  {
   "t": "2023-12-07T07:39:08Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "src/crypto/hex_base.h",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1417977573,
   "text": "Ok, so the reason to put Hex into crypto is because it happens to be convenient at this time? No objection, but it would be good to extend the motivation a bit. I asked if this is needed, and what would happen if the commit was dropped, so it may be good to include a compile/link failure in the motivation, if there is one."
  },
  {
   "t": "2023-12-07T08:16:03Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/crypto/hex_base.h",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d",
   "in_reply_to": 1417977573,
   "text": "If you drop the commit splitting `strencodings` and moving the hex function to the crypto library you get a bunch of errors when compiling the last commit:\n```\n/usr/bin/ld: /usr/bin/ld: DWARF error: invalid or unhandled FORM value: 0x23\nutil/.libs/libbitcoinkernel_la-strencodings.o: in function `SanitizeString[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >, int)':\nstrencodings.cpp:(.text+0x0): multiple definition of `SanitizeString[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >, int)'; /usr/bin/ld: DWARF error: invalid or unhandled FORM value: 0x23\n```\nThis is because the external `libbitcoinkernel` library now re-uses the existing source file lists and will find two `strencodings` files, one from the util sources and one from the consensus sources."
  },
  {
   "t": "2023-12-10T13:24:39Z",
   "kind": "review",
   "who": "hebasto",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "34970bde23dd87fc0fea5a1970880761f7184774",
   "text": "The last commit 34970bde23dd87fc0fea5a1970880761f7184774 effectively extends the `libbitcoinkernel_la_SOURCES` with the following source files:\n- `script/bitcoinconsensus.cpp`\n- `util/bytevectorhash.cpp`\n- `util/readwritefile.cpp`\n- `util/spanparsing.cpp`\n- `util/threadinterrupt.cpp`\n\nThe resulted `libbitcoinkernel.a` and `libbitcoinkernel.so.0.0.0` get bigger, obviously.\n\nThis change is not mentioned in the commit message, and it's not clear whether it is done intentionally."
  },
  {
   "t": "2023-12-10T14:28:20Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Putting this on draft while we figure out the desired contents of the util library in #29015."
  },
  {
   "t": "2024-07-02T12:19:37Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "1a1e2dac0c657c3ee96c7faf9594aa0bed770702"
  },
  {
   "t": "2024-07-02T12:22:48Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "1bc6f40c47251faddc4a76d0a51c131c435bbaab"
  },
  {
   "t": "2024-07-02T12:35:54Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased and updated 34970bde23dd87fc0fea5a1970880761f7184774 -> 1a1e2dac0c657c3ee96c7faf9594aa0bed770702 ([kernelInternalLib_12](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_12) -> [kernelInternalLib_13](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_13))\n\n#29015 got merged in the meantime and there are some implications for this pull request. We decided that the util library may contain a superset of the utilities that the kernel strictly requires.\n\nFor this reason I decided to implement aj's suggestion (https://github.com/bitcoin/bitcoin/pull/29015#issuecomment-1849208455) of introducing a slimmed-down version of the util library for the kernel containing only the components that the kernel requires. I'd appreciate the opinion of previous reviewers of this PR on this new approach. Having some modules in the util library that are not required is not all bad - they might become useful in the future when working with the kernel. On the other hand they do bloat the library and may make it harder in future to use the kernel library on some platforms.\n\nThe external consensus library was also removed while waiting for #29015. I wonder if we should remove the internal consensus library as well and drop its contents into the new internal kernel library.\n\nI will keep this in draft for now - its msvc build is broken and I'm not sure if it is worth going through this exercise again if cmake is going to land soon."
  },
  {
   "t": "2024-08-28T10:13:17Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "ffd714accc9e611e4a6caea8a9298e0ef819febb"
  },
  {
   "t": "2024-08-29T12:35:59Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "f5339148167e48caaa5277b9cfdcfaec82dfb74c"
  },
  {
   "t": "2024-08-29T12:36:51Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "2e2aca6675fbb0d91a93dcdc2d9cf719f95a084a"
  },
  {
   "t": "2024-09-03T15:51:48Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "4009a3568855aff215a54533763ba60ac31c473e"
  },
  {
   "t": "2024-09-04T14:57:26Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "d91296b19a5bbe85f7a43c95737cca10088fa107"
  },
  {
   "t": "2025-05-16T07:51:46Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "48152c07bf14980a3a9abd94d69a41b7975dafcd"
  },
  {
   "t": "2025-05-16T09:55:03Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "bb3ac254fc714361ed1be46e5af08ce8a94d9a41"
  },
  {
   "t": "2025-05-16T16:20:03Z",
   "kind": "review_comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "path": "src/util/CMakeLists.txt",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "in_reply_to": null,
   "text": "Should also be easy to get `bitcoin_clientversion` out of here."
  },
  {
   "t": "2025-05-16T16:38:42Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/util/CMakeLists.txt",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "in_reply_to": 2093340350,
   "text": "I think it is just used for logging. I could just stub it out, like we do for the translation function, but I am also not as sure how important it really is to be printing the clientversion there for these logs."
  },
  {
   "t": "2025-05-16T16:41:43Z",
   "kind": "review_comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "path": "src/util/CMakeLists.txt",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "in_reply_to": 2093340350,
   "text": "Yea, we could probably drop that. There's also `CLIENT_VERSION` fed into the env RNG, which could also likely be dropped."
  },
  {
   "t": "2025-05-16T17:21:25Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "7e6e43a581c6fbf4f979206b0cabadc5476a35bd"
  },
  {
   "t": "2025-05-17T08:36:42Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Undrafting this again after some recent discussions on splitting the kernel library out in the future."
  },
  {
   "t": "2025-05-29T14:26:59Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "01a43b24436e0aed7b8f79d3857630a4bf6a0545"
  },
  {
   "t": "2025-05-29T14:27:40Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "e4d80d721b8336047fcd75eb1891e08ac156a903"
  },
  {
   "t": "2025-05-29T14:27:58Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 7e6e43a581c6fbf4f979206b0cabadc5476a35bd -> e4d80d721b8336047fcd75eb1891e08ac156a903 ([kernelInternalLib_17](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_17) -> [kernelInternalLib_18](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_18), [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_17..kernelInternalLib_18))\n\nFixed confilict with #31375"
  },
  {
   "t": "2025-07-12T14:46:19Z",
   "kind": "comment",
   "who": "yuvicc",
   "assoc": "CONTRIBUTOR",
   "text": "Concept ACK\n\n[quoted text omitted]\nI agree with you, was having a similar thought on the internal library `libbitcoin_consensus` despite removal of external `libbitcoinconsensus` library. If we go this way then we can remove the `libbitcoin_consensus` from the `libraries.md` as well."
  },
  {
   "t": "2025-07-30T19:04:38Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "81387424d37650e186535b9868d71c5882bc7b20"
  },
  {
   "t": "2025-07-30T19:04:45Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased e4d80d721b8336047fcd75eb1891e08ac156a903 -> 81387424d37650e186535b9868d71c5882bc7b20 ([kernelInternalLib_18](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_18) -> [kernelInternalLib_19](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_19), [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_18..kernelInternalLib_19))\n\n* Fixed conflict with #31829"
  },
  {
   "t": "2025-08-07T10:17:49Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "78ed83ba337c97798134f4bd0f9307facde3a59d"
  },
  {
   "t": "2025-08-07T10:17:54Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 81387424d37650e186535b9868d71c5882bc7b20 -> 78ed83ba337c97798134f4bd0f9307facde3a59d ([kernelInternalLib_19](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_19) -> [kernelInternalLib_20](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_20), [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_19..kernelInternalLib_20))\n\nFixed conflict with #33077"
  },
  {
   "t": "2025-10-28T20:36:31Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "a9ec7cdc0a1f6d4a3bd532649e79459074ed9f3b"
  },
  {
   "t": "2025-10-28T20:36:38Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 78ed83ba337c97798134f4bd0f9307facde3a59d -> a9ec7cdc0a1f6d4a3bd532649e79459074ed9f3b ([kernelInternalLib_20](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_20) -> [kernelInternalLib_21](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_21), [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_20..kernelInternalLib_21))\n\n* Fixed conflict with #33218"
  },
  {
   "t": "2025-11-05T08:47:39Z",
   "kind": "comment",
   "who": "yuvicc",
   "assoc": "CONTRIBUTOR",
   "text": "ACK a9ec7cdc0a1f6d4a3bd532649e79459074ed9f3b"
  },
  {
   "t": "2025-11-25T17:07:50Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "4c387e938015de197860215d94b9c9aee9a82da8"
  },
  {
   "t": "2025-11-25T17:08:26Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased a9ec7cdc0a1f6d4a3bd532649e79459074ed9f3b -> 4c387e938015de197860215d94b9c9aee9a82da8 ([kernelInternalLib_21](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_21) -> [kernelInternalLib_22](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_22), [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_21..kernelInternalLib_22))"
  },
  {
   "t": "2025-12-08T16:01:22Z",
   "kind": "review",
   "who": "janb84",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "4c387e938015de197860215d94b9c9aee9a82da8",
   "text": "ACK 4c387e938015de197860215d94b9c9aee9a82da8\n\nLooks good to me, next to several builds & tests, I did a (subsection of a ) Guix build to see if there where any issues with that.  It ran fine, see below.\n\nmy Guix Build Output\n\n**Host architecture:** `aarch64`\n**Commit:** `4c387e938015`\n\n```shell\n0eea1fa55868cf288544de481d7ae5e8285f068074536723e927c20b9ece0518  guix-build-4c387e938015/output/dist-archive/bitcoin-4c387e938015.tar.gz\nbf648f3ef27667e011b2c4547987527111c3d5c286933d092ad82697181c7918  guix-build-4c387e938015/output/x86_64-apple-darwin/SHA256SUMS.part\nda7d979957fb90516e47e1c2a976888e934776eee59f3248be798ffb57f2a781  guix-build-4c387e938015/output/x86_64-apple-darwin/bitcoin-4c387e938015-x86_64-apple-darwin-codesigning.tar.gz\n902f1ed15f8bae87129447d24de0356ec20781a813808e1b0274c815ac89072f  guix-build-4c387e938015/output/x86_64-apple-darwin/bitcoin-4c387e938015-x86_64-apple-darwin-unsigned.tar.gz\n6c23aa0d3c94029af56e0573927f5d634cd32444c5cebf97f405864fb2e30139  guix-build-4c387e938015/output/x86_64-apple-darwin/bitcoin-4c387e938015-x86_64-apple-darwin-unsigned.zip\ndfa686c73f0f54f71d5d81cba48e8d809106ca708c2619b641df412a48d43efa  guix-build-4c387e938015/output/x86_64-w64-mingw32/SHA256SUMS.part\n34f7c1142fcab95318de2c15b10e3ef2f511137c3da196cf275061d2e7921095  guix-build-4c387e938015/output/x86_64-w64-mingw32/bitcoin-4c387e938015-win64-codesigning.tar.gz\n9c6aec8c60d30ef857da2538c939f0d16642bb05f0dd50f2d282ea56c533f2cf  guix-build-4c387e938015/output/x86_64-w64-mingw32/bitcoin-4c387e938015-win64-debug.zip\n45132cb1e70e6930ad4ca85ab9ae6258e61eeee4aef8858a4902e8dceb71db5e  guix-build-4c387e938015/output/x86_64-w64-mingw32/bitcoin-4c387e938015-win64-setup-unsigned.exe\n7bffc2f307b721320cc5358ce79945fe241eec208b86d969affecbe5d14f9667  guix-build-4c387e938015/output/x86_64-w64-mingw32/bitcoin-4c387e938015-win64-unsigned.zip\n```"
  },
  {
   "t": "2025-12-09T12:16:54Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "5656bfa9cab334cf1ab1c1a9956160c708bb15ff"
  },
  {
   "t": "2025-12-09T12:17:01Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 4c387e938015de197860215d94b9c9aee9a82da8 -> 5656bfa9cab334cf1ab1c1a9956160c708bb15ff ([kernelInternalLib_22](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_22) -> [kernelInternalLib_23](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_23), [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_22..kernelInternalLib_23))"
  },
  {
   "t": "2025-12-09T12:21:37Z",
   "kind": "review",
   "who": "janb84",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "5656bfa9cab334cf1ab1c1a9956160c708bb15ff",
   "text": "re ACK 5656bfa9cab334cf1ab1c1a9956160c708bb15ff\n\nchanges since last ACK:\n- rebase"
  },
  {
   "t": "2025-12-09T12:40:38Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "It could make sense to keep `../util/expected.cpp`? Otherwise, iwyu won't run and the file could just be fully deleted?"
  },
  {
   "t": "2025-12-09T12:50:05Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "5f096da0ae22fd60a8d44e49ed3c53269e062cf9"
  },
  {
   "t": "2025-12-09T12:51:24Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThat was not the intention, forgot that it was just empty for now and was expecting a compile error in case I missed it. Fixed it now."
  },
  {
   "t": "2025-12-16T09:00:37Z",
   "kind": "comment",
   "who": "yuvicc",
   "assoc": "CONTRIBUTOR",
   "text": "re-ACK 5f096da0ae22fd60a8d44e49ed3c53269e062cf9\n\nOnly rebased since last review."
  },
  {
   "t": "2025-12-16T16:09:02Z",
   "kind": "review",
   "who": "janb84",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "5f096da0ae22fd60a8d44e49ed3c53269e062cf9",
   "text": "re ACK 5f096da0ae22fd60a8d44e49ed3c53269e062cf9\n\nchanges since last ACK:\n- added expected.cpp to util for IWYU"
  },
  {
   "t": "2026-01-13T15:30:57Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "ba91c516a518dc11de1cea8e21451745c0fcd2ea"
  },
  {
   "t": "2026-01-13T15:31:01Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 5656bfa9cab334cf1ab1c1a9956160c708bb15ff -> ba91c516a518dc11de1cea8e21451745c0fcd2ea ([kernelInternalLib_23](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_23) -> [kernelInternalLib_24](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_24), [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_23..kernelInternalLib_24))\n\n* Resolved conflict with #29415"
  },
  {
   "t": "2026-01-19T21:00:58Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "b828264f2b2016edc03095e625df9f79fc4bbe10"
  },
  {
   "t": "2026-01-19T21:01:05Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased ba91c516a518dc11de1cea8e21451745c0fcd2ea -> b828264f2b2016edc03095e625df9f79fc4bbe10 ([kernelInternalLib_24](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_24) -> [kernelInternalLib_25](https://github.com/TheCharlatan/bitcoin/tree/kernelInternalLib_25), [compare](https://github.com/TheCharlatan/bitcoin/compare/kernelInternalLib_24..kernelInternalLib_25))\n\n* Fixed conflict with https://github.com/bitcoin/bitcoin/pull/34296"
  },
  {
   "t": "2026-02-20T10:23:54Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "db85819200c3196aa6033ea59d48ddb69f41b520"
  },
  {
   "t": "2026-02-20T10:23:59Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased b828264f2b2016edc03095e625df9f79fc4bbe10 -> db85819200c3196aa6033ea59d48ddb69f41b520 ([kernelInternalLib_25](https://github.com/sedited/bitcoin/tree/kernelInternalLib_25) -> [kernelInternalLib_26](https://github.com/sedited/bitcoin/tree/kernelInternalLib_26), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_25..kernelInternalLib_26))\n\n* Fixed conflict with #34546"
  },
  {
   "t": "2026-03-14T09:11:30Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "1188944c2128fef58bc8d273acb2aba91dd915d5"
  },
  {
   "t": "2026-03-14T09:11:35Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased db85819200c3196aa6033ea59d48ddb69f41b520 -> 1188944c2128fef58bc8d273acb2aba91dd915d5 ([kernelInternalLib_26](https://github.com/sedited/bitcoin/tree/kernelInternalLib_26) -> [kernelInternalLib_27](https://github.com/sedited/bitcoin/tree/kernelInternalLib_27), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_26..kernelInternalLib_27))\n\n* Fixed conflict with #31774"
  },
  {
   "t": "2026-03-19T11:48:58Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "fdf80892b305eaee17d50a665e821d356b570640"
  },
  {
   "t": "2026-03-19T11:49:02Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 1188944c2128fef58bc8d273acb2aba91dd915d5 -> fdf80892b305eaee17d50a665e821d356b570640 ([kernelInternalLib_27](https://github.com/sedited/bitcoin/tree/kernelInternalLib_27) -> [kernelInternalLib_28](https://github.com/sedited/bitcoin/tree/kernelInternalLib_28), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_27..kernelInternalLib_28))\n\n* Fixed conflict with #34848"
  },
  {
   "t": "2026-03-21T00:27:24Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "Concept ACK\n\nI whipped up an PoC iPhone app that uses the kernel: https://github.com/Sjors/kernel-i-node\n\nIt's not a serious node, e.g. it fetches blocks from mempool.space. It exercises 100% of the API bindings, though not always in a useful way.\n\nSwitching from master to this PR in that project makes no difference, so that's good."
  },
  {
   "t": "2026-03-24T08:33:33Z",
   "kind": "review",
   "who": "BrandonOdiwuor",
   "assoc": "CONTRIBUTOR",
   "state": "COMMENTED",
   "commit": "fdf80892b305eaee17d50a665e821d356b570640",
   "text": "Approach ACK fdf80892b305eaee17d50a665e821d356b570640 refactoring how the external `libbitcoinkernel` SHARED library is built, to re-use source files from the new internal `libbitcoin_kernel`, `libbitcoin_kernel_util`, and `bitcoin_consensus` STATIC libraries.\n\nTested on `Ubuntu 24.04` with `CMake 3.28.3` and `gcc 13.3.0`\n\n```bash\n$ cmake --build build_dev_mode --target bitcoinkernel --verbose 2>&1 | grep -E 'Linking|bitcoinkernel.so'\n\n[ 16%] Linking CXX static library ../../lib/libbitcoin_crypto.a\n[ 25%] Linking CXX static library libcrc32c.a\n[ 50%] Linking CXX static library libleveldb.a\n[ 50%] Linking CXX static library ../lib/libbitcoin_clientversion.a\n[ 50%] Linking C static library ../lib/libsecp256k1.a\n[100%] Linking CXX shared library ../../lib/libbitcoinkernel.so\n/usr/bin/c++ -fPIC -O2 -g -fstack-reuse=none -fstack-protector-all -fcf-protection=full -fstack-clash-protection -Wl,-z,relro -Wl,-z,now -Wl,-z,separate-code -shared -Wl,-soname,libbitcoinkernel.so -o ../../lib/libbitcoinkernel.so CMakeFiles/bitcoinkernel.dir/bitcoinkernel.cpp.o CMakeFiles/bitcoinkernel.dir/__/chain.cpp.o CMakeFiles/bitcoinkernel.dir/__/coins.cpp.o CMakeFiles/bitcoinkernel.dir/__/compressor.cpp.o CMakeFiles/bitcoinkernel.dir/__/consensus/tx_verify.cpp.o CMakeFiles/bitcoinkernel.dir/__/dbwrapper.cpp.o CMakeFiles/bitcoinkernel.dir/__/deploymentinfo.cpp.o CMakeFiles/bitcoinkernel.dir/__/deploymentstatus.cpp.o CMakeFiles/bitcoinkernel.dir/__/flatfile.cpp.o CMakeFiles/bitcoinkernel.dir/chain.cpp.o CMakeFiles/bitcoinkernel.dir/chainparams.cpp.o CMakeFiles/bitcoinkernel.dir/checks.cpp.o CMakeFiles/bitcoinkernel.dir/coinstats.cpp.o CMakeFiles/bitcoinkernel.dir/context.cpp.o CMakeFiles/bitcoinkernel.dir/cs_main.cpp.o CMakeFiles/bitcoinkernel.dir/disconnected_transactions.cpp.o CMakeFiles/bitcoinkernel.dir/mempool_removal_reason.cpp.o CMakeFiles/bitcoinkernel.dir/__/node/blockstorage.cpp.o CMakeFiles/bitcoinkernel.dir/__/node/chainstate.cpp.o CMakeFiles/bitcoinkernel.dir/__/node/utxo_snapshot.cpp.o CMakeFiles/bitcoinkernel.dir/__/policy/ephemeral_policy.cpp.o CMakeFiles/bitcoinkernel.dir/__/policy/feerate.cpp.o CMakeFiles/bitcoinkernel.dir/__/policy/packages.cpp.o CMakeFiles/bitcoinkernel.dir/__/policy/policy.cpp.o CMakeFiles/bitcoinkernel.dir/__/policy/rbf.cpp.o CMakeFiles/bitcoinkernel.dir/__/policy/settings.cpp.o CMakeFiles/bitcoinkernel.dir/__/policy/truc_policy.cpp.o CMakeFiles/bitcoinkernel.dir/__/pow.cpp.o CMakeFiles/bitcoinkernel.dir/__/script/sigcache.cpp.o CMakeFiles/bitcoinkernel.dir/__/script/solver.cpp.o CMakeFiles/bitcoinkernel.dir/__/signet.cpp.o CMakeFiles/bitcoinkernel.dir/__/txdb.cpp.o CMakeFiles/bitcoinkernel.dir/__/txgraph.cpp.o CMakeFiles/bitcoinkernel.dir/__/txmempool.cpp.o CMakeFiles/bitcoinkernel.dir/__/validation.cpp.o CMakeFiles/bitcoinkernel.dir/__/validationinterface.cpp.o CMakeFiles/bitcoinkernel.dir/__/versionbits.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/chaintype.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/check.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/feefrac.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/fs.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/fs_helpers.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/hasher.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/expected.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/moneystr.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/rbf.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/readwritefile.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/serfloat.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/syserror.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/signalinterrupt.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/threadnames.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/time.cpp.o CMakeFiles/bitcoinkernel.dir/__/util/tokenpipe.cpp.o CMakeFiles/bitcoinkernel.dir/__/logging.cpp.o CMakeFiles/bitcoinkernel.dir/__/random.cpp.o CMakeFiles/bitcoinkernel.dir/__/randomenv.cpp.o CMakeFiles/bitcoinkernel.dir/__/streams.cpp.o CMakeFiles/bitcoinkernel.dir/__/support/lockedpool.cpp.o CMakeFiles/bitcoinkernel.dir/__/sync.cpp.o CMakeFiles/bitcoinkernel.dir/__/arith_uint256.cpp.o CMakeFiles/bitcoinkernel.dir/__/consensus/merkle.cpp.o CMakeFiles/bitcoinkernel.dir/__/consensus/tx_check.cpp.o CMakeFiles/bitcoinkernel.dir/__/hash.cpp.o CMakeFiles/bitcoinkernel.dir/__/primitives/block.cpp.o CMakeFiles/bitcoinkernel.dir/__/primitives/transaction.cpp.o CMakeFiles/bitcoinkernel.dir/__/pubkey.cpp.o CMakeFiles/bitcoinkernel.dir/__/script/interpreter.cpp.o CMakeFiles/bitcoinkernel.dir/__/script/script.cpp.o CMakeFiles/bitcoinkernel.dir/__/script/script_error.cpp.o CMakeFiles/bitcoinkernel.dir/__/uint256.cpp.o ../CMakeFiles/bitcoin_clientversion.dir/clientversion.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/aes.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/chacha20.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/chacha20poly1305.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/hex_base.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/hkdf_sha256_32.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/hmac_sha256.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/hmac_sha512.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/muhash.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/poly1305.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/ripemd160.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/sha1.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/sha256.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/sha256_sse4.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/sha3.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/sha512.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/siphash.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/__/support/cleanse.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/sha256_sse41.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/sha256_avx2.cpp.o ../crypto/CMakeFiles/bitcoin_crypto.dir/sha256_x86_shani.cpp.o ../CMakeFiles/leveldb.dir/leveldb/db/builder.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/c.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/db_impl.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/db_iter.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/dbformat.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/dumpfile.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/filename.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/log_reader.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/log_writer.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/memtable.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/repair.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/table_cache.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/version_edit.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/version_set.cc.o ../CMakeFiles/leveldb.dir/leveldb/db/write_batch.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/block.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/block_builder.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/filter_block.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/format.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/iterator.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/merger.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/table.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/table_builder.cc.o ../CMakeFiles/leveldb.dir/leveldb/table/two_level_iterator.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/arena.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/bloom.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/cache.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/coding.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/comparator.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/crc32c.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/env.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/env_posix.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/filter_policy.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/hash.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/histogram.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/logging.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/options.cc.o ../CMakeFiles/leveldb.dir/leveldb/util/status.cc.o ../CMakeFiles/leveldb.dir/leveldb/helpers/memenv/memenv.cc.o ../CMakeFiles/crc32c.dir/crc32c/src/crc32c.cc.o ../CMakeFiles/crc32c.dir/crc32c/src/crc32c_portable.cc.o ../CMakeFiles/crc32c.dir/crc32c/src/crc32c_sse42.cc.o ../secp256k1/src/CMakeFiles/secp256k1.dir/secp256k1.c.o ../secp256k1/src/CMakeFiles/secp256k1_precomputed.dir/precomputed_ecmult.c.o ../secp256k1/src/CMakeFiles/secp256k1_precomputed.dir/precomputed_ecmult_gen.c.o\n```\n\nInstalling `libbitcoinkernel` component\n\nBuilding internal `libbitcoin_kernel`, `libbitcoin_consensus`, `libbitcoin_kernel_util`, `libbitcoin_util` STATIC libraries\n\n```bash\n$ cmake --build build_dev_mode --target bitcoin_kernel bitcoin_util bitcoin_kernel_util bitcoin_consensus\n```"
  },
  {
   "t": "2026-03-26T13:24:39Z",
   "kind": "review",
   "who": "janb84",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "fdf80892b305eaee17d50a665e821d356b570640",
   "text": "re ACK fdf80892b305eaee17d50a665e821d356b570640\n\nchanges sinds last ack:\n- rebase\n\n[quoted text omitted]\nForm the PR description, this reads if there are issues when compiled with `REDUCE_EXPORTS=ON`. But as per description there is a patch also introduced so it just works (just wanted to clarify this) :\n\nBuild with:\n```terminal\ncmake --preset dev-mode  -DREDUCE_EXPORTS=ON -DWITH_USDT=OFF\n```\n\nCheck exports:\n\n```terminal\nllvm-nm -gU build_dev_mode/lib/libbitcoinkernel.dylib | grep ' _btck_' | head -n 60\n000000000000a160 T _btck_block_copy\n000000000000a1e0 T _btck_block_count_transactions\n0000000000009efc T _btck_block_create\n000000000000a640 T _btck_block_destroy\n000000000000a5d0 T _btck_block_get_hash\n000000000000a2e0 T _btck_block_get_header\n000000000000a248 T _btck_block_get_transaction_at\n000000000000aaec T _btck_block_hash_copy\n000000000000aa80 T _btck_block_hash_create\n000000000000ac48 T _btck_block_hash_destroy\n000000000000abb8 T _btck_block_hash_equals\n000000000000ab58 T _btck_block_hash_to_bytes\n000000000000bf04 T _btck_block_header_copy\n000000000000bce8 T _btck_block_header_create\n000000000000c190 T _btck_block_header_destroy\n000000000000c094 T _btck_block_header_get_bits\n000000000000bf80 T _btck_block_header_get_hash\n000000000000c13c T _btck_block_header_get_nonce\n000000000000bfec T _btck_block_header_get_prev_hash\n000000000000c040 T _btck_block_header_get_timestamp\n000000000000c0e8 T _btck_block_header_get_version\n000000000000a708 T _btck_block_read\n000000000000af38 T _btck_block_spent_outputs_copy\n000000000000afb8 T _btck_block_spent_outputs_count\n000000000000b0d8 T _btck_block_spent_outputs_destroy\n000000000000b02c T _btck_block_spent_outputs_get_transaction_spent_outputs_at\n000000000000accc T _btck_block_spent_outputs_read\n000000000000a35c T _btck_block_to_bytes\n000000000000aa24 T _btck_block_tree_entry_equals\n000000000000a9d0 T _btck_block_tree_entry_get_block_hash\n000000000000a894 T _btck_block_tree_entry_get_block_header\n000000000000a97c T _btck_block_tree_entry_get_height\n0000000000007560 T _btck_block_tree_entry_get_previous\n0000000000007674 T _btck_block_validation_state_copy\n000000000000760c T _btck_block_validation_state_create\n000000000000777c T _btck_block_validation_state_destroy\n00000000000078c8 T _btck_block_validation_state_get_block_validation_result\n0000000000007860 T _btck_block_validation_state_get_validation_mode\n000000000000bc28 T _btck_chain_contains\n000000000000bb70 T _btck_chain_get_by_height\n000000000000bae4 T _btck_chain_get_height\n0000000000006440 T _btck_chain_parameters_copy\n0000000000005f8c T _btck_chain_parameters_create\n00000000000064d4 T _btck_chain_parameters_destroy\n00000000000087e0 T _btck_chainstate_manager_create\n00000000000097c8 T _btck_chainstate_manager_destroy\n000000000000ba44 T _btck_chainstate_manager_get_active_chain\n000000000000974c T _btck_chainstate_manager_get_best_entry\n0000000000009644 T _btck_chainstate_manager_get_block_tree_entry_by_hash\n0000000000009908 T _btck_chainstate_manager_import_blocks\n0000000000007950 T _btck_chainstate_manager_options_create\n00000000000084a0 T _btck_chainstate_manager_options_destroy\n0000000000008600 T _btck_chainstate_manager_options_set_wipe_dbs\n0000000000008430 T _btck_chainstate_manager_options_set_worker_threads_num\n00000000000086f0 T _btck_chainstate_manager_options_update_block_tree_db_in_memory\n0000000000008768 T _btck_chainstate_manager_options_update_chainstate_db_in_memory\n000000000000b8a4 T _btck_chainstate_manager_process_block\n000000000000b930 T _btck_chainstate_manager_process_block_header\n000000000000b6ec T _btck_coin_confirmation_height\n000000000000b50c T _btck_coin_copy\n```\n\n[quoted text omitted]\nI wanted to see how close we are to the design document after this change, so I generated some graphs with cmake graphviz:\n\nMaster:\n\n![Image](https://github.com/user-attachments/assets/35d598bf-7f47-40c8-baad-87e0bc159ad5)\n\nThis PR:\n\n![Image](https://github.com/user-attachments/assets/1514415c-5fc7-4d65-8017-6aff7470bae5)"
  },
  {
   "t": "2026-03-30T22:29:42Z",
   "kind": "review_comment",
   "who": "achow101",
   "assoc": "MEMBER",
   "path": "src/CMakeLists.txt",
   "commit": "fdf80892b305eaee17d50a665e821d356b570640",
   "in_reply_to": null,
   "text": "I would be surprised if `bitcoin-cli` needed to be linked with the kernel. It appears to build without this."
  },
  {
   "t": "2026-03-30T22:30:02Z",
   "kind": "review_comment",
   "who": "achow101",
   "assoc": "MEMBER",
   "path": "src/CMakeLists.txt",
   "commit": "fdf80892b305eaee17d50a665e821d356b570640",
   "in_reply_to": null,
   "text": "It would be surprising to me if `bitcoin-wallet` needs the kernel. It builds without this."
  },
  {
   "t": "2026-04-08T13:28:43Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nIt seems like an alternative to introducing a new library would just be to move parts of `util` not needed by the kernel to the `common` library. I think the main reason `common` exists at this point is to hold code needed by node/wallet/gui code but not needed by the kernel."
  },
  {
   "t": "2026-04-22T10:38:38Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "6cb62624cd59e74fc2b5d8bffb5c3f149f7d4d2b"
  },
  {
   "t": "2026-04-22T10:39:31Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased fdf80892b305eaee17d50a665e821d356b570640 -> 6cb62624cd59e74fc2b5d8bffb5c3f149f7d4d2b ([kernelInternalLib_28](https://github.com/sedited/bitcoin/tree/kernelInternalLib_28) -> [kernelInternalLib_29](https://github.com/sedited/bitcoin/tree/kernelInternalLib_29), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_28..kernelInternalLib_29))\n\n* Addressed @achow101's comments [1](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3012505080), and [2](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3012505974), dropped left over kernel library links where they are no longer needed."
  },
  {
   "t": "2026-04-22T10:42:27Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThat was what this PR originally did, but it did not seem to get much approval at the time, and I switched approach as mentioned in my comment on this PR a few years ago [here](https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-2203050991):\n\n\"https://github.com/bitcoin/bitcoin/pull/29015 got merged in the meantime and there are some implications for this pull request. We decided that the util library may contain a superset of the utilities that the kernel strictly requires. For this reason I decided to implement aj's suggestion (https://github.com/bitcoin/bitcoin/pull/29015#issuecomment-1849208455) of introducing a slimmed-down version of the util library for the kernel containing only the components that the kernel requires. I'd appreciate the opinion of previous reviewers of this PR on this new approach. Having some modules in the util library that are not required is not all bad - they might become useful in the future when working with the kernel. On the other hand they do bloat the library and may make it harder in future to use the kernel library on some platforms.\""
  },
  {
   "t": "2026-04-22T14:22:01Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nI guess I don't understand what specifically is bad about not using parts of `util` in the kernel. Things that aren't unused seem unlikely to be included or linked or cause bloat. And if there are things in `util` that don't belong in the kernel for any reason, they can be moved to `common`. I can understand wanting to have `util` and `kernel_util` libraries(*) and then getting rid of `common` but I don't understand a reason for wanting 3 libraries.\n\n(*) Though I don't think `kernel_util` is a great name for the library if it will also be used by the wallet.\n\n[quoted text omitted]\nInterestingly that comment says it is implementing a suggestion from https://github.com/bitcoin/bitcoin/pull/29015#issuecomment-1849208455, but is not really doing this. The suggestion there is to get rid of `common`, put everything in the `util` namespace and `src/util` but have separate `util` and `util-core` static libraries.\n\nIf that's still the long term goal and this PR is a first step, then that seems good, but in this case maybe `kernel_util` should be called `util-core`"
  },
  {
   "t": "2026-04-22T16:14:25Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nI'm less concerned about bloat, or making it harder to further isolate components for targets that don't have certain OS features. Like previous build system moves and changes motivated by the kernel, this is more about establishing a moat to prevent new entanglements on the build system level. This also was a motivation for the initial introduction of the library and the reason why we have been moving code out of it. For example I never want someone to include the sock header from a kernel source without making it clear something is being moved on the build system level and hopefully further alerting the reviewer.\n\nWith this goal in mind, it doesn't really matter to me if this is achieved as it is here, or by moving the non-kernel parts of util to common, or have a `kernel_util` and `core_util`.  If you have a clear preference and would be willing to move forward and eventually merge one of the approaches, I'd be happy to change to that."
  },
  {
   "t": "2026-04-22T17:16:28Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Hmm, can you explain the sock header example a little bit? I am having some trouble understanding the goal there. It seems like including a socket header would be bad for \"targets that don't have certain OS features\", but you say you are \"less concerned\" about that. Is the concern maybe that you want to prevent high level application code from including lower-level code that is supposed to be abstracted?\n\nI'd be happy with any solution where it's reasonably clear which library code belongs in. Having `common` and `util` where `common` is for things like config file parsing that we don't want in the kernel has seemed like a reasonable approach, but dropping `common` and putting everything in `util` could also be good.\n\nMore specifically, the concern I have about this PR just is the `kernel` references sneaking into the `util` and `wallet` directories. I'd think `kernel` would be a user of `util` and `util` would be oblivious of it, and `wallet` should not depend on `kernel`. So I'm wondering what the goal is exactly."
  },
  {
   "t": "2026-04-22T19:38:00Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nMmh, maybe we are talking past each other a bit. The layering argument is confusing. I'm not really distinguishing between an \"application specific\" and a \"lower level utility\" here, and I'm not sure that even makes sense, or at least it seems like a question of taste. From my point of view, anything that is not required strictly to get the consensus engine working acts on a different semantic level than the kernel code. This includes stuff like sockets, asmap, exec, etc. Preventing developers from trivially entangling this again with some small build system changes is just another way to communicate this in code in a minimally obtrusive manner. We currently (on master) communicate this through the kernel library cmake sources list. However that is insufficient, because the sources list may deviate (by accident) from what we are actually using on the production path, so we re-use the production path list for the external library in this PR. To keep enforcing the split we also split the utilities in a kernel and non-kernel section."
  },
  {
   "t": "2026-04-27T09:52:54Z",
   "kind": "review_comment",
   "who": "ajtowns",
   "assoc": "MEMBER",
   "path": "src/util/CMakeLists.txt",
   "commit": "6cb62624cd59e74fc2b5d8bffb5c3f149f7d4d2b",
   "in_reply_to": null,
   "text": "If we're introducing new libraries, should update doc/design/libraries.md correspondingly.\n\nWeak preference for naming it `bitcoin_util_kernel` or `bitcoin_util_core` instead, fwiw."
  },
  {
   "t": "2026-04-27T13:11:45Z",
   "kind": "review_comment",
   "who": "ajtowns",
   "assoc": "MEMBER",
   "path": "src/CMakeLists.txt",
   "commit": "6cb62624cd59e74fc2b5d8bffb5c3f149f7d4d2b",
   "in_reply_to": null,
   "text": "You're leaving chain.cpp in common and adding it to kernel?"
  },
  {
   "t": "2026-04-27T14:46:00Z",
   "kind": "review_comment",
   "who": "ajtowns",
   "assoc": "MEMBER",
   "path": "src/CMakeLists.txt",
   "commit": "9005f4dff80a54d7b52ecaded9c340589b7d9738",
   "in_reply_to": null,
   "text": "I think you should be updating check-deps.sh as well. It shows up a lot of errors.\n\n```diff\n--- a/contrib/devtools/check-deps.sh\n+++ b/contrib/devtools/check-deps.sh\n@@ -9,6 +9,8 @@ LIBS[cli]=\"libbitcoin_cli.a\"\n LIBS[common]=\"libbitcoin_common.a\"\n LIBS[consensus]=\"libbitcoin_consensus.a\"\n LIBS[crypto]=\"libbitcoin_crypto.a\"\n+LIBS[kernel]=\"libbitcoin_kernel.a\"\n+LIBS[kernel_util]=\"libbitcoin_kernel_util.a\"\n LIBS[node]=\"libbitcoin_node.a\"\n LIBS[util]=\"libbitcoin_util.a\"\n LIBS[wallet]=\"libbitcoin_wallet.a\"\n@@ -20,16 +22,24 @@ ALLOWED_DEPENDENCIES=(\n     \"cli util\"\n     \"common consensus\"\n     \"common crypto\"\n+    \"common kernel_util\"\n     \"common util\"\n     \"consensus crypto\"\n+    \"kernel kernel_util\"\n+    \"kernel consensus\"\n+    \"kernel crypto\"\n+    \"kernel_util crypto\"\n     \"node common\"\n     \"node consensus\"\n     \"node crypto\"\n     \"node kernel\"\n+    \"node kernel_util\"\n     \"node util\"\n     \"util crypto\"\n+    \"util kernel_util\"\n     \"wallet common\"\n     \"wallet crypto\"\n+    \"wallet kernel_util\"\n     \"wallet util\"\n )\n```\n\nI have a python version of check-deps which I'll PR shortly and I think is a bit easier to follow the output of. EDIT: #35167"
  },
  {
   "t": "2026-04-27T14:48:14Z",
   "kind": "review",
   "who": "ajtowns",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "6cb62624cd59e74fc2b5d8bffb5c3f149f7d4d2b",
   "text": "Should be updating the design doc, and it would be nicer if this was reducing the complexity of all our libraries rather than adding another one to menagerie."
  },
  {
   "t": "2026-04-27T15:22:27Z",
   "kind": "comment",
   "who": "ajtowns",
   "assoc": "MEMBER",
   "text": "I couldn't figure out an opinion on splitting things:\n\n - Having bitcoin-cli, bitcoin-tx, and bitcoin-wallet all be fairly small is nice;\n - bitcoin-kernel is already large, but not having extraneous dependencies is definitely nice;\n - Having \"consensus\", \"common\", \"util\", and \"kernel-util\" seems a pretty messy way of achieving those goals"
  },
  {
   "t": "2026-04-27T21:40:10Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "bc54dc869bf22b8ef5dfa71debbf9fdaac5624c6"
  },
  {
   "t": "2026-04-27T21:40:14Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Thank you for the review @ajtowns!\n\n[quoted text omitted]\nHow many developers does it take to establish a library topology... ?\n\n6cb62624cd59e74fc2b5d8bffb5c3f149f7d4d2b -> bc54dc869bf22b8ef5dfa71debbf9fdaac5624c6 ([kernelInternalLib_29](https://github.com/sedited/bitcoin/tree/kernelInternalLib_29) -> [kernelInternalLib_30](https://github.com/sedited/bitcoin/tree/kernelInternalLib_30), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_29..kernelInternalLib_30))\n\n* Addressed @ajtowns' [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3146372940), updated doc/design/libraries.md\n* Addressed @ajtowns' [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3147522057), fixed some incorrect module migrations.\n* Addressed @ajtowns' [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3148139132), updated check-deps with kernel library deps.\n\n`doc/dependencies.md` still has a bunch of internal inconsistencies after this,. We've treated that document as aspirational so far anyway, so I think those are best resolved later."
  },
  {
   "t": "2026-04-28T03:45:04Z",
   "kind": "comment",
   "who": "ajtowns",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nOne. It's when you've got more than that that you have problems? :)\n\n[quoted text omitted]\ndoc/design/libraries.md\n\nIt misses these changes that were added to check-deps:\n\n```\n-libbitcoin_consensus-->libbitcoin_util;\n\n+libbitcoin_common-->libbitcoin_kernel;\n+libbitcoin_util-->libbitcoin_util_kernel;\n+libbitcoin_wallet-->libbitcoin_kernel;\n```\n\nI think you should also add `libbitcoinkernel[libbitcoinkernel]-->libbitcoin_kernel;` and `class [...],libbitcoinkernel bold` (and maybe change the `classDef bold` to include `fill:white` as well)\n\nWith those changes, and removing transitive deps, the full graph after this PR looks like:\n\n```mermaid\n%%{ init : { \"flowchart\" : { \"curve\" : \"basis\" }}}%%\n\ngraph TD;\n\nbitcoin-cli[bitcoin-cli]-->libbitcoin_cli;\n\nbitcoind[bitcoind]-->libbitcoin_node;\nbitcoind[bitcoind]-->libbitcoin_wallet;\n\nbitcoin-qt[bitcoin-qt]-->libbitcoinqt;\n\nbitcoin-wallet[bitcoin-wallet]-->libbitcoin_wallet;\n\nlibbitcoinkernel[libbitcoin-kernel]-->libbitcoin_kernel;\n\nlibbitcoin_cli-->libbitcoin_common;\n\nlibbitcoin_common-->libbitcoin_util;\nlibbitcoin_common-->libbitcoin_kernel;\n\nlibbitcoin_consensus-->libbitcoin_crypto;\n\nlibbitcoin_kernel-->libbitcoin_consensus;\nlibbitcoin_kernel-->libbitcoin_util_kernel;\n\nlibbitcoin_util_kernel-->libbitcoin_crypto;\n\nlibbitcoin_node-->libbitcoin_common;\n\nlibbitcoinqt-->libbitcoin_cli;\nlibbitcoinqt-->libbitcoin_node;\nlibbitcoinqt-->libbitcoin_wallet;\n\nlibbitcoin_util-->libbitcoin_crypto;\nlibbitcoin_util-->libbitcoin_util_kernel;\n\nlibbitcoin_wallet-->libbitcoin_common;\n\nclassDef bold fill:white, stroke-width:2px, font-weight:bold, font-size: smaller;\nclass bitcoin-qt,bitcoind,bitcoin-cli,bitcoin-wallet,libbitcoinkernel bold\n```\n\n[quoted text omitted]\nAdding deps from common/util/wallet to the kernel seems backwards to me. I think what we'd like might be something more like this?\n\n```mermaid\n\n%%{ init : { \"flowchart\" : { \"curve\" : \"basis\" }}}%%\n\ngraph TD;\n\nlibbitcoinkernel[libbitcoinkernel]-->_kernel;\n\nbitcoin-cli[bitcoin-cli]-->_cli;\n\nbitcoind[bitcoind]-->_node;\nbitcoind[bitcoind]-->_wallet;\n\nbitcoin-qt[bitcoin-qt]-->qt;\n\nbitcoin-wallet[bitcoin-wallet]-->_wallet;\n\n_cli-->_kernel_lite;\n_cli-->_util;\n\n_kernel-->_kernel_lite;\n_kernel_lite-->_util_kernel;\n\n_node-->_util;\n_node-->_kernel;\n\nqt-->_cli;\nqt-->_node;\nqt-->_wallet;\n\n_util-->_util_kernel;\n\n_wallet-->_util;\n_wallet-->_kernel_lite;\n\nclassDef bold fill:white, stroke-width:2px, font-weight:bold, font-size: smaller;\nclass bitcoin-qt,bitcoind,bitcoin-cli,bitcoin-wallet,libbitcoinkernel bold\n```\n\nThat's essentially:\n * `consensus` is replaced by `kernel_lite` -- essentially whatever parts of consensus-ish logic needed by bitcoin-wallet or bitcoin-cli\n * `common` is dropped, with code moved to `util` or `node`\n * `crypto` is moved into `util_kernel` (or `util`)\n\nWith the main property being that each lib is included by a different combination of binaries.\n\nOne place where dropping transitive deps is misleading is that the bitcoin-cli, -tx, -util and -wallet utilities currently include the util lib, but not the crypto lib. So rather than merging crypto into util, maybe it would be better to move the modules that depend on crypto out of util and into crypto/kernel/node.\n\nOTOH, I'm not entirely sure how much that matters at all, if the linker just cleans everything up anyway, what are we actually achieving?"
  },
  {
   "t": "2026-04-28T10:48:33Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nYeah, there are some confusing deps there. `kernel_lite` might indeed better describe such a shared component between wallet and kernel. AFAICT many of the components the wallet currently requires from the kernel are policy related, so putting them into something called \"consensus\" would be very confusing. I've had a branch splitting the mempool from the kernel on the back burner for a while now. Maybe it is time to finally work on that?\n\n[quoted text omitted]\nThe impact of all of this is pretty marginal. I laid out my main motivation for it here: https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-4299382958.\n\nUpdated bc54dc869bf22b8ef5dfa71debbf9fdaac5624c6 -> 2a77b5fde4a7324047e0f8e480071b5b0f72de00 ([kernelInternalLib_30](https://github.com/sedited/bitcoin/tree/kernelInternalLib_30) -> [kernelInternalLib_31](https://github.com/sedited/bitcoin/tree/kernelInternalLib_31), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_30..kernelInternalLib_31))\n\n* Addressed @ajtowns' [comment](https://github.com/bitcoin/bitcoin/pull/28690#issuecomment-4332212104), adding some more edges that were documented by check-deps, and a new `libbitcoinkernel` node to the mermaid diagram."
  },
  {
   "t": "2026-04-28T10:50:34Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "2a77b5fde4a7324047e0f8e480071b5b0f72de00"
  },
  {
   "t": "2026-05-21T00:24:47Z",
   "kind": "review_comment",
   "who": "w0xlt",
   "assoc": "CONTRIBUTOR",
   "path": "doc/design/libraries.md",
   "commit": "2a77b5fde4a7324047e0f8e480071b5b0f72de00",
   "in_reply_to": null,
   "text": "micro-nit: Maybe using the actual library names make the text clearer ?\n\n```diff\n-**Dependency graph**. Arrows show linker symbol dependencies. *Crypto* lib depends on nothing. *Util* lib is depended on by everything. *Kernel* lib depends only on consensus, crypto, and util.\n+**Dependency graph**. Arrows show linker symbol dependencies between Bitcoin Core libraries. *libbitcoin_crypto* does not depend on other Bitcoin Core libraries. *libbitcoin_util_kernel* is shown as a dependency of *libbitcoin_kernel* and *libbitcoin_util*. Among these libraries, *libbitcoin_kernel* depends only on *libbitcoin_consensus*, *libbitcoin_crypto*, and *libbitcoin_util_kernel*.\n```"
  },
  {
   "t": "2026-05-21T00:25:07Z",
   "kind": "review",
   "who": "w0xlt",
   "assoc": "CONTRIBUTOR",
   "state": "COMMENTED",
   "commit": "2a77b5fde4a7324047e0f8e480071b5b0f72de00",
   "text": "ACK 2a77b5fde4a7324047e0f8e480071b5b0f72de00"
  },
  {
   "t": "2026-07-08T17:56:37Z",
   "kind": "comment",
   "who": "janb84",
   "assoc": "MEMBER",
   "text": "guix Build Output\n\n**Host architecture:** `aarch64`\n**Commit:** `2a77b5fde4a7`\n\n```shell\nd667912ea16159b317a47952b395ea31cbb54f31e4c055436f577d3d026aae94  guix-build-2a77b5fde4a7/output/aarch64-linux-gnu/SHA256SUMS.part\n3b77aa5a5b7f59bd7d21600b4ca77e29c78be795bd43593276ea73c4c85881e3  guix-build-2a77b5fde4a7/output/aarch64-linux-gnu/bitcoin-2a77b5fde4a7-aarch64-linux-gnu-debug.tar.gz\naa23301f0b7cb1bd3ff5f098788365b5b5124d415953204c6ad3dc36c686ed1a  guix-build-2a77b5fde4a7/output/aarch64-linux-gnu/bitcoin-2a77b5fde4a7-aarch64-linux-gnu.tar.gz\n0b3e5cc5d5af2dc30dc00e39785d2668fe8a3e64fc5cbf7fcf6cdea350cd65f3  guix-build-2a77b5fde4a7/output/arm-linux-gnueabihf/SHA256SUMS.part\nad9735862c6e843e13fdfda35187ec47d55a4e00d2485ef740f4bf6d1ef27e9e  guix-build-2a77b5fde4a7/output/arm-linux-gnueabihf/bitcoin-2a77b5fde4a7-arm-linux-gnueabihf-debug.tar.gz\n996961f05af79f2cef86cf8490f9dff54939811040fff593c2f92114c6951272  guix-build-2a77b5fde4a7/output/arm-linux-gnueabihf/bitcoin-2a77b5fde4a7-arm-linux-gnueabihf.tar.gz\n125d64d045097eabd849ccc1a705d13c08112f7a43a8234d9079ebc9620ed97e  guix-build-2a77b5fde4a7/output/arm64-apple-darwin/SHA256SUMS.part\nb5fa00b4602448847f6995a7d72d9bc8d821ab9311213b61b88534f33f5dfc5a  guix-build-2a77b5fde4a7/output/arm64-apple-darwin/bitcoin-2a77b5fde4a7-arm64-apple-darwin-codesigning.tar.gz\nd6ebb75567b2fa322c8cbc24c296a0a403acde3ab7cb963c79bdca00f063bfad  guix-build-2a77b5fde4a7/output/arm64-apple-darwin/bitcoin-2a77b5fde4a7-arm64-apple-darwin-unsigned.tar.gz\nf170c9cad42c3d0a80afbb179c5d7e3e17d02283a550b5e9d4889d4bc40deb6c  guix-build-2a77b5fde4a7/output/arm64-apple-darwin/bitcoin-2a77b5fde4a7-arm64-apple-darwin-unsigned.zip\ne67abddea95393cc11459efc3a293c16762a872d291b31bf25941dc87196141e  guix-build-2a77b5fde4a7/output/dist-archive/bitcoin-2a77b5fde4a7.tar.gz\n15ee5f80af941a1e127d15ecd30b37f01745ac7ecf703a2a3edc59f0f7f6c613  guix-build-2a77b5fde4a7/output/powerpc64-linux-gnu/SHA256SUMS.part\na6cce2b24b6236824657280883b64c6fb191511bfd0fcf7092f080583f0b8d8d  guix-build-2a77b5fde4a7/output/powerpc64-linux-gnu/bitcoin-2a77b5fde4a7-powerpc64-linux-gnu-debug.tar.gz\n79a05ec9e8812938c6d8521f5c731ed459030f36bbe3e3f53036677b3e3dde00  guix-build-2a77b5fde4a7/output/powerpc64-linux-gnu/bitcoin-2a77b5fde4a7-powerpc64-linux-gnu.tar.gz\nbcbca61c078860065859bd213a519ed738326e0512052adf1f9803ca9efa93d3  guix-build-2a77b5fde4a7/output/riscv64-linux-gnu/SHA256SUMS.part\n7ef05f344cf7a1e74a1a9735acb57ee2b7cb905ebca7c25422fcf29f04b66a1f  guix-build-2a77b5fde4a7/output/riscv64-linux-gnu/bitcoin-2a77b5fde4a7-riscv64-linux-gnu-debug.tar.gz\nd9562476d1eb2d1ea2ceb01f8b9a1ed4b94451f549640434b2b784805fb349c6  guix-build-2a77b5fde4a7/output/riscv64-linux-gnu/bitcoin-2a77b5fde4a7-riscv64-linux-gnu.tar.gz\n1da52e5a9803c523ae9b9d5b51a46c4b7abeb49ab5f297eeb9bf8bcd0bf1a5b7  guix-build-2a77b5fde4a7/output/x86_64-apple-darwin/SHA256SUMS.part\nf2975a5d69bd4d276cd0f3f69d488ffef0b35edba8593828411ece200d2aaf60  guix-build-2a77b5fde4a7/output/x86_64-apple-darwin/bitcoin-2a77b5fde4a7-x86_64-apple-darwin-codesigning.tar.gz\nc467d7944ab85964a187b66d721778544aa203557f1214b4c2517d7b944cba5f  guix-build-2a77b5fde4a7/output/x86_64-apple-darwin/bitcoin-2a77b5fde4a7-x86_64-apple-darwin-unsigned.tar.gz\n65e0318427d8791ecd68adcc3d9c29a80be55f9ccc6fbcf9c75387c64e639e5e  guix-build-2a77b5fde4a7/output/x86_64-apple-darwin/bitcoin-2a77b5fde4a7-x86_64-apple-darwin-unsigned.zip\n0aed2bd41ad8c2be0119c558bed7c0106517dff6a9bb68770e0191e0c350b5bd  guix-build-2a77b5fde4a7/output/x86_64-linux-gnu/SHA256SUMS.part\nc20cb090359666544d845414e59ae0699b078a1b98916d302e4709a4fa42293f  guix-build-2a77b5fde4a7/output/x86_64-linux-gnu/bitcoin-2a77b5fde4a7-x86_64-linux-gnu-debug.tar.gz\nfbabfe806212d3d4cfa4c32e08f65190f95c4b0ed5621121a4da4a064f710d34  guix-build-2a77b5fde4a7/output/x86_64-linux-gnu/bitcoin-2a77b5fde4a7-x86_64-linux-gnu.tar.gz\n943c115fa486d11267dbed15b148fb0f5b7938ed44e966776c78d61d7dc3f3e6  guix-build-2a77b5fde4a7/output/x86_64-w64-mingw32/SHA256SUMS.part\nd817c68fbc46873a237a188670495bcb39ecce2caf2053e2726896ad52facd33  guix-build-2a77b5fde4a7/output/x86_64-w64-mingw32/bitcoin-2a77b5fde4a7-win64-codesigning.tar.gz\n4d44c2b0e73f80b0b752ccdd1742ae227de39d9145a776615cb68e6fbd3c16e0  guix-build-2a77b5fde4a7/output/x86_64-w64-mingw32/bitcoin-2a77b5fde4a7-win64-debug.zip\n9e62d012ed3fea0cfae6fb2014f160a69c42f74ce8994a84a673083f6b24c646  guix-build-2a77b5fde4a7/output/x86_64-w64-mingw32/bitcoin-2a77b5fde4a7-win64-setup-unsigned.exe\nc2674815c10f5d207cda075823fd4a2ff2c4f6ec79e45ffae33adee03fef4786  guix-build-2a77b5fde4a7/output/x86_64-w64-mingw32/bitcoin-2a77b5fde4a7-win64-unsigned.zip\n```"
  },
  {
   "t": "2026-07-08T20:29:57Z",
   "kind": "review_comment",
   "who": "janb84",
   "assoc": "MEMBER",
   "path": "src/CMakeLists.txt",
   "commit": "2a77b5fde4a7324047e0f8e480071b5b0f72de00",
   "in_reply_to": null,
   "text": "Shouldn't `bitcoin_kernel`  also be added to `target_link_libraries(bitcoin_common)` so that there is no need to do a per-executable workaround?"
  },
  {
   "t": "2026-07-09T12:44:06Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "src/CMakeLists.txt",
   "commit": "2a77b5fde4a7324047e0f8e480071b5b0f72de00",
   "in_reply_to": 3547057446,
   "text": "~Mmh, I don't think so. For example bitcoin-wallet links common, but doesn't link the kernel library.~\n\nEDIT: Sorry, I should have looked at this properly before commenting. Yes, makes sense."
  },
  {
   "t": "2026-07-09T12:45:07Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "9005f4dff80a54d7b52ecaded9c340589b7d9738"
  },
  {
   "t": "2026-07-09T12:45:32Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 2a77b5fde4a7324047e0f8e480071b5b0f72de00 -> 9005f4dff80a54d7b52ecaded9c340589b7d9738 ([kernelInternalLib_31](https://github.com/sedited/bitcoin/tree/kernelInternalLib_31) -> [kernelInternalLib_32](https://github.com/sedited/bitcoin/tree/kernelInternalLib_32), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_31..kernelInternalLib_32))"
  },
  {
   "t": "2026-07-09T13:41:25Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "Looks like the CI fails with:\n\n```\nCross compiling ....................... TRUE, for Generic,\nC++ compiler .......................... GNU 16.1.0, /opt/riscv-ilp32/bin/riscv32-unknown-elf-g++\nCMAKE_BUILD_TYPE ...................... RelWithDebInfo\nPreprocessor defined macros ...........\nC++ compiler flags .................... -O2 -g -std=c++20 -fno-extended-identifiers -fmacro-prefix-map=/home/runner/work/_temp/src=. -fstack-reuse=none -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -Wstack-protector -fstack-protector-all -fstack-clash-protection -Wall -Wextra -Wformat -Wformat-security -Wvla -Wredundant-decls -Wdate-time -Wduplicated-branches -Wduplicated-cond -Wlogical-op -Woverloaded-virtual -Wsuggest-override -Wimplicit-fallthrough -Wunreachable-code -Wbidi-chars=any -Wundef -Wleading-whitespace=spaces -Wtrailing-whitespace=any -Wno-unused-parameter\nLinker flags .......................... -O2 -g -fstack-reuse=none -fstack-protector-all -fstack-clash-protection -Wl,-z,separate-code\n\nNOTE: The summary above may not exactly match the final applied build flags\n      if any additional CMAKE_* or environment variables have been modified.\n      To see the exact flags applied, build with the --verbose option.\n\nTreat compiler warnings as errors ..... ON\nUse ccache for compiling .............. ON\n\n-- Configuring done (3.9s)\nCMake Error at src/CMakeLists.txt:127 (target_link_libraries):\n  Target \"bitcoin_kernel\" links to:\n\n    Boost::headers\n\n  but the target was not found.  Possible reasons include:\n\n    * There is a typo in the target name.\n    * A find_package call is missing for an IMPORTED target.\n    * An ALIAS target is missing.\n\nCMake Generate step failed.  Build files cannot be regenerated correctly.\n-- Generating done (0.0s)"
  },
  {
   "t": "2026-07-09T15:02:12Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "89f6d2538ef91679a43d754c7fb0d88d5546a4ef"
  },
  {
   "t": "2026-07-09T15:02:19Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Updated 9005f4dff80a54d7b52ecaded9c340589b7d9738 -> 89f6d2538ef91679a43d754c7fb0d88d5546a4ef ([kernelInternalLib_32](https://github.com/sedited/bitcoin/tree/kernelInternalLib_32) -> [kernelInternalLib_33](https://github.com/sedited/bitcoin/tree/kernelInternalLib_33), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_32..kernelInternalLib_33))\n\n* Fixed previously silent merge conflict.\n* Addressed @janb84's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3547057446), cleaned up transitive library declarations a bit."
  },
  {
   "t": "2026-07-09T18:58:15Z",
   "kind": "review",
   "who": "janb84",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "89f6d2538ef91679a43d754c7fb0d88d5546a4ef",
   "text": "re ACK 89f6d2538ef91679a43d754c7fb0d88d5546a4ef\n\nThanks for taking my suggestion."
  },
  {
   "t": "2026-07-21T19:44:16Z",
   "kind": "review_comment",
   "who": "w0xlt",
   "assoc": "CONTRIBUTOR",
   "path": "src/kernel/CMakeLists.txt",
   "commit": "89f6d2538ef91679a43d754c7fb0d88d5546a4ef",
   "in_reply_to": null,
   "text": "Would `PROJECT_SOURCE_DIR` be more appropriate here? When Bitcoin Core is used as a subproject, `CMAKE_SOURCE_DIR` points to the parent project\u2019s source directory.\n\n```diff\ndiff --git a/src/kernel/CMakeLists.txt b/src/kernel/CMakeLists.txt\nindex 265381ea88..7f67bc9d64 100644\n--- a/src/kernel/CMakeLists.txt\n+++ b/src/kernel/CMakeLists.txt\n@@ -18,17 +18,17 @@ add_library(bitcoinkernel\n\n get_target_property(kernel_sources bitcoin_kernel SOURCES)\n foreach(src ${kernel_sources})\n-  target_sources(bitcoinkernel PRIVATE \"${CMAKE_SOURCE_DIR}/src/${src}\")\n+  target_sources(bitcoinkernel PRIVATE \"${PROJECT_SOURCE_DIR}/src/${src}\")\n endforeach()\n\n get_target_property(util_sources bitcoin_util_kernel SOURCES)\n foreach(src ${util_sources})\n-  target_sources(bitcoinkernel PRIVATE \"${CMAKE_SOURCE_DIR}/src/util/${src}\")\n+  target_sources(bitcoinkernel PRIVATE \"${PROJECT_SOURCE_DIR}/src/util/${src}\")\n endforeach()\n\n get_target_property(consensus_sources bitcoin_consensus SOURCES)\n foreach(src ${consensus_sources})\n-  target_sources(bitcoinkernel PRIVATE \"${CMAKE_SOURCE_DIR}/src/${src}\")\n+  target_sources(bitcoinkernel PRIVATE \"${PROJECT_SOURCE_DIR}/src/${src}\")\n endforeach()\n\n # Compiler warnings that apply only to the kernel and its dependencies.\n```"
  },
  {
   "t": "2026-07-21T20:13:34Z",
   "kind": "review_comment",
   "who": "w0xlt",
   "assoc": "CONTRIBUTOR",
   "path": "src/util/CMakeLists.txt",
   "commit": "89f6d2538ef91679a43d754c7fb0d88d5546a4ef",
   "in_reply_to": null,
   "text": "It looks like `readwritefile.cpp` and `serfloat.cpp`, which aren\u2019t used by `bitcoin_kernel`, may have been left in `bitcoin_util_kernel` during the target split.\n\n```diff\ndiff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt\nindex f4e5593f32..51faefa4bb 100644\n--- a/src/util/CMakeLists.txt\n+++ b/src/util/CMakeLists.txt\n@@ -13,8 +13,6 @@ add_library(bitcoin_util_kernel STATIC EXCLUDE_FROM_ALL\n   hasher.cpp\n   moneystr.cpp\n   rbf.cpp\n-  readwritefile.cpp\n-  serfloat.cpp\n   signalinterrupt.cpp\n   syserror.cpp\n   thread.cpp\n@@ -44,6 +42,8 @@ add_library(bitcoin_util STATIC EXCLUDE_FROM_ALL\n   bip32.cpp\n   bytevectorhash.cpp\n   exec.cpp\n+  readwritefile.cpp\n+  serfloat.cpp\n   sock.cpp\n   strencodings.cpp\n   string.cpp\n```"
  },
  {
   "t": "2026-07-22T11:51:59Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "9b88b1b64b85e50a8371c611d093b7528ebd6e63"
  },
  {
   "t": "2026-07-22T11:52:03Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Updated 89f6d2538ef91679a43d754c7fb0d88d5546a4ef -> 9b88b1b64b85e50a8371c611d093b7528ebd6e63 ([kernelInternalLib_33](https://github.com/sedited/bitcoin/tree/kernelInternalLib_33) -> [kernelInternalLib_34](https://github.com/sedited/bitcoin/tree/kernelInternalLib_34), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_33..kernelInternalLib_34))\n\n* Addressed @w0xlt's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3625215558), switched to `PROJECT_SOURCE_DIR`.\n* Addressed @w0xlt's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3625397001), moved readwritefile and serfloat out of the kernel util lbrary."
  },
  {
   "t": "2026-07-22T21:29:27Z",
   "kind": "review_comment",
   "who": "w0xlt",
   "assoc": "CONTRIBUTOR",
   "path": "doc/design/libraries.md",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "in_reply_to": null,
   "text": "nit: Does `libbitcoinkernel` actually link against `libbitcoin_kernel`, or does CMake just reuse and recompile its source list?"
  },
  {
   "t": "2026-07-22T21:40:44Z",
   "kind": "review_comment",
   "who": "w0xlt",
   "assoc": "CONTRIBUTOR",
   "path": "doc/design/libraries.md",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "in_reply_to": null,
   "text": "nit:\n```diff\ndiff --git a/doc/design/libraries.md b/doc/design/libraries.md\nindex d8210a51ce..b0a85464d2 100644\n--- a/doc/design/libraries.md\n+++ b/doc/design/libraries.md\n@@ -112,11 +110,11 @@ class bitcoin-qt,bitcoind,bitcoin-cli,bitcoin-wallet,libbitcoinkernel bold\n\n - *libbitcoin_util_kernel* should be a standalone dependency that any library can depend on, and it should not depend on other libraries except *libbitcoin_crypto*. It provides basic utilities that would usually fit in *libbitcoin_util*, but which *libbitcoin_kernel* depends on.\n\n-- *libbitcoin_common* is a home for miscellaneous shared code used by different Bitcoin Core applications. It should not depend on anything other than *libbitcoin_util*, *libbitcoin_consensus*, and *libbitcoin_crypto*.\n+- *libbitcoin_common* is a home for miscellaneous shared code used by different Bitcoin Core applications. It should not depend on anything other than *libbitcoin_util*, *libbitcoin_util_kernel*, *libbitcoin_consensus*, *libbitcoin_crypto*, and *libbitcoin_kernel*.\n\n - *libbitcoin_kernel* should only depend on *libbitcoin_util_kernel*, *libbitcoin_consensus*, and *libbitcoin_crypto*.\n\n-- The only thing that should depend on *libbitcoin_kernel* internally should be *libbitcoin_node*. GUI and wallet libraries *libbitcoinqt* and *libbitcoin_wallet* in particular should not depend on *libbitcoin_kernel* and the unneeded functionality it would pull in, like block validation. To the extent that GUI and wallet code need scripting and signing functionality, they should be able to get it from *libbitcoin_consensus*, *libbitcoin_common*, *libbitcoin_crypto*, and *libbitcoin_util*, instead of *libbitcoin_kernel*.\n+- The internal libraries allowed to depend directly on *libbitcoin_kernel* are *libbitcoin_common*, *libbitcoin_node*, and *libbitcoin_wallet*. The GUI library *libbitcoinqt* should not depend on *libbitcoin_kernel* directly. GUI and wallet code should not use *libbitcoin_kernel* merely for scripting and signing functionality, which is available from *libbitcoin_consensus*, *libbitcoin_common*, *libbitcoin_crypto*, and *libbitcoin_util*.\n\n - GUI, node, and wallet code internal implementations should all be independent of each other, and the *libbitcoinqt*, *libbitcoin_node*, *libbitcoin_wallet* libraries should never reference each other's symbols. They should only call each other through [`src/interfaces/`](../../src/interfaces/) abstract interfaces.\n ```"
  },
  {
   "t": "2026-07-22T21:41:08Z",
   "kind": "review",
   "who": "w0xlt",
   "assoc": "CONTRIBUTOR",
   "state": "COMMENTED",
   "commit": "9b88b1b64b85e50a8371c611d093b7528ebd6e63",
   "text": "ACK 9b88b1b64b85e50a8371c611d093b7528ebd6e63"
  },
  {
   "t": "2026-07-23T08:25:26Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "doc/design/libraries.md",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "in_reply_to": 3633944961,
   "text": "I guess technically they still are \"linker symbol dependencies\", but yes, it just re-uses the and recompiles the source list. I'm not sure if that distinction really matters here."
  },
  {
   "t": "2026-07-23T08:30:24Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "path": "doc/design/libraries.md",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "in_reply_to": 3634011686,
   "text": "I'm still not sure if this should mention the aspirational layout, or the actual current status. The current text is inconsistent in this way already. I think ideally it should be the current status, and we should merge https://github.com/bitcoin/bitcoin/pull/35167 to enforce this."
  },
  {
   "t": "2026-08-07T04:26:19Z",
   "kind": "review_comment",
   "who": "yuvicc",
   "assoc": "CONTRIBUTOR",
   "path": "src/CMakeLists.txt",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "in_reply_to": null,
   "text": "Is this redundant? I wasn't able to find any source files needing winsock directly?"
  },
  {
   "t": "2026-08-28T09:40:40Z",
   "kind": "force_push",
   "who": "sedited",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1"
  },
  {
   "t": "2026-08-28T09:40:48Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "Rebased 9b88b1b64b85e50a8371c611d093b7528ebd6e63 -> 54ecfc9692253f8b038633e9c4e13959c03fb5c1 ([kernelInternalLib_34](https://github.com/sedited/bitcoin/tree/kernelInternalLib_34) -> [kernelInternalLib_35](https://github.com/sedited/bitcoin/tree/kernelInternalLib_35), [compare](https://github.com/sedited/bitcoin/compare/kernelInternalLib_34..kernelInternalLib_35))\n\n* Addressed @yuvicc's [comment](https://github.com/bitcoin/bitcoin/pull/28690#discussion_r3733423157), dropped redundant ws2_32 link"
  },
  {
   "t": "2026-09-08T07:35:24Z",
   "kind": "comment",
   "who": "yuvicc",
   "assoc": "CONTRIBUTOR",
   "text": "re-ACK 54ecfc9692253f8b038633e9c4e13959c03fb5c1"
  },
  {
   "t": "2026-09-08T17:31:46Z",
   "kind": "review",
   "who": "w0xlt",
   "assoc": "CONTRIBUTOR",
   "state": "COMMENTED",
   "commit": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
   "text": "reACK 54ecfc9692253f8b038633e9c4e13959c03fb5c1"
  }
 ],
 "labels_log": [
  {
   "t": "2023-10-20T11:01:09Z",
   "action": "labeled",
   "label": "Build system",
   "who": "DrahtBot"
  },
  {
   "t": "2023-10-20T13:01:15Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2023-10-25T10:58:34Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2023-10-26T16:42:00Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-10-30T13:50:00Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-10-30T14:13:09Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2023-10-31T13:00:01Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2023-11-02T12:46:49Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-11-02T14:50:47Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-11-07T20:34:46Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-11-09T12:24:12Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-11-15T11:13:36Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-11-15T13:17:55Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-11-30T17:45:23Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-11-30T20:05:51Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-12-01T21:13:50Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-12-01T23:30:28Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-12-05T19:49:07Z",
   "action": "labeled",
   "label": "DrahtBot Guix build requested",
   "who": "maflcko"
  },
  {
   "t": "2023-12-06T05:04:16Z",
   "action": "unlabeled",
   "label": "DrahtBot Guix build requested",
   "who": "DrahtBot"
  },
  {
   "t": "2023-12-06T18:18:54Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-12-06T22:27:11Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-12-13T11:18:20Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-02T13:23:27Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-03T00:06:58Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-28T12:12:22Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-28T13:45:25Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-29T22:12:07Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-09-03T13:18:59Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-09-03T17:27:46Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-09-03T21:27:58Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-09-04T10:29:34Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-09-04T17:10:13Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-10-01T13:22:35Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-10-11T14:42:57Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-16T09:38:38Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-16T09:55:11Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-16T22:38:01Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-27T21:43:46Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-29T14:33:01Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-07-18T22:01:11Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-07-30T21:16:19Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-08-06T13:47:19Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-08-07T11:38:42Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-10-28T17:29:13Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-10-28T21:43:46Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-11-25T12:42:04Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-11-25T17:23:59Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-09T02:44:18Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-09T12:50:35Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-09T13:17:38Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-09T14:06:10Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-01-12T22:05:42Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-01-13T15:42:05Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-01-19T17:53:43Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-01-19T22:10:38Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-02-13T11:44:17Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-02-20T11:25:20Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-03-13T21:35:52Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-03-14T10:34:02Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-03-19T09:40:33Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-03-19T12:07:06Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-03-30T22:22:32Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-04-23T06:16:59Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-06T09:14:47Z",
   "action": "labeled",
   "label": "DrahtBot Guix build requested",
   "who": "maflcko"
  },
  {
   "t": "2026-07-07T14:01:47Z",
   "action": "unlabeled",
   "label": "DrahtBot Guix build requested",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-09T03:02:13Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-09T14:09:34Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-09T14:13:38Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-09T16:01:14Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-21T08:44:25Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-28T11:27:05Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  }
 ],
 "state_log": [
  {
   "t": "2023-10-24T06:32:59Z",
   "kind": "ready_for_review",
   "who": "sedited"
  },
  {
   "t": "2023-12-10T14:28:27Z",
   "kind": "convert_to_draft",
   "who": "sedited"
  },
  {
   "t": "2025-05-17T08:35:50Z",
   "kind": "ready_for_review",
   "who": "sedited"
  }
 ],
 "text_chars": 73057,
 "text_tokens_estimate": 18264,
 "changed_paths": [
  "contrib/devtools/check-deps.sh",
  "doc/design/libraries.md",
  "src/CMakeLists.txt",
  "src/kernel/CMakeLists.txt",
  "src/util/CMakeLists.txt",
  "src/wallet/CMakeLists.txt"
 ],
 "files": [
  {
   "path": "contrib/devtools/check-deps.sh",
   "add": 12,
   "del": 0
  },
  {
   "path": "doc/design/libraries.md",
   "add": 17,
   "del": 4
  },
  {
   "path": "src/CMakeLists.txt",
   "add": 54,
   "del": 37
  },
  {
   "path": "src/kernel/CMakeLists.txt",
   "add": 16,
   "del": 69
  },
  {
   "path": "src/util/CMakeLists.txt",
   "add": 25,
   "del": 12
  },
  {
   "path": "src/wallet/CMakeLists.txt",
   "add": 2,
   "del": 0
  }
 ],
 "test_lines": 12,
 "git": {
  "head": "54ecfc9692253f8b038633e9c4e13959c03fb5c1",
  "head_matches_backup": true,
  "base": "794a753958a7d4c03d6deadd6740d32d9bd6dbb5",
  "commits": [
   {
    "sha": "6b9f4a5075",
    "subject": "Introduce internal kernel library",
    "files": 4,
    "add": 97,
    "del": 118
   },
   {
    "sha": "54ecfc9692",
    "subject": "Update docs and check-deps for util kernel lib",
    "files": 2,
    "add": 29,
    "del": 4
   }
  ],
  "patch_truncated": false
 },
 "input_hash": "d70d2b8d6b93d4bc",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}