Two halves of the same reference, mirrored here so a client-side script can be written and audited without the game running.
| Half | Location | What it answers |
|---|---|---|
| API stubs | repository root (core.lua, game_object.lua, menu.lua, lib_profiler.lua, lib_quick_logs.lua, common/, third_party/) |
Which members exist? LuaLS annotation blocks (---@class / ---@field) describing the tables and members the client implements. 59 files, byte-identical to the .api/ dump that the eaxrotations repository builds against. |
| Documentation | docs/ |
What do those members mean? A verbatim markdown mirror of https://docs.project-sylvanas.net/, 114 pages. Provenance, counts, and per-page hashes are in docs/manifest.json. |
Neither half is written or maintained by this mirror. The stubs are the client's own runtime API surface; the documentation is the project's own site. Nothing in this repository is normative where the client or the live site disagrees with it.
No file here carries a version constant, because neither source does. The only dating evidence is
the capture metadata: file timestamps on the stubs, and the generated_at stamp plus per-page
sha256 values in docs/manifest.json. Treat both halves as point-in-time snapshots.
.
├── core.lua game_object.lua menu.lua lib_*.lua # API stubs
├── common/ third_party/ # API stubs
├── tools/
│ └── scrape_ps_docs.py # the docs mirror generator (stdlib only)
└── docs/
├── README.md # mirror provenance and refresh notes
├── manifest.json # url -> path, title, sha256, bytes, status
├── index.md # the site root
├── dev/… # developer docs, incl. dev/api/*
├── getting-started/… modules/… plugins/… guides/… examples/…
Page paths mirror the URL path. A page whose path is a prefix of another page (for example /dev
or /dev/libraries/izi) is written as <path>/index.md; every other page is <path>.md.
/search and /index-backup are deliberately absent: they are not documents.
# documentation (from this repository's root)
python tools/scrape_ps_docs.py --out docs
# documentation, drift gate: exit 1 if any page changed
python tools/scrape_ps_docs.py --out docs --check
# documentation, coverage cross-check against the site's search index
python tools/scrape_ps_docs.py --out docs --verify-index
# generator contract test, offline
python tools/scrape_ps_docs.py --self-testThe stubs half is refreshed by re-dumping the client's API surface and replacing the root tree wholesale, keeping the file set at 59.
eaxrotations documents a verification step of the form diff -rq .api <this-repo>. That now
reports docs/, tools/, and this file as extras. The comparison still means what it was meant to
mean once the additions are excluded:
diff -rq .api <this-repo> --exclude=docs --exclude=tools --exclude=README.mdThe game described by both halves is Blizzard's, and the Project Sylvanas client is a private-server runtime. This reference exists so that scripts written for that client can be reviewed and checked later, for educational use on private or self-hosted servers. Do not redistribute the mirrored documentation or stub files as your own, and do not treat either as a licence to target retail services.