ci, iwyu: Fix warnings in `src/util` and treat them as errors #34448

pull hebasto wants to merge 3 commits into bitcoin:master from hebasto:260129-iwyu-util changing 57 files +170 −100
  1. hebasto commented at 3:38 PM on January 29, 2026: member

    This PR continues the ongoing effort to enforce IWYU warnings.

    See Developer Notes.

  2. hebasto added the label Refactoring on Jan 29, 2026
  3. hebasto added the label Utils/log/libs on Jan 29, 2026
  4. DrahtBot commented at 3:39 PM on January 29, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK maflcko, BrandonOdiwuor, achow101

    If your review is incorrectly listed, please copy-paste <code>&lt;!--meta-tag:bot-skip--&gt;</code> into the comment that the bot should ignore.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #34905 (Update string and net utils for future HTTP operations by pinheadmz)
    • #34803 (mempool: asynchronous mempool fee rate diagram updates via validation interface by ismaelsadeeq)
    • #34641 (node: scale default -dbcache with system RAM by l0rinc)
    • #34435 (refactor: use _MiB/_GiB consistently for byte conversions by l0rinc)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

  5. hebasto marked this as a draft on Jan 29, 2026
  6. fanquake commented at 3:42 PM on January 29, 2026: member
    In file included from /home/admin/actions-runner/_work/_temp/src/hash.h:16:
    /home/admin/actions-runner/_work/_temp/src/uint256.h:150:17: error: no member named 'HexDigit' in the global namespace
      150 |         *p1 = ::HexDigit(str[--digits]);
          |                 ^~~~~~~~
    /home/admin/actions-runner/_work/_temp/src/uint256.h:152:38: error: no member named 'HexDigit' in the global namespace
      152 |             *p1 |= ((unsigned char)::HexDigit(str[--digits]) << 4);
          |                                      ^~~~~~~~
    2 errors generated.
    
  7. DrahtBot added the label CI failed on Jan 29, 2026
  8. DrahtBot commented at 3:48 PM on January 29, 2026: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task Valgrind, fuzz: https://github.com/bitcoin/bitcoin/actions/runs/21484505843/job/61889746047</sub> <sub>LLM reason (✨ experimental): Compilation failed due to missing #include <vector> causing std::vector to be undefined in string.h and related code.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  9. fanquake commented at 4:33 PM on January 29, 2026: member

    Seems pretty odd that IWYU can be "passing" here, but nothing actually compiles.

  10. hebasto force-pushed on Jan 29, 2026
  11. hebasto force-pushed on Jan 29, 2026
  12. hebasto force-pushed on Jan 29, 2026
  13. hebasto force-pushed on Jan 29, 2026
  14. hebasto force-pushed on Jan 29, 2026
  15. DrahtBot removed the label CI failed on Jan 30, 2026
  16. in contrib/devtools/iwyu/bitcoin.core.imp:11 in 2298908c3f outdated
       7 | @@ -8,13 +8,16 @@
       8 |    # libc symbols.
       9 |    { "symbol": ["AT_HWCAP", "private", "<sys/auxv.h>", "public"] },
      10 |    { "symbol": ["AT_HWCAP2", "private", "<sys/auxv.h>", "public"] },
      11 | +  { "symbol": ["sched_param", "private", "<sched.h>", "public"] },
    


    fanquake commented at 9:23 AM on January 30, 2026:

    Can you link to the upstream issue / changes for all of these as well?


    hebasto commented at 11:58 AM on January 30, 2026:

    See #34460.


    fanquake commented at 12:02 PM on January 30, 2026:

    I don't see sched_param mentioned in https://github.com/include-what-you-use/include-what-you-use/issues/1809. Are you opening separate issues for different symbols, or just adding new missing symbols to https://github.com/include-what-you-use/include-what-you-use/issues/1809? Any reason to not add the missing mappings upstream; otherwise it seems like we are just accumulating workarounds for things that are not being fixed.


    hebasto commented at 3:48 PM on January 30, 2026:

    I don't see sched_param mentioned in include-what-you-use/include-what-you-use#1809.

    An upstream fix has been proposed in https://github.com/include-what-you-use/include-what-you-use/pull/1918.


    hebasto commented at 8:00 AM on January 31, 2026:

    Any reason to not add the missing mappings upstream; otherwise it seems like we are just accumulating workarounds for things that are not being fixed.

    Fixed upstream in https://github.com/include-what-you-use/include-what-you-use/pull/1923.

  17. in contrib/devtools/iwyu/bitcoin.core.imp:13 in 2298908c3f
       7 | @@ -8,13 +8,16 @@
       8 |    # libc symbols.
       9 |    { "symbol": ["AT_HWCAP", "private", "<sys/auxv.h>", "public"] },
      10 |    { "symbol": ["AT_HWCAP2", "private", "<sys/auxv.h>", "public"] },
      11 | +  { "symbol": ["sched_param", "private", "<sched.h>", "public"] },
      12 |  
      13 |    # Fixed in https://github.com/include-what-you-use/include-what-you-use/pull/1706.
    


    fanquake commented at 9:25 AM on January 30, 2026:

    Fixed in https://github.com/include-what-you-use/include-what-you-use/pull/1706.

    This was fixed in IWYU 0.25, which we are using, so this whole block should be able to be dropped?


    hebasto commented at 11:58 AM on January 30, 2026:

    Thanks! Dropped in #34460.

  18. in src/util/batchpriority.cpp:9 in 2298908c3f outdated
       8 |  #include <util/syserror.h>
       9 |  
      10 | +#include <string>
      11 | +
      12 |  #if (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__))
      13 | -#include <pthread.h>
    


    maflcko commented at 9:37 AM on January 30, 2026:

    this doesn't look like an iwyu change, which only runs on linux, and neither on freebsd, nor WIN32, so it seems best to commit this separately


    hebasto commented at 3:14 PM on January 30, 2026:

    See #34462.

  19. hebasto force-pushed on Jan 30, 2026
  20. DrahtBot added the label CI failed on Jan 30, 2026
  21. DrahtBot removed the label CI failed on Jan 30, 2026
  22. achow101 referenced this in commit 5d2707307e on Jan 30, 2026
  23. hebasto force-pushed on Jan 30, 2026
  24. hebasto commented at 9:27 PM on January 30, 2026: member

    Rebased on top of merged bitcoin/bitcoin#34454.

  25. hebasto force-pushed on Jan 31, 2026
  26. hebasto commented at 9:15 AM on January 31, 2026: member

    Rebased on top of merged bitcoin/bitcoin#34460.

  27. hebasto force-pushed on Jan 31, 2026
  28. hebasto commented at 10:38 AM on January 31, 2026: member

    Rebased on top of merged bitcoin/bitcoin#34462.

  29. hebasto marked this as ready for review on Jan 31, 2026
  30. hebasto force-pushed on Jan 31, 2026
  31. hebasto commented at 2:10 PM on January 31, 2026: member

    Rebased to resolve a conflict with merged bitcoin/bitcoin#34455.

  32. in src/util/time.h:9 in d2a82d1eb5
       5 | @@ -6,8 +6,11 @@
       6 |  #ifndef BITCOIN_UTIL_TIME_H
       7 |  #define BITCOIN_UTIL_TIME_H
       8 |  
       9 | +#include <compat/compat.h>
    


    fanquake commented at 12:41 PM on February 2, 2026:

    Why is compat.h being added here (with sys/time.h being added to it), rather than just including sys/time.h here? It seems like compat.h is starting to become a catch-all for includes, which is going in the opposite of the direction we want (and defeats the point of IWYU).


    hebasto commented at 12:49 PM on February 2, 2026:

    Why is compat.h being added here (with sys/time.h being added to it), rather than just including sys/time.h here?

    Without #include <compat/compat.h>, the code has to be:

    #ifdef WIN32
    #include <winsock2.h>
    #else
    #include <sys/time.h>
    #endif
    

    This was actually my first iteration while working on this PR.

    It seems like compat.h is starting to become a catch-all for includes, which is going in the opposite of the direction we want (and defeats the point of IWYU).

    I agree. It would be great to have clearly documented use cases for compat.h.


    fanquake commented at 12:52 PM on February 2, 2026:

    Without #include <compat/compat.h>, the code has to be:

    What is wrong with that code?


    fanquake commented at 12:53 PM on February 2, 2026:

    Also, the winsock2.h change seems unrelated, given IWYU is not run for Windows.


    hebasto commented at 1:47 PM on February 2, 2026:

    Also, the winsock2.h change seems unrelated, given IWYU is not run for Windows.

    We still cross-compile for it and support native Windows builds. The winsock2.h header defines the timeval structure used here: https://github.com/bitcoin/bitcoin/blob/9f8764c814ead48d45b3822dfcc4cc2b3bda80d6/src/util/time.h#L151-L159

    The code currently compiles without it only because of transitive includes, which is going in the opposite of the direction we want.


    fanquake commented at 1:57 PM on February 2, 2026:

    Sure, just pointing out that the (Windows) diff above would not actually be tested by, or related to any IWYU changes here (it would be good if you documented in commit mesages, when certain changes have been made because of Windows, rather than following the IWYU output). In any case, I don't think the correct solution is to continue adding includes to compat, undermining IWYU.


    maflcko commented at 2:19 PM on February 2, 2026:

    Without #include <compat/compat.h>, the code has to be:

    What is wrong with that code?

    I think it is missing the IWYU export. Generally, those should be avoided, but when it comes to compat headers, I think there is a benefit to just have them imported once to get one symbol cross-platform and then IWYU export them.

    Otherwise, all call-sites will have to add:

    #ifdef WIN32
    #include <winsock2.h>
    #else
    #include <sys/time.h>
    #endif
    

    ,which is verbose, and hard to review, and easy to get wrong: As you say iwyu is not run on Windows and the transitive include can hide a missing winsock2 include.

    So I think the options are either:

    • keep the compat header with the iwyu export
    • add all platform-specific includes in all files that use them manually (tedious?)

    fanquake commented at 2:27 PM on February 2, 2026:

    Otherwise, all call-sites will have to add:

    Isn't this the only callsite though? I don't really see why we'd add #include <sys/time.h> to compat.h, just to have it included hundreds of places it isn't needed, for the sake of saving 1 #ifdef.

    I think before we make any more changes, we need to decide if we are actually doing IWYU, or only when it's convenient/not inconvenient for Windows, and otherwise bundling things in 1 header to include everywhere else.


    hebasto commented at 2:35 PM on February 2, 2026:

    Isn't this the only callsite though?

    $ git grep -l timeval -- src ":(exclude)src/leveldb" ":(exclude)src/secp256k1"
    src/crypto/ctaes/bench.c
    src/httpserver.cpp
    src/httpserver.h
    src/randomenv.cpp
    src/torcontrol.cpp
    src/util/sock.cpp
    src/util/time.cpp
    src/util/time.h
    

    fanquake commented at 2:40 PM on February 2, 2026:

    Also, compat.h already includes sys/select.h, which also defines timeval. So why does sys/time.h need to be added to compat.h?


    hebasto commented at 2:42 PM on February 2, 2026:

    Alternatively, we can introduce a new compat_time.h header, which exports both winsock2.h and sys/time.h, and specify a new mapping in iwyu/bitcoin.core.imp:

    { "symbol": ["timeval", "private", "<compat_time.h>", "public"] },
    

    maflcko commented at 2:56 PM on February 2, 2026:

    Isn't this the only callsite though?

    $ git grep -l timeval -- src ":(exclude)src/leveldb" ":(exclude)src/secp256k1"
    src/crypto/ctaes/bench.c
    src/httpserver.cpp
    src/httpserver.h
    src/randomenv.cpp
    src/torcontrol.cpp
    src/util/sock.cpp
    src/util/time.cpp
    src/util/time.h
    

    Right, my understanding is that all those would have to add the same

    #ifdef WIN32
    #include <winsock2.h>
    #else
    #include <sys/time.h>
    #endif
    

    Alternatively, we can introduce a new compat_time.h header, which exports both winsock2.h and sys/time.h, and specify a new mapping in iwyu/bitcoin.core.imp:

    { "symbol": ["timeval", "private", "<compat_time.h>", "public"] },
    

    Yeah, that is a bit cleaner than the "iwyu export" hack. Maybe it can be named ./src/compat/time.h though?


    fanquake commented at 3:14 PM on February 2, 2026:

    What is the point of a new file, with a new mapping, if the symbol definition is already (correctly) coming from compat.h?


    maflcko commented at 3:23 PM on February 2, 2026:

    Not sure how heavy the full compat net stack headers are to parse every time util/time.h is included. It may be faster to just include what is needed via compat/time.h instead of compat/compat.h, but I haven't benchmarked this.


    fanquake commented at 3:48 PM on February 2, 2026:

    Is the long term plan to break up compat.h, into many more of these mini-compat headers, and have many new includes (which themselves are some #ifdef logic + includes) in every file that previously only included compat.h? I do wonder if that will make it more or less likely to run into issues like #34454, or if that is really worth it to save some (hopefully comparatively ) small amount of code duplication/preprocessor time.


    maflcko commented at 3:53 PM on February 2, 2026:

    I'd say it would just be two:

    • compat/time.h for all time-related symbols (only timeval)
    • compat/compat.h for all net-related symbols (everything else)

    But no strong opinion. Leaving this pull as-is is also fine.


    fanquake commented at 4:08 PM on February 2, 2026:

    I think it at least needs to add a mapping / fix for the IWYU bug (along with reporting upstream). No code changes are needed in compat.h, because timeval is already defined by sys/select.h.


    hebasto commented at 4:43 PM on February 2, 2026:

    maflcko commented at 5:08 PM on February 2, 2026:

    Not sure how heavy the full compat net stack headers are to parse every time util/time.h is included. It may be faster to just include what is needed via compat/time.h instead of compat/compat.h, but I haven't benchmarked this.

    A third alternative could be to just move MillisToTimeval into compat.h


    hebasto commented at 5:39 PM on February 2, 2026:

    After an offline discussion with @fanquake, I’ve concluded that using compat.h (or any other facade header) does not guarantee adherence to the 'include what you use' paradigm, as the timeval symbol can be defined in any of four different headers. Therefore, the decision of which header to include should be based on the headers already present in the given file.


    maflcko commented at 9:50 AM on March 25, 2026:

    Not sure how heavy the full compat net stack headers are to parse every time util/time.h is included. It may be faster to just include what is needed via compat/time.h instead of compat/compat.h, but I haven't benchmarked this.

    A third alternative could be to just move MillisToTimeval into compat.h

    Just benchmarked this and compat.h parsing takes less than 1% of the time.cpp compile time according to -ftime-trace https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-ftime-trace

    So I guess it is fine to leave this as-is for now.

  33. hebasto force-pushed on Feb 2, 2026
  34. hebasto commented at 5:31 PM on February 2, 2026: member

    Rebased to resolve a conflict with merged bitcoin/bitcoin#33878.

  35. hebasto force-pushed on Feb 6, 2026
  36. hebasto commented at 2:41 PM on February 6, 2026: member

    Rebased.

  37. DrahtBot added the label Needs rebase on Feb 7, 2026
  38. maflcko commented at 9:23 AM on February 10, 2026: member

    unrelated, but the clang-format in the ci container seems broken? It removes the newlines. E.g. https://github.com/bitcoin/bitcoin/actions/runs/21830259022/job/62995439943#step:11:1639

    diff --git a/src/index/base.cpp b/src/index/base.cpp
    index 39d4dc7..0547fd1 100644
    --- a/src/index/base.cpp
    +++ b/src/index/base.cpp
    @@ -10,6 +10,7 @@
     #include <interfaces/chain.h>
     #include <interfaces/types.h>
     #include <kernel/types.h>
    +#include <logging.h>
     #include <node/abort.h>
     #include <node/blockstorage.h>
     #include <node/context.h>
    @@ -21,7 +22,6 @@
     #include <uint256.h>
     #include <undo.h>
     #include <util/fs.h>
    -#include <util/log.h>
     #include <util/string.h>
     #include <util/thread.h>
     #include <util/threadinterrupt.h>
    diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp
    index cf31c9a..a805719 100644
    --- a/src/node/blockstorage.cpp
    +++ b/src/node/blockstorage.cpp
    @@ -3,7 +3,6 @@
     // file COPYING or http://www.opensource.org/licenses/mit-license.php.
     
     #include <node/blockstorage.h>
    -
     #include <arith_uint256.h>
     #include <chain.h>
     #include <consensus/params.h>
    @@ -30,7 +29,6 @@
     #include <util/check.h>
     #include <util/expected.h>
     #include <util/fs.h>
    -#include <util/log.h>
     #include <util/obfuscation.h>
     #include <util/overflow.h>
     #include <util/result.h>
    @@ -40,7 +38,6 @@
     #include <util/time.h>
     #include <util/translation.h>
     #include <validation.h>
    -
     #include <cerrno>
     #include <compare>
     #include <cstddef>
    
  39. hebasto force-pushed on Feb 10, 2026
  40. hebasto commented at 3:55 PM on February 10, 2026: member

    Rebased.

  41. hebasto commented at 4:29 PM on February 10, 2026: member

    unrelated, but the clang-format in the ci container seems broken? It removes the newlines. E.g. https://github.com/bitcoin/bitcoin/actions/runs/21830259022/job/62995439943#step:11:1639

    Looks like fix_includes.py strips empty lines and clang-format-diff.py fails to restore them.

  42. DrahtBot removed the label Needs rebase on Feb 10, 2026
  43. hebasto commented at 5:24 PM on February 10, 2026: member

    unrelated, but the clang-format in the ci container seems broken? It removes the newlines. E.g. https://github.com/bitcoin/bitcoin/actions/runs/21830259022/job/62995439943#step:11:1639

    Looks like fix_includes.py strips empty lines and clang-format-diff.py fails to restore them.

    Fixed in #34551.

  44. hebasto commented at 6:09 PM on February 10, 2026: member

    The only conflicting PR has been merged, so now seems like a good time to get this reviewed.

    Friendly ping @sedited @maflcko @willcl-ark :)

  45. in src/util/time.cpp:23 in 639cdba927 outdated
      19 |  #include <string>
      20 |  #include <string_view>
      21 |  #include <thread>
      22 |  
      23 | +#ifdef WIN32
      24 | +#include <winsock2.h>
    


    fanquake commented at 6:11 PM on February 10, 2026:

    What is this for (same in util/time.h)?


    hebasto commented at 6:13 PM on February 10, 2026:

    For the timeval type.

  46. in src/util/threadinterrupt.h:9 in 639cdba927
       5 | @@ -6,7 +6,6 @@
       6 |  #define BITCOIN_UTIL_THREADINTERRUPT_H
       7 |  
       8 |  #include <sync.h>
       9 | -#include <threadsafety.h>
    


    fanquake commented at 6:16 PM on February 10, 2026:

    Is now the time to remove the pragma: export from sync.h, and retain this header, given it is used?


    hebasto commented at 7:20 PM on February 10, 2026:

    Thanks! Done.

  47. hebasto force-pushed on Feb 10, 2026
  48. sedited referenced this in commit 6777314310 on Feb 11, 2026
  49. hebasto force-pushed on Feb 13, 2026
  50. hebasto commented at 2:13 PM on February 13, 2026: member

    Rebased.

  51. DrahtBot added the label CI failed on Feb 13, 2026
  52. DrahtBot commented at 3:17 PM on February 13, 2026: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task Windows-cross to x86_64, ucrt: https://github.com/bitcoin/bitcoin/actions/runs/21989888993/job/63533810608</sub> <sub>LLM reason (✨ experimental): Test failure: std::future::wait_for is called with a plain long int instead of a std::chrono::duration, causing a type-mismatch in threadpool_tests.cpp.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  53. hebasto force-pushed on Feb 13, 2026
  54. DrahtBot removed the label CI failed on Feb 13, 2026
  55. in src/util/fs.h:8 in 76762de9a7 outdated
       4 | @@ -5,17 +5,15 @@
       5 |  #ifndef BITCOIN_UTIL_FS_H
       6 |  #define BITCOIN_UTIL_FS_H
       7 |  
       8 | -#include <tinyformat.h>
       9 | +#include <tinyformat.h> // IWYU pragma: keep
    


    fanquake commented at 12:13 PM on February 18, 2026:

    Why do we need the // IWYU pragma: keep here?


    hebasto commented at 6:44 PM on February 18, 2026:

    An explanatory comment has been added.

  56. hebasto force-pushed on Feb 18, 2026
  57. in src/logging.h:10 in adcaac7841 outdated
       7 | @@ -8,6 +8,7 @@
       8 |  
       9 |  #include <crypto/siphash.h>
      10 |  #include <logging/categories.h> // IWYU pragma: export
    


    fanquake commented at 7:01 PM on February 18, 2026:

    If this PR is going to fix util, then I think pretty much any (existing) pramga use, outside of the config header, should be getting comments (especially given the prior added one was another IWYU bug). Pragmas should be used sparingly, and explained when so.


    hebasto commented at 8:44 PM on February 18, 2026:

    I agree that all pragmas should eventually be documented. However, addressing the existing ones here would significantly expand the scope of this PR and likely introduce more merge conflicts.

    Since these older pragmas might need to be removed entirely rather than just documented, it would be best to loop in the original authors or reviewers to make that call. I think it makes the most sense to tackle this cleanup in follow-up PRs.


    fanquake commented at 4:01 PM on February 19, 2026:

    However, addressing the existing ones here would significantly expand the scope of this PR

    Looking at the current state of this PR, there are 4 instances of // IWYU pragma: export in src/util/. Documenting or removing them, seems in scope for a PR that is fixing all issues in src/util/. If not done now, we'll just have to come back again later and fix them anyways (and still have merge conflicts anyways, if there are any).

    Since these older pragmas might need to be removed entirely rather than just documented, it would be best to loop in the original authors or reviewers to make that call.

    Isn't the best case if you can just delete the pragma, and fix the includes? Otherwise I'm not sure what call they would need to make. Either the pragma is removed, and includes fixed, there is a IWYU bug (which can be documented), or a rationale is written for keeping the pragma (even if it isn't needed)?


    hebasto commented at 12:52 PM on March 23, 2026:

    Looking at the current state of this PR, there are 4 instances of // IWYU pragma: export in src/util/. Documenting or removing them, seems in scope for a PR that is fixing all issues in src/util/.

    Should be resolved now.

  58. hebasto marked this as a draft on Feb 20, 2026
  59. hebasto commented at 5:54 PM on February 20, 2026: member

    Drafted. Please review #34639 first.

  60. DrahtBot added the label Needs rebase on Mar 19, 2026
  61. hebasto force-pushed on Mar 19, 2026
  62. hebasto commented at 4:16 PM on March 19, 2026: member

    Rebased to resolve a conflict with merged bitcoin/bitcoin#34823.

  63. hebasto force-pushed on Mar 19, 2026
  64. DrahtBot added the label CI failed on Mar 19, 2026
  65. DrahtBot commented at 4:32 PM on March 19, 2026: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task 32 bit ARM: https://github.com/bitcoin/bitcoin/actions/runs/23304811918/job/67775781260</sub> <sub>LLM reason (✨ experimental): CI failed during the C++ build because logging.h references MakeUCharSpan that isn’t declared (compile error in SourceLocationHasher while compiling migrate.cpp).</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  66. DrahtBot removed the label Needs rebase on Mar 19, 2026
  67. DrahtBot removed the label CI failed on Mar 19, 2026
  68. fanquake referenced this in commit b425a81f07 on Mar 20, 2026
  69. hebasto force-pushed on Mar 20, 2026
  70. fanquake referenced this in commit 3d1b7d0f6a on Mar 23, 2026
  71. DrahtBot added the label Needs rebase on Mar 23, 2026
  72. hebasto force-pushed on Mar 23, 2026
  73. DrahtBot removed the label Needs rebase on Mar 23, 2026
  74. hebasto force-pushed on Mar 23, 2026
  75. hebasto force-pushed on Mar 23, 2026
  76. DrahtBot added the label CI failed on Mar 23, 2026
  77. hebasto marked this as ready for review on Mar 23, 2026
  78. hebasto commented at 12:53 PM on March 23, 2026: member

    Ready for review.

  79. in src/util/check.h:11 in c5c57828f4 outdated
       7 | @@ -8,11 +8,11 @@
       8 |  #include <attributes.h>
       9 |  
      10 |  #include <atomic>
      11 | -#include <cassert> // IWYU pragma: export
    


    hebasto commented at 12:58 PM on March 23, 2026:

    This change effectively reverts fa971c09f24887d4848082c551d4eed98e7f4edc, which was motivated as follows:

    This avoids having to include both headers when assert and Assert are used at the same time.

    I believe that's a minor convenience that undermines the "include-what-you-use" paradigm.


    maflcko commented at 10:28 AM on March 25, 2026:

    There is another reason: A plain cassert include is dangerous, because it lacks the

    #if defined(NDEBUG)
    #error "Cannot compile without assertions!"
    #endif
    

    My preference would be to just leave this as-is, or add a comment why it should be left as-is


    hebasto commented at 12:54 PM on March 25, 2026:

    I understand your idea.

    However, it creates a chain of implicit includes due to this:https://github.com/bitcoin/bitcoin/blob/0d2428765d8a13e36a3cf5733417243fb0169faf/src/util/log.h#L12-L14

    Maybe, a new header would be reasonable:

    // src/util/assert.h
    
    // We use `util/assert.h` to provide the `assert()` macro
    // to ensure that `NDEBUG` is not defined.
    #include <cassert> // IWYU pragma: export
    
    #if defined(NDEBUG)
    #error "Cannot compile without assertions!"
    #endif
    

    ?


    maflcko commented at 1:48 PM on March 25, 2026:

    Maybe, a new header would be reasonable:

    How would the new header solve the chain?

    The new header seems to be about assert(), but log.h uses Assume, so I think moving this to a new header seems unrelated.


    hebasto commented at 1:54 PM on March 25, 2026:

    How would the new header solve the chain?

    src/util/log.h won't implicitly include <cassert>.


    maflcko commented at 2:09 PM on March 25, 2026:

    Ok, sure, but including log.h would still "hide" check.h, so I don't see how the situation improves. Also, with assert.h, there will then be three patters in the code:

    • <cassert> + assert()
    • <util/assert.h> + assert()
    • <util/check.h> + Assert()

    Not sure if this is better. Also, it seems odd to motivate this based on a temporary include in log.h, which will likely be removed soon.

    Again, my preference would be to just leave this as-is for now. If there truly is a reason to change something, it should come with a proper long-term motivation, so that it can be evaluated independently.


    hebasto commented at 2:44 PM on March 25, 2026:

    Thanks! Reworked.

  80. DrahtBot removed the label CI failed on Mar 23, 2026
  81. DrahtBot added the label Needs rebase on Mar 24, 2026
  82. hebasto force-pushed on Mar 24, 2026
  83. hebasto commented at 8:34 PM on March 24, 2026: member

    Rebased to resolve a conflict with the merged #34598.

  84. DrahtBot removed the label Needs rebase on Mar 24, 2026
  85. DrahtBot added the label Needs rebase on Mar 25, 2026
  86. hebasto force-pushed on Mar 25, 2026
  87. hebasto commented at 9:55 AM on March 25, 2026: member

    Rebased on top of the merged bitcoin/bitcoin#34896.

  88. DrahtBot removed the label Needs rebase on Mar 25, 2026
  89. hebasto force-pushed on Mar 25, 2026
  90. fanquake commented at 3:08 PM on March 25, 2026: member

    A new circular dependency in the form of "clientversion -> util/translation -> util/check -> clientversion" appears to have been introduced.

  91. DrahtBot added the label CI failed on Mar 25, 2026
  92. hebasto force-pushed on Mar 25, 2026
  93. hebasto commented at 6:00 PM on March 25, 2026: member

    A new circular dependency in the form of "clientversion -> util/translation -> util/check -> clientversion" appears to have been introduced.

    Thanks! Fixed.

  94. DrahtBot removed the label CI failed on Mar 25, 2026
  95. iwyu: Remove workaround for issue that has been fixed upstream
    This was overlooked in bitcoin/bitcoin#34896.
    eb750d277b
  96. refactor: Move license info into new module 6953363be8
  97. ci, iwyu: Fix warnings in `src/util` and treat them as errors 8b49e2dd4e
  98. in src/util/translation.h:12 in 8e0adac5b6
       7 | @@ -8,6 +8,8 @@
       8 |  #include <tinyformat.h>
       9 |  #include <util/string.h>
      10 |  
      11 | +// Including <cassert> rather than <util/check.h>
      12 | +// to avoid a circular header dependency.
    


    maflcko commented at 11:03 AM on March 30, 2026:

    not sure this is the right fix. It seems odd that the header can not freely be used where devs want to use it, and instead requires manual workarounds and comments explaining them.

    Also, it seems odd that the license info is placed along the version info. Just because the license is printed with the version does not mean it is the version.

    So it could make sense to move-only the license info to a new module:

    <details><summary>move-only</summary>

    diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
    index ad18115..967989c 100644
    --- a/src/CMakeLists.txt
    +++ b/src/CMakeLists.txt
    @@ -100,2 +100,3 @@ add_library(bitcoin_common STATIC EXCLUDE_FROM_ALL
       common/messages.cpp
    +  common/license_info.cpp
       common/netif.cpp
    diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp
    index 2c02d87..b0caf2d 100644
    --- a/src/bitcoin-cli.cpp
    +++ b/src/bitcoin-cli.cpp
    @@ -10,2 +10,3 @@
     #include <common/args.h>
    +#include <common/license_info.h>
     #include <common/system.h>
    diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp
    index fdff656..d4702a9 100644
    --- a/src/bitcoin-tx.cpp
    +++ b/src/bitcoin-tx.cpp
    @@ -10,2 +10,3 @@
     #include <common/args.h>
    +#include <common/license_info.h>
     #include <common/system.h>
    diff --git a/src/bitcoin-util.cpp b/src/bitcoin-util.cpp
    index a6fd026..aa3fd30 100644
    --- a/src/bitcoin-util.cpp
    +++ b/src/bitcoin-util.cpp
    @@ -12,2 +12,3 @@
     #include <common/args.h>
    +#include <common/license_info.h>
     #include <common/system.h>
    diff --git a/src/bitcoin-wallet.cpp b/src/bitcoin-wallet.cpp
    index 6811f8c..9b0136d 100644
    --- a/src/bitcoin-wallet.cpp
    +++ b/src/bitcoin-wallet.cpp
    @@ -10,2 +10,3 @@
     #include <common/args.h>
    +#include <common/license_info.h>
     #include <common/system.h>
    diff --git a/src/bitcoin.cpp b/src/bitcoin.cpp
    index 5d42bb0..e17bd13 100644
    --- a/src/bitcoin.cpp
    +++ b/src/bitcoin.cpp
    @@ -9,2 +9,3 @@
     #include <common/system.h>
    +#include <common/license_info.h>
     #include <util/fs.h>
    diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp
    index 32db3e7..3ec23f7 100644
    --- a/src/bitcoind.cpp
    +++ b/src/bitcoind.cpp
    @@ -10,2 +10,3 @@
     #include <common/args.h>
    +#include <common/license_info.h>
     #include <common/init.h>
    diff --git a/src/clientversion.cpp b/src/clientversion.cpp
    index 8661011..3c16990 100644
    --- a/src/clientversion.cpp
    +++ b/src/clientversion.cpp
    @@ -9,3 +9,2 @@
     #include <util/string.h>
    -#include <util/translation.h>
     
    @@ -72,32 +71 @@ std::string FormatSubVersion(const std::string& name, int nClientVersion, const
     }
    -
    -std::string CopyrightHolders(const std::string& strPrefix)
    -{
    -    const auto copyright_devs = strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION).translated;
    -    std::string strCopyrightHolders = strPrefix + copyright_devs;
    -
    -    // Make sure Bitcoin Core copyright is not removed by accident
    -    if (copyright_devs.find("Bitcoin Core") == std::string::npos) {
    -        strCopyrightHolders += "\n" + strPrefix + "The Bitcoin Core developers";
    -    }
    -    return strCopyrightHolders;
    -}
    -
    -std::string LicenseInfo()
    -{
    -    const std::string URL_SOURCE_CODE = "<https://github.com/bitcoin/bitcoin>";
    -
    -    return CopyrightHolders(strprintf(_("Copyright (C) %i-%i"), 2009, COPYRIGHT_YEAR).translated + " ") + "\n" +
    -           "\n" +
    -           strprintf(_("Please contribute if you find %s useful. "
    -                       "Visit %s for further information about the software."),
    -                     CLIENT_NAME, "<" CLIENT_URL ">")
    -               .translated +
    -           "\n" +
    -           strprintf(_("The source code is available from %s."), URL_SOURCE_CODE).translated +
    -           "\n" +
    -           "\n" +
    -           _("This is experimental software.") + "\n" +
    -           strprintf(_("Distributed under the MIT software license, see the accompanying file %s or %s"), "COPYING", "<https://opensource.org/license/MIT>").translated +
    -           "\n";
    -}
    diff --git a/src/clientversion.h b/src/clientversion.h
    index 9d09e50..f4822a1 100644
    --- a/src/clientversion.h
    +++ b/src/clientversion.h
    @@ -36,7 +36,2 @@ std::string FormatSubVersion(const std::string& name, int nClientVersion, const
     
    -std::string CopyrightHolders(const std::string& strPrefix);
    -
    -/** Returns licensing information (for -version) */
    -std::string LicenseInfo();
    -
     #endif // RC_INVOKED
    diff --git a/src/common/license_info.cpp b/src/common/license_info.cpp
    new file mode 100644
    index 0000000..5319085
    --- /dev/null
    +++ b/src/common/license_info.cpp
    @@ -0,0 +1,44 @@
    +// Copyright (c) The Bitcoin Core developers
    +// Distributed under the MIT software license, see the accompanying
    +// file COPYING or https://opensource.org/license/mit/.
    +
    +#include <bitcoin-build-config.h> // IWYU pragma: keep
    +
    +#include <common/license_info.h>
    +
    +#include <tinyformat.h>
    +#include <util/string.h>
    +#include <util/translation.h>
    +
    +#include <string>
    +
    +std::string CopyrightHolders(const std::string& strPrefix)
    +{
    +    const auto copyright_devs = strprintf(_(COPYRIGHT_HOLDERS), COPYRIGHT_HOLDERS_SUBSTITUTION).translated;
    +    std::string strCopyrightHolders = strPrefix + copyright_devs;
    +
    +    // Make sure Bitcoin Core copyright is not removed by accident
    +    if (copyright_devs.find("Bitcoin Core") == std::string::npos) {
    +        strCopyrightHolders += "\n" + strPrefix + "The Bitcoin Core developers";
    +    }
    +    return strCopyrightHolders;
    +}
    +
    +std::string LicenseInfo()
    +{
    +    const std::string URL_SOURCE_CODE = "<https://github.com/bitcoin/bitcoin>";
    +
    +    return CopyrightHolders(strprintf(_("Copyright (C) %i-%i"), 2009, COPYRIGHT_YEAR).translated + " ") + "\n" +
    +           "\n" +
    +           strprintf(_("Please contribute if you find %s useful. "
    +                       "Visit %s for further information about the software."),
    +                     CLIENT_NAME, "<" CLIENT_URL ">")
    +               .translated +
    +           "\n" +
    +           strprintf(_("The source code is available from %s."), URL_SOURCE_CODE).translated +
    +           "\n" +
    +           "\n" +
    +           _("This is experimental software.") + "\n" +
    +           strprintf(_("Distributed under the MIT software license, see the accompanying file %s or %s"), "COPYING", "<https://opensource.org/license/MIT>").translated +
    +           "\n";
    +}
    diff --git a/src/common/license_info.h b/src/common/license_info.h
    new file mode 100644
    index 0000000..65e9e8c
    --- /dev/null
    +++ b/src/common/license_info.h
    @@ -0,0 +1,15 @@
    +// Copyright (c) The Bitcoin Core developers
    +// Distributed under the MIT software license, see the accompanying
    +// file COPYING or https://opensource.org/license/mit/.
    +
    +#ifndef BITCOIN_COMMON_LICENSE_INFO_H
    +#define BITCOIN_COMMON_LICENSE_INFO_H
    +
    +#include <string>
    +
    +std::string CopyrightHolders(const std::string& strPrefix);
    +
    +/** Returns licensing information (for -version) */
    +std::string LicenseInfo();
    +
    +#endif // BITCOIN_COMMON_LICENSE_INFO_H
    diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp
    index 553f678..5a89ce0 100644
    --- a/src/qt/splashscreen.cpp
    +++ b/src/qt/splashscreen.cpp
    @@ -9,2 +9,3 @@
     #include <clientversion.h>
    +#include <common/license_info.h>
     #include <common/system.h>
    diff --git a/src/qt/utilitydialog.cpp b/src/qt/utilitydialog.cpp
    index 99a3a83..5784b31 100644
    --- a/src/qt/utilitydialog.cpp
    +++ b/src/qt/utilitydialog.cpp
    @@ -14,2 +14,3 @@
     #include <common/args.h>
    +#include <common/license_info.h>
     #include <init.h>
    diff --git a/src/test/fuzz/string.cpp b/src/test/fuzz/string.cpp
    index d315633..4402caa 100644
    --- a/src/test/fuzz/string.cpp
    +++ b/src/test/fuzz/string.cpp
    @@ -7,2 +7,3 @@
     #include <common/args.h>
    +#include <common/license_info.h>
     #include <common/messages.h>
    

    </details>


    hebasto commented at 3:44 PM on March 30, 2026:

    not sure this is the right fix. It seems odd that the header can not freely be used where devs want to use it, and instead requires manual workarounds and comments explaining them.

    Also, it seems odd that the license info is placed along the version info. Just because the license is printed with the version does not mean it is the version.

    So it could make sense to move-only the license info to a new module:

    Thanks! Your patch has been incorporated.


    hebasto commented at 3:47 PM on March 30, 2026:

    This reminds me of #26688.


    maflcko commented at 4:02 PM on March 30, 2026:

    This reminds me of #26688.

    Heh, forgot about that. Looks like it is the same diff, I just picked a different file name :sweat_smile:

  99. hebasto force-pushed on Mar 30, 2026
  100. hebasto commented at 3:44 PM on March 30, 2026: member

    Addressed the recent feedback from @maflcko.

  101. in src/util/feefrac.cpp:10 in 8b49e2dd4e
       7 | +
       8 | +#include <util/check.h>
       9 | +
      10 |  #include <array>
      11 | -#include <vector>
      12 | +#include <cstddef>
    


    maflcko commented at 8:41 AM on March 31, 2026:

    I see compare and span are in the header of this module, but isn't iwyu supposed to include them here as well?


    hebasto commented at 11:03 AM on March 31, 2026:

    hebasto commented at 11:26 AM on March 31, 2026:

    Here are more details:

      // We have a rule that if foo.h #includes bar.h, foo.cc doesn't need
      // to #include bar.h as well, but instead gets it 'automatically'
      // via foo.h.  We say that 'foo.h' is an "associated header" for
      // foo.cc.  Make sure we ignore self-includes, though!
      // iwyu_output.cc gets upset if a file is its own associated header.
      if (includer == main_file_ && includee != includer &&
          BelongsToMainCompilationUnit(includer, includee)) {
        GetFromFileInfoMap(includer)
            ->AddAssociatedHeader(GetFromFileInfoMap(includee));
        VERRS(4) << "Marked " << GetFilePath(includee)
                 << " as associated header of " << GetFilePath(includer) << ".\n";
    

    maflcko commented at 3:16 PM on March 31, 2026:

    Ah, I see. Good to know, so this is no bug, but intended behavior. Also, it doesn't really matter, as long as the include is there one way or another. Let's recall the goal here is to avoid compile failures due to missing includes. And the goal is achieved with the changes in this pull request. (Feel free to close the two threads for now)

  102. in src/util/fs.cpp:11 in 8b49e2dd4e
       2 | @@ -3,23 +3,21 @@
       3 |  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       4 |  
       5 |  #include <util/fs.h>
       6 | +
       7 | +#include <util/check.h>
       8 |  #include <util/syserror.h>
       9 |  
      10 | +#include <cerrno>
      11 | +#include <string>
    


    maflcko commented at 8:49 AM on March 31, 2026:

    same here (cstdio)

  103. maflcko approved
  104. maflcko commented at 8:59 AM on March 31, 2026: member

    just two nits/questions but nothing blocking

    review ACK 8b49e2dd4eed93d08a3d9681d444aaf441ab0037 👘

    <details><summary>Show signature</summary>

    Signature:

    untrusted comment: signature from minisign secret key on empty file; verify via: minisign -Vm "${path_to_any_empty_file}" -P RWTRmVTMeKV5noAMqVlsMugDDCyyTSbA3Re5AkUrhvLVln0tSaFWglOw -x "${path_to_this_whole_four_line_signature_blob}"
    RUTRmVTMeKV5npGrKx1nqXCw5zeVHdtdYURB/KlyA/LMFgpNCs+SkW9a8N95d+U4AP1RJMi+krxU1A3Yux4bpwZNLvVBKy0wLgM=
    trusted comment: review ACK 8b49e2dd4eed93d08a3d9681d444aaf441ab0037 👘
    KDKbNGvUrG8+dZ703Dnk1AO/tm/f0rvdF3zHf/KWuNMbUSbXHI1p9DkgMC0C2r+D7KKA2JhscuYGS5MGEJN3BA==
    

    </details>

  105. BrandonOdiwuor commented at 5:31 AM on April 2, 2026: contributor

    Code Review ACK 8b49e2dd4eed93d08a3d9681d444aaf441ab0037

    I manually enabled IWYU enforcement on src/util/ (and the existing enforced modules) on master and compared the results with this PR.

    <details> <summary>Command used to enable IWYU enforcement on master</summary>

    FILES_WITH_ENFORCED_IWYU='/src/(((crypto|index|kernel|primitives|univalue/(lib|test)|util|zmq)/.*|common/license_info|node/blockstorage|node/utxo_snapshot|clientversion|core_io|signet)\.cpp)'
    + jq --arg patterns '/src/(((crypto|index|kernel|primitives|univalue/(lib|test)|util|zmq)/.*|common/license_info|node/blockstorage|node/utxo_snapshot|clientversion|core_io|signet)\.cpp)' 'map(select(.file | test($patterns)))' /home/runner/work/_temp/build/compile_commands.json
    + jq --arg patterns '/src/(((crypto|index|kernel|primitives|univalue/(lib|test)|util|zmq)/.*|common/license_info|node/blockstorage|node/utxo_snapshot|clientversion|core_io|signet)\.cpp)' 'map(select(.file | test($patterns) | not))' /home/runner/work/_temp/build/compile_commands.json
    + cd /home/runner/work/_temp
    + run_iwyu compile_commands_iwyu_errors.json
    + mv /home/runner/work/_temp/build/compile_commands_iwyu_errors.json /home/runner/work/_temp/build/compile_commands.json
    + python3 /include-what-you-use/iwyu_tool.py -p /home/runner/work/_temp/build -j4 -- -Xiwyu --cxx17ns -Xiwyu --mapping_file=/home/runner/work/_temp/contrib/devtools/iwyu/bitcoin.core.imp -Xiwyu --max_line_length=160 -Xiwyu '--check_also=*/primitives/*.h'
    + tee /tmp/iwyu_ci.out
    (/home/runner/work/_temp/src/clientversion.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/clientversion.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/core_io.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/core_io.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/chainparams.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/chainparams.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/blockfilterindex.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/blockfilterindex.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/base.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/base.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/coinstatsindex.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/coinstatsindex.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/chain.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/chain.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/txospenderindex.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/txospenderindex.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/txindex.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/index/txindex.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/checks.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/checks.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/cs_main.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/cs_main.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/mempool_removal_reason.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/mempool_removal_reason.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/context.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/context.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/disconnected_transactions.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/disconnected_transactions.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/coinstats.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/coinstats.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/univalue/include/univalue.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/univalue/lib/univalue.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/univalue/lib/univalue_get.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/signet.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/signet.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/univalue/lib/univalue_read.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/univalue/lib/univalue_write.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/univalue/test/unitester.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/univalue/test/object.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/chacha20.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/chacha20.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/aes.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/aes.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/chacha20poly1305.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/chacha20poly1305.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/node/utxo_snapshot.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/node/utxo_snapshot.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/hex_base.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/hex_base.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/hmac_sha512.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/hmac_sha512.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/hkdf_sha256_32.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/hkdf_sha256_32.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/hmac_sha256.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/hmac_sha256.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/ripemd160.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/ripemd160.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/poly1305.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/poly1305.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha1.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha1.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha256_sse4.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/node/blockstorage.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/node/blockstorage.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha512.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha512.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha3.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha3.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha256.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha256.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/muhash.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/muhash.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/siphash.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/siphash.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha256_sse41.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha256_avx2.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/crypto/sha256_x86_shani.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/batchpriority.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/batchpriority.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/chaintype.h should add these lines:
    #include <string_view>  // for string_view
    /home/runner/work/_temp/src/util/chaintype.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/chaintype.h:
    #include <optional>     // for optional
    #include <string>       // for string
    #include <string_view>  // for string_view
    ---
    (/home/runner/work/_temp/src/util/chaintype.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/bip32.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/bip32.cpp should add these lines:
    #include <optional>             // for optional
    /home/runner/work/_temp/src/util/bip32.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/bip32.cpp:
    #include <util/bip32.h>
    #include <tinyformat.h>         // for format, formatTruncated, formatValue, makeFormatList, strprintf
    #include <util/strencodings.h>  // for ToIntegral
    #include <cstdint>              // for uint32_t
    #include <cstdio>               // for size_t
    #include <optional>             // for optional
    #include <sstream>              // for basic_istream, basic_stringstream, stringstream
    ---
    (/home/runner/work/_temp/src/util/asmap.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/asmap.cpp should add these lines:
    #include <string>      // for basic_string
    /home/runner/work/_temp/src/util/asmap.cpp should remove these lines:
    - #include <clientversion.h>  // lines 7-7
    - #include <serialize.h>  // lines 9-9
    - #include <algorithm>  // lines 15-15
    The full include-list for /home/runner/work/_temp/src/util/asmap.cpp:
    #include <util/asmap.h>
    #include <hash.h>      // for HashWriter
    #include <streams.h>   // for AutoFile
    #include <uint256.h>   // for uint256
    #include <util/fs.h>   // for PathToString, quoted, fopen, path
    #include <util/log.h>  // for LogPrintFormatInternal, LogWarning, LogInfo
    #include <bit>         // for bit_width
    #include <cassert>     // for assert
    #include <cstddef>     // for byte, size_t, to_integer
    #include <cstdio>      // for FILE
    #include <span>        // for span
    #include <string>      // for basic_string
    #include <utility>     // for pair
    #include <vector>      // for vector
    ---
    /home/runner/work/_temp/src/util/check.h should add these lines:
    #include <type_traits>      // for is_constant_evaluated
    /home/runner/work/_temp/src/util/check.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/check.h:
    #include <attributes.h>     // for LIFETIMEBOUND
    #include <atomic>           // for atomic
    #include <cassert>
    #include <source_location>  // for source_location
    #include <stdexcept>        // for runtime_error
    #include <string>           // for string
    #include <string_view>      // for string_view
    #include <type_traits>      // for is_constant_evaluated
    #include <utility>          // for forward
    ---
    (/home/runner/work/_temp/src/util/check.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/bytevectorhash.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/bytevectorhash.cpp should add these lines:
    #include <span>              // for span
    /home/runner/work/_temp/src/util/bytevectorhash.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/bytevectorhash.cpp:
    #include <util/bytevectorhash.h>
    #include <crypto/siphash.h>  // for CSipHasher
    #include <random.h>          // for FastRandomContext
    #include <span>              // for span
    #include <vector>            // for vector
    ---
    (/home/runner/work/_temp/src/util/exception.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/exception.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/feefrac.h should add these lines:
    #include <span>             // for span
    #include <utility>          // for pair, swap
    /home/runner/work/_temp/src/util/feefrac.h should remove these lines:
    - #include <span.h>  // lines 8-8
    - #include <vector>  // lines 14-14
    The full include-list for /home/runner/work/_temp/src/util/feefrac.h:
    #include <util/check.h>     // for Assume, inline_assertion_check
    #include <util/overflow.h>  // for CeilDiv
    #include <compare>          // for strong_ordering, partial_ordering, weak_ordering
    #include <cstdint>          // for int64_t, int32_t, uint32_t, uint64_t
    #include <span>             // for span
    #include <utility>          // for pair, swap
    ---
    /home/runner/work/_temp/src/util/feefrac.cpp should add these lines:
    #include <cstddef>  // for size_t
    /home/runner/work/_temp/src/util/feefrac.cpp should remove these lines:
    - #include <algorithm>  // lines 6-6
    - #include <vector>  // lines 8-8
    The full include-list for /home/runner/work/_temp/src/util/feefrac.cpp:
    #include <util/feefrac.h>
    #include <array>    // for array
    #include <cstddef>  // for size_t
    ---
    (/home/runner/work/_temp/src/util/exec.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/exec.cpp should add these lines:
    #include <cstdlib>       // for getenv
    #include <system_error>  // for error_code
    /home/runner/work/_temp/src/util/exec.cpp should remove these lines:
    - #include <util/subprocess.h>  // lines 8-8
    - #include <vector>  // lines 11-11
    The full include-list for /home/runner/work/_temp/src/util/exec.cpp:
    #include <util/exec.h>
    #include <unistd.h>      // for size_t, execvp
    #include <util/fs.h>     // for path, PathFromString, is_regular_file, operator/
    #include <cstdlib>       // for getenv
    #include <string>        // for basic_string, string
    #include <system_error>  // for error_code
    ---
    /home/runner/work/_temp/src/util/fs.h should add these lines:
    /home/runner/work/_temp/src/util/fs.h should remove these lines:
    - #include <tinyformat.h>  // lines 8-8
    - #include <ostream>  // lines 15-15
    - #include <system_error>  // lines 18-18
    The full include-list for /home/runner/work/_temp/src/util/fs.h:
    #include <cstdio>       // for FILE
    #include <filesystem>
    #include <functional>   // for function
    #include <iomanip>      // for quoted
    #include <ios>          // for ostream
    #include <string>       // for basic_string, string, u8string
    #include <string_view>  // for string_view
    #include <type_traits>  // for is_same_v
    #include <utility>      // for move
    ---
    /home/runner/work/_temp/src/util/fs.cpp should add these lines:
    /home/runner/work/_temp/src/util/fs.cpp should remove these lines:
    - #include <sys/file.h>  // lines 11-11
    - #include <sys/utsname.h>  // lines 12-12
    - #include <cstring>  // lines 9-9
    The full include-list for /home/runner/work/_temp/src/util/fs.cpp:
    #include <util/fs.h>
    #include <fcntl.h>          // for flock, F_SETLK, F_WRLCK, O_RDWR, fcntl, open
    #include <unistd.h>         // for close
    #include <util/syserror.h>  // for SysErrorString
    #include <cassert>          // for assert
    #include <cerrno>           // for errno
    #include <string>           // for basic_string, string
    ---
    (/home/runner/work/_temp/src/util/moneystr.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/moneystr.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/fs_helpers.h should add these lines:
    #include <string>     // for string
    /home/runner/work/_temp/src/util/fs_helpers.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/fs_helpers.h:
    #include <util/fs.h>  // for path, perms
    #include <cstdint>    // for uint64_t
    #include <cstdio>     // for FILE
    #include <iosfwd>     // for streamsize, streampos
    #include <limits>     // for numeric_limits
    #include <optional>   // for optional
    #include <string>     // for string
    ---
    /home/runner/work/_temp/src/util/fs_helpers.cpp should add these lines:
    #include <sys/types.h>             // for off_t
    /home/runner/work/_temp/src/util/fs_helpers.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/fs_helpers.cpp:
    #include <util/fs_helpers.h>
    #include <bitcoin-build-config.h>  // for HAVE_FDATASYNC, HAVE_POSIX_FALLOCATE
    #include <fcntl.h>                 // for posix_fallocate
    #include <sync.h>                  // for LOCK, MaybeCheckNotHeld, UniqueLock, GlobalMutex, GUARDED_BY
    #include <sys/resource.h>          // for rlimit, RLIMIT_NOFILE, getrlimit, rlim_t, setrlimit
    #include <sys/types.h>             // for off_t
    #include <unistd.h>                // for fdatasync, fsync, ftruncate
    #include <util/fs.h>               // for perms, FileLock, path, operator|, PathToString, fopen, filesystem_error, operator/, create_directories, exists
    #include <util/log.h>              // for LogError, LogPrintFormatInternal
    #include <util/syserror.h>         // for SysErrorString
    #include <cerrno>                  // for errno, EINVAL
    #include <fstream>                 // for basic_ifstream, basic_ios
    #include <map>                     // for map
    #include <memory>                  // for unique_ptr, make_unique
    #include <optional>                // for optional, nullopt, nullopt_t
    #include <string>                  // for basic_string, string, operator<=>, operator==
    #include <system_error>            // for error_code
    #include <utility>                 // for move
    ---
    (/home/runner/work/_temp/src/util/serfloat.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/serfloat.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/signalinterrupt.h should add these lines:
    /home/runner/work/_temp/src/util/signalinterrupt.h should remove these lines:
    - #include <cstdlib>  // lines 16-16
    The full include-list for /home/runner/work/_temp/src/util/signalinterrupt.h:
    #include <util/tokenpipe.h>  // for TokenPipeEnd
    #include <atomic>            // for atomic
    ---
    (/home/runner/work/_temp/src/util/signalinterrupt.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/readwritefile.h should add these lines:
    #include <cstddef>    // for size_t
    /home/runner/work/_temp/src/util/readwritefile.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/readwritefile.h:
    #include <util/fs.h>  // for path
    #include <cstddef>    // for size_t
    #include <limits>     // for numeric_limits
    #include <string>     // for string
    #include <utility>    // for pair
    ---
    /home/runner/work/_temp/src/util/readwritefile.cpp should add these lines:
    /home/runner/work/_temp/src/util/readwritefile.cpp should remove these lines:
    - #include <limits>  // lines 12-12
    The full include-list for /home/runner/work/_temp/src/util/readwritefile.cpp:
    #include <util/readwritefile.h>
    #include <util/fs.h>  // for fopen, path (ptr only)
    #include <algorithm>  // for min
    #include <cstdio>     // for fclose, FILE, feof, ferror, fread, fwrite
    #include <string>     // for basic_string, string
    #include <utility>    // for pair, make_pair
    ---
    /home/runner/work/_temp/src/util/hasher.h should add these lines:
    #include <span>                      // for span
    /home/runner/work/_temp/src/util/hasher.h should remove these lines:
    - #include <span.h>  // lines 11-11
    - #include <concepts>  // lines 14-14
    The full include-list for /home/runner/work/_temp/src/util/hasher.h:
    #include <crypto/common.h>           // for ReadLE64
    #include <crypto/siphash.h>          // for PresaltedSipHasher
    #include <primitives/transaction.h>  // for COutPoint, Txid, Wtxid
    #include <uint256.h>                 // for uint256
    #include <cstdint>                   // for uint32_t, uint64_t, uint8_t
    #include <cstring>                   // for size_t, memcpy
    #include <span>                      // for span
    ---
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/hasher.cpp should add these lines:
    /home/runner/work/_temp/src/util/hasher.cpp should remove these lines:
    - #include <span.h>  // lines 7-7
    The full include-list for /home/runner/work/_temp/src/util/hasher.cpp:
    #include <util/hasher.h>
    #include <crypto/siphash.h>  // for CSipHasher
    #include <random.h>          // for FastRandomContext
    ---
    (/home/runner/work/_temp/src/util/rbf.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/rbf.cpp should add these lines:
    #include <vector>                    // for vector
    /home/runner/work/_temp/src/util/rbf.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/rbf.cpp:
    #include <util/rbf.h>
    #include <primitives/transaction.h>  // for CTransaction, CTxIn
    #include <vector>                    // for vector
    ---
    /home/runner/work/_temp/src/util/strencodings.h should add these lines:
    #include <span>           // for span
    /home/runner/work/_temp/src/util/strencodings.h should remove these lines:
    - #include <crypto/hex_base.h>  // lines 12-12
    - #include <algorithm>  // lines 16-16
    The full include-list for /home/runner/work/_temp/src/util/strencodings.h:
    #include <span.h>         // for MakeUCharSpan, UCharCast
    #include <util/string.h>  // for TrimStringView
    #include <array>          // for array
    #include <bit>            // for bit_cast
    #include <charconv>       // for from_chars
    #include <cstddef>        // for size_t, byte
    #include <cstdint>        // for uint8_t, uint64_t, int64_t, uint16_t
    #include <limits>         // for numeric_limits
    #include <optional>       // for optional, nullopt
    #include <span>           // for span
    #include <string>         // for string, basic_string, hash, operator==
    #include <string_view>    // for string_view
    #include <system_error>   // for errc
    #include <type_traits>    // for is_integral_v
    #include <vector>         // for vector
    ---
    /home/runner/work/_temp/src/util/strencodings.cpp should add these lines:
    #include <compare>            // for operator>
    #include <sstream>            // for basic_stringstream, basic_ostream, operator<<, stringstream
    /home/runner/work/_temp/src/util/strencodings.cpp should remove these lines:
    - #include <array>  // lines 12-12
    - #include <cstring>  // lines 14-14
    - #include <ostream>  // lines 17-17
    The full include-list for /home/runner/work/_temp/src/util/strencodings.cpp:
    #include <util/strencodings.h>
    #include <crypto/hex_base.h>  // for HexDigit
    #include <span.h>             // for MakeUCharSpan
    #include <util/overflow.h>    // for CeilDiv
    #include <cassert>            // for assert
    #include <compare>            // for operator>
    #include <limits>             // for numeric_limits
    #include <optional>           // for optional, nullopt, nullopt_t, operator<=>
    #include <sstream>            // for basic_stringstream, basic_ostream, operator<<, stringstream
    #include <string>             // for basic_string, string, char_traits, operator+, operator<<
    #include <vector>             // for vector
    ---
    (/home/runner/work/_temp/src/util/syserror.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/syserror.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/sock.h should add these lines:
    #include <cstdint>          // for uint8_t
    #include <limits>           // for numeric_limits
    class CThreadInterrupt;
    /home/runner/work/_temp/src/util/sock.h should remove these lines:
    - #include <util/threadinterrupt.h>  // lines 9-9
    - #include <util/time.h>  // lines 10-10
    The full include-list for /home/runner/work/_temp/src/util/sock.h:
    #include <compat/compat.h>  // for socklen_t, SOCKET, size_t, ssize_t
    #include <chrono>           // for milliseconds
    #include <cstdint>          // for uint8_t
    #include <limits>           // for numeric_limits
    #include <memory>           // for shared_ptr, unique_ptr
    #include <span>             // for span
    #include <string>           // for string
    #include <unordered_map>    // for unordered_map
    class CThreadInterrupt;
    ---
    /home/runner/work/_temp/src/util/sock.cpp should add these lines:
    #include <algorithm>               // for min, find
    #include <cassert>                 // for assert
    #include <compare>                 // for operator>=, strong_ordering
    #include <exception>               // for exception
    #include <utility>                 // for get, make_pair, pair
    #include <vector>                  // for vector
    /home/runner/work/_temp/src/util/sock.cpp should remove these lines:
    - #include <common/system.h>  // lines 7-7
    The full include-list for /home/runner/work/_temp/src/util/sock.cpp:
    #include <util/sock.h>
    #include <compat/compat.h>         // for size_t, socklen_t, INVALID_SOCKET, ssize_t, SOCKET_ERROR, WSAGetLastError, SOCKET, USE_POLL, fcntl, MSG_PEEK, close
    #include <poll.h>                  // for pollfd, POLLIN, POLLOUT, POLLERR, POLLHUP, poll
    #include <span.h>                  // for MakeUCharSpan
    #include <tinyformat.h>            // for format, formatTruncated, formatValue, makeFormatList, strprintf
    #include <util/log.h>              // for LogPrintFormatInternal, LogWarning
    #include <util/syserror.h>         // for SysErrorString
    #include <util/threadinterrupt.h>  // for CThreadInterrupt
    #include <util/time.h>             // for GetTime, count_milliseconds
    #include <algorithm>               // for min, find
    #include <cassert>                 // for assert
    #include <compare>                 // for operator>=, strong_ordering
    #include <exception>               // for exception
    #include <memory>                  // for shared_ptr, unique_ptr, make_unique
    #include <stdexcept>               // for runtime_error
    #include <string>                  // for basic_string, string
    #include <utility>                 // for get, make_pair, pair
    #include <vector>                  // for vector
    ---
    /home/runner/work/_temp/src/util/string.h should add these lines:
    #include <algorithm>         // for equal, max
    #include <cstddef>           // for size_t, byte
    #include <initializer_list>  // for begin, end
    #include <span>              // for span
    /home/runner/work/_temp/src/util/string.h should remove these lines:
    - #include <span.h>  // lines 8-8
    - #include <cstring>  // lines 12-12
    The full include-list for /home/runner/work/_temp/src/util/string.h:
    #include <algorithm>         // for equal, max
    #include <array>             // for array
    #include <cstddef>           // for size_t, byte
    #include <cstdint>           // for uint8_t
    #include <initializer_list>  // for begin, end
    #include <locale>            // for locale
    #include <optional>          // for optional
    #include <span>              // for span
    #include <sstream>           // for basic_ostringstream, basic_ios::imbue, ostringstream
    #include <string>            // for basic_string, string, operator+
    #include <string_view>       // for string_view
    #include <vector>            // for vector
    ---
    /home/runner/work/_temp/src/util/string.cpp should add these lines:
    #include <iterator>   // for distance
    #include <memory>     // for to_address
    #include <stdexcept>  // for runtime_error
    /home/runner/work/_temp/src/util/string.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/string.cpp:
    #include <util/string.h>
    #include <iterator>   // for distance
    #include <memory>     // for to_address
    #include <regex>      // for regex, regex_replace
    #include <stdexcept>  // for runtime_error
    #include <string>     // for basic_string, string
    ---
    /home/runner/work/_temp/src/util/thread.h should add these lines:
    #include <string_view>  // for string_view
    /home/runner/work/_temp/src/util/thread.h should remove these lines:
    - #include <string>  // lines 9-9
    The full include-list for /home/runner/work/_temp/src/util/thread.h:
    #include <functional>   // for function
    #include <string_view>  // for string_view
    ---
    /home/runner/work/_temp/src/util/thread.cpp should add these lines:
    /home/runner/work/_temp/src/util/thread.cpp should remove these lines:
    - #include <utility>  // lines 14-14
    The full include-list for /home/runner/work/_temp/src/util/thread.cpp:
    #include <util/thread.h>
    #include <util/exception.h>    // for PrintExceptionContinue
    #include <util/log.h>          // for LogInfo, LogPrintFormatInternal
    #include <util/threadnames.h>  // for ThreadRename
    #include <exception>           // for exception
    #include <functional>          // for function
    #include <string>              // for basic_string, string
    ---
    (/home/runner/work/_temp/src/util/tokenpipe.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/tokenpipe.cpp should add these lines:
    #include <sys/types.h>             // for ssize_t
    /home/runner/work/_temp/src/util/tokenpipe.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/tokenpipe.cpp:
    #include <util/tokenpipe.h>
    #include <bitcoin-build-config.h>  // for HAVE_DECL_PIPE2, HAVE_O_CLOEXEC
    #include <fcntl.h>                 // for O_CLOEXEC
    #include <sys/types.h>             // for ssize_t
    #include <unistd.h>                // for close, pipe2, read, write
    #include <cerrno>                  // for EINTR, errno
    #include <optional>                // for optional, nullopt, nullopt_t
    ---
    (/home/runner/work/_temp/src/util/threadnames.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/threadnames.cpp should add these lines:
    #include <algorithm>    // for min
    /home/runner/work/_temp/src/util/threadnames.cpp should remove these lines:
    - #include <thread>  // lines 7-7
    - #include <utility>  // lines 8-8
    The full include-list for /home/runner/work/_temp/src/util/threadnames.cpp:
    #include <util/threadnames.h>
    #include <sys/prctl.h>  // for PR_SET_NAME, prctl
    #include <algorithm>    // for min
    #include <cstring>      // for memcpy, size_t
    #include <string>       // for allocator, basic_string, string, char_traits, operator+
    ---
    (/home/runner/work/_temp/src/util/threadinterrupt.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/threadinterrupt.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqabstractnotifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqabstractnotifier.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/time.h should add these lines:
    #include <sys/time.h>   // for timeval
    #include <ctime>        // for time_t
    /home/runner/work/_temp/src/util/time.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/time.h:
    #include <sys/time.h>   // for timeval
    #include <chrono>
    #include <cstdint>      // for int64_t
    #include <ctime>        // for time_t
    #include <optional>     // for optional
    #include <string>       // for string
    #include <string_view>  // for string_view
    ---
    /home/runner/work/_temp/src/util/time.cpp should add these lines:
    #include <compare>              // for strong_ordering, operator>=, operator>
    /home/runner/work/_temp/src/util/time.cpp should remove these lines:
    - #include <compat/compat.h>  // lines 8-8
    The full include-list for /home/runner/work/_temp/src/util/time.cpp:
    #include <util/time.h>
    #include <tinyformat.h>         // for formatTruncated, formatValue, format, makeFormatList, strprintf
    #include <util/check.h>         // for Assert, inline_assertion_check, assert
    #include <util/strencodings.h>  // for ToIntegral
    #include <array>                // for array
    #include <atomic>               // for atomic, memory_order_relaxed
    #include <chrono>               // for year_month_day, duration, seconds, time_point, hh_mm_ss, day, month, year, days, floor, operator+, operator<=>, sys_s...
    #include <compare>              // for strong_ordering, operator>=, operator>
    #include <optional>             // for optional
    #include <string>               // for basic_string, string
    #include <string_view>          // for basic_string_view, string_view
    #include <thread>               // for sleep_for
    ---
    (/home/runner/work/_temp/src/zmq/zmqnotificationinterface.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqnotificationinterface.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqutil.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqutil.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqrpc.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqrpc.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqpublishnotifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/zmq/zmqpublishnotifier.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/chain.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/chain.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/checks.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/checks.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/context.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/context.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/chainparams.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/chainparams.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/cs_main.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/cs_main.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/mempool_removal_reason.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/mempool_removal_reason.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/bitcoinkernel.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/bitcoinkernel.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/disconnected_transactions.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/disconnected_transactions.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/coinstats.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/kernel/coinstats.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/chaintype.h should add these lines:
    #include <string_view>  // for string_view
    /home/runner/work/_temp/src/util/chaintype.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/chaintype.h:
    #include <optional>     // for optional
    #include <string>       // for string
    #include <string_view>  // for string_view
    ---
    (/home/runner/work/_temp/src/util/chaintype.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/check.h should add these lines:
    #include <type_traits>      // for is_constant_evaluated
    /home/runner/work/_temp/src/util/check.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/check.h:
    #include <attributes.h>     // for LIFETIMEBOUND
    #include <atomic>           // for atomic
    #include <cassert>
    #include <source_location>  // for source_location
    #include <stdexcept>        // for runtime_error
    #include <string>           // for string
    #include <string_view>      // for string_view
    #include <type_traits>      // for is_constant_evaluated
    #include <utility>          // for forward
    ---
    (/home/runner/work/_temp/src/util/check.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/node/utxo_snapshot.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/node/utxo_snapshot.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/expected.h should add these lines:
    /home/runner/work/_temp/src/util/expected.h should remove these lines:
    - #include <cassert>  // lines 11-11
    The full include-list for /home/runner/work/_temp/src/util/expected.h:
    #include <attributes.h>  // for LIFETIMEBOUND
    #include <util/check.h>  // for Assert
    #include <exception>     // for exception
    #include <utility>       // for get, move, in_place_index, forward
    #include <variant>       // for get, get_if, monostate, variant
    ---
    (/home/runner/work/_temp/src/util/expected.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/signet.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/signet.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/feefrac.h should add these lines:
    #include <span>             // for span
    #include <utility>          // for pair, swap
    /home/runner/work/_temp/src/util/feefrac.h should remove these lines:
    - #include <span.h>  // lines 8-8
    - #include <vector>  // lines 14-14
    The full include-list for /home/runner/work/_temp/src/util/feefrac.h:
    #include <util/check.h>     // for Assume, inline_assertion_check
    #include <util/overflow.h>  // for CeilDiv
    #include <compare>          // for strong_ordering, partial_ordering, weak_ordering
    #include <cstdint>          // for int64_t, int32_t, uint32_t, uint64_t
    #include <span>             // for span
    #include <utility>          // for pair, swap
    ---
    /home/runner/work/_temp/src/util/feefrac.cpp should add these lines:
    #include <cstddef>  // for size_t
    /home/runner/work/_temp/src/util/feefrac.cpp should remove these lines:
    - #include <algorithm>  // lines 6-6
    - #include <vector>  // lines 8-8
    The full include-list for /home/runner/work/_temp/src/util/feefrac.cpp:
    #include <util/feefrac.h>
    #include <array>    // for array
    #include <cstddef>  // for size_t
    ---
    /home/runner/work/_temp/src/util/fs.h should add these lines:
    /home/runner/work/_temp/src/util/fs.h should remove these lines:
    - #include <tinyformat.h>  // lines 8-8
    - #include <ostream>  // lines 15-15
    - #include <system_error>  // lines 18-18
    The full include-list for /home/runner/work/_temp/src/util/fs.h:
    #include <cstdio>       // for FILE
    #include <filesystem>
    #include <functional>   // for function
    #include <iomanip>      // for quoted
    #include <ios>          // for ostream
    #include <string>       // for basic_string, string, u8string
    #include <string_view>  // for string_view
    #include <type_traits>  // for is_same_v
    #include <utility>      // for move
    ---
    /home/runner/work/_temp/src/util/fs.cpp should add these lines:
    /home/runner/work/_temp/src/util/fs.cpp should remove these lines:
    - #include <sys/file.h>  // lines 11-11
    - #include <sys/utsname.h>  // lines 12-12
    - #include <cstring>  // lines 9-9
    The full include-list for /home/runner/work/_temp/src/util/fs.cpp:
    #include <util/fs.h>
    #include <fcntl.h>          // for flock, F_SETLK, F_WRLCK, O_RDWR, fcntl, open
    #include <unistd.h>         // for close
    #include <util/syserror.h>  // for SysErrorString
    #include <cassert>          // for assert
    #include <cerrno>           // for errno
    #include <string>           // for basic_string, string
    ---
    (/home/runner/work/_temp/src/node/blockstorage.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/block.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/node/blockstorage.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/fs_helpers.h should add these lines:
    #include <string>     // for string
    /home/runner/work/_temp/src/util/fs_helpers.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/fs_helpers.h:
    #include <util/fs.h>  // for path, perms
    #include <cstdint>    // for uint64_t
    #include <cstdio>     // for FILE
    #include <iosfwd>     // for streamsize, streampos
    #include <limits>     // for numeric_limits
    #include <optional>   // for optional
    #include <string>     // for string
    ---
    /home/runner/work/_temp/src/util/fs_helpers.cpp should add these lines:
    #include <sys/types.h>             // for off_t
    /home/runner/work/_temp/src/util/fs_helpers.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/fs_helpers.cpp:
    #include <util/fs_helpers.h>
    #include <bitcoin-build-config.h>  // for HAVE_FDATASYNC, HAVE_POSIX_FALLOCATE
    #include <fcntl.h>                 // for posix_fallocate
    #include <sync.h>                  // for LOCK, MaybeCheckNotHeld, UniqueLock, GlobalMutex, GUARDED_BY
    #include <sys/resource.h>          // for rlimit, RLIMIT_NOFILE, getrlimit, rlim_t, setrlimit
    #include <sys/types.h>             // for off_t
    #include <unistd.h>                // for fdatasync, fsync, ftruncate
    #include <util/fs.h>               // for perms, FileLock, path, operator|, PathToString, fopen, filesystem_error, operator/, create_directories, exists
    #include <util/log.h>              // for LogError, LogPrintFormatInternal
    #include <util/syserror.h>         // for SysErrorString
    #include <cerrno>                  // for errno, EINVAL
    #include <fstream>                 // for basic_ifstream, basic_ios
    #include <map>                     // for map
    #include <memory>                  // for unique_ptr, make_unique
    #include <optional>                // for optional, nullopt, nullopt_t
    #include <string>                  // for basic_string, string, operator<=>, operator==
    #include <system_error>            // for error_code
    #include <utility>                 // for move
    ---
    (/home/runner/work/_temp/src/util/moneystr.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/moneystr.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/serfloat.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/serfloat.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/hasher.h should add these lines:
    #include <span>                      // for span
    /home/runner/work/_temp/src/util/hasher.h should remove these lines:
    - #include <span.h>  // lines 11-11
    - #include <concepts>  // lines 14-14
    The full include-list for /home/runner/work/_temp/src/util/hasher.h:
    #include <crypto/common.h>           // for ReadLE64
    #include <crypto/siphash.h>          // for PresaltedSipHasher
    #include <primitives/transaction.h>  // for COutPoint, Txid, Wtxid
    #include <uint256.h>                 // for uint256
    #include <cstdint>                   // for uint32_t, uint64_t, uint8_t
    #include <cstring>                   // for size_t, memcpy
    #include <span>                      // for span
    ---
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/hasher.cpp should add these lines:
    /home/runner/work/_temp/src/util/hasher.cpp should remove these lines:
    - #include <span.h>  // lines 7-7
    The full include-list for /home/runner/work/_temp/src/util/hasher.cpp:
    #include <util/hasher.h>
    #include <crypto/siphash.h>  // for CSipHasher
    #include <random.h>          // for FastRandomContext
    ---
    (/home/runner/work/_temp/src/util/rbf.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/primitives/transaction_identifier.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/rbf.cpp should add these lines:
    #include <vector>                    // for vector
    /home/runner/work/_temp/src/util/rbf.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/rbf.cpp:
    #include <util/rbf.h>
    #include <primitives/transaction.h>  // for CTransaction, CTxIn
    #include <vector>                    // for vector
    ---
    /home/runner/work/_temp/src/util/signalinterrupt.h should add these lines:
    /home/runner/work/_temp/src/util/signalinterrupt.h should remove these lines:
    - #include <cstdlib>  // lines 16-16
    The full include-list for /home/runner/work/_temp/src/util/signalinterrupt.h:
    #include <util/tokenpipe.h>  // for TokenPipeEnd
    #include <atomic>            // for atomic
    ---
    (/home/runner/work/_temp/src/util/signalinterrupt.cpp has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/tokenpipe.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/tokenpipe.cpp should add these lines:
    #include <sys/types.h>             // for ssize_t
    /home/runner/work/_temp/src/util/tokenpipe.cpp should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/tokenpipe.cpp:
    #include <util/tokenpipe.h>
    #include <bitcoin-build-config.h>  // for HAVE_DECL_PIPE2, HAVE_O_CLOEXEC
    #include <fcntl.h>                 // for O_CLOEXEC
    #include <sys/types.h>             // for ssize_t
    #include <unistd.h>                // for close, pipe2, read, write
    #include <cerrno>                  // for EINTR, errno
    #include <optional>                // for optional, nullopt, nullopt_t
    ---
    (/home/runner/work/_temp/src/util/threadnames.h has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/threadnames.cpp should add these lines:
    #include <algorithm>    // for min
    /home/runner/work/_temp/src/util/threadnames.cpp should remove these lines:
    - #include <thread>  // lines 7-7
    - #include <utility>  // lines 8-8
    The full include-list for /home/runner/work/_temp/src/util/threadnames.cpp:
    #include <util/threadnames.h>
    #include <sys/prctl.h>  // for PR_SET_NAME, prctl
    #include <algorithm>    // for min
    #include <cstring>      // for memcpy, size_t
    #include <string>       // for allocator, basic_string, string, char_traits, operator+
    ---
    (/home/runner/work/_temp/src/util/syserror.h has correct #includes/fwd-decls)
    (/home/runner/work/_temp/src/util/syserror.cpp has correct #includes/fwd-decls)
    /home/runner/work/_temp/src/util/time.h should add these lines:
    #include <sys/time.h>   // for timeval
    #include <ctime>        // for time_t
    /home/runner/work/_temp/src/util/time.h should remove these lines:
    The full include-list for /home/runner/work/_temp/src/util/time.h:
    #include <sys/time.h>   // for timeval
    #include <chrono>
    #include <cstdint>      // for int64_t
    #include <ctime>        // for time_t
    #include <optional>     // for optional
    #include <string>       // for string
    #include <string_view>  // for string_view
    ---
    /home/runner/work/_temp/src/util/time.cpp should add these lines:
    #include <compare>              // for strong_ordering, operator>=, operator>
    /home/runner/work/_temp/src/util/time.cpp should remove these lines:
    - #include <compat/compat.h>  // lines 8-8
    The full include-list for /home/runner/work/_temp/src/util/time.cpp:
    #include <util/time.h>
    #include <tinyformat.h>         // for formatTruncated, formatValue, format, makeFormatList, strprintf
    #include <util/check.h>         // for Assert, inline_assertion_check, assert
    #include <util/strencodings.h>  // for ToIntegral
    #include <array>                // for array
    #include <atomic>               // for atomic, memory_order_relaxed
    #include <chrono>               // for year_month_day, duration, seconds, time_point, hh_mm_ss, day, month, year, days, floor, operator+, operator<=>, sys_s...
    #include <compare>              // for strong_ordering, operator>=, operator>
    #include <optional>             // for optional
    #include <string>               // for basic_string, string
    #include <string_view>          // for basic_string_view, string_view
    #include <thread>               // for sleep_for
    ---
    + python3 /include-what-you-use/fix_includes.py --nosafe_headers
    (skipping /home/runner/work/_temp/src/clientversion.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/clientversion.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/primitives/transaction.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/primitives/transaction_identifier.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/primitives/transaction.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/primitives/block.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/primitives/block.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/core_io.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/core_io.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/chainparams.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/chainparams.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/blockfilterindex.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/blockfilterindex.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/base.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/base.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/coinstatsindex.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/coinstatsindex.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/chain.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/chain.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/txospenderindex.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/txospenderindex.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/txindex.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/index/txindex.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/checks.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/checks.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/cs_main.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/cs_main.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/mempool_removal_reason.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/mempool_removal_reason.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/context.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/context.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/disconnected_transactions.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/disconnected_transactions.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/coinstats.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/coinstats.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/univalue/include/univalue.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/univalue/lib/univalue.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/univalue/lib/univalue_get.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/signet.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/signet.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/univalue/lib/univalue_read.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/univalue/lib/univalue_write.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/univalue/test/unitester.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/univalue/test/object.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/chacha20.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/chacha20.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/aes.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/aes.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/chacha20poly1305.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/chacha20poly1305.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/node/utxo_snapshot.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/node/utxo_snapshot.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/hex_base.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/hex_base.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/hmac_sha512.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/hmac_sha512.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/hkdf_sha256_32.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/hkdf_sha256_32.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/hmac_sha256.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/hmac_sha256.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/ripemd160.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/ripemd160.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/poly1305.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/poly1305.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha1.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha1.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha256_sse4.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/node/blockstorage.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/node/blockstorage.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha512.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha512.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha3.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha3.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha256.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha256.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/muhash.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/muhash.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/siphash.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/siphash.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha256_sse41.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha256_avx2.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/crypto/sha256_x86_shani.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/batchpriority.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/batchpriority.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/chaintype.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/bip32.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/asmap.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/check.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/bytevectorhash.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/exception.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/exception.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/exec.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/moneystr.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/moneystr.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/serfloat.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/serfloat.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/signalinterrupt.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/rbf.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/syserror.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/syserror.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/tokenpipe.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/threadnames.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/threadinterrupt.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/threadinterrupt.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqabstractnotifier.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqabstractnotifier.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqnotificationinterface.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqnotificationinterface.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqutil.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqutil.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqrpc.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqrpc.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqpublishnotifier.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/zmq/zmqpublishnotifier.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/bitcoinkernel.h: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/kernel/bitcoinkernel.cpp: iwyu reports no contentful changes)
    (skipping /home/runner/work/_temp/src/util/expected.cpp: iwyu reports no contentful changes)
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/chaintype.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/bip32.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/asmap.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/check.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/bytevectorhash.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/feefrac.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/feefrac.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/exec.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/fs.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/fs.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/fs_helpers.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/fs_helpers.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/signalinterrupt.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/readwritefile.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/readwritefile.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/hasher.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/hasher.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/rbf.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/strencodings.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/strencodings.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/sock.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/sock.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/string.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/string.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/thread.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/thread.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/tokenpipe.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/threadnames.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/time.h'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/time.cpp'
    >>> Fixing #includes in '/home/runner/work/_temp/src/util/expected.h'
    IWYU edited 31 files on your behalf.
    + git diff -U1
    + ./contrib/devtools/clang-format-diff.py -binary=clang-format-22 -p1 -i -v
    Formatting src/util/asmap.cpp
    Formatting src/util/bip32.cpp
    Formatting src/util/bytevectorhash.cpp
    Formatting src/util/chaintype.h
    Formatting src/util/check.h
    Formatting src/util/exec.cpp
    Formatting src/util/expected.h
    Formatting src/util/feefrac.cpp
    Formatting src/util/feefrac.h
    Formatting src/util/fs.cpp
    Formatting src/util/fs.h
    Formatting src/util/fs_helpers.cpp
    Formatting src/util/fs_helpers.h
    Formatting src/util/hasher.cpp
    Formatting src/util/hasher.h
    Formatting src/util/rbf.cpp
    Formatting src/util/readwritefile.cpp
    Formatting src/util/readwritefile.h
    Formatting src/util/signalinterrupt.h
    Formatting src/util/sock.cpp
    Formatting src/util/sock.h
    Formatting src/util/strencodings.cpp
    Formatting src/util/strencodings.h
    Formatting src/util/string.cpp
    Formatting src/util/string.h
    Formatting src/util/thread.cpp
    Formatting src/util/thread.h
    Formatting src/util/threadnames.cpp
    Formatting src/util/time.cpp
    Formatting src/util/time.h
    Formatting src/util/tokenpipe.cpp
    + git --no-pager diff --exit-code
    diff --git a/src/util/asmap.cpp b/src/util/asmap.cpp
    index f8b5a52..c388596 100644
    --- a/src/util/asmap.cpp
    +++ b/src/util/asmap.cpp
    @@ -4,20 +4,18 @@
     
     #include <util/asmap.h>
     
    -#include <clientversion.h>
     #include <hash.h>
    -#include <serialize.h>
     #include <streams.h>
     #include <uint256.h>
     #include <util/fs.h>
     #include <util/log.h>
     
    -#include <algorithm>
     #include <bit>
     #include <cassert>
     #include <cstddef>
     #include <cstdio>
     #include <span>
    +#include <string>
     #include <utility>
     #include <vector>
     
    diff --git a/src/util/bip32.cpp b/src/util/bip32.cpp
    index db40bfb..2488eac 100644
    --- a/src/util/bip32.cpp
    +++ b/src/util/bip32.cpp
    @@ -2,12 +2,14 @@
     // Distributed under the MIT software license, see the accompanying
     // file COPYING or http://www.opensource.org/licenses/mit-license.php.
     
    -#include <tinyformat.h>
     #include <util/bip32.h>
    +
    +#include <tinyformat.h>
     #include <util/strencodings.h>
     
     #include <cstdint>
     #include <cstdio>
    +#include <optional>
     #include <sstream>
     
     bool ParseHDKeypath(const std::string& keypath_str, std::vector<uint32_t>& keypath)
    diff --git a/src/util/bytevectorhash.cpp b/src/util/bytevectorhash.cpp
    index 943517a..4093030 100644
    --- a/src/util/bytevectorhash.cpp
    +++ b/src/util/bytevectorhash.cpp
    @@ -2,10 +2,12 @@
     // Distributed under the MIT software license, see the accompanying
     // file COPYING or http://www.opensource.org/licenses/mit-license.php.
     
    +#include <util/bytevectorhash.h>
    +
     #include <crypto/siphash.h>
     #include <random.h>
    -#include <util/bytevectorhash.h>
     
    +#include <span>
     #include <vector>
     
     ByteVectorHash::ByteVectorHash() :
    diff --git a/src/util/chaintype.h b/src/util/chaintype.h
    index 3b246ea..caae77c 100644
    --- a/src/util/chaintype.h
    +++ b/src/util/chaintype.h
    @@ -7,6 +7,7 @@
     
     #include <optional>
     #include <string>
    +#include <string_view>
     
     enum class ChainType {
         MAIN,
    diff --git a/src/util/check.h b/src/util/check.h
    index 34801ca..ef4040f 100644
    --- a/src/util/check.h
    +++ b/src/util/check.h
    @@ -13,6 +13,7 @@
     #include <stdexcept>
     #include <string>
     #include <string_view>
    +#include <type_traits>
     #include <utility>
     
     constexpr bool G_FUZZING_BUILD{
    diff --git a/src/util/exec.cpp b/src/util/exec.cpp
    index 6b14061..89aa114 100644
    --- a/src/util/exec.cpp
    +++ b/src/util/exec.cpp
    @@ -5,10 +5,10 @@
     #include <util/exec.h>
     
     #include <util/fs.h>
    -#include <util/subprocess.h>
     
    +#include <cstdlib>
     #include <string>
    -#include <vector>
    +#include <system_error>
     
     #ifdef WIN32
     #include <process.h>
    diff --git a/src/util/expected.h b/src/util/expected.h
    index 66fb98e..c88c6de 100644
    --- a/src/util/expected.h
    +++ b/src/util/expected.h
    @@ -8,7 +8,6 @@
     #include <attributes.h>
     #include <util/check.h>
     
    -#include <cassert>
     #include <exception>
     #include <utility>
     #include <variant>
    diff --git a/src/util/feefrac.cpp b/src/util/feefrac.cpp
    index 68ba2b6..3c4664f 100644
    --- a/src/util/feefrac.cpp
    +++ b/src/util/feefrac.cpp
    @@ -3,9 +3,9 @@
     // file COPYING or http://www.opensource.org/licenses/mit-license.php.
     
     #include <util/feefrac.h>
    -#include <algorithm>
    +
     #include <array>
    -#include <vector>
    +#include <cstddef>
     
     std::partial_ordering CompareChunks(std::span<const FeeFrac> chunks0, std::span<const FeeFrac> chunks1)
     {
    diff --git a/src/util/feefrac.h b/src/util/feefrac.h
    index 25d87d3..30ec6b0 100644
    --- a/src/util/feefrac.h
    +++ b/src/util/feefrac.h
    @@ -5,13 +5,13 @@
     #ifndef BITCOIN_UTIL_FEEFRAC_H
     #define BITCOIN_UTIL_FEEFRAC_H
     
    -#include <span.h>
     #include <util/check.h>
     #include <util/overflow.h>
     
     #include <compare>
     #include <cstdint>
    -#include <vector>
    +#include <span>
    +#include <utility>
     
     /** Data structure storing a fee and size, ordered by increasing fee/size.
      *
    diff --git a/src/util/fs.cpp b/src/util/fs.cpp
    index 692f671..eb50260 100644
    --- a/src/util/fs.cpp
    +++ b/src/util/fs.cpp
    @@ -6,14 +6,12 @@
     #include <util/syserror.h>
     
     #ifndef WIN32
    -#include <cstring>
     #include <fcntl.h>
    -#include <sys/file.h>
    -#include <sys/utsname.h>
     #include <unistd.h>
     #else
    -#include <limits>
     #include <windows.h>
    +
    +#include <limits>
     #endif
     
     #include <cassert>
    diff --git a/src/util/fs.h b/src/util/fs.h
    index dce371c..8353a67 100644
    --- a/src/util/fs.h
    +++ b/src/util/fs.h
    @@ -5,17 +5,13 @@
     #ifndef BITCOIN_UTIL_FS_H
     #define BITCOIN_UTIL_FS_H
     
    -#include <tinyformat.h>
    -
     #include <cstdio>
     #include <filesystem> // IWYU pragma: export
     #include <functional>
     #include <iomanip>
     #include <ios>
    -#include <ostream>
     #include <string>
     #include <string_view>
    -#include <system_error>
     #include <type_traits>
     #include <utility>
     
    diff --git a/src/util/fs_helpers.cpp b/src/util/fs_helpers.cpp
    index e7780d7..db7512b 100644
    --- a/src/util/fs_helpers.cpp
    +++ b/src/util/fs_helpers.cpp
    @@ -8,6 +8,7 @@
     #include <util/fs_helpers.h>
     
     #include <sync.h>
    +#include <sys/types.h>
     #include <util/fs.h>
     #include <util/log.h>
     #include <util/syserror.h>
    diff --git a/src/util/fs_helpers.h b/src/util/fs_helpers.h
    index d39ae11..face17f 100644
    --- a/src/util/fs_helpers.h
    +++ b/src/util/fs_helpers.h
    @@ -13,6 +13,7 @@
     #include <iosfwd>
     #include <limits>
     #include <optional>
    +#include <string>
     
     #ifdef __APPLE__
     enum class FSType {
    diff --git a/src/util/hasher.cpp b/src/util/hasher.cpp
    index 3d5ffcf..b12f745 100644
    --- a/src/util/hasher.cpp
    +++ b/src/util/hasher.cpp
    @@ -2,10 +2,10 @@
     // Distributed under the MIT software license, see the accompanying
     // file COPYING or http://www.opensource.org/licenses/mit-license.php.
     
    +#include <util/hasher.h>
    +
     #include <crypto/siphash.h>
     #include <random.h>
    -#include <span.h>
    -#include <util/hasher.h>
     
     SaltedUint256Hasher::SaltedUint256Hasher() : m_hasher{
         FastRandomContext().rand64(),
    diff --git a/src/util/hasher.h b/src/util/hasher.h
    index 02c7703..7e74c67 100644
    --- a/src/util/hasher.h
    +++ b/src/util/hasher.h
    @@ -8,12 +8,11 @@
     #include <crypto/common.h>
     #include <crypto/siphash.h>
     #include <primitives/transaction.h>
    -#include <span.h>
     #include <uint256.h>
     
    -#include <concepts>
     #include <cstdint>
     #include <cstring>
    +#include <span>
     
     class SaltedUint256Hasher
     {
    diff --git a/src/util/rbf.cpp b/src/util/rbf.cpp
    index bc28c6b..82ef020 100644
    --- a/src/util/rbf.cpp
    +++ b/src/util/rbf.cpp
    @@ -6,6 +6,8 @@
     
     #include <primitives/transaction.h>
     
    +#include <vector>
    +
     bool SignalsOptInRBF(const CTransaction &tx)
     {
         for (const CTxIn &txin : tx.vin) {
    diff --git a/src/util/readwritefile.cpp b/src/util/readwritefile.cpp
    index 82b596f..6a9eeb2 100644
    --- a/src/util/readwritefile.cpp
    +++ b/src/util/readwritefile.cpp
    @@ -9,7 +9,6 @@
     
     #include <algorithm>
     #include <cstdio>
    -#include <limits>
     #include <string>
     #include <utility>
     
    diff --git a/src/util/readwritefile.h b/src/util/readwritefile.h
    index 2a9ccf5..54a5a30 100644
    --- a/src/util/readwritefile.h
    +++ b/src/util/readwritefile.h
    @@ -7,6 +7,7 @@
     
     #include <util/fs.h>
     
    +#include <cstddef>
     #include <limits>
     #include <string>
     #include <utility>
    diff --git a/src/util/signalinterrupt.h b/src/util/signalinterrupt.h
    index 027dd15..5a23cd1 100644
    --- a/src/util/signalinterrupt.h
    +++ b/src/util/signalinterrupt.h
    @@ -13,7 +13,6 @@
     #endif
     
     #include <atomic>
    -#include <cstdlib>
     
     namespace util {
     /**
    diff --git a/src/util/sock.cpp b/src/util/sock.cpp
    index a06ab7a..7043a4c 100644
    --- a/src/util/sock.cpp
    +++ b/src/util/sock.cpp
    @@ -4,7 +4,6 @@
     
     #include <util/sock.h>
     
    -#include <common/system.h>
     #include <compat/compat.h>
     #include <span.h>
     #include <tinyformat.h>
    @@ -13,9 +12,15 @@
     #include <util/threadinterrupt.h>
     #include <util/time.h>
     
    +#include <algorithm>
    +#include <cassert>
    +#include <compare>
    +#include <exception>
     #include <memory>
     #include <stdexcept>
     #include <string>
    +#include <utility>
    +#include <vector>
     
     #ifdef USE_POLL
     #include <poll.h>
    diff --git a/src/util/sock.h b/src/util/sock.h
    index 8c51b8e..781638a 100644
    --- a/src/util/sock.h
    +++ b/src/util/sock.h
    @@ -6,15 +6,17 @@
     #define BITCOIN_UTIL_SOCK_H
     
     #include <compat/compat.h>
    -#include <util/threadinterrupt.h>
    -#include <util/time.h>
     
     #include <chrono>
    +#include <cstdint>
    +#include <limits>
     #include <memory>
     #include <span>
     #include <string>
     #include <unordered_map>
     
    +class CThreadInterrupt;
    +
     /**
      * Maximum time to wait for I/O readiness.
      * It will take up until this time to break off in case of an interruption.
    diff --git a/src/util/strencodings.cpp b/src/util/strencodings.cpp
    index ff59388..8a7a40d 100644
    --- a/src/util/strencodings.cpp
    +++ b/src/util/strencodings.cpp
    @@ -9,12 +9,11 @@
     #include <span.h>
     #include <util/overflow.h>
     
    -#include <array>
     #include <cassert>
    -#include <cstring>
    +#include <compare>
     #include <limits>
     #include <optional>
    -#include <ostream>
    +#include <sstream>
     #include <string>
     #include <vector>
     
    diff --git a/src/util/strencodings.h b/src/util/strencodings.h
    index faff83b..e527972 100644
    --- a/src/util/strencodings.h
    +++ b/src/util/strencodings.h
    @@ -9,11 +9,9 @@
     #ifndef BITCOIN_UTIL_STRENCODINGS_H
     #define BITCOIN_UTIL_STRENCODINGS_H
     
    -#include <crypto/hex_base.h>
     #include <span.h>
     #include <util/string.h>
     
    -#include <algorithm>
     #include <array>
     #include <bit>
     #include <charconv>
    @@ -21,6 +19,7 @@
     #include <cstdint>
     #include <limits>
     #include <optional>
    +#include <span>
     #include <string>
     #include <string_view>
     #include <system_error>
    diff --git a/src/util/string.cpp b/src/util/string.cpp
    index c3b4b47..6e86095 100644
    --- a/src/util/string.cpp
    +++ b/src/util/string.cpp
    @@ -4,7 +4,10 @@
     
     #include <util/string.h>
     
    +#include <iterator>
    +#include <memory>
     #include <regex>
    +#include <stdexcept>
     #include <string>
     
     namespace util {
    diff --git a/src/util/string.h b/src/util/string.h
    index 89e1309..20c7858 100644
    --- a/src/util/string.h
    +++ b/src/util/string.h
    @@ -5,13 +5,14 @@
     #ifndef BITCOIN_UTIL_STRING_H
     #define BITCOIN_UTIL_STRING_H
     
    -#include <span.h>
    -
    +#include <algorithm>
    + echo '^^^ ⚠️ Failure generated from IWYU'
    + false
    Command '['docker', 'exec', '--env', 'DANGER_RUN_CI_ON_HOST=1', 'ef0ae04418640ea860579a6a909948f6e9b8bf73fe95e1366c015818ef5ec691', '/home/runner/work/_temp/ci/test/03_test_script.sh']' returned non-zero exit status 1.
     #include <array>
    +#include <cstddef>
     #include <cstdint>
    -#include <cstring>
    +#include <initializer_list>
     #include <locale>
     #include <optional>
    +#include <span>
     #include <sstream>
     #include <string>
     #include <string_view>
    diff --git a/src/util/thread.cpp b/src/util/thread.cpp
    index 0fde73c..5b20e80 100644
    --- a/src/util/thread.cpp
    +++ b/src/util/thread.cpp
    @@ -11,7 +11,6 @@
     #include <exception>
     #include <functional>
     #include <string>
    -#include <utility>
     
     void util::TraceThread(std::string_view thread_name, std::function<void()> thread_func)
     {
    diff --git a/src/util/thread.h b/src/util/thread.h
    index cb1dd86..d398b18 100644
    --- a/src/util/thread.h
    +++ b/src/util/thread.h
    @@ -6,7 +6,7 @@
     #define BITCOIN_UTIL_THREAD_H
     
     #include <functional>
    -#include <string>
    +#include <string_view>
     
     namespace util {
     /**
    diff --git a/src/util/threadnames.cpp b/src/util/threadnames.cpp
    index 310f60f..c70650f 100644
    --- a/src/util/threadnames.cpp
    +++ b/src/util/threadnames.cpp
    @@ -2,10 +2,9 @@
     // Distributed under the MIT software license, see the accompanying
     // file COPYING or http://www.opensource.org/licenses/mit-license.php.
     
    +#include <algorithm>
     #include <cstring>
     #include <string>
    -#include <thread>
    -#include <utility>
     
     #if (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__))
     #include <pthread.h>
    diff --git a/src/util/time.cpp b/src/util/time.cpp
    index 9e0715e..170c0f3 100644
    --- a/src/util/time.cpp
    +++ b/src/util/time.cpp
    @@ -5,7 +5,6 @@
     
     #include <util/time.h>
     
    -#include <compat/compat.h>
     #include <tinyformat.h>
     #include <util/check.h>
     #include <util/strencodings.h>
    @@ -13,6 +12,7 @@
     #include <array>
     #include <atomic>
     #include <chrono>
    +#include <compare>
     #include <optional>
     #include <string>
     #include <string_view>
    diff --git a/src/util/time.h b/src/util/time.h
    index 30d363b..f46e5f0 100644
    --- a/src/util/time.h
    +++ b/src/util/time.h
    @@ -6,9 +6,11 @@
     #ifndef BITCOIN_UTIL_TIME_H
     #define BITCOIN_UTIL_TIME_H
     
    +#include <sys/time.h>
     // The `util/time.h` header is designed to be a drop-in replacement for `chrono`.
     #include <chrono> // IWYU pragma: export
     #include <cstdint>
    +#include <ctime>
     #include <optional>
     #include <string>
     #include <string_view>
    diff --git a/src/util/tokenpipe.cpp b/src/util/tokenpipe.cpp
    index c982fa6..92bcfb0 100644
    --- a/src/util/tokenpipe.cpp
    +++ b/src/util/tokenpipe.cpp
    @@ -1,17 +1,20 @@
     // Copyright (c) 2021-present The Bitcoin Core developers
     // Distributed under the MIT software license, see the accompanying
     // file COPYING or http://www.opensource.org/licenses/mit-license.php.
    +#include <bitcoin-build-config.h> // IWYU pragma: keep
    +
     #include <util/tokenpipe.h>
     
    -#include <bitcoin-build-config.h> // IWYU pragma: keep
    +#include <sys/types.h>
     
     #ifndef WIN32
     
    -#include <cerrno>
     #include <fcntl.h>
    -#include <optional>
     #include <unistd.h>
     
    +#include <cerrno>
    +#include <optional>
    +
     TokenPipeEnd TokenPipe::TakeReadEnd()
     {
         TokenPipeEnd res(m_fds[0]);
    ^^^ ⚠️ Failure generated from IWYU
    

    </details>

  106. achow101 commented at 10:31 PM on April 2, 2026: member

    ACK 8b49e2dd4eed93d08a3d9681d444aaf441ab0037

  107. achow101 merged this on Apr 2, 2026
  108. achow101 closed this on Apr 2, 2026

  109. hebasto deleted the branch on Apr 3, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-02 21:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me