#36180 qt: don't abort or drop settings when dynamic settings are disabled

ReviewabilityReviewsAgreementSize
#36180 jeanpablojp qt: don't abort or drop settings when dynamic settings are disabledReady0Crickets55 + 53 tests
  • Prevent crashes on startup when running the GUI with dynamic settings disabled
  • Avoid losing settings and warn users when changes cannot be saved to disk
  • Ready to review
  • No review verdicts recorded
  • No substantive feedback either way yet
  • Asked whether the issue and fix are relevant to the QML GUI (sedited)
  • 55 lines added or modified outside tests
  • 53 lines added or modified in tests
  • 27 lines removed in total
  • 7 files, 2 commits
Uncategorized15 PRs, unranked
1 rejected
  • IPC / multiprocess: not a member. Touches src/interfaces/node.h and src/node/interfaces.cpp, but only to support a GUI settings error-handling fix rather than changing IPC infrastructure.
Reviewability: ReadyStalePaused
Agreement: StrongPositivePositive w/ caveatsNeutralMildDisputedBlockedCrickets
Reviews: current code-review ACKs, then (+stale ACKs) and -NACKs; greener = more ACKs.
Size: lines added or modified outside tests, then in tests; greener = smaller.

Goal

Fixes crashes in bitcoin-qt when running with -nosettings alongside -resetguisettings or legacy GUI settings. It guards settings writes in NodeImpl so ArgsManager::WriteSettingsFile does not throw, prevents dropping legacy settings when migration cannot write to disk, and updates OptionsModel and OptionsDialog to warn when settings fail to persist.

Problem: When -nosettings is used, ArgsManager::WriteSettingsFile throws an exception, causing bitcoin-qt to abort on startup during legacy settings migration or when resetting GUI settings. Furthermore, failed settings writes previously closed the options dialog reporting success and prompted for a restart that would wipe in-memory changes.

Reviewability

Ready

Nothing known that would invalidate a review now.

Waiting on (from the thread read):

  • reviewer: sedited to acknowledge the reply, or other reviewers to review 2026-10-27

Agreement

Crickets

no substantive comment either way

Thread notes: Author answered sedited's question regarding relevance to the QML GUI.

Objections, suggestions, and questions:

ReviewerTypeHarm, request, or questionStatusMust beAuthor repliedQuote
sedited (member)question, scopewhether this issue and fix are relevant for the QML GUI as wellanswered · author explained how the changes affect gui-qml and noted mock updates will be neededansweredyes2026-10-19: 'Is this relevant for the qml gui too?'
Status from: 2026-10-27: jeanpablojp: 'From reading gui-qml, partly.'

Participants:

  • sedited (member, question, 1 statements 2026-10-19 to 2026-10-19): asked whether the change is also relevant for the QML GUI

Files

53 lines under test/bench/ci.

  • src/qt/optionsmodel.cpp +34/-21
  • src/qt/test/optiontests.cpp +51/-0
  • src/interfaces/node.h +6/-2
  • src/node/interfaces.cpp +4/-4
  • src/qt/optionsmodel.h +7/-0
  • src/qt/optionsdialog.cpp +4/-0
  • src/qt/test/optiontests.h +2/-0

Card

The short text the ranking pass compares across PRs.

This PR resolves startup crashes in bitcoin-qt when dynamic settings are disabled via -nosettings, specifically during legacy setting migration or when running with -resetguisettings. It also updates the GUI options dialog to alert the user if a setting failed to write to disk instead of claiming success and prompting for a restart. The diff guards NodeImpl write call sites, updates OptionsModel, and adds test coverage in optiontests.cpp. Review has not yet started.

Data

dossier JSON · extract JSON · model ledger, generated 2026-10-28T01:22, confidence high, input hash fd6ebc4534bafa29
thread read through 2026-10-27 (2 statements), head 7ff7e9bbe5
labels: GUI