feat: hook reliability, hook-errors setting, sparse config, and logging

Hook reliability:
- Add hook-errors = "warn" | "fail" setting (default: warn); in fail
  mode, abort launch when pre-launch hook exits nonzero or can't execute
- Ensure post-launch hook runs unconditionally, even when execute_wait()
  fails to spawn the game
- Propagate game's real exit status via std::process::exit(); report
  post-hook failures clearly to stderr
- Centralize hook execution via run_hook() helper (sh -c)

New features in this batch:
- Sparse config and profile support: only configured fields are written;
  unset fields fall back through profile → global chain
- config show --effective flag: renders the fully-resolved view
- Config migration: upgrades legacy flat config to current schema
- Structured decision logging (src/log.rs) for session-level audit trail
- Gamescope improvements: additional flags and validation
- CHANGELOG.md tracking template releases

Schema / UX:
- HookErrors enum (Warn/Fail) added to Settings and ResolvedSettings
- hook-errors key in keys.rs, mod.rs rendering, completion candidates,
  doctor output, help text, README, and dry-run display
- 9 focused tests covering warn/fail behavior, exit propagation,
  round-trip (set/show/reset), profile round-trip, export/import

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-06-14 09:35:24 -04:00
parent a2364b1692
commit f984acf0e3
21 changed files with 4070 additions and 1105 deletions
+10
View File
@@ -0,0 +1,10 @@
## v2.0.0 (unreleased)
### Breaking changes
- Profile-to-profile inheritance removed. Profiles are now flat game-specific overrides applied directly on top of global defaults.
- `profile tree`, `profile inherit`, and `profile clear-inherit` commands removed.
- `profile export` now exports only explicitly configured settings (sparse), not fully resolved settings. Old exports with all settings baked in can still be imported.
- Settings renamed: `overlay``mangohud`, `performance``gamemode` (from prior work).
### Migration
If upgrading from v1: run `gamewrap config migrate` to update renamed setting keys. Profile files exported with v1 can still be imported but will include all resolved settings — re-export after import to get the sparse format.