{
 "number": 32409,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/32409",
 "title": "test: Introduce `SUPPRESS_ABORT_MESSAGE` environment variable",
 "author": "hebasto",
 "author_association": "MEMBER",
 "created_at": "2025-05-02T19:45:20Z",
 "updated_at": "2026-08-19T13:44:22Z",
 "age_days": 502,
 "draft": false,
 "labels": [
  "Windows",
  "Tests"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "8d674717dfef21bbbbc4c91239cec913b3dce813",
 "head_ref": "250502-fuzz-abort",
 "head_repo": "hebasto/bitcoin",
 "head_history": [
  {
   "t": "2025-05-04T15:47:22Z",
   "sha": "035d57bb0397cef28490673626410ed3d46c630e"
  },
  {
   "t": "2025-05-04T16:46:35Z",
   "sha": "191bdd1f8e4ce615e8ce87ca0a59f262cb4f2496"
  },
  {
   "t": "2025-05-15T06:52:26Z",
   "sha": "8d674717dfef21bbbbc4c91239cec913b3dce813"
  }
 ],
 "additions": 17,
 "deletions": 0,
 "changed_files": 1,
 "commit_count": 1,
 "size_bucket": "S",
 "mergeable_state": "blocked",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {
    "concept_nack": [
     {
      "login": "fanquake",
      "url": "https://github.com/bitcoin/bitcoin/pull/32409#issuecomment-3920474137"
     }
    ],
    "concept_ack": [
     {
      "login": "hodlinator",
      "url": "https://github.com/bitcoin/bitcoin/pull/32409#issuecomment-3920573926"
     },
     {
      "login": "shahsb",
      "url": "https://github.com/bitcoin/bitcoin/pull/32409#issuecomment-2848379451"
     }
    ]
   },
   "conflicts": []
  }
 },
 "acks_parsed": {
  "shahsb": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2025-05-03T02:36:09Z",
   "stale": false
  },
  "hodlinator": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2026-02-18T12:31:18Z",
   "stale": false
  }
 },
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 2,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 0,
  "changes_requested": 0,
  "distinct_reviewers": [
   "achow101",
   "fanquake",
   "hodlinator",
   "maflcko",
   "sedited",
   "shahsb"
  ]
 },
 "signals": {
  "needs_rebase": false,
  "ci_failed": false,
  "mergeable_state": "blocked",
  "last_author_activity": "2026-04-29T21:48:38Z",
  "last_reviewer_activity": "2026-08-19T13:44:17Z",
  "last_reviewer": "fanquake",
  "author_silent_days": 140,
  "waiting_on_author_days": 29,
  "days_since_update": 29
 },
 "refs": {
  "mentioned": [
   33593
  ],
  "depends_on": [],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 33593,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-09-16",
    "title": "guix: Use UCRT runtime for Windows release binaries"
   }
  ],
  "conflicts": []
 },
 "stack": {
  "shares_commits_with": [],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [
  "src/test/fuzz/fuzz.cpp",
  "src/test/util/setup_common.cpp"
 ],
 "body": "This PR adds a way to suppress the abort message box when running `test_bitcoin.exe` and `fuzz.exe` built with the debug runtime library on Windows.\n\nOtherwise, a failing `assert()` triggers the `abort` routine, which displays a message box and causes a timeout in CI.\n\nHere are CI jobs for the \"Debug\" configuration:\n - on the master branch: https://github.com/maflcko/bitcoin-core-with-ci/actions/runs/14759346479/job/41435857332\n - with this PR: https://github.com/hebasto/bitcoin-core-nightly/actions/runs/15038743417/job/42265371841\n\nAddresses this [comment](https://github.com/bitcoin/bitcoin/issues/32341#issuecomment-2842716175).\n\nAccording to Microsoft's [docs](https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/abort), this behavior is MSCV-specific.",
 "commits": [
  {
   "sha": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "date": "2025-05-15T06:52:12Z",
   "message": "test: Introduce `SUPPRESS_ABORT_MESSAGE` environment variable\n\nThis change adds a way to suppress the abort message box when running\ntest or fuzz executables built with the debug runtime library on\nWindows. Without this, the message box may cause timeouts in CI."
  }
 ],
 "timeline": [
  {
   "t": "2025-05-03T02:35:50Z",
   "kind": "review_comment",
   "who": "shahsb",
   "assoc": "NONE",
   "path": "src/test/fuzz/fuzz.cpp",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "in_reply_to": null,
   "text": "```suggestion\n#ifdef _WIN32\n```\n\n`_WIN32` is a compiler flag and could be used for both windows platform i.e windows_x86 (32-bit) as well as windows_x64 (64-bit)"
  },
  {
   "t": "2025-05-03T02:36:09Z",
   "kind": "comment",
   "who": "shahsb",
   "assoc": "NONE",
   "text": "Concept ACK"
  },
  {
   "t": "2025-05-03T06:44:25Z",
   "kind": "review_comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "path": "src/test/fuzz/fuzz.cpp",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "in_reply_to": 2072293276,
   "text": "The current code is consistent with our entire code base."
  },
  {
   "t": "2025-05-04T11:53:52Z",
   "kind": "review",
   "who": "maflcko",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "f7f803f4e2c97876383b7c81a7ed89f26932fe27",
   "text": "No objection, but assert/Assert seems to be used widely in the codebase, so shouldn't this be done for all test binaries, or none? Otherwise the same assert could lead to inconsistent behavior, depending on which test binary ran into it."
  },
  {
   "t": "2025-05-04T15:47:22Z",
   "kind": "force_push",
   "who": "hebasto",
   "commit": "035d57bb0397cef28490673626410ed3d46c630e"
  },
  {
   "t": "2025-05-04T15:56:35Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "@maflcko\n\n[quoted text omitted]\nThanks! Reworked."
  },
  {
   "t": "2025-05-04T16:46:35Z",
   "kind": "force_push",
   "who": "hebasto",
   "commit": "191bdd1f8e4ce615e8ce87ca0a59f262cb4f2496"
  },
  {
   "t": "2025-05-06T13:33:23Z",
   "kind": "review_comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "path": "src/test/util/setup_common.cpp",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "in_reply_to": null,
   "text": "The commit message says \"On Windows\", but the code is using `_MSC_VER`, not `WIN32`.\nIs that a typo, or does this issue only affect MSVC compiled binaries; in which case, why is there a difference in runtime behaviour between the MSVC compiled test binaries & our release compiled test binaries?"
  },
  {
   "t": "2025-05-06T16:42:46Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "Not related to this PR, but the [error in the `wallet_fees` target](https://github.com/hebasto/bitcoin-core-nightly/actions/runs/14801894543/job/41562322239#step:8:484):\n```\nwallet_fees: succeeded against 23 files in 0s.\nRun wallet_fees with args ['D:\\\\a\\\\bitcoin-core-nightly\\\\bitcoin-core-nightly\\\\build\\\\bin\\\\Debug\\\\fuzz.exe', WindowsPath('D:/a/_temp/qa-assets/fuzz_corpora/wallet_fees')]\n\\u26a0\\ufe0f Failure generated from target with exit code 3221225477: ['D:\\\\a\\\\bitcoin-core-nightly\\\\bitcoin-core-nightly\\\\build\\\\bin\\\\Debug\\\\fuzz.exe', WindowsPath('D:/a/_temp/qa-assets/fuzz_corpora/wallet_fees')]\n```\n\ncan be fixed with the following patch:\n```diff\n--- a/src/wallet/test/fuzz/fees.cpp\n+++ b/src/wallet/test/fuzz/fees.cpp\n@@ -15,22 +15,22 @@\n namespace wallet {\n namespace {\n const TestingSetup* g_setup;\n-static std::unique_ptr<CWallet> g_wallet_ptr;\n\n void initialize_setup()\n {\n     static const auto testing_setup = MakeNoLogFileContext<const TestingSetup>();\n     g_setup = testing_setup.get();\n-    const auto& node{g_setup->m_node};\n-    g_wallet_ptr = std::make_unique<CWallet>(node.chain.get(), \"\", CreateMockableWalletDatabase());\n }\n\n FUZZ_TARGET(wallet_fees, .init = initialize_setup)\n {\n+    SeedRandomStateForTest(SeedRand::ZEROS);\n     FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};\n+    SetMockTime(ConsumeTime(fuzzed_data_provider));\n     const auto& node{g_setup->m_node};\n     Chainstate* chainstate = &node.chainman->ActiveChainstate();\n-    CWallet& wallet = *g_wallet_ptr;\n+    std::unique_ptr<CWallet> wallet_ptr{std::make_unique<CWallet>(node.chain.get(), \"\", CreateMockableWalletDatabase())};\n+    CWallet& wallet{*wallet_ptr};\n     {\n         LOCK(wallet.cs_wallet);\n         wallet.SetLastBlockProcessed(chainstate->m_chain.Height(), chainstate->m_chain.Tip()->GetBlockHash());\n```\n\ncc @dergoegge @marcofleon"
  },
  {
   "t": "2025-05-06T16:46:23Z",
   "kind": "review",
   "who": "fanquake",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "191bdd1f8e4ce615e8ce87ca0a59f262cb4f2496",
   "text": "Not sure about compiler specific changes, that rely on the presence of an undocumented environment variable (which we don't explicitly set as far as I can tell?), to make tests work properly."
  },
  {
   "t": "2025-05-06T18:07:16Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThe patch looks odd. Is this just an issue about the destruction order between wallet and node? (See also siof: https://en.cppreference.com/w/cpp/language/siof). If yes, could just ensure the wallet is destructed before the node?\n\nEdit: Though, if the exec/s are not decreasing with the patch, it seems fine as well. Could create a pull with it?"
  },
  {
   "t": "2025-05-08T16:30:14Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nIt is documented, and it is pre-defined by CI itself:\n- in [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables):\n[quoted text omitted]\n\n- in [Cirrus CI](https://cirrus-ci.org/guide/writing-tasks/#environment-variables):\n[quoted text omitted]\n\nAnd I assume it's a common practice among major CIs."
  },
  {
   "t": "2025-05-09T12:37:57Z",
   "kind": "review_comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "path": "src/test/util/setup_common.cpp",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "in_reply_to": 2075491685,
   "text": "This behaviour is MSVC-specific (I've added a note to the PR description). And I cannot reproduce it when running cross-compiled binaries."
  },
  {
   "t": "2025-05-09T15:36:06Z",
   "kind": "review_comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "path": "src/test/util/setup_common.cpp",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "in_reply_to": 2075491685,
   "text": "I think the commit message should still be fixed to say `When compiling with MSVC`, rather than `On Windows`?\n\n[quoted text omitted]\nIs it a bug in mingw-w64 that it doesn't match the MSVC behaviour? It would be good to an explanation of the difference in the PR description/commit message, as it isn't really clear from going to the link you've provided."
  },
  {
   "t": "2025-05-09T15:37:57Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nIt's not in our docs, or in our CI code, which means our CI would \"work\", because a third party is putting something into the environment, and the fact that this is even happening, is only discoverable if you happen to read a `.cpp` file.\n\nWould someone running these binaries locally also need/want to set this env var to get the same behaviour? If so, how would they figure that out?"
  },
  {
   "t": "2025-05-09T15:40:28Z",
   "kind": "review_comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "path": "src/test/util/setup_common.cpp",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "in_reply_to": 2075491685,
   "text": "[quoted text omitted]\n\nI don't think so, given the different runtime libraries used. I must admit I haven't tested cross-compiled binaries linked to UCRT."
  },
  {
   "t": "2025-05-09T15:48:46Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nWhat are you suggesting should be changed to improve or avoid this situation?\n\n[quoted text omitted]\nOnly CI jobs defined by scripts in the `ci/test/` directory are intended to be runnable locally. This does not apply to the \"raw\" GitHub Actions workflows, where this code takes effect."
  },
  {
   "t": "2025-05-09T15:49:47Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nCan't someone just compile and run the same binaries locally?"
  },
  {
   "t": "2025-05-09T15:53:01Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nCertainly, they can. But displaying a message box isn't an issue when running binaries locally, so there's no need to alter the environment in that case."
  },
  {
   "t": "2025-05-09T15:58:31Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "As an alternative, we could explicitly set our own `SUPPRESS_ABORT_MESSAGE_BOX` environment variable in the workflow, and gate the code with this variable instead, ~removing the `#if defined(_MSC_VER)` condition~."
  },
  {
   "t": "2025-05-15T06:52:26Z",
   "kind": "force_push",
   "who": "hebasto",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813"
  },
  {
   "t": "2025-05-15T06:56:46Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nReworked to avoid relying on third-party set environment variables."
  },
  {
   "t": "2025-05-15T10:31:28Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "This issue seems related: https://developercommunity.visualstudio.com/t/Debug-CRT-shows-abort-message-box-instea/10904782."
  },
  {
   "t": "2025-05-21T11:53:43Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nGiven this isn't being used anywhere in our CI, it's no-longer clear why this is needed (we don't generally add unused code to the project). This also still isn't documented anywhere, so it's not clear how anyone who would need to use this, would know that it exists."
  },
  {
   "t": "2025-07-02T13:11:36Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "What is the status of this?"
  },
  {
   "t": "2025-10-22T15:22:18Z",
   "kind": "comment",
   "who": "achow101",
   "assoc": "MEMBER",
   "text": "Are you still working on this?"
  },
  {
   "t": "2025-10-22T15:27:37Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThx, but it seems it would also need to be applied to bitcoind (or really all executables)?"
  },
  {
   "t": "2025-11-25T15:55:23Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nIt is already implemented for `bitcoind.exe` here:https://github.com/bitcoin/bitcoin/blob/5336bcd5784925cd722cff4b9c28e58c64c0b708/src/init.cpp#L863-L864\n\nWith the following diff:\n```diff\n--- a/src/bitcoind.cpp\n+++ b/src/bitcoind.cpp\n@@ -189,6 +189,9 @@ static bool AppInit(NodeContext& node)\n             // InitError will have been called with detailed error, which ends up on console\n             return false;\n         }\n+\n+        assert(0);\n+\n         if (!AppInitParameterInteraction(args)) {\n             // InitError will have been called with detailed error, which ends up on console\n             return false;\n```\nit works as expected, without pop-up windows:\n```\n[quoted text omitted]\nAssertion failed: 0, file C:\\Users\\hebasto\\bitcoin\\src\\bitcoind.cpp, line 193\n```"
  },
  {
   "t": "2026-02-18T12:10:39Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "What is the status of this? (NACK) given this is still undocumented and unused in this repository."
  },
  {
   "t": "2026-02-18T12:23:58Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nAh interesting. Would it be possible to drop that with clang-cl.exe ?"
  },
  {
   "t": "2026-02-18T12:31:18Z",
   "kind": "comment",
   "who": "hodlinator",
   "assoc": "CONTRIBUTOR",
   "text": "Concept ACK as long as we run binaries built with the proprietary Microsoft runtime on CI.\n\nGUI assert MessageBoxes on Windows are the bane of CI immemorial.\n\nI might be less positive *if* UCRT turns out to not exhibit this behavior (https://github.com/bitcoin/bitcoin/pull/32409#discussion_r2081956577) and we drop MSVCRT. Or if we switch to clang-cl and no longer have the issue."
  },
  {
   "t": "2026-02-19T15:34:38Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nShouldn't code at least be used, to be added to this codebase?"
  },
  {
   "t": "2026-02-19T20:36:12Z",
   "kind": "comment",
   "who": "hodlinator",
   "assoc": "CONTRIBUTOR",
   "text": "[quoted text omitted]\n\nWouldn't it be used in MSVC on CI, and be compiled out in other configurations?\nSeems okay to want to beat `assert()` into more similar behavior across platforms. Pretty sure I've seen Windows Native CI logs just stalling without explanation due to this issue of a GUI assert MessageBox waiting for a human to press OK.\nNot sure what you are getting at, must be talking past each other."
  },
  {
   "t": "2026-02-19T20:45:08Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThe ENV var isn't added to any CI here. So this is currently just unused code."
  },
  {
   "t": "2026-02-20T19:58:15Z",
   "kind": "comment",
   "who": "hodlinator",
   "assoc": "CONTRIBUTOR",
   "text": "[quoted text omitted]\n\nAlright, I agree that *only* adding this code will have no affect.\n\nAm I right to understand that the reason for us not setting `SUPPRESS_ABORT_MESSAGE` in the Windows native jobs in this PR is that we're never using the Debug runtime in our in-tree CI configuration?\nThat would mean this is only intended to be used for out-of-tree nightly/custom configurations.\n\nI don't see much reason for guarding it behind an env-variable? Guarding behind `_MSC_VER` and possibly also `_DEBUG` seems sufficient to me (Edit: since Windows debug builds tested by non-devs are probably Guix generated non-MSVC anyway, so there's no loss in missing GUI MessageBoxes). If you feel uncomfortable to rely on custom out-of-tree CI and rare Windows devs to build it, I kind of see your point."
  },
  {
   "t": "2026-03-25T08:35:12Z",
   "kind": "review_comment",
   "who": "sedited",
   "assoc": "CONTRIBUTOR",
   "path": "src/test/util/setup_common.cpp",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "in_reply_to": null,
   "text": "Why not cstdlib?"
  },
  {
   "t": "2026-03-25T08:46:44Z",
   "kind": "review",
   "who": "sedited",
   "assoc": "CONTRIBUTOR",
   "state": "COMMENTED",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "text": "I'm also not sure about adding this without anything actually using it. hodlinator's suggestion of just dropping the env variable fine to me."
  },
  {
   "t": "2026-03-25T10:04:20Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nStill wondering about this"
  },
  {
   "t": "2026-04-29T21:19:31Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nUnfortunately not. This behavior is dictated by the Microsoft C Runtime rather than the compiler itself."
  },
  {
   "t": "2026-04-29T21:35:42Z",
   "kind": "review_comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "path": "src/test/util/setup_common.cpp",
   "commit": "8d674717dfef21bbbbc4c91239cec913b3dce813",
   "in_reply_to": 2986632298,
   "text": "According to https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/set-abort-behavior, `<stdlib.h>` provides `_set_abort_behavior`."
  },
  {
   "t": "2026-04-29T21:48:38Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nhttps://github.com/hebasto/bitcoin-core-nightly/actions/workflows/windows-msvc-x86_64.yml\n\nIf we conclude that this doesn't count as an actual use case, then we should probably remove this code as well:https://github.com/bitcoin/bitcoin/blob/5336bcd5784925cd722cff4b9c28e58c64c0b708/src/init.cpp#L863-L864"
  },
  {
   "t": "2026-08-19T13:44:17Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nI can't tell from this link if you mean you are using this already, or would use this later, or something else, like just setting `SUPPRESS_ABORT_MESSAGE` in the nightly env?\n\nAlso is this obsoleted with #33593?"
  }
 ],
 "labels_log": [
  {
   "t": "2025-05-02T19:45:20Z",
   "action": "labeled",
   "label": "Windows",
   "who": "hebasto"
  },
  {
   "t": "2025-05-02T19:45:20Z",
   "action": "labeled",
   "label": "Tests",
   "who": "hebasto"
  }
 ],
 "state_log": [
  {
   "t": "2025-05-04T15:49:29Z",
   "kind": "renamed",
   "who": "hebasto",
   "from": "fuzz: Suppress abort message on Windows",
   "to": "test: Suppress Windows abort message in CI"
  },
  {
   "t": "2025-05-15T06:53:18Z",
   "kind": "renamed",
   "who": "hebasto",
   "from": "test: Suppress Windows abort message in CI",
   "to": "test: Introduce `SUPPRESS_ABORT_MESSAGE` environment variable"
  },
  {
   "t": "2025-11-25T14:26:57Z",
   "kind": "closed",
   "who": "hebasto"
  },
  {
   "t": "2025-11-25T14:27:00Z",
   "kind": "reopened",
   "who": "hebasto"
  }
 ],
 "text_chars": 11119,
 "text_tokens_estimate": 2779,
 "changed_paths": [
  "src/test/util/setup_common.cpp"
 ],
 "files": [
  {
   "path": "src/test/util/setup_common.cpp",
   "add": 17,
   "del": 0
  }
 ],
 "test_lines": 17,
 "git": {
  "head": "8d674717dfef21bbbbc4c91239cec913b3dce813",
  "head_matches_backup": true,
  "base": "31d3eebfb92ae0521e18225d69be95e78fb02672",
  "commits": [
   {
    "sha": "8d674717df",
    "subject": "test: Introduce `SUPPRESS_ABORT_MESSAGE` environment variable",
    "files": 1,
    "add": 17,
    "del": 0
   }
  ],
  "patch_truncated": false
 },
 "input_hash": "2fb37f8944c28312",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}