Skip to content

Settings refactor: modern UI default with persistence and behavior parity - #4948

Draft
cagnulein wants to merge 54 commits into
masterfrom
agent/settings-refactor-phase1-safety
Draft

Settings refactor: modern UI default with persistence and behavior parity#4948
cagnulein wants to merge 54 commits into
masterfrom
agent/settings-refactor-phase1-safety

Conversation

@cagnulein

@cagnulein cagnulein commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Summary

Refactors QZ settings around the existing persistent Settings {} ABI while making the catalog-driven modern settings UI the default. The legacy renderer remains available as a temporary fallback until runtime smoke testing is complete.

Persistence safety

  • protects the existing persistent key names, declaration order, QML types, and default expressions
  • allows only append-only persistent additions
  • compares every PR against its exact base SHA
  • keeps the audit workflow read-only

Complete settings catalog

  • catalog coverage is 998/998 persistent keys
  • storage-only settings remain cataloged with visible: false
  • every persistent setting now has explicit restartRequired metadata
  • virtual settings also have explicit restart policy

Shared behavior parity

The modern UI and catalog search use the shared settingsBehavior controller. It now preserves known legacy behavior that is more complex than a direct assignment, including:

  • metric/imperial conversions for weight, bike weight, height, autolap, treadmill speed, and Peloton treadmill thresholds
  • race target time formatting/storage for 1 mile, 5 km, 10 km, half marathon, and marathon
  • Domyos profile and Kingsmith encryption mutual exclusion
  • Peloton auto-start mutual exclusion
  • Zwift OCR mutual exclusion plus Android notification side effect
  • Zwift Play / Wattbike emulator conflict handling and existing confirmation dialog
  • calibration-cache invalidation for watt offset, watt gain, and power sensor changes

Modern settings UI

  • hierarchical catalog-driven categories
  • built-in settings search
  • boolean, value, choice, virtual-choice, and page-navigation rows
  • modern UI opens automatically when entering settings
  • legacy renderer remains behind the Drawer as a fallback during runtime validation

Validation

Permanent CI checks cover:

  • persistent settings ABI compatibility
  • 998/998 catalog coverage and catalog types/counts
  • explicit restart policy for persistent and virtual settings
  • shared behavior-controller wiring
  • known conversion and multi-setting side-effect parity
  • modern renderer structure and use of the shared mutation path

The remaining gate before deleting the legacy renderer is manual visual/interaction smoke testing on iOS and at least one non-iOS platform, plus any dynamic visibility/enabled issues exposed by that testing.

cagnulein and others added 30 commits August 18, 2026 11:50
@cagnulein cagnulein changed the title Settings refactor phase 1: safety infrastructure Settings refactor: safety, full catalog and modern UI preview Aug 18, 2026
@cagnulein cagnulein changed the title Settings refactor: safety, full catalog and modern UI preview Settings refactor: modern UI default with persistence and behavior parity Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant