{
 "number": 36478,
 "input_hash": "bc4b783ae8907c6b",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-27T01:27:15+00:00",
 "result": {
  "summary": "Introduces C++20 consteval wrappers to enforce character restrictions on RPC argument and result field names at compile time. It also updates several existing RPC documentation strings containing slashes, brackets, or spaces to conform to the new naming rules, and disables clang-tidy's modernize-use-emplace check.",
  "problem": "Inconsistently formatted or non-standard RPC argument and result field names (such as containing slashes or spaces) create developer confusion and potential bugs across RPC interfaces without any automated mechanism to catch them during compilation.",
  "card": "Adds C++20 consteval compile-time verification for RPC argument names and result field names to reject confusing characters like slashes and spaces during the build. This addresses developer confusion and parameter naming bugs such as those discussed in PR #35317. Several existing RPC documentation field names are adjusted to comply, and clang-tidy's modernize-use-emplace check is disabled to allow push_back with consteval types.",
  "evidence": [
   "The PR description notes: 'Generally, such names should be `snake_case`. Otherwise, there are bugs and confusion', citing PR #35317."
  ],
  "scope_notes": "Also renames several RPC documentation keys across mining, net, and wallet RPCs to comply with the new consteval character rules, and removes modernize-use-emplace from .clang-tidy because clang-tidy suggests emplace calls that fail with consteval constructors.",
  "changed_since_previous": "Diff provided; confirms the consteval name validators and updates non-conforming RPC doc keys.",
  "thread": {
   "last_event_at": "2026-10-26T08:54:43Z",
   "events": 3,
   "head_sha": "fabdf113d377d507658557cfb5933dcd13324f10",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": "2026-10-26",
    "id": "c:6412043412",
    "on": "reviewer",
    "url": "https://github.com/bitcoin/bitcoin/pull/36478#issuecomment-6412043412",
    "what": "fametrano to follow up on author declining the suggestion, or further review"
   }
  ],
  "risk": {
   "level": "medium",
   "touches": [
    "rpc_api",
    "tooling"
   ],
   "why": "Renaming field names in RPC documentation or introducing overly restrictive compile-time checks could break downstream schema parsers or reject valid RPC parameter definitions."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-26",
   "open_concerns": [],
   "resolved_concerns": [
    "fametrano: Reject alias lists containing empty parts (e.g., \"a||b\", \"|\", \"a|\") at compile time to prevent named arguments called \"\" (answered by maflcko 2026-10-26)"
   ]
  },
  "reviewability": {
   "state": "Ready",
   "label": "Ready",
   "reason": "Nothing known that would invalidate a review now."
  },
  "agreement": {
   "state": "Strong",
   "summary": "Strong: substantive support, no open objection (fametrano)",
   "reason": "Author replied to fametrano's suggestion regarding empty alias list parts, declining to add compile-time checks as unnecessary.",
   "evidence": [
    "fametrano: Tested ACK \u2014 Tested base vs head RPC help and openrpc output diffs, verified compile times of touched files, and tested compile-time rejection of various invalid argument and result names"
   ],
   "objections": [
    {
     "reviewer": "fametrano",
     "association": "NONE",
     "type": "suggestion",
     "kind": "correctness",
     "harm": "",
     "request": "Reject alias lists containing empty parts (e.g., \"a||b\", \"|\", \"a|\") at compile time to prevent named arguments called \"\"",
     "question": "",
     "text": "Reject alias lists containing empty parts (e.g., \"a||b\", \"|\", \"a|\") at compile time to prevent named arguments called \"\"",
     "clears_with": "answer",
     "blocking": false,
     "status": "answered",
     "status_note": "author declined, explaining empty strings carry no risk and don't need compile-time linting",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [
      "c:6412043412"
     ],
     "evidence": "2026-10-25: 'Alias lists with empty parts still compile, such as \"a||b\", \"|\" and \"a|\". At runtime the empty part becomes a named argument called \"\". Rejecting it may be worth it while you are here.'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36478#issuecomment-6394577239",
     "id": "c:6394577239",
     "at": "2026-10-25",
     "status_at": "2026-10-26",
     "status_by": "maflcko",
     "resolution_evidence": "2026-10-26: maflcko: 'I'd say that is fine, because there is no risk.'",
     "pin": null,
     "from_schema": 2
    }
   ],
   "support": [
    {
     "reviewer": "fametrano",
     "reason": "Tested base vs head RPC help and openrpc output diffs, verified compile times of touched files, and tested compile-time rejection of various invalid argument and result names",
     "substantive": true,
     "verdict": "Tested ACK",
     "id": "c:6394577239",
     "url": "https://github.com/bitcoin/bitcoin/pull/36478#issuecomment-6394577239",
     "at": "2026-10-25",
     "association": "NONE",
     "evidence": "both",
     "areas": []
    }
   ],
   "participants": [
    {
     "login": "fametrano",
     "stance": "support",
     "note": "tested ACK; suggested rejecting empty parts in alias lists",
     "association": "NONE",
     "comments": 1,
     "first": "2026-10-25",
     "last": "2026-10-25"
    }
   ],
   "derivation": "substantive support, no open objection (fametrano)",
   "model_state": null,
   "corrections": [],
   "notes": "Author replied to fametrano's suggestion regarding empty alias list parts, declining to add compile-time checks as unnecessary."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "mining",
    "member": false,
    "evidence": "Touch to src/rpc/mining.cpp (+2/-2) is a purely mechanical update to satisfy the new RPC naming rules.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 0,
     "user_value": 0
    },
    "rationale": ""
   },
   {
    "name": "rpc",
    "member": true,
    "evidence": "Carries RPC/REST/ZMQ label and modifies the core RPC argument and documentation utility definitions in src/rpc/util.h.",
    "band": "P3",
    "reason_tag": "cleanup",
    "score": 0.35,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 0,
     "user_value": 0
    },
    "rationale": "Compile-time enforcement catches malformed RPC argument and result field names early during development. The PR description notes that 'Generally, such names should be `snake_case`. Otherwise, there are bugs and confusion', improving consistency across RPC declarations."
   },
   {
    "name": "wallet",
    "member": false,
    "evidence": "Touch to src/wallet/rpc/addresses.cpp (+3/-3) is a mechanical change adapting documentation strings to the new RPC utility rules.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 0,
     "user_value": 0
    },
    "rationale": ""
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-27T01:27:15+00:00",
  "code": "2026-10-10T01:25:45+00:00",
  "judgments": 3
 }
}