{
 "number": 17783,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/17783",
 "title": "common: Disallow calling IsArgSet() on ALLOW_LIST options",
 "author": "ryanofsky",
 "author_association": "MEMBER",
 "created_at": "2019-12-20T15:36:53Z",
 "updated_at": "2026-09-13T15:42:22Z",
 "age_days": 2463,
 "draft": true,
 "labels": [
  "Utils/log/libs"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "c01c9c42b716c5404f64786e4cd786a06a103753",
 "head_ref": "pr/wdnolist",
 "head_repo": "ryanofsky/bitcoin",
 "head_history": [
  {
   "t": "2020-09-03T13:24:06Z",
   "sha": "cedf83ee857f717027f7367232682ebc27da4017"
  },
  {
   "t": "2020-09-28T11:47:39Z",
   "sha": "b65072798cdf8a9aca87f05fb2e6f39414f40844"
  },
  {
   "t": "2021-04-12T00:50:22Z",
   "sha": "4223415ff6de22724ca1b85cd65119771dbdf0e9"
  },
  {
   "t": "2021-04-12T19:51:20Z",
   "sha": "fba5a00126b647225dd13b4aa18406aae82c76af"
  },
  {
   "t": "2021-04-12T23:52:21Z",
   "sha": "6b8276e8f595c3dc212f06eb121ca6a5bbaeb58a"
  },
  {
   "t": "2021-06-16T20:50:48Z",
   "sha": "048a4ee606a370d51620e39aecc8f6d4a132c31c"
  },
  {
   "t": "2021-12-30T21:07:49Z",
   "sha": "98ebf0b32a6deb6f14b919286e2c3195ab68ab6d"
  },
  {
   "t": "2022-09-27T13:45:42Z",
   "sha": "2212f18e344d53c5c23af5253ae4f21abe3dae7f"
  },
  {
   "t": "2022-11-29T04:11:00Z",
   "sha": "e75b01cddd5f454c51071c707305f609d8950bad"
  },
  {
   "t": "2023-02-14T23:02:29Z",
   "sha": "7ef55ca3e2c4d8c89c77463771c9e9106efe5c8c"
  },
  {
   "t": "2023-05-03T19:40:43Z",
   "sha": "f59bfafcc8f3bf73d9e5c70669fff354f29b261b"
  },
  {
   "t": "2024-07-19T23:07:09Z",
   "sha": "d81071a0db8607faec25454e20f4feeb19e84438"
  },
  {
   "t": "2024-07-24T15:03:28Z",
   "sha": "055740f7dba442e7c94547d56c80039ae935d9c6"
  },
  {
   "t": "2024-08-06T16:21:00Z",
   "sha": "5928735274237f39eb485dc1c7d7bd2d7861bf77"
  },
  {
   "t": "2024-12-09T16:13:58Z",
   "sha": "e74d7300b81643af52dc06bb4926685555d4a414"
  },
  {
   "t": "2025-03-12T18:22:43Z",
   "sha": "d8a7a2710c01754cc3765cbb4d1757364148bf98"
  },
  {
   "t": "2025-08-01T22:43:36Z",
   "sha": "d7818446b029f11c201ce1dc5d6ca12458f55990"
  },
  {
   "t": "2025-08-01T22:50:56Z",
   "sha": "11d0a897d53e1457e5ffbbd253becd0c8ce69c5d"
  },
  {
   "t": "2025-12-12T12:18:50Z",
   "sha": "6321fdbc855e8c5070d491ec60a07e12f2dd5086"
  },
  {
   "t": "2025-12-16T02:10:12Z",
   "sha": "38a9cd5388846e91cef49782c2050b0a8d14a85b"
  },
  {
   "t": "2026-01-18T21:35:11Z",
   "sha": "2f449669515c855267c91ed63370ee9d24f1ebae"
  },
  {
   "t": "2026-01-18T23:02:03Z",
   "sha": "bf609a93e61feb55b77996c324cfb6e70ca49b9f"
  },
  {
   "t": "2026-04-01T21:00:50Z",
   "sha": "811a7a9f9ba630d268514588f27c208e63b6b234"
  },
  {
   "t": "2026-06-08T16:40:02Z",
   "sha": "67b813d53986bcf14456e9259b1515adb799ab68"
  },
  {
   "t": "2026-06-24T15:26:43Z",
   "sha": "4725042d6897437eb1df76513887f275b4c43c00"
  },
  {
   "t": "2026-08-15T16:09:50Z",
   "sha": "c01c9c42b716c5404f64786e4cd786a06a103753"
  }
 ],
 "additions": 1184,
 "deletions": 207,
 "changed_files": 15,
 "commit_count": 18,
 "size_bucket": "XL",
 "mergeable_state": "clean",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {
    "concept_ack": [
     {
      "login": "promag",
      "url": "https://github.com/bitcoin/bitcoin/pull/17783#issuecomment-568313850"
     }
    ]
   },
   "conflicts": [
    {
     "number": 35940,
     "title": "net: allow selecting BIP152 high-bandwidth peers with `-addnode`",
     "author": "w0xlt"
    },
    {
     "number": 35387,
     "title": "logging: make trace logging easily usable",
     "author": "ryanofsky"
    },
    {
     "number": 35322,
     "title": "logging: streamline Logger state and drop redundant methods",
     "author": "ryanofsky"
    },
    {
     "number": 35037,
     "title": "ipc: support per-address max-connections options on -ipcbind",
     "author": "enirox001"
    },
    {
     "number": 35027,
     "title": "net: add -outboundbind option for outgoing source address",
     "author": "8144225309"
    },
    {
     "number": 34038,
     "title": "logging: replace -loglevel with -trace, expose trace logging via RPC",
     "author": "ajtowns"
    },
    {
     "number": 16545,
     "title": "refactor: Implement missing error checking for ArgsManager flags",
     "author": "ryanofsky"
    }
   ]
  }
 },
 "acks_parsed": {
  "promag": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2019-12-22T23:53:17Z",
   "stale": false
  }
 },
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 1,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 0,
  "changes_requested": 0,
  "distinct_reviewers": [
   "promag"
  ]
 },
 "signals": {
  "needs_rebase": false,
  "ci_failed": false,
  "mergeable_state": "clean",
  "last_author_activity": "2026-08-15T16:09:50Z",
  "last_reviewer_activity": "2019-12-22T23:53:17Z",
  "last_reviewer": "promag",
  "author_silent_days": 33,
  "waiting_on_author_days": 0,
  "days_since_update": 4
 },
 "refs": {
  "mentioned": [
   16545,
   17580,
   18267,
   19561,
   19638,
   19709,
   20048,
   21415,
   21732,
   29415,
   30529,
   35205,
   35335,
   35441,
   35729
  ],
  "depends_on": [
   16545
  ],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 16545,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "refactor: Implement missing error checking for ArgsManager flags"
   },
   {
    "number": 17580,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "refactor: Add ALLOW_LIST flags and enforce usage in CheckArgFlags"
   },
   {
    "number": 30529,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-02-14",
    "title": "Fix -norpcwhitelist, -norpcallowip, and similar corner case behavior"
   },
   {
    "number": 35335,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-06-03",
    "title": "Make deployment configuration available outside of regtest in unit tests"
   },
   {
    "number": 18267,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-09-21",
    "title": "BIP-325: Signet [consensus]"
   },
   {
    "number": 19561,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-07-30",
    "title": "refactor: Pass ArgsManager into functions that register args"
   },
   {
    "number": 19638,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-08-09",
    "title": "Replace `hidden service` with `onion service`"
   },
   {
    "number": 19709,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-08-14",
    "title": "test: Fix 'make cov' with clang"
   },
   {
    "number": 20048,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-10-01",
    "title": "chainparams: do not log signet startup messages for other chains"
   },
   {
    "number": 21415,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-03-17",
    "title": "refactor: remove Optional & nullopt"
   },
   {
    "number": 21732,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-04-23",
    "title": "MOVEONLY: Move common init code to init/common"
   },
   {
    "number": 29415,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-01-12",
    "title": "Broadcast own transactions only via short-lived Tor or I2P connections"
   },
   {
    "number": 35205,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-08-04",
    "title": "kernel,node: add `dbcache` setter and clarify defaults"
   },
   {
    "number": 35441,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-06-15",
    "title": "ci: inline runner selection"
   },
   {
    "number": 35729,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-08-11",
    "title": "refactor: test: Unroll `&&` conditions in macros"
   }
  ],
  "conflicts": [
   35940,
   35387,
   35322,
   35037,
   35027,
   34038,
   16545
  ]
 },
 "stack": {
  "shares_commits_with": [
   17493,
   17580,
   17581
  ],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [],
 "body": "**This is based on #16545 + #17580.** The non-base commits are:\n\n- [`398cbb070cd` Normalize inconsistent -noonlynet behavior with -privatebroadcast and -listenonion](https://github.com/bitcoin/bitcoin/pull/17783/commits/398cbb070cd3bdf8f637b4c6a790df8280cc493a)\n- [`784daf2c2e3` init: Stop calling IsArgSet on list args -testactivationheight and -vbparams](https://github.com/bitcoin/bitcoin/pull/17783/commits/784daf2c2e39c05e259077beeebcfca02f3a323c)\n- [`bc5e4996596` common: Disallow calling IsArgSet() on ALLOW_LIST options](https://github.com/bitcoin/bitcoin/pull/17783/commits/bc5e4996596fadacca6b1e1754217ecbf1820007)\n\n---\n\nDisallow calling IsArgSet() function on ALLOW_LIST options. Code that uses IsArgSet() with list options is confusing and leads to bugs when IsArgSet() returns true, but GetArgs() returns an empty list, so the option is considered enabled even though it is empty. This led to a number of bugs which are fixed in #30529",
 "commits": [
  {
   "sha": "94300ae454e49d97415848fa144ff19893f53ac1",
   "date": "2026-07-13T20:29:09Z",
   "message": "common: Grammar / formatting tweaks\n\nImplement cleanup suggestions from l0rinc:\n\nhttps://github.com/bitcoin/bitcoin/pull/16545#discussion_r1773221823\nhttps://github.com/bitcoin/bitcoin/pull/16545#discussion_r1773291395\nhttps://github.com/bitcoin/bitcoin/pull/16545#discussion_r1775897382"
  },
  {
   "sha": "92cb734d5a4ed825669f796943229d80a71f7060",
   "date": "2026-07-13T20:29:09Z",
   "message": "doc: Add detailed ArgsManager type flag documention\n\nThis commit just adds documentation for the type flags. The flags are actually\nimplemented in the following two commits."
  },
  {
   "sha": "1500c5801cbb0db12634dd99905845711ffcb8a2",
   "date": "2026-07-13T20:29:09Z",
   "message": "common: Implement ArgsManager flags to parse and validate settings on startup\n\nThis commit implements support for new ALLOW_BOOL, ALLOW_INT, ALLOW_STRING, and\nALLOW_LIST flags by validating settings with these flags earlier on startup and\nproviding detailed error messages to users.\n\nThe new flags implement stricter error checking than ALLOW_ANY. For example, a\ndouble negated option like -nosetting=0 is treated like an error instead of\ntrue, and an unrecognized bool value like -setting=true is treated like an\nerror instead of false. And if a non-list setting is assigned multiple times in\nthe same section of a configuration file, the later assignments trigger errors\ninstead of being silently ignored.\n\nThe new flags also provide type information that allows ArgsManager\nGetSettings() and GetSettingsList() methods to return typed integer and boolean\nvalues instead of unparsed strings.\n\nThe changes in this commit have no effect on current application behavior\nbecause the new flags are only used in unit tests. The existing ALLOW_ANY\nchecks in the argsman_tests/CheckValueTest confirm that no behavior is changing\nfor current settings, which use ALLOW_ANY."
  },
  {
   "sha": "481099679b368be6c707ec536613f356b3543331",
   "date": "2026-07-13T20:29:09Z",
   "message": "common: Update ArgManager GetArg helper methods to work better with ALLOW flags\n\nUpdate GetArg, GetArgs, GetBoolArg, and GetIntArg helper methods to work\nconveniently with ALLOW_BOOL, ALLOW_INT, and ALLOW_STRING flags.\n\nThe GetArg methods are convenience wrappers around the GetSetting method. The\nGetSetting method returns the originally parsed settings values in their\ndeclared bool/int/string types, while the GetArg wrappers provide extra\ntype-coercion and default-value fallback features as additional conveniences\nfor callers.\n\nThis commit makes two changes to GetArg, GetArgs, GetBoolArg, and GetIntArg\nhelper methods when BOOL/INT/STRING flags are used:\n\n1. GetArg methods will now raise errors if they are called with inconsistent\n   flags. For example, GetArgs will raise a logic_error if it is called on a\n   non-LIST setting, GetIntArg will raise a logic_error if it is called\n   on a non-INT setting.\n\n2. GetArg methods will now avoid various type coersion footguns when they are\n   called on new BOOL/INT/STRING settings. Existing ALLOW_ANY settings are\n   unaffected. For example, negated settings will return \"\" empty strings\n   instead of \"0\" strings (in the past the \"0\" strings caused strangeness like\n   \"-nowallet\" options creating wallet files named \"0\"). The new behaviors are\n   fully specified and checked by the `CheckValueTest` unit test.\n\nThe ergonomics of the GetArg helper methods are subjective and the behaviors\nthey implement can be nitpicked and debated endlessly. But behavior of these\nhelper methods does not dictate application behavior, and they can be bypassed\nby calling GetSetting and GetSettingList methods instead. If it's necessary,\nbehavior of these helper methods can also be changed again in the future.\n\nThe changes have no effect on current application behavior because the new\nflags are only used in unit tests. The `setting_args` unit test and ALLOW_ANY\nchecks in the `CheckValueTest` unit test are unchanged and confirm that\n`GetArg` methods behave the same as before for ALLOW_ANY flags (returning the\nsame values and throwing the same exceptions)."
  },
  {
   "sha": "dadfea2ac55a036ab7aa93c6ad14d1f736c8872c",
   "date": "2026-07-13T20:29:09Z",
   "message": "test: Add tests to demonstrate usage of ArgsManager flags\n\nCo-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>"
  },
  {
   "sha": "abe4b1d8974f5171a5e15e2cc5cae2a2144bbb2c",
   "date": "2026-07-13T20:29:09Z",
   "message": "test: Add test for settings.json parsing with type flags\n\nThe type flags aren't currently used to validate or convert settings in the\nsettings.json file, but they should be in the future. Add test to check current\nbehavior that can be extended when flags are applied.\n\nCo-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>"
  },
  {
   "sha": "d134020611f17b6a26809fa31bac88d5a087ea61",
   "date": "2026-08-14T20:01:12Z",
   "message": "Merge branch 'pr/argcheck' into pr/wdlist"
  },
  {
   "sha": "671e54779624f80c7a0e5cb8e913bee2e3966c38",
   "date": "2026-08-14T20:01:12Z",
   "message": "common: Add support for combining ArgsManager flags\n\nLet ALLOW_STRING and ALLOW_INT flags be combined with ALLOW_BOOL so string and\nint options can be specified without explicit values. This is useful for\nimperative settings that trigger new behavior when specified and can accept\noptional string or integer values, but do not require them. (For examples, see\nthe example_options unit test modified in this commit.)"
  },
  {
   "sha": "44e71c8b9f9d688310f660dcb2a37bb55777825e",
   "date": "2026-08-14T20:01:12Z",
   "message": "scripted-diff: Add ALLOW_LIST flag to arguments retrieved with GetArgs\n\nThis change has no effect on behavior, and is basically just a documentation\nchange at this point. The ALLOW_LIST flag is currently ignored unless\nALLOW_BOOL, ALLOW_INT, or ALLOW_STRING flags are also present, and these flags\nare not used yet.\n\n-BEGIN VERIFY SCRIPT-\nfor f in `git grep -n 'GetArgs(' | grep -v _tests | sed -n 's/.*GetArgs(\"\\([^\"]\\+\\)\".*/\\1/p' | sort -u`; do\n   git grep -l -- \"$f\" | xargs sed -i \"/AddArg(\\\"$f[=\\\"]/ s/ArgsManager::ALLOW_ANY/& | ArgsManager::ALLOW_LIST/g\"\ndone\n-END VERIFY SCRIPT-"
  },
  {
   "sha": "bd820336f0b4da310e1921af3da24dac446537ae",
   "date": "2026-08-14T20:01:12Z",
   "message": "refactor: Fix more ALLOW_LIST arguments\n\n- Remove ALLOW_LIST flag from bitcoin-wallet -wallet and -debug arguments. They\n  are list arguments for bitcoind, but single arguments for bitcoin-wallet.\n\n- Add ALLOW_LIST flag to -includeconf arg (missed by scripted diff since it's\n  not accessed through GetArgs)\n\n- Add ALLOW_LIST flag to -proxy, -debug, -loglevel, -whitebind, and -whitelist\n  args (missed by scripted diff due to line breaks in AddArgs calls)\n\n- Add ALLOW_LIST flag to -zmq args (missed by scripted diff due to programmatic\n  GetArgs calls)\n\nThis change has no effect on behavior, and is basically just a documentation\nchange at this point. The ALLOW_LIST flag is currently ignored unless\nALLOW_BOOL, ALLOW_INT, or ALLOW_STRING flags are also present, and these flags\nare not used yet."
  },
  {
   "sha": "b314c7e7de54565649fa24b517f51bfa0f9b723e",
   "date": "2026-08-14T20:01:12Z",
   "message": "Always reject empty -blockfilterindex=\"\" arguments\n\nPrevious behavior was inconsistent: if -blockfilterindex or\n-blockfilterindex=\"\" arguments were specified they would normally enable all\nblock filter indexes, but could also trigger \"Unknown -blockfilterindex value\"\nerrors if followed by later -blockfilterindex arguments.\n\nIt was confusing that the same -blockfilterindex options could sometime trigger\nerrors and sometimes not depending on option position. It was also confusing\nthat an empty -blockfilterindex=\"\" setting could enable all indexes even though\nindexes are disabled by default.\n\nNew behavior is more straightforward:\n\n- -blockfilterindex and -blockfilterindex=1 always enable indexes\n- -noblockfilterindex and -blockfilterindex=0 always disable indexes\n- -blockfilterindex=\"\" is always an unknown value error\n\nThe meaning of these options no longer changes based on option position."
  },
  {
   "sha": "bf58582fd49f0edc9aef6f49117a4d40ea14ea19",
   "date": "2026-08-14T20:01:12Z",
   "message": "refactor: Stop calling GetArg/IsArgSet on ALLOW_LIST options\n\nUpcoming commits will make it an error to call GetArg and IsArgSet methods on\nlist options since these usages are error prone. For example GetArg will return\nlast command line value but first config value in the list, and IsArgSet will\nreturn true even if the list is empty if the list was negated.\n\nThis change is just a refactoring replacing problematic ArgsManager calls with\nequivalent calls to avoid changing any behavior. Current behavior could\nprobably be improved in these cases, but this change should make new problems\nless likely to be introduced."
  },
  {
   "sha": "581eaaf10fc8ce584332fdcc5f04c245f3df7ed2",
   "date": "2026-08-14T20:01:12Z",
   "message": "refactor: Always enforce ALLOW_LIST in CheckArgFlags\n\nPrevent GetArg() from being called on ALLOW_LIST arguments, and GetArgs() from\nbeing called on non-list arguments.\n\nThis checking was previously skipped unless typed INT/BOOL/STRING flags were\npresent, but now it's always done.\n\nThis change has no effect on external behavior. It is just supposed to enforce\ninternal consistency and prevent bugs caused by using the wrong GetArg method\nto retrieve settings."
  },
  {
   "sha": "f450f212e6f4d4a06da471c424d6e29a9fe87f07",
   "date": "2026-08-14T20:01:12Z",
   "message": "Merge branch 'pr/wdlist' into pr/wdnolist"
  },
  {
   "sha": "715b7f6e9eb0111b8d38eb9559bf3da22d885dcb",
   "date": "2026-08-14T20:01:12Z",
   "message": "Normalize inconsistent -noonlynet behavior with -privatebroadcast and -listenonion\n\nIf -noonlynet -privatebroadcast -listenonion are specified together the \"none\nof Tor or I2P networks is reachable\" init error should not be shown because the\n-listenonion option should make the tor network reachable.\n\nThis change is a followup to earlier commit\necd590d4c1e7f310c6ba3b58373bc30679b491df which normalized `-noonlynet` behavior\nin other places, replacing `!args.IsArgSet(\"-onlynet\")` with `onlynets.empty()`\nexactly like this change.\n\nThe other more general reason for dropping the `args.IsArgSet(\"-onlynet\")` call\nis that the `-onlynet` option is a list option and list options are treated as\nboth empty and set when negated, which is confusing. A followup commit\ndisallows using `IsArgSet` with list options to avoid this."
  },
  {
   "sha": "8b5758b8b7e1fb3cdb33c78f33a2e661aeab33ed",
   "date": "2026-08-14T20:01:12Z",
   "message": "init: Stop calling IsArgSet on list args -testactivationheight and -vbparams\n\nIsArgSet calls on -testactivationheight and -vbparams list options were\nadded in 4995c00a9cc06b1123a4bbf3f4e8ea73769dc871 from #35335 but this\nis inconsistent and potentially confusing because negating list\narguments is supposed to be equivalent to leaving them unset.\n\nPrevious PR #30529 fixed a variety of cases where calling IsArgSet on\nlist arguments led to problems, so this commit just fixes another case\nfor consistency. The only difference in behavior here is that negated\narguments no long trigger \"option may not be used on mainnet\" errors.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "ee255e66a32c9f53206b477d76e3d68a29ebb3b1",
   "date": "2026-08-14T20:01:12Z",
   "message": "common: Disallow calling IsArgSet() on ALLOW_LIST options\n\nDisallow calling IsArgSet() function on ALLOW_LIST options. Code that uses\nIsArgSet() with list options is confusing and leads to mistakes due to the easy\nto overlook case where an argument is negated and IsArgSet() returns true, but\nGetArgs() returns an empty list."
  },
  {
   "sha": "c01c9c42b716c5404f64786e4cd786a06a103753",
   "date": "2026-08-14T20:01:12Z",
   "message": "test-each-commit: Increase fetch depth\n\nNeeded due to base PR, can be dropped before merge"
  }
 ],
 "timeline": [
  {
   "t": "2019-12-22T23:53:17Z",
   "kind": "comment",
   "who": "promag",
   "assoc": "CONTRIBUTOR",
   "text": "Concept ACK."
  },
  {
   "t": "2020-09-03T13:24:06Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "cedf83ee857f717027f7367232682ebc27da4017"
  },
  {
   "t": "2020-09-28T11:47:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b65072798cdf8a9aca87f05fb2e6f39414f40844"
  },
  {
   "t": "2020-09-28T11:48:14Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased d0abe645d7648e44c0d5cd9a43482448a65c1532 -> cedf83ee857f717027f7367232682ebc27da4017 ([`pr/wdnolist.1`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.1) -> [`pr/wdnolist.2`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.2), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.1-rebase..pr/wdnolist.2)) due to conflict with #19561, #19638, #19709 on top of #17580 pr/wdlist.4\nRebased cedf83ee857f717027f7367232682ebc27da4017 -> b65072798cdf8a9aca87f05fb2e6f39414f40844 ([`pr/wdnolist.2`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.2) -> [`pr/wdnolist.3`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.3), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.2-rebase..pr/wdnolist.3)) after conflict with #18267, adding changes originally in #17580 on top of #17580 pr/wdlist.6\nRebased b65072798cdf8a9aca87f05fb2e6f39414f40844 -> 4223415ff6de22724ca1b85cd65119771dbdf0e9 ([`pr/wdnolist.3`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.3) -> [`pr/wdnolist.4`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.4), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.3-rebase..pr/wdnolist.4)) on top of #17580 pr/wdlist.9 due to conflicts with #21415 and #20048, also fixing fuzz error https://travis-ci.org/github/bitcoin/bitcoin/jobs/730931049\nUpdated 4223415ff6de22724ca1b85cd65119771dbdf0e9 -> fba5a00126b647225dd13b4aa18406aae82c76af ([`pr/wdnolist.4`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.4) -> [`pr/wdnolist.5`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.5), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.4..pr/wdnolist.5)) to try to fix fuzz test bug https://cirrus-ci.com/task/6395856740941824?logs=ci#L4435\nUpdated fba5a00126b647225dd13b4aa18406aae82c76af -> 6b8276e8f595c3dc212f06eb121ca6a5bbaeb58a ([`pr/wdnolist.5`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.5) -> [`pr/wdnolist.6`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.6), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.5..pr/wdnolist.6)) to fix same fuzz test bug https://cirrus-ci.com/task/6640989080125440 previous push didn't fix\nRebased 6b8276e8f595c3dc212f06eb121ca6a5bbaeb58a -> 048a4ee606a370d51620e39aecc8f6d4a132c31c ([`pr/wdnolist.6`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.6) -> [`pr/wdnolist.7`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.7), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.6-rebase..pr/wdnolist.7)) due to conflict with #21732\nRebased 048a4ee606a370d51620e39aecc8f6d4a132c31c -> 98ebf0b32a6deb6f14b919286e2c3195ab68ab6d ([`pr/wdnolist.7`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.7) -> [`pr/wdnolist.8`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.8), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.7-rebase..pr/wdnolist.8)) on top of #17580 pr/wdlist.12\nRebased 98ebf0b32a6deb6f14b919286e2c3195ab68ab6d -> 2212f18e344d53c5c23af5253ae4f21abe3dae7f ([`pr/wdnolist.8`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.8) -> [`pr/wdnolist.9`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.9), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.8-rebase..pr/wdnolist.9)) on top of #17580 pr/wdlist.14\nRebased 2212f18e344d53c5c23af5253ae4f21abe3dae7f -> e75b01cddd5f454c51071c707305f609d8950bad ([`pr/wdnolist.9`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.9) -> [`pr/wdnolist.10`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.10), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.9-rebase..pr/wdnolist.10)) on top of #17580 pr/wdlist.15--\n\n---\n\nRebased 11d0a897d53e1457e5ffbbd253becd0c8ce69c5d -> 6321fdbc855e8c5070d491ec60a07e12f2dd5086 ([`pr/wdnolist.20`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.20) -> [`pr/wdnolist.21`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.21), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.20-rebase..pr/wdnolist.21))\n\nRebased 6321fdbc855e8c5070d491ec60a07e12f2dd5086 -> 38a9cd5388846e91cef49782c2050b0a8d14a85b ([`pr/wdnolist.21`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.21) -> [`pr/wdnolist.22`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.22), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.21-rebase..pr/wdnolist.22))\n\nRebased 38a9cd5388846e91cef49782c2050b0a8d14a85b -> 2f449669515c855267c91ed63370ee9d24f1ebae ([`pr/wdnolist.22`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.22) -> [`pr/wdnolist.23`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.23), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.22-rebase..pr/wdnolist.23)) on top of #17580 pr/wdlist.31\n\nUpdated 2f449669515c855267c91ed63370ee9d24f1ebae -> bf609a93e61feb55b77996c324cfb6e70ca49b9f ([`pr/wdnolist.23`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.23) -> [`pr/wdnolist.24`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.24), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.23..pr/wdnolist.24)) to fix CI error caused by silent conflict with #29415 https://github.com/bitcoin/bitcoin/actions/runs/21119016159/job/60728873971?pr=17783\n\nRebased bf609a93e61feb55b77996c324cfb6e70ca49b9f -> 811a7a9f9ba630d268514588f27c208e63b6b234 ([`pr/wdnolist.24`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.24) -> [`pr/wdnolist.25`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.25), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.24-rebase..pr/wdnolist.25)) on top of #17580 pr/wdlist.33\n\nRebased 811a7a9f9ba630d268514588f27c208e63b6b234 -> 1d00d2aad5f5e293eba42b35cd51afeec5b3e17d ([`pr/wdnolist.25`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.25) -> [`pr/wdnolist.26`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.26), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.25-rebase..pr/wdnolist.26)) on top of #17580 pr/wdlist.34, fixing silent merge conflict with #35335 which called IsArgSet on -testactivationheight and -vbparams list options\n\nRebased 1d00d2aad5f5e293eba42b35cd51afeec5b3e17d -> bc5e4996596fadacca6b1e1754217ecbf1820007 ([`pr/wdnolist.26`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.26) -> [`pr/wdnolist.27`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.27), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.26-rebase..pr/wdnolist.27)) due to conflict with #35441\n\nRebased bc5e4996596fadacca6b1e1754217ecbf1820007 -> ee255e66a32c9f53206b477d76e3d68a29ebb3b1 ([`pr/wdnolist.27`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.27) -> [`pr/wdnolist.28`](https://github.com/ryanofsky/bitcoin/commits/pr/wdnolist.28), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/wdnolist.27-rebase..pr/wdnolist.28)) on top of #17580 pr/wdlist.36 due to conflicts with #35205 and #35729"
  },
  {
   "t": "2021-04-12T00:50:22Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "4223415ff6de22724ca1b85cd65119771dbdf0e9"
  },
  {
   "t": "2021-04-12T19:51:20Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "fba5a00126b647225dd13b4aa18406aae82c76af"
  },
  {
   "t": "2021-04-12T23:52:21Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6b8276e8f595c3dc212f06eb121ca6a5bbaeb58a"
  },
  {
   "t": "2021-06-16T20:50:48Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "048a4ee606a370d51620e39aecc8f6d4a132c31c"
  },
  {
   "t": "2021-12-30T21:07:49Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "98ebf0b32a6deb6f14b919286e2c3195ab68ab6d"
  },
  {
   "t": "2022-09-27T13:45:42Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "2212f18e344d53c5c23af5253ae4f21abe3dae7f"
  },
  {
   "t": "2022-11-29T04:11:00Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e75b01cddd5f454c51071c707305f609d8950bad"
  },
  {
   "t": "2023-02-14T23:02:29Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "7ef55ca3e2c4d8c89c77463771c9e9106efe5c8c"
  },
  {
   "t": "2023-05-03T19:40:43Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f59bfafcc8f3bf73d9e5c70669fff354f29b261b"
  },
  {
   "t": "2024-07-19T23:07:09Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d81071a0db8607faec25454e20f4feeb19e84438"
  },
  {
   "t": "2024-07-24T15:03:28Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "055740f7dba442e7c94547d56c80039ae935d9c6"
  },
  {
   "t": "2024-08-06T16:21:00Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "5928735274237f39eb485dc1c7d7bd2d7861bf77"
  },
  {
   "t": "2024-12-09T16:13:58Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e74d7300b81643af52dc06bb4926685555d4a414"
  },
  {
   "t": "2025-03-12T18:22:43Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d8a7a2710c01754cc3765cbb4d1757364148bf98"
  },
  {
   "t": "2025-08-01T22:43:36Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d7818446b029f11c201ce1dc5d6ca12458f55990"
  },
  {
   "t": "2025-08-01T22:50:56Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "11d0a897d53e1457e5ffbbd253becd0c8ce69c5d"
  },
  {
   "t": "2025-12-12T12:18:50Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6321fdbc855e8c5070d491ec60a07e12f2dd5086"
  },
  {
   "t": "2025-12-16T02:10:12Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "38a9cd5388846e91cef49782c2050b0a8d14a85b"
  },
  {
   "t": "2026-01-18T21:35:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "2f449669515c855267c91ed63370ee9d24f1ebae"
  },
  {
   "t": "2026-01-18T23:02:03Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "bf609a93e61feb55b77996c324cfb6e70ca49b9f"
  },
  {
   "t": "2026-04-01T21:00:50Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "811a7a9f9ba630d268514588f27c208e63b6b234"
  },
  {
   "t": "2026-06-08T16:40:02Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "67b813d53986bcf14456e9259b1515adb799ab68"
  },
  {
   "t": "2026-06-24T15:26:43Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "4725042d6897437eb1df76513887f275b4c43c00"
  },
  {
   "t": "2026-08-15T16:09:50Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c01c9c42b716c5404f64786e4cd786a06a103753"
  }
 ],
 "labels_log": [
  {
   "t": "2019-12-20T15:37:23Z",
   "action": "labeled",
   "label": "Utils/log/libs",
   "who": "fanquake"
  },
  {
   "t": "2020-01-30T22:50:29Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-09-03T15:31:24Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-09-15T15:51:07Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-09-28T13:11:36Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-09-29T07:59:48Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-04-12T02:53:44Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-04-15T04:01:26Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-06-16T20:55:37Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-07-21T14:17:14Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-12-30T21:32:49Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-02-09T23:11:26Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-09-27T16:24:44Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-11-15T21:17:07Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-11-29T06:14:57Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-01-11T13:55:57Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-02-15T00:13:04Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-03-16T14:34:38Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-05-03T21:08:17Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-05-09T16:37:41Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-20T00:28:25Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-20T01:16:08Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-24T18:36:54Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-05T01:42:06Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-06T18:00:17Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-07T22:12:21Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-12-09T16:30:01Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-12-14T01:17:59Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-03-12T18:28:00Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-03-14T01:36:01Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-08-01T23:06:45Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-11-21T23:34:25Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-12T13:18:42Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-12T18:50:22Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-01-19T00:15:37Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-01-27T13:51:31Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-04-01T22:52:06Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-06-03T22:30:16Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-06-08T17:25:57Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-06-15T21:42:50Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-06-24T16:05:43Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-04T20:50:44Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-15T17:51:06Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  }
 ],
 "state_log": [
  {
   "t": "2023-04-25T16:16:13Z",
   "kind": "convert_to_draft",
   "who": "achow101"
  },
  {
   "t": "2024-08-06T16:22:15Z",
   "kind": "renamed",
   "who": "ryanofsky",
   "from": "util: Fix -norpcwhitelist, -norpcallowip, and similar corner case behavior",
   "to": "common: Disallow calling IsArgSet() on ALLOW_LIST options"
  }
 ],
 "text_chars": 18054,
 "text_tokens_estimate": 4513,
 "changed_paths": [
  ".github/workflows/ci.yml",
  "src/chainparamsbase.cpp",
  "src/common/args.cpp",
  "src/common/args.h",
  "src/common/config.cpp",
  "src/init.cpp",
  "src/init/common.cpp",
  "src/test/argsman_tests.cpp",
  "src/test/fuzz/system.cpp",
  "src/test/getarg_tests.cpp",
  "src/test/logging_tests.cpp",
  "src/test/util/common.h",
  "src/wallet/init.cpp",
  "test/functional/feature_config_args.py",
  "test/lint/check-doc.py"
 ],
 "files": [
  {
   "path": ".github/workflows/ci.yml",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/chainparamsbase.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/common/args.cpp",
   "add": 169,
   "del": 49
  },
  {
   "path": "src/common/args.h",
   "add": 162,
   "del": 21
  },
  {
   "path": "src/common/config.cpp",
   "add": 4,
   "del": 0
  },
  {
   "path": "src/init.cpp",
   "add": 47,
   "del": 39
  },
  {
   "path": "src/init/common.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/test/argsman_tests.cpp",
   "add": 661,
   "del": 71
  },
  {
   "path": "src/test/fuzz/system.cpp",
   "add": 60,
   "del": 9
  },
  {
   "path": "src/test/getarg_tests.cpp",
   "add": 61,
   "del": 3
  },
  {
   "path": "src/test/logging_tests.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/test/util/common.h",
   "add": 4,
   "del": 0
  },
  {
   "path": "src/wallet/init.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "test/functional/feature_config_args.py",
   "add": 1,
   "del": 1
  },
  {
   "path": "test/lint/check-doc.py",
   "add": 3,
   "del": 2
  }
 ],
 "test_lines": 882,
 "git": {
  "head": "c01c9c42b716c5404f64786e4cd786a06a103753",
  "head_matches_backup": true,
  "base": "683e05a265c86fee6075ccd81828b19e0d8e131a",
  "commits": [
   {
    "sha": "94300ae454",
    "subject": "common: Grammar / formatting tweaks",
    "files": 2,
    "add": 4,
    "del": 4
   },
   {
    "sha": "92cb734d5a",
    "subject": "doc: Add detailed ArgsManager type flag documention",
    "files": 2,
    "add": 137,
    "del": 18
   },
   {
    "sha": "1500c5801c",
    "subject": "common: Implement ArgsManager flags to parse and validate settings on startup",
    "files": 5,
    "add": 194,
    "del": 16
   },
   {
    "sha": "481099679b",
    "subject": "common: Update ArgManager GetArg helper methods to work better with ALLOW flags",
    "files": 4,
    "add": 174,
    "del": 80
   },
   {
    "sha": "dadfea2ac5",
    "subject": "test: Add tests to demonstrate usage of ArgsManager flags",
    "files": 2,
    "add": 312,
    "del": 0
   },
   {
    "sha": "abe4b1d897",
    "subject": "test: Add test for settings.json parsing with type flags",
    "files": 1,
    "add": 61,
    "del": 3
   },
   {
    "sha": "d134020611",
    "subject": "Merge branch 'pr/argcheck' into pr/wdlist",
    "files": 9,
    "add": 851,
    "del": 90
   },
   {
    "sha": "671e547796",
    "subject": "common: Add support for combining ArgsManager flags",
    "files": 4,
    "add": 138,
    "del": 20
   },
   {
    "sha": "44e71c8b9f",
    "subject": "scripted-diff: Add ALLOW_LIST flag to arguments retrieved with GetArgs",
    "files": 6,
    "add": 27,
    "del": 27
   },
   {
    "sha": "bd820336f0",
    "subject": "refactor: Fix more ALLOW_LIST arguments",
    "files": 3,
    "add": 13,
    "del": 13
   },
   {
    "sha": "b314c7e7de",
    "subject": "Always reject empty -blockfilterindex=\"\" arguments",
    "files": 1,
    "add": 8,
    "del": 7
   },
   {
    "sha": "bf58582fd4",
    "subject": "refactor: Stop calling GetArg/IsArgSet on ALLOW_LIST options",
    "files": 1,
    "add": 11,
    "del": 4
   },
   {
    "sha": "581eaaf10f",
    "subject": "refactor: Always enforce ALLOW_LIST in CheckArgFlags",
    "files": 3,
    "add": 121,
    "del": 61
   },
   {
    "sha": "f450f212e6",
    "subject": "Merge branch 'pr/wdlist' into pr/wdnolist",
    "files": 14,
    "add": 1143,
    "del": 196
   },
   {
    "sha": "715b7f6e9e",
    "subject": "Normalize inconsistent -noonlynet behavior with -privatebroadcast and -listenonion",
    "files": 1,
    "add": 1,
    "del": 1
   },
   {
    "sha": "8b5758b8b7",
    "subject": "init: Stop calling IsArgSet on list args -testactivationheight and -vbparams",
    "files": 1,
    "add": 2,
    "del": 2
   },
   {
    "sha": "ee255e66a3",
    "subject": "common: Disallow calling IsArgSet() on ALLOW_LIST options",
    "files": 3,
    "add": 37,
    "del": 7
   },
   {
    "sha": "c01c9c42b7",
    "subject": "test-each-commit: Increase fetch depth",
    "files": 1,
    "add": 1,
    "del": 1
   }
  ],
  "patch_truncated": true
 },
 "input_hash": "752d1385a475e193",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}