Skip to content

Commit 6b2f1d3

Browse files
carterscodeclaude
andcommitted
docs: refresh README + wiki to current state (v0.1.58)
Bring the living docs in line with this release cycle's changes: - Three one-click presets (Reset all to defaults / Apply recommended / Apply extreme) replace the single "Apply recommended" everywhere they were described (README, Home, Installation, STAGED-APPLY-ARCHITECTURE). - Two-tier monitoring cadence documented: only display settings poll every 30s; the ~40 set-and-forget settings re-check at startup, on resume/unlock/display-change events, and a 10-min backstop (README, Home, Architecture-rationale, Source-file-reference). - Auto-apply circuit breaker + the [CIRCUIT] (and [EXTRESET]/[SESSION]/ [SNAPSHOT]/[MEM]) log line types documented; Logging.md examples converted to the current bracketed line-type format. - Richer Learn more (per-choice pros/cons + verify/apply/reverse PowerShell block) reflected in README + Source-file-reference. - Source-file-reference: added ~25 missing Services/Models/Monitor rows (MonitorVolatility, AutoApplyCircuitBreaker, RecommendedPreset, the 9 Windows-AI monitors, DrrInterop caching, ChoiceTradeoff, etc.). - Home/README tab count nine -> ten (added Debloat); Architecture "why not events" + "no DRR yet" sections rewritten to match reality. - Fixes: CONTRIBUTING fixedMonitors array name; Security/Scorecard de-staled (real disclosure channel, Signed-Releases now 10/10, non-numeric test/action counts). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent b546568 commit 6b2f1d3

10 files changed

Lines changed: 238 additions & 78 deletions

CONTRIBUTING.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ Symptom: enabling auto-apply on a service Windows refuses to actually
4747
disable (DoSvc / Delivery Optimization is the trigger case) caused a
4848
UAC prompt every 30 s forever.
4949
50-
MonitorService now backs off auto-apply for a setting whose verify
51-
failed for 15 minutes. Drift still surfaces as a notification.
50+
MonitorService now trips the auto-apply circuit breaker for a setting
51+
whose verify keeps failing (logged as [CIRCUIT]). Drift still surfaces
52+
as a notification.
5253
```
5354

5455
## Code style
@@ -67,7 +68,7 @@ The canonical example is `src/GamerGuardian/Monitors/HagsMonitor.cs` — about 3
6768
A new monitor needs:
6869

6970
1. A class implementing `IMonitoredSetting` in `src/GamerGuardian/Monitors/`.
70-
2. Registration in `App.xaml.cs` in the `_allMonitors` array.
71+
2. Registration in `App.xaml.cs` in the `fixedMonitors` array.
7172
3. A row in `SettingsWindow.xaml.cs` `LoadGlobals` (or the equivalent for your tab).
7273
4. A `MechanismFor` and `VerifyCommandFor` entry in `src/GamerGuardian/Services/SettingDocs.cs`.
7374
5. **A test** in `tests/GamerGuardian.Tests/` (see *Tests* below).

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ It's also paranoid about not making your gaming worse. Polling pauses entirely d
3131
## Highlights
3232

3333
- 🎯 **29+ monitored settings** spanning display, security, performance, capture, input, privacy/telemetry, network latency, system tuning, and Windows services
34-
- ⚙️ **One-click Recommended preset** -- General tab button stages the gaming-optimized configuration across every setting (Want + Monitor + Auto-apply). Idempotent, so re-running it after a future update picks up only the new settings.
34+
- ⚙️ **Three one-click presets** on the General tab -- **Apply recommended** (safe gaming preset: keeps Memory Integrity / VBS on, leaves contested network tweaks to you), **Apply extreme** (every gaming tweak on, including Memory Integrity / VBS off and the contested Nagle / NIC tweaks, with Monitor + Auto-apply on for every setting — confirms first), and **Reset all to defaults** (stages everything back to Windows defaults). The recommended preset is idempotent, so re-running it after a future update picks up only the new settings.
3535
- 🎮 **Pauses during gameplay** — fullscreen, borderless, *and* during benchmark runs (3DMark, Cinebench, Geekbench, etc.)
3636
-**One-click apply** with a per-setting auto-apply opt-in
3737
- 🪟 **Native Win11 Fluent design** with light / dark / system themes
@@ -44,18 +44,18 @@ It's also paranoid about not making your gaming worse. Polling pauses entirely d
4444

4545
<img src="docs/screenshots/settings-global-gaming.png" width="780" alt="GamerGuardian Settings — Global gaming tab" />
4646

47-
*Settings → Global gaming tab. Each card shows the setting name, a short description, current value, Windows default, and per-setting Monitor / Want / Auto-apply controls. Reboot-required settings get a yellow badge. The other tabs cover General preferences, **Privacy** (Advertising ID, Activity History, Cross-Device Platform, Tailored experiences), **Network** (Nagle's algorithm, NIC power management), Windows services, Windows AI, per-display Display settings (HDR / refresh / DRR), and CPU / Power.*
47+
*Settings → Global gaming tab. Each card shows the setting name, a short description, current value, Windows default, and per-setting Monitor / Want / Auto-apply controls. Reboot-required settings get a yellow badge. The other tabs cover General preferences (three one-click presets), **Privacy** (Advertising ID, Activity History, Cross-Device Platform, Tailored experiences, speech, inking), **Debloat** (ads / nags / suggested content), **Network** (Nagle's algorithm, NIC power management), Windows services, Windows AI, per-display Display settings (HDR / refresh / DRR), and CPU / Power.*
4848

4949
</div>
5050

5151
## What it watches
5252

5353
For each setting you choose three things: **Monitor** (watch it or not), the **desired value** (**Want** — shown as Enabled/Disabled, or Gaming/Default where the registry meaning is inverted), and whether to **auto-apply silently** when it drifts. Changes are staged until you click **Apply**, every change is reversible, and each one is recorded in `changes.log`.
5454

55-
Settings live across **nine tabs**. The lists below cover the monitored settings; for a complete walkthrough of every tab and what each setting means, see the **[Settings & tabs guide](https://github.com/carterscode/GamerGuardian/wiki/Settings-and-tabs)** (and [SETTINGS-REFERENCE.md](docs/SETTINGS-REFERENCE.md) for the full per-setting reference).
55+
Settings live across **ten tabs**. The lists below cover the monitored settings; for a complete walkthrough of every tab and what each setting means, see the **[Settings & tabs guide](https://github.com/carterscode/GamerGuardian/wiki/Settings-and-tabs)** (and [SETTINGS-REFERENCE.md](docs/SETTINGS-REFERENCE.md) for the full per-setting reference).
5656

57-
- **General** — theme, launch-at-startup, polling interval, update check, change log, and the **one-click Recommended setup** button that stages the gaming-optimized config across every tab.
58-
- **Global gaming**, **Privacy**, **Network**, **Windows services**, **Windows AI**, **Display** — the monitored settings, listed below.
57+
- **General** — theme, launch-at-startup, polling interval, update check, change log, and the **three one-click preset buttons** (Apply recommended / Apply extreme / Reset all to defaults) that stage a whole-app config across every tab.
58+
- **Global gaming**, **Privacy**, **Debloat**, **Network**, **Windows services**, **Windows AI**, **Display** — the monitored settings, listed below.
5959
- **CPU / Power** — detected CPU, **Power Throttling**, a CPU-aware custom gaming **power plan** (Balanced clone tuned for your CPU — e.g. X3D core-parking), and dual-CCD routing prerequisites. See [CPU-aware power plans](https://github.com/carterscode/GamerGuardian/wiki/CPU-Power-Plans).
6060
- **Recommended BIOS** — a firmware checklist (Resizable BAR, XMP/EXPO, CPPC mode, etc.); guidance only, nothing is changed.
6161

@@ -108,7 +108,7 @@ Policy-toggle disables for Copilot, Recall, Click-to-Do, Edge Copilot/Hubs/GenAI
108108

109109
Designed to be invisible during gameplay.
110110

111-
- **~23 MB working set** at idle, **~10 ms** per polling tick (default 30 s interval).
111+
- **~23 MB working set** at idle, **~10 ms** per polling tick. Only the four display settings (HDR, refresh rate, resolution, DRR) are polled on the fast interval (default 30 s); the ~40 set-and-forget registry / policy / service settings are re-checked at startup, on resume / unlock / display-change events, and on a slow 10-minute backstop instead — so the fast tick does almost nothing most of the time.
112112
- **Pauses entirely** during fullscreen games, borderless-fullscreen games, and known benchmarks (3DMark, Cinebench, Geekbench, AIDA64, Unigine, OCCT, etc.).
113113
- **No process spawning** for reads. Power plan reads/writes go through `powrprof.dll` directly.
114114
- **No kernel hooks, no drivers, no admin** — only HKLM writes need elevation, which prompts UAC.
@@ -139,14 +139,14 @@ GamerGuardian doesn't ask you to take its word for it. Independent ways to confi
139139
2. The Apply Results window shows before / target / after for each setting
140140
3. The footer **Verify all** button re-reads every monitored setting and writes a `[SNAPSHOT]` to `changes.log` -- nothing is applied
141141
4. Every change writes a copy-pasteable PowerShell **apply** and **verify** command to [`changes.log`](https://github.com/carterscode/GamerGuardian/wiki/Logging)
142-
5. Verbose log lines include `[SESSION]` (version + OS + elevation), `[APPLY-START]` / per-change record / `[APPLY-END]`, `[EXTRESET]` (Windows reverted a value we'd applied), and `[PREF-STAGE]` (a draft toggle, not yet applied)
142+
5. Verbose log lines include `[SESSION]` (version + OS + elevation), `[APPLY-START]` / per-change record / `[APPLY-END]`, `[EXTRESET]` (Windows reverted a value we'd applied), `[CIRCUIT]` (the auto-apply circuit breaker stopped re-applying a setting Windows keeps reverting, so a stubborn GPO-managed value can't trigger a UAC prompt every cycle), and `[PREF-STAGE]` (a draft toggle, not yet applied)
143143
6. `GamerGuardian.exe --test` dumps every monitor's current readout to `%TEMP%`
144144
7. Every Release ships with a [`SHA256SUMS.txt`](https://github.com/carterscode/GamerGuardian/wiki/Security#reproducibility) you can verify against your local download
145145
8. Every monitor is one ~30-line file in [`src/GamerGuardian/Monitors/`](src/GamerGuardian/Monitors/)
146146

147147
## Documentation
148148

149-
- [**Settings reference**](docs/SETTINGS-REFERENCE.md) -- per-setting What / Why / How-it-helps / Per-scenario recommendation / Risks / Reversal. Generated from [`SettingDocsCatalog.cs`](src/GamerGuardian/Services/SettingDocsCatalog.cs); a unit test asserts they can't drift.
149+
- [**Settings reference**](docs/SETTINGS-REFERENCE.md) -- per-setting What / Why / plain-English pro-con of each choice / Per-scenario recommendation / Risks / Reversal, plus a **Command line (PowerShell)** block with copy-paste verify, apply-gaming, and reverse-to-default commands. Generated from [`SettingDocsCatalog.cs`](src/GamerGuardian/Services/SettingDocsCatalog.cs); a unit test asserts they can't drift.
150150
- [**Staged-apply + verbose logging architecture**](docs/STAGED-APPLY-ARCHITECTURE.md) -- how the draft config, MonitorService, ChangeLogger, and EXTRESET detection fit together.
151151

152152
## Security

docs/STAGED-APPLY-ARCHITECTURE.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,25 @@ Long-form documentation per setting. Populated in `Services/SettingDocsCatalog`.
117117
4. Each gets its own session id. Corrective applies log as `source=auto-revert` with `ExternalResetDetected = true` and the current stickiness count, so a single `grep '\[EXTRESET'` / `grep 'auto-revert'` answers "what does Windows keep undoing, and what's GamerGuardian doing about it?"
118118
5. Verification failures move the setting into the 15-minute backoff so a stubborn setting doesn't pop UAC every 30 seconds.
119119

120+
### User clicks one of the three General-tab preset buttons
121+
122+
The General tab has three one-click preset buttons. **All three stage into the draft only** -- they never touch the live `_config` or `config.json`. Like every other staged change, they commit only when the user later clicks **Apply** or **Save & close**. All three route through the shared `RunPreset(presetName, apply)` helper in `SettingsWindow.xaml.cs`:
123+
124+
1. The button's click handler calls `RunPreset("…", () => RecommendedPreset.<Builder>(_draft))`.
125+
2. The builder mutates `_draft` directly (no per-row `PropertyChanged` fires) and returns a `RecommendedPreset.Result(SettingsChanged, SettingsAlreadyCorrect, ChangeDescriptions)`. Each per-setting delta it stages is logged as an ordinary `[PREF-STAGE]` line with `field=preset` (see below) -- **no new line type**.
126+
3. `RunPreset` bumps `_pendingCount += result.SettingsChanged` (so Save & close doesn't short-circuit), calls `UpdatePendingStatus()`, then rebuilds **every** row collection (`LoadGlobals` / `LoadDisplays` / `LoadServices` / `LoadWindowsAi` / `LoadPrivacy` / `LoadDebloat` / `LoadNetwork` / `LoadCpuTabs`) so the UI reflects the mutated draft. The row setters short-circuit on equality, so rebinding doesn't double-log.
127+
4. `RunPreset` updates `RecommendedStatusText` and pops an informational summary MessageBox ("Staged N change(s)… Click Apply or Save & close to commit").
128+
129+
The three buttons (`Services/RecommendedPreset.cs`):
130+
131+
| Button | Builder | What it stages | Confirmation? |
132+
|---|---|---|---|
133+
| Apply recommended | `RecommendedPreset.ApplyToDraft` | Conservative gaming preset: the hand-picked subset of toggles at their recommended gaming value, plus services / displays / the CPU-aware power plan. **Memory Integrity / VBS and UWP AI-app removal are deliberately excluded** (security tradeoff + irreversible). Monitor + Auto-apply turned **on** for each touched setting. | none |
134+
| Apply extreme | `RecommendedPreset.ApplyExtremeToDraft` | Every managed toggle at its most-aggressive gaming value -- including **Memory Integrity / VBS off** and the contested **Nagle / NIC** tweaks -- plus services, displays and the CPU-aware power plan. Monitor + Auto-apply **on**. Still excludes irreversible UWP AI-app removal. | yes -- a warning `MessageBox` (kernel-driver protection / anti-cheat / reboot) before `RunPreset` is called |
135+
| Reset all to defaults | `RecommendedPreset.ResetToDefaultsToDraft` | Every managed setting back to its Windows out-of-box value, with Monitor + Auto-apply turned **off** so a subsequent Apply restores defaults and GamerGuardian stops re-asserting. Displays are only un-monitored (their Want is hardware-specific). UWP AI-app removals are not touched. | yes -- a warning `MessageBox` before `RunPreset` is called |
136+
137+
All three are **idempotent**: each per-setting helper compares the draft's `(DesiredOn/Want, Monitor, AutoApply)` triple to the target and stages (and logs) only the deltas; a second click when everything already matches stages zero changes and reports "already correct". The `[PREF-STAGE]` `settingName` carries a `[Recommended]` / `[Extreme]` / `[Reset]` tag prefix so the log shows which preset staged each delta.
138+
120139
## Log schema (`changes.log`)
121140

122141
| Marker | Written by | Meaning |
@@ -127,6 +146,7 @@ Long-form documentation per setting. Populated in `Services/SettingDocsCatalog`.
127146
| `[manual ]` etc. per-record | `LogApplyResults` | One verbose entry per change. Multi-line: settingId, location, before/desired/after, applyCmd, verifyCmd, elapsedMs, status. |
128147
| `[APPLY-END ]` | `LogApplyResults` | Same session id. Includes `verified=N/M` summary and total elapsed ms. |
129148
| `[EXTRESET ]` | `LogExternalReset` | Windows or another tool changed a value we'd previously applied. Includes how long the previous applied value held and the current stickiness count. |
149+
| `[CIRCUIT ]` | `LogCircuitBreaker` | The auto-apply circuit breaker tripped: Windows kept reverting a setting, so GamerGuardian suspended re-applying it for a cooldown (avoids spawning a UAC prompt / display reconfig every poll). Multi-line: `settingId`, `reason` (revert count -- "Windows reverted this N time(s) in a row"), `cooldown` (not auto-applied for D; retries once after), `action` (leave it notify-only, or untick Auto-apply). |
130150
| `[PAUSE ]` | `LogPauseEvent` | MonitorService entered or left a paused state (fullscreen, benchmark, user manual). |
131151
| `[MEM ]` | `LogMemorySnapshot` | Periodic process memory snapshot. |
132152

@@ -161,5 +181,7 @@ A unit test in `tests/GamerGuardian.Tests/SettingsReferenceGenTests.cs` asserts
161181
| Verbose logger | `Services/ChangeLogger.cs` |
162182
| Background monitor + external-reset detection | `Services/MonitorService.cs` |
163183
| One-line mechanism / verify / apply PowerShell | `Services/SettingDocs.cs` |
164-
| Draft UI + Apply/Save&close/Cancel | `UI/SettingsWindow.xaml.cs` |
184+
| Draft UI + Apply/Save&close/Cancel + preset buttons | `UI/SettingsWindow.xaml.cs` |
185+
| Recommended / Extreme / Reset preset draft builders | `Services/RecommendedPreset.cs` |
186+
| CPU-aware power-plan recipes (used by `SetPowerPlan` in the presets) | `Services/CpuTuneCatalog.cs` |
165187
| Verbose per-change result UI | `UI/ApplyResultsWindow.xaml.cs` |

0 commit comments

Comments
 (0)