Repository navigation
Safety and Guarantees
These are hard rules in the code, checked by tests on every change. A violation is a bug even if every test passes.
| # | Rule | What it means for you |
|---|---|---|
| L1 | Reads never write. | Looking at your install changes nothing: no temp files, caches or lock files inside it. Caches and the snapshot store live in wowlab's own data folder. |
| L2 | One write gate. | Every byte written into an install goes through one module. The client must not be running, the path must be inside an allowed area, a snapshot is taken first, the operation is journaled, and the replace is atomic. There is no "force" that skips the snapshot. |
| L3 | No Lua is executed. | SavedVariables and every other Lua-syntax file are parsed as data by a strict literal parser. Functions, metatables, calls and operators are rejected with a position. |
| L4 | Lossless. | Parsers keep what they do not understand: key order, key style, the original text of every number, every unclassifiable line. An unmodified file comes back byte for byte. One owner-granted exception: a combat-log line over 1 MiB keeps only its first 1 MiB, flagged as truncated with its true length, so a crafted file cannot exhaust memory. |
| L5 | Game data is keyed by build and never overwritten. | A cached table for one game version is never replaced by another's. |
| L6 | Nothing is hard-coded about a flavor. | No _retail_, no product code, no interface number, no build number in library code. They are discovered from your install. |
| L7 | Permanently out of scope. | See below. |
| L8 | Real fixtures. | Every parser of an external format is graded against real captures, scrubbed of names and identifiers. |
Every change wowlab makes to your install (snap restore, undo, profile apply, sv merge, addon install, addon remove) follows the same path:
- Plan. It works out exactly which files would be written or deleted and shows you.
-
Ask. You confirm (or you passed
--yes).--dry-runstops here. - Check the game is closed. If the client is running, the change is refused (exit code 3).
-
Check the path is allowed. Only files under the client's own configurable areas may be written. Anything the file map marks as "leave alone" (client-written backups,
Blizzard_*addon folders, file-browser metadata) is skipped unless you name it explicitly. - Snapshot first. Your current state is saved, so the change can be undone.
- Journal. The operation is recorded before it happens.
- Atomic replace. Each file is swapped in whole; you never end up with half a file.
wowlab undo reverses the most recent change from the snapshot taken in step 5.
Decided once and closed (ADR-0023). In this repository, permanently:
- read or write the game's process memory
- inject a DLL or dylib
- capture or modify network packets
- automate input (clicks, keypresses)
- edit anything under the game's
Data/folder, or any executable - bypass the client's integrity checks
wowlab only changes what the game itself treats as your settings and your saved data: config files, key bindings, macros, addon files and their saved variables. It is not affiliated with or endorsed by Blizzard, and this page cannot speak for Blizzard's policies.
-
The lab-addon never records names. No character name, realm, GUID, guild, chat, text you typed, or Battle.net identity, and no wall-clock time. Every unit is recorded as
"player". A crafted item's link can embed the crafter's player id; wowlab blanks that before storing. - Test fixtures are scrubbed. Real captures are used to test the parsers, but only after a byte-level scrub tool replaces account folders, character names, GUIDs and timestamps. The repository is public, so an unscrubbed capture would be a leak, and the process is built around not leaking one.
-
Client crash reports are never captured. The Forever client writes them into the flavor folder's
Errors/folder, and they contain the character name, GUID, BattleTag and guild roster. Do not paste one into an issue or a chat. - Nothing is uploaded. There is no telemetry and no account.
SavedVariables and many settings files are written by the client when you log out, /reload or exit cleanly, and the client overwrites whatever is on disk at that moment. An offline tool therefore always sees the previous session, and an edit made while the game runs would be silently lost, or worse, half-applied. The gate refuses instead of letting that happen.
-
wowlab undoputs back the last change. -
wowlab snap listandwowlab snap show IDshow what you can go back to;wowlab snap restore ID --dry-runshows what a restore would do. -
wowlab snap verifyre-hashes every stored object and checks every manifest, so you can trust the store. - A hostile or corrupt file is refused with a reason and a position, not guessed at.