feat(settings): productize stable and advanced controls#108
feat(settings): productize stable and advanced controls#108
Conversation
📝 WalkthroughWalkthroughthis pr restructures the settings surface and docs into “everyday settings” and “advanced & operator” groups, renames multiple labels (e.g., summary line → details line, menu behavior → results & refresh), adds hint copy for several items, and moves sync-center under advanced controls. see Changes
Sequence Diagram(s)Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes notes and flags:
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
✨ Simplify code
📝 Coding Plan
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…/05-settings-productization # Conflicts: # docs/reference/settings.md
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
test/documentation.test.ts (1)
339-362:⚠️ Potential issue | 🟡 Minortest locks the heading level anomaly.
test/documentation.test.ts:351assertsexpect(settingsRef).toContain("## Backend Categories")which will pass but locks the incorrect heading level into the test. ifdocs/reference/settings.md:121is fixed to### Backend Categories, this assertion must also be updated.📝 proposed fix if heading is corrected
- expect(settingsRef).toContain("## Backend Categories"); + expect(settingsRef).toContain("### Backend Categories");🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@test/documentation.test.ts` around lines 339 - 362, The test "keeps settings reference sections aligned with current menu labels and backend categories" asserts that settingsRef contains "## Backend Categories" which hard-codes the wrong heading level; update the expectation that checks settingsRef (variable settingsRef in that it block) to assert "### Backend Categories" (or otherwise make the check heading-level-agnostic) so the test matches the corrected docs/reference/settings.md heading.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/reference/settings.md`:
- Around line 117-123: The heading "Backend Categories" is one level too high
relative to "Advanced Backend Controls" — change the "## Backend Categories"
heading to "### Backend Categories" so it nests under "### Advanced Backend
Controls", and then demote the subsequent section headings such as "Session &
Sync" (and other nested subsections like "Rotation & Quota") one level (e.g.,
from "###" to "####") to maintain consistent hierarchy across the document.
In `@lib/ui/copy.ts`:
- Around line 85-88: The strings experimentalHint and experimentalSubtitle are
duplicated which causes redundant UI copy when promptExperimentalSettings
renders both; decide whether to remove one or make them distinct and update the
values accordingly (e.g., keep experimentalSubtitle as the concise label and
change experimentalHint to a more actionable/helpful sentence, or remove
experimentalHint and have promptExperimentalSettings only use
experimentalSubtitle). Edit the constants experimentalHint and/or
experimentalSubtitle and, if needed, adjust promptExperimentalSettings to
reference the single intended field so the UI no longer displays duplicated
text.
In `@test/codex-manager-cli.test.ts`:
- Around line 4174-4185: The test is missing assertions for three hint strings
wired into the settings hub; update the test that checks menuText (variable
menuText in the spec) to also assert it contains summaryFieldsHint,
behaviorHint, and themeHint (or their literal values: "Choose which details
appear under each account row.", "Control auto-return timing and background
limit refresh behavior.", and "Pick the base palette and accent color.") so the
spec verifies the full hint matrix rendered by the settings hub (the same menu
that currently asserts accountListHint, syncCenterHint, experimentalHint, and
backendHint).
---
Outside diff comments:
In `@test/documentation.test.ts`:
- Around line 339-362: The test "keeps settings reference sections aligned with
current menu labels and backend categories" asserts that settingsRef contains
"## Backend Categories" which hard-codes the wrong heading level; update the
expectation that checks settingsRef (variable settingsRef in that it block) to
assert "### Backend Categories" (or otherwise make the check
heading-level-agnostic) so the test matches the corrected
docs/reference/settings.md heading.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: e150dcf9-cd3d-42b1-a629-52c311eb3603
📒 Files selected for processing (5)
docs/reference/settings.mdlib/codex-manager/settings-hub.tslib/ui/copy.tstest/codex-manager-cli.test.tstest/documentation.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (3)
docs/**
⚙️ CodeRabbit configuration file
keep README, SECURITY, and docs consistent with actual CLI flags and workflows. whenever behavior changes, require updated upgrade notes and mention new npm scripts.
Files:
docs/reference/settings.md
lib/**
⚙️ CodeRabbit configuration file
focus on auth rotation, windows filesystem IO, and concurrency. verify every change cites affected tests (vitest) and that new queues handle EBUSY/429 scenarios. check for logging that leaks tokens or emails.
Files:
lib/codex-manager/settings-hub.tslib/ui/copy.ts
test/**
⚙️ CodeRabbit configuration file
tests must stay deterministic and use vitest. demand regression cases that reproduce concurrency bugs, token refresh races, and windows filesystem behavior. reject changes that mock real secrets or skip assertions.
Files:
test/codex-manager-cli.test.tstest/documentation.test.ts
🔇 Additional comments (7)
lib/ui/copy.ts (1)
65-130: label and hint updates look good.the renamed labels (
List Appearance,Details Line,Results & Refresh,Colors,Advanced Backend Controls,Codex CLI Sync) and new hint strings are consistent with the everyday/advanced split described in pr objectives. no auth rotation, filesystem io, or concurrency concerns in this pure ui copy file.lib/codex-manager/settings-hub.ts (1)
3307-3368: hint wiring and menu reordering look correct.the hint properties are correctly wired to
UI_COPY.settings.*Hintconstants and theMenuIteminterface supports the optionalhintfield perlib/ui/select.ts:4-14. sync-center moved under advanced heading with yellow color aligns with pr objectives.no auth rotation, filesystem io, or concurrency changes here - purely presentational. existing retry logic at
lib/codex-manager/settings-hub.ts:712-736already handles EBUSY/429 scenarios and remains unchanged.docs/reference/settings.md (1)
22-94: documentation structure aligns with new ui grouping.the section renames (
Everyday Settings,List Appearance,Details Line,Results & Refresh,Colors,Advanced and Operator Controls,Codex CLI Sync) match the updatedUI_COPY.settings.*labels. the validation block at lines 89-94 is a good addition for consistency.test/documentation.test.ts (1)
288-337: test assertions correctly lock the new ui copy values.all 7 hint strings are asserted:
accountListHint,syncCenterHint,summaryFieldsHint,behaviorHint,themeHint,experimentalHint,backendHint. the renamed labels are also validated. tests remain deterministic using vitest.test/codex-manager-cli.test.ts (3)
406-414: sync-center position in menu order looks correct.the addition of
"sync-center"attest/codex-manager-cli.test.ts:411aligns with the productization move described in the ai summary—sync-center relocated under advanced section. the expected order now matcheslib/codex-manager/settings-hub.tschanges.
4138-4147: test rename and structure assertions look solid.the test name change from experimental-focused to productized everyday/advanced is appropriate for the feature. the setup with
setupInteractiveSettingsLoginandqueueSettingsSelectSequencekeeps the test deterministic and avoids real i/o.
4148-4173: section label assertions are comprehensive.assertions for section labels (
Everyday Settings,List Appearance,Details Line,Results & Refresh,Colors,Advanced & Operator,Codex CLI Sync,Experimental,Advanced Backend Controls) attest/codex-manager-cli.test.ts:4165-4173cover the ui restructuring described in the pr objectives.
docs/reference/settings.md
Outdated
| ### Advanced Backend Controls | ||
|
|
||
| Expert backend controls stay available without changing the saved settings schema. They are grouped into categories so the default path can stay simpler for day-to-day use. | ||
|
|
||
| ### Backend Categories | ||
|
|
||
| ### Session & Sync |
There was a problem hiding this comment.
heading level anomaly at line 121.
docs/reference/settings.md:121 uses ## Backend Categories which breaks the document hierarchy. it should be ### Backend Categories to nest under ### Advanced Backend Controls at line 117. pr objectives already flag this as a known reviewer finding.
📝 proposed fix for heading level
### Advanced Backend Controls
Expert backend controls stay available without changing the saved settings schema. They are grouped into categories so the default path can stay simpler for day-to-day use.
-## Backend Categories
+### Backend Categories
### Session & Syncnote: if this fix is applied, the nested subsections (Session & Sync, Rotation & Quota, etc.) should also be demoted to #### for consistency.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### Advanced Backend Controls | |
| Expert backend controls stay available without changing the saved settings schema. They are grouped into categories so the default path can stay simpler for day-to-day use. | |
| ### Backend Categories | |
| ### Session & Sync | |
| ### Advanced Backend Controls | |
| Expert backend controls stay available without changing the saved settings schema. They are grouped into categories so the default path can stay simpler for day-to-day use. | |
| ### Backend Categories | |
| ### Session & Sync |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/reference/settings.md` around lines 117 - 123, The heading "Backend
Categories" is one level too high relative to "Advanced Backend Controls" —
change the "## Backend Categories" heading to "### Backend Categories" so it
nests under "### Advanced Backend Controls", and then demote the subsequent
section headings such as "Session & Sync" (and other nested subsections like
"Rotation & Quota") one level (e.g., from "###" to "####") to maintain
consistent hierarchy across the document.
| experimentalHint: | ||
| "Preview sync and backup actions before they become stable.", | ||
| experimentalTitle: "Experimental", | ||
| experimentalSubtitle: "Preview sync and backup actions before they become stable", |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
duplicate copy between experimentalHint and experimentalSubtitle.
lib/ui/copy.ts:85-86 sets experimentalHint to "Preview sync and backup actions before they become stable." while lib/ui/copy.ts:88 sets experimentalSubtitle to the same text (minus trailing period). the pr objectives already flag this as a reviewer finding from greptile.
consider whether both are needed or if one should be differentiated to avoid redundant display when both hint and subtitle render together in promptExperimentalSettings.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@lib/ui/copy.ts` around lines 85 - 88, The strings experimentalHint and
experimentalSubtitle are duplicated which causes redundant UI copy when
promptExperimentalSettings renders both; decide whether to remove one or make
them distinct and update the values accordingly (e.g., keep experimentalSubtitle
as the concise label and change experimentalHint to a more actionable/helpful
sentence, or remove experimentalHint and have promptExperimentalSettings only
use experimentalSubtitle). Edit the constants experimentalHint and/or
experimentalSubtitle and, if needed, adjust promptExperimentalSettings to
reference the single intended field so the UI no longer displays duplicated
text.
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
test/codex-manager-cli.test.ts (1)
416-423:⚠️ Potential issue | 🟠 Majoradd a sync-center-specific cancel sequence to keep windows/concurrency coverage real.
line 421 adds
"sync-center"intoBASELINE_SETTINGS_HUB_PANELS, butcreateSettingsCancelSequencehas no sync-center branch and falls into backend-only actions attest/codex-manager-cli.test.ts:532-539. this means thewindows-ebusyandtoken-refresh-racematrix paths (test/codex-manager-cli.test.ts:425-433) are not exercising sync-center behavior directly.proposed fix
function createSettingsCancelSequence( panel: SettingsPanel, ): readonly SettingsSelectSequenceStep[] { @@ if (panel === "theme") { return [ { type: panel }, { type: "set-palette", palette: "blue" }, triggerSettingsHotkey("q"), { type: "back" }, ]; } + if (panel === "sync-center") { + return [ + { type: panel }, + { type: "refresh" }, + triggerSettingsHotkey("q"), + { type: "back" }, + ]; + } + if (panel === "backend") { + return [ + { type: panel }, + { type: "open-category", key: "rotation-quota" }, + { type: "toggle", key: "preemptiveQuotaEnabled" }, + { type: "back" }, + triggerSettingsHotkey("q"), + { type: "back" }, + ]; + } + const _exhaustive: never = panel; + return [_exhaustive]; - return [ - { type: panel }, - { type: "open-category", key: "rotation-quota" }, - { type: "toggle", key: "preemptiveQuotaEnabled" }, - { type: "back" }, - triggerSettingsHotkey("q"), - { type: "back" }, - ]; }as per coding guidelines "tests must stay deterministic and use vitest. demand regression cases that reproduce concurrency bugs, token refresh races, and windows filesystem behavior."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@test/codex-manager-cli.test.ts` around lines 416 - 423, BASELINE_SETTINGS_HUB_PANELS now includes "sync-center" but createSettingsCancelSequence lacks a sync-center branch so tests exercising the windows-ebusy and token-refresh-race matrix aren't triggering sync-center behavior; update createSettingsCancelSequence to add a sync-center-specific cancel sequence (mirroring the expected UI/API cancel flow for sync-center) so the "sync-center" panel path performs its own cancel actions instead of falling through to backend-only actions, ensuring the windows-ebusy and token-refresh-race test paths exercise sync-center concurrency/token-refresh behavior (referencing BASELINE_SETTINGS_HUB_PANELS and createSettingsCancelSequence and the windows-ebusy / token-refresh-race test matrix).docs/reference/settings.md (1)
26-116:⚠️ Potential issue | 🟠 Majorsettings reference is missing the new menu hint copy.
line 26 through line 116 in
docs/reference/settings.mdrenames panels but does not document the hint text now shown in the settings hub (accountListHint,summaryFieldsHint,behaviorHint,themeHint,syncCenterHint,experimentalHint,backendHint) fromlib/ui/copy.ts:72-95. this leaves user docs behind the shipped workflow inlib/codex-manager/settings-hub.ts:3310-3362.as per coding guidelines "Add hints: include hints for menu items (accountListHint, syncCenterHint, summaryFieldsHint, behaviorHint, themeHint, backendHint, experimentalHint)."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/reference/settings.md` around lines 26 - 116, The docs update removed the user-visible hint text for several settings panels; add the missing hint copy entries (accountListHint, summaryFieldsHint, behaviorHint, themeHint, syncCenterHint, experimentalHint, backendHint) into docs/reference/settings.md so the documentation matches the shipped UI; pull the exact hint strings from lib/ui/copy.ts (around lines 72-95) and ensure their placement corresponds to the panels renamed in settings.md (List Appearance/account list, Details Line/summary fields, Results & Refresh/behavior, Colors/theme, Codex CLI Sync/syncCenter, Experimental/experimental, Advanced Backend Controls/backend), matching the ordering and brief phrasing used by lib/codex-manager/settings-hub.ts (3310-3362).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/reference/settings.md`:
- Around line 73-78: Update the docs wording in the settings page to exactly
match the shipped UI copy: replace the header text "Advanced and Operator
Controls" with "advanced & operator" and change the phrase "sync center" (or
"sync center for Codex CLI account sync") to "codex cli sync" so the docs mirror
the strings used by the UI; search for those legacy phrases in the settings
documentation and update them to the exact UI strings ("advanced & operator" and
"codex cli sync") used by the UI copy and settings renderer.
---
Outside diff comments:
In `@docs/reference/settings.md`:
- Around line 26-116: The docs update removed the user-visible hint text for
several settings panels; add the missing hint copy entries (accountListHint,
summaryFieldsHint, behaviorHint, themeHint, syncCenterHint, experimentalHint,
backendHint) into docs/reference/settings.md so the documentation matches the
shipped UI; pull the exact hint strings from lib/ui/copy.ts (around lines 72-95)
and ensure their placement corresponds to the panels renamed in settings.md
(List Appearance/account list, Details Line/summary fields, Results &
Refresh/behavior, Colors/theme, Codex CLI Sync/syncCenter,
Experimental/experimental, Advanced Backend Controls/backend), matching the
ordering and brief phrasing used by lib/codex-manager/settings-hub.ts
(3310-3362).
In `@test/codex-manager-cli.test.ts`:
- Around line 416-423: BASELINE_SETTINGS_HUB_PANELS now includes "sync-center"
but createSettingsCancelSequence lacks a sync-center branch so tests exercising
the windows-ebusy and token-refresh-race matrix aren't triggering sync-center
behavior; update createSettingsCancelSequence to add a sync-center-specific
cancel sequence (mirroring the expected UI/API cancel flow for sync-center) so
the "sync-center" panel path performs its own cancel actions instead of falling
through to backend-only actions, ensuring the windows-ebusy and
token-refresh-race test paths exercise sync-center concurrency/token-refresh
behavior (referencing BASELINE_SETTINGS_HUB_PANELS and
createSettingsCancelSequence and the windows-ebusy / token-refresh-race test
matrix).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: f40ef692-cef0-443c-b29c-4bee42eaa634
📒 Files selected for processing (3)
docs/reference/settings.mdtest/codex-manager-cli.test.tstest/documentation.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (2)
docs/**
⚙️ CodeRabbit configuration file
keep README, SECURITY, and docs consistent with actual CLI flags and workflows. whenever behavior changes, require updated upgrade notes and mention new npm scripts.
Files:
docs/reference/settings.md
test/**
⚙️ CodeRabbit configuration file
tests must stay deterministic and use vitest. demand regression cases that reproduce concurrency bugs, token refresh races, and windows filesystem behavior. reject changes that mock real secrets or skip assertions.
Files:
test/codex-manager-cli.test.tstest/documentation.test.ts
🔇 Additional comments (2)
test/codex-manager-cli.test.ts (1)
4139-4193: good coverage update for the productized settings menu copy.this block now locks the full first-menu label/hint matrix, including the previously missing hints, and matches the rendered menu contract in
lib/codex-manager/settings-hub.ts:3310-3362.test/documentation.test.ts (1)
291-321: solid lock coverage for renamed settings copy and docs structure.these assertions are tight and deterministic, and they track the shipped copy surface from
lib/ui/copy.ts:63-130well.Also applies to: 342-357
| ## Advanced and Operator Controls | ||
|
|
||
| ### Codex CLI Sync | ||
|
|
||
| The settings hub includes a preview-first sync center for Codex CLI account sync. | ||
| The advanced section includes a preview-first sync center for Codex CLI account sync. | ||
| See [upgrade notes](../upgrade.md) for sync workflow changes. |
There was a problem hiding this comment.
align advanced section wording with shipped ui copy.
line 73 and line 77 in docs/reference/settings.md still use legacy wording ("advanced and operator controls", "sync center"), while the menu ships "advanced & operator" and "codex cli sync" in lib/ui/copy.ts:69-79 and renders them in lib/codex-manager/settings-hub.ts:3335-3356.
as per coding guidelines "UI text consistency: ensure synonyms and titles match the updated copy (e.g., Details Line for Summary Line, Colors for Color Theme, Codex CLI Sync for Sync Center)."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/reference/settings.md` around lines 73 - 78, Update the docs wording in
the settings page to exactly match the shipped UI copy: replace the header text
"Advanced and Operator Controls" with "advanced & operator" and change the
phrase "sync center" (or "sync center for Codex CLI account sync") to "codex cli
sync" so the docs mirror the strings used by the UI; search for those legacy
phrases in the settings documentation and update them to the exact UI strings
("advanced & operator" and "codex cli sync") used by the UI copy and settings
renderer.
Summary
#79fresh/04-sync-centerWhat Changed
Validation
npm run lintnpm run typechecknpm testnpm test -- test/documentation.test.tsnpm run buildDocs and Governance Checklist
docs/getting-started.mdupdated (if onboarding flow changed)docs/features.mdupdated (if capability surface changed)docs/reference/*pages updated (if commands/settings/paths changed)docs/upgrade.mdupdated (if migration behavior changed)SECURITY.mdandCONTRIBUTING.mdreviewed for alignmentRisk and Rollback
d0a80b5and310325dAdditional Notes
note: greptile review for oc-chatgpt-multi-auth. cite files like
lib/foo.ts:123. confirm regression tests + windows concurrency/token redaction coverage.Greptile Summary
this pr productizes the settings hub by splitting it into a clear two-tier layout: an Everyday Settings section (list appearance, details line, results & refresh, colors) and an Advanced & Operator section (codex cli sync, experimental, advanced backend controls). it also adds contextual
hintstrings to every menu item so users see a one-line description before entering a panel.key changes:
sync-centermoved from everyday → advanced section; color changed from green → yellow to signal operator-level scope.backendcolor changed from green → yellow for the same reason.lib/ui/copy.ts.##to a nested## / ### / ####hierarchy matching the new menu layout.sync-centeradded toBASELINE_SETTINGS_HUB_PANELS, which automatically generates 3 new cancel-matrix test cases (windows-ebusy, concurrent-save-ordering, token-refresh-race) — a positive concurrency coverage gain.experimentalHintandexperimentalSubtitlecarry nearly identical text with only a trailing period difference; they are locked separately in tests so future drift is possible.Confidence Score: 4/5
sync-centeraddition to the cancel matrix improves windows/concurrency coverage. the only gap is a near-duplicate string betweenexperimentalHintandexperimentalSubtitlethat could silently drift in future edits.Important Files Changed
experimentalHintandexperimentalSubtitlecarry nearly identical text with only a trailing period difference.Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A[Settings Hub] --> B["**Everyday Settings** (sectionTitle heading)"] A --> C["**Advanced & Operator** (advancedTitle heading)"] B --> B1["List Appearance\n(account-list) 🟢"] B --> B2["Details Line\n(summary-fields) 🟢"] B --> B3["Results & Refresh\n(behavior) 🟢"] B --> B4["Colors\n(theme) 🟢"] C --> C1["Codex CLI Sync\n(sync-center) 🟡\n— moved from Everyday —"] C --> C2["Experimental\n(experimental) 🟡"] C --> C3["Advanced Backend Controls\n(backend) 🟡\n— was green, now yellow —"] C1 --> D1["Preview one-way sync\nbefore applying"] C3 --> E1["Session & Sync"] C3 --> E2["Rotation & Quota"] C3 --> E3["Refresh & Recovery"] C3 --> E4["Performance & Timeouts"]Comments Outside Diff (1)
test/codex-manager-cli.test.ts, line 416-422 (link)sync-centermissing from cancellation matrixBASELINE_SETTINGS_HUB_PANELS(used bySETTINGS_CANCEL_MATRIXto exercise windows-ebusy / concurrent-save-ordering / token-refresh-race scenarios) was not updated to include"sync-center"even though sync-center is now promoted to a first-class entry inSETTINGS_HUB_MENU_ORDER. sync-center applies writes too — the windows EBUSY and token-refresh-race cancel paths are untested for that panel. on windows, antivirus file locks during sync apply are a real risk.Rule Used: What: Every code change must explain how it defend... (source)
Prompt To Fix With AI
Prompt To Fix All With AI
Last reviewed commit: f2f8427