a fresh clone gets the whole project, and the maintainer's tooling moves out

What a clone lacked: the gates went green with a thousand skipped tests and said nothing, every
login script assumed a worktree-pool slot and its probe account, the client defaulted to the
maintainer's account, a docker path and a home directory were in the code, the temp files broke
on GNU coreutils, and two generators could only run against a sibling repo.

Now the test gates print how many data-gated tests skipped and why; a scripted run logs in as
the account its checkout declares in `.probe-identity` or as the three variables name, never a
default, and the client refuses a scripted login on any other account; the event and message
tables regenerate from vendored inputs, byte for byte; the docs state the real prerequisites.

Out of the tree, into the maintainer's own tooling: the worktree pool, its hooks, the perf leg
runner, the cross-platform compile and the Vulkan container leg — a way of working, and setups
not every machine has. One hook stays: no writes into the install.

Two tests that could never run are gone with their subject: the quest-timer geometry diff
compared a copy of the window that no longer exists (and joined a chain path onto a folder, so
it always skipped), and the FrameXML flag gate now reads the stock files off the player's own
patch chain instead of an extracted folder only one machine had.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Sam
2026-09-23 17:27:14 +07:00
co-authored by Claude Fable 5.1
parent 64dc60f52f
commit aff5203393
106 changed files with 2145 additions and 3254 deletions
+22 -11
View File
@@ -1,25 +1,32 @@
#!/usr/bin/env python3
r"""Generate `crates/benilla-ui/src/messages/catalog.rs` from wow-5875-re's message-catalog.tsv.
r"""Generate `crates/benilla-ui/src/messages/catalog.rs` from `reference/1.12-message-catalog.tsv`.
The TSV is the sibling repo's byte-exact sweep of build 5875's `0xb4b498` registry -- the table
`CGGameUI::DisplayError 0x496720` indexes by message id. It is *their* artifact (regenerated there
with `re/ui/extract-message-catalog.py`); this script only re-shapes it into a Rust const, so the
table ships with benilla instead of being re-read out of a sibling checkout at build time.
The TSV is wow-5875-re's byte-exact sweep of build 5875's `0xb4b498` registry -- the table
`CGGameUI::DisplayError 0x496720` indexes by message id -- vendored under `reference/` like the
other tables (it is regenerated there with `re/ui/extract-message-catalog.py`). This script only
re-shapes it into a Rust const, so the table ships with benilla and is never read out of a
sibling checkout.
python3 scripts/gen-message-catalog.py ../wow-5875-re/re/ui/message-catalog.tsv
python3 scripts/gen-message-catalog.py # the vendored table -> the .rs, in place
python3 scripts/gen-message-catalog.py <tsv> # another table
Refuses rather than emits on anything it does not understand: a non-dense id range, a duplicate key,
an unknown kind. A generated table that quietly dropped a row would be worse than no table.
"""
import os
import sys
REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TABLE = os.path.join(REPO, "reference", "1.12-message-catalog.tsv")
OUT = os.path.join(REPO, "crates", "benilla-ui", "src", "messages", "catalog.rs")
KINDS = {0: "Chat", 1: "Info", 2: "Error"}
HEADER = """\
//! The 5875 message catalog, row for row.
//!
//! @generated by `scripts/gen-message-catalog.py` from wow-5875-re `re/ui/message-catalog.tsv`
//! (itself generated by that repo's `re/ui/extract-message-catalog.py` out of `WoW.exe`).
//! @generated by `scripts/gen-message-catalog.py` from `reference/1.12-message-catalog.tsv`
//! (wow-5875-re's `re/ui/message-catalog.tsv`, extracted out of `WoW.exe` there).
//! Do not edit by hand — regenerate.
use super::{MessageRecord, MsgKind};
@@ -36,6 +43,8 @@ pub static CATALOG: [MessageRecord; {count}] = [
def main(path: str) -> int:
if not os.path.exists(path):
raise SystemExit(f"no table at {path}")
rows = []
for line in open(path):
if line.startswith("#") or line.startswith("id_hex"):
@@ -75,11 +84,13 @@ def main(path: str) -> int:
f'type_tag: {r["type_tag"]:#04x}, chat_type: {r["chat_type"]} }},\n'
)
out.append("];\n")
sys.stdout.write("".join(out))
with open(OUT, "w") as f:
f.write("".join(out))
print(f"wrote {os.path.relpath(OUT, REPO)} ({len(rows)} rows)")
return 0
if __name__ == "__main__":
if len(sys.argv) != 2:
if len(sys.argv) > 2:
raise SystemExit(__doc__)
sys.exit(main(sys.argv[1]))
sys.exit(main(sys.argv[1] if len(sys.argv) == 2 else TABLE))