You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: detailed changes.log with raw registry values, README reference
User asked for changes.log to show exactly what registry changes are
made. Previous format was a single line with friendly state names
("Default -> Disabled (gaming)") which didn't show the actual
DWORDs or REG_SZs being written.
New format is multi-line and includes:
- Mechanism: full registry path + value type, or Win32 API name
- Before: raw bytes/number/string + friendly description
- Wrote: raw target value + friendly description
- After: what was re-read post-apply (verified vs NOT VERIFIED)
- Reboot: only present for reboot-required settings
- Verify: a PowerShell one-liner the user can paste themselves
Sample entry:
----------------------------------------------------------------
[2026-05-06 22:14:08] [manual] OK USB Selective Suspend (global override)
Mechanism : HKLM\SYSTEM\CurrentControlSet\Services\USB\DisableSelectiveSuspend (DWORD)
Before : 0 (Default)
Wrote : 1 (Disabled (gaming))
After : 1 (Disabled (gaming)) <- verified
Reboot : required to take effect
Verify : (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\USB' -Name DisableSelectiveSuspend).DisableSelectiveSuspend
Implementation:
- DriftItem + ApplyResult records gain RawBefore / RawDesired
(and ApplyResult adds RawAfter, computed by re-reading via
ChangeApplier post-apply).
- Each of the 15 monitors now populates raw values:
- DWORDs as decimal numbers (HAGS, MemInt, USB SS, Game Mode,
Game DVR, Sys Resp, Network Throttling)
- 0xFFFFFFFF for the magic disabled-network-throttling value
- REG_SZ pairs for Games multimedia task profile
- GUIDs for power plan
- DEVMODE struct fields for refresh rate / resolution
- DisplayConfig flags for HDR
- Multi-value compositions for FSO / VRR / Game Mode (which
write to multiple keys at once)
- ChangeLogger.Format builds the multi-line block with the new
fields. RotateIfNeeded behavior unchanged.
README gains a top-level "Change log format" section with the
schema, a fields table, and three worked examples (verified
manual apply, verified auto-apply, failed apply with UAC cancel).
TOC updated. Verification section's "change log" bullet now
links to the new section instead of inlining a single sample.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@@ -225,19 +228,82 @@ GamerGuardian doesn't ask you to take its word for it.
225
228
| Power plan |`powercfg /getactivescheme`|
226
229
| HDR / Refresh / Resolution | Settings → System → Display, or `dxdiag`|
227
230
228
-
**4. The change log.**`%APPDATA%\GamerGuardian\changes.log` — every applied change (manual or silent auto-apply) is appended with a timestamp, source, before/after values, and verification status. Open it from *Settings → General → Open change log*, or from the Apply Results window. Auto-rotates at ~1 MB.
231
+
**4. The change log.**`%APPDATA%\GamerGuardian\changes.log` — every applied change (manual or silent auto-apply) is appended with full detail of the actual registry write or API call. See [Change log format](#change-log-format) below for the full schema and a worked example. Open it from *Settings → General → Open change log* or from the Apply Results window. Auto-rotates at ~1 MB.
229
232
230
-
Sample line:
233
+
**5. The `--test` CLI flag** (`GamerGuardian.exe --test`) writes every monitor's current readout to `%TEMP%\gamerguardian_selftest.txt` — same call paths the live UI uses, so the file is always in sync with what Settings shows.
234
+
235
+
**6. The source.** Every monitor is a single file under [`src/GamerGuardian/Monitors/`](src/GamerGuardian/Monitors/) that does exactly one thing each. Read [`HagsMonitor.cs`](src/GamerGuardian/Monitors/HagsMonitor.cs), say, to see the full code that reads and writes HAGS — about 30 lines.
236
+
237
+
## Change log format
238
+
239
+
`%APPDATA%\GamerGuardian\changes.log` is the authoritative record of every registry write or API call GamerGuardian makes. Each entry is multi-line and shows exactly what was touched and what the raw values were. Format:
Before : <raw before value> (<friendly description>)
246
+
Wrote : <raw target value> (<friendly description>)
247
+
After : <raw after value> (<friendly description>) <- verified | NOT VERIFIED
248
+
Reboot : required to take effect (only for reboot-required settings)
249
+
Verify : <PowerShell snippet to read the same value yourself>
234
250
```
235
251
236
-
Auto-rotates at ~1 MB (`changes.log.1` keeps the previous batch).
252
+
Fields:
237
253
238
-
**5. The `--test` CLI flag** (`GamerGuardian.exe --test`) writes every monitor's current readout to `%TEMP%\gamerguardian_selftest.txt` — same call paths the live UI uses, so the file is always in sync with what Settings shows.
254
+
| Field | Meaning |
255
+
|---|---|
256
+
|**timestamp**| Local time of the apply |
257
+
|**source**|`manual` (you clicked Apply) or `auto` (silent auto-apply during a poll tick) |
258
+
|**STATUS**|`OK` if the after-read matched the target; `FAILED` otherwise (UAC declined, registry locked, etc.) |
259
+
|**Mechanism**| The exact registry path + value type, or the Win32 / DLL function called for non-registry settings |
260
+
|**Before**| The raw bytes / number / string GamerGuardian read before the write, plus a parenthesized friendly description |
261
+
|**Wrote**| The raw value GamerGuardian asked the OS to set |
262
+
|**After**| What GamerGuardian saw when it re-read the value post-apply. Should equal **Wrote** for verified entries. |
263
+
|**Reboot**| Present only when the setting needs a Windows restart to actually take effect |
264
+
|**Verify**| A PowerShell one-liner you can paste into a fresh terminal to read the same value yourself |
239
265
240
-
**6. The source.** Every monitor is a single file under [`src/GamerGuardian/Monitors/`](src/GamerGuardian/Monitors/) that does exactly one thing each. Read [`HagsMonitor.cs`](src/GamerGuardian/Monitors/HagsMonitor.cs), say, to see the full code that reads and writes HAGS — about 30 lines.
266
+
### Worked example
267
+
268
+
A manual Apply that flipped USB Selective Suspend to gaming-optimized:
The `<- NOT VERIFIED` marker plus matching Before/After tells you the write didn't land. For HKLM-write settings, the most common cause is a UAC cancel.
0 commit comments