Commit Graph
395 Commits
Author SHA1 Message Date
Sam SungandClaude Opus 5.5 b410ff2055 the repo carries no Claude Code settings (#23)
A committed .claude/settings.json bound everyone who opens the repo in Claude Code: it switched
their auto memory off, and its one hook guarded the install against Claude's Edit and Write
tools only, never a write through the shell or by another agent. The rule it backed is enforced
for every tool by the code and by scripts/smoke.sh's install watch, which METHOD now cites. jq is
no longer a prerequisite, and .gitignore shares only the skills under .claude/.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 08:40:49 +07:00
Sam SungandClaude Opus 5.5 4a52b0067e method: main moves only by a squash-merged pull request (#6)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 06:05:04 +07:00
Sam SungandClaude Opus 5.5 27ad989367 contributions: a bug report form and a pull request template (#5)
The issue form asks for what happened, with only that field required, then what 1.12.1 does,
how to see it, and the build line. Blank issues stay open, and questions point to the Discord.
The pull request template asks what changes, the 1.12.1 fact behind it, and how it was checked.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 05:55:20 +07:00
SamandClaude Opus 5.5 64cca13af1 comments: the era settings screens say why they replace 1.12's
The options window, the ESC menu and the key bindings page follow the 1.15 era client because
1.12's settings screens are much worse to use.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 05:26:00 +07:00
SamandClaude Opus 5.5 b2f02b0696 contributions: issues and pull requests are open
The workflow that closed every pull request on arrival is gone, the README's closed-doors
notice becomes a short Contributing section, and CONTRIBUTING.md says how to report a bug.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 05:26:00 +07:00
SamandClaude Opus 5.5 693b313b1c render: the hover highlight is the scene ambient, and unlit M2 parts take it
The 1.12 highlight is not a fixed 64/255 lift. SetHighlight samples the
scene's committed ambient (read at 0x614576-0x6145bd), and every batch
adds it to its colour before the final clamp, lit or unlit.
0xff404040 is only the fallback before a map's light loads. The
highlight now follows the time of day, zone and weather: roughly
(29, 60, 84)/255 at night to (104, 130, 154)/255 at noon, where it was
always (64, 64, 64)/255.

Unlit M2 batches in blend modes 0 to 4 now draw
texel × clamp(tint·M2Color + highlight), the unlit program's c28 + c29.
They took no highlight before. The reference holds the ambient sampled
when a highlight begins; benilla samples it live, a marked deviation.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 00:11:09 +07:00
SamandClaude Opus 5.5 35ed67520a render: M2 Mod and Mod2x batches draw the bare texel, as the reference does
For blend modes 5 and 6 the reference zeroes the tint·M2Color term and
forces the primary colour to the blend identity (0x70c507/0x70c5b8),
keeping only the alpha. benilla multiplied the batch's M2Color (baked
into its vertex colours, or animated through the material tint) and the
body tint into the texel. Mod and Mod2x batches now bake no M2Color, and
the shader draws them from the bare texel; the alpha still reaches them
through the identity lerp.

Of the install's 615 Mod and Mod2x batches, four carry a non-white
M2Color and none an animated one. The Scholomance testing jars (empty,
ghoul and skeleton) lose the (0.93, 1.00, 0.54) cast on their Mod layer,
and Offhand_Naxxramas_D_01's Mod2x sheen loses its (1.00, 0.95, 0.85)
warmth.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 21:36:29 +07:00
SamandClaude Opus 5.5 59d32c7e44 comments: the terrain alpha map clamps through a half-texel inset
The doc said repeat equals clamp for UVs in 0..1. Under linear
filtering a repeating sampler wraps at the edge, so terrain.wgsl insets
the alpha UVs by half a texel to clamp instead.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 21:16:57 +07:00
SamandClaude Opus 5.5 3b3b185bab tests: 24 protocol tests check what their names claim
Thirteen now assert what they claimed:
- every bare trade status, and the 444-byte extended snapshot for
  empty, full and mixed slots;
- the status-1 and status-3 battlefield tails;
- every quest-share verdict byte through encode, parse and decode;
- the greeting pick itself, and the whole compressed-move batch.

Eleven are renamed to what they check, where the claim had nothing to
check against: no capture bytes, no production opcode list, no server
encoder. No strengthened assertion failed.

Probe and assert messages drop their record numbers. The aura probe's
refusal message no longer claims the level-6 probe accounts need a
grant for a level-4 command.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 21:04:27 +07:00
SamandClaude Opus 5.5 ec899b54bd comments: the XP-gain reader says why dropping the group bonus is safe
vmangos always sends 1.0, meaning none (Player.cpp:3039), so 1.12
shows no group-bonus line against it either.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:26:52 +07:00
SamandClaude Opus 5.5 ace2624779 tests: the shipped-Lua archive-path floor follows the census to 3
BENILLA_FALLBACK_ICON held the fourth archive path the sweep counts, and
it is gone. The floor exists so the sweep never passes by matching
nothing, and it comes down as paths leave.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:26:52 +07:00
Sam 88eca028ee map: regenerate — sess/polish landing 2026-09-23 20:17:55 +07:00
SamandClaude Opus 5.5 751e1ed17f comments: protocol, the opcode table and its name list
1,065 comment lines become 340; the code is unchanged. Corrected:
- CMSG_CANCEL_CAST carried CMSG_CANCEL_AURA's doc;
- the inspect reply is parsed, then dropped;
- mount failures reach the player as error lines, so they are no
  longer a deviation;
- the pet-stable note moves from SMSG_INVALIDATE_PLAYER to the stable
  constants.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:17:23 +07:00
SamandClaude Opus 5.5 e27e68049a comments: protocol, the player and unit field accessors
1,040 comment lines become 387; the code is unchanged. The note that
item objects have no decode path is gone, since the same file decodes
them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:14:22 +07:00
SamandClaude Opus 5.5 6e1e06f431 comments: protocol, the auth to reputation integration tests
1,039 comment lines become 472 across 19 files; the code is unchanged.
The movement test's claim that write() never serializes a transport
tail is gone: it does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:12:46 +07:00
SamandClaude Opus 5.5 972cfc06e8 comments: protocol, the world session, reader, wire helpers and the first writer sends
1,071 comment lines become 370 across 23 files; the code is unchanged.
The Warden refusal and the billing-time default now carry their reasons.
A gap note on cyclic splines described the app, not this crate, and is
gone.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:12:21 +07:00
SamandClaude Opus 5.5 4c2f3cd196 comments: protocol, the session events and their decoder
1,081 comment lines become 459; the code is unchanged. Corrections:
- MonsterMove's description sat atop MoveTimeSkipped's doc and
  documented the wrong variant; it is back on MonsterMove.
- GossipMenu's tuple doc gains its missing level.
- Four false claims are gone: "only primitives" on SessionEvent, a
  code field LoginFailed does not have, a broken object_scale link,
  and "filled from nothing else" on SpellChainTargets.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:11:09 +07:00
SamandClaude Opus 5.5 cb7576e2a7 comments: protocol, the loot, mail, meeting-stone, mirror-timer, monster-move and movement messages
812 comment lines become 264; the code is unchanged. JumpInfo's doc
called zspeed up-positive, against its own captured fact and every
consumer, which negate it; the up-positive formulas are gone.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:10:35 +07:00
SamandClaude Opus 5.5 018af495bf comments: protocol, the chat, client, combat-log, death, duel, gameobject, ticket, gossip and group messages
1,079 comment lines become 390; the code is unchanged. Corrected
against the code:
- area spirit healers are modelled;
- the resurrect name length is skipped, not cross-checked;
- SMSG_CHAT_WRONG_FACTION is handled in parse.rs, not chat.rs.

AFK/DND clearing in the member snapshot matches the reference and is no
longer called a deviation.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:09:59 +07:00
SamandClaude Opus 5.5 8d9f007415 comments: protocol, the auth code, the live probes and their examples
1,071 comment lines become 573; the code is unchanged. The world
probe's field docs are its --help text, so the help is shorter now and
matches what each flag runs: --quest takes quest 783 from Willem to
McBride, --quest-item needs the starter item to survive, --giverstatus
queries once, --spells makes three casts. Also corrected:
- the aura-duration packet has a SessionEvent;
- the SRP xor hash is SHA1(N) XOR SHA1(g), not a hash of it;
- the cooldown probe picks Tri, else the first character.

benilla sending a stored integrity hash instead of hashing the install
is now marked as a deviation.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:09:30 +07:00
SamandClaude Opus 5.5 fc95eec18a comments: protocol, the server packet enum and its parser
1,082 comment lines become 487; the code is unchanged. The creature
query doc said the display id was dropped; CreatureQueryInfo keeps it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:08:54 +07:00
SamandClaude Opus 5.5 e8af9e8835 comments: protocol, the packet, spell, stable, taxi, trainer and update-object tests
514 comment lines become 183; the code is unchanged. Three comments
said something other than their bytes:
- SMSG_NEW_WORLD's orientation is -0.5, not 0.5;
- transport 176495 is the Grom'Gol-Undercity zeppelin, not the
  Menethil-Theramore ferry;
- 176244 is the Moonspray, the Auberdine-Rut'theran boat, not the
  Orgrimmar-Undercity zeppelin.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:07:00 +07:00
SamandClaude Opus 5.5 28db7f0f37 comments: protocol, the quest log and share, roster, social, spell, stable, summon and taxi messages
1,061 comment lines become 396; the code is unchanged. A spell test's
comment described the unit-target shape while its assert checks the
self-cast one; it now describes the self-cast shape.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:06:38 +07:00
SamandClaude Opus 5.5 ba16121048 comments: protocol, the world writer's sends
1,096 comment lines become 372 across 31 files; the code is unchanged.
Dropped as false or stale:
- the module table, which missed 8 of the 44 modules;
- "cacheable forever" for names, which a pet rename breaks;
- "only failures get a packet", though SMSG_BUY_ITEM answers a buy;
- a go_target parameter that does not exist;
- "three" cast shapes, where there are five.

vmangos line citations now name the function or the current lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:05:47 +07:00
SamandClaude Opus 5.5 b304a6e8fe comments: protocol, the guild, instance and item messages
959 comment lines become 400; the code is unchanged. The read-enchant-
time doc had run into the next function's, so rustdoc gave it to
read_open_container; it is back on its own function. MaxCount is no
longer called account-wide.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:05:04 +07:00
SamandClaude Opus 5.5 3e56cddb17 comments: protocol, the crate root, guids and the action-bar to channel messages
1,031 comment lines become 320; the code is unchanged. A guid test
called transport 176495 the Menethil-Theramore ferry. The world
database names it the Grom'Gol-Undercity zeppelin.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:03:55 +07:00
SamandClaude Opus 5.5 2a66832215 comments: protocol, the trade, trainer and tutorial messages and the update fields
760 comment lines become 262; the code is unchanged. One doc said the
opposite of its code: corpse_look is None when either BYTES word is
missing, not neither. The ObjectFields doc had drifted onto CorpseLook
and is back on its struct.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:02:35 +07:00
SamandClaude Opus 5.5 3fccac9398 comments: protocol, the quest, spell, vendor and world-state probes
404 comment lines become 168; the code is unchanged. Two claims were
wrong and are corrected: the world-state probe needs no temporary GM
grant, since the probe accounts carry level 6 and the command needs 5.
The root-ack citation now points at the current vmangos lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 20:00:05 +07:00
SamandClaude Opus 5.5 e6484675e2 comments: the options window says what each part is and why
1,874 comment lines become 430; the code is unchanged. The note about
reference graphics CVars that pfUI writes and benilla leaves
unregistered described the CVar registry, not this file. It moves there
with its addresses.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:57:37 +07:00
SamandClaude Opus 5.5 5b85c2adaf ui: drop BENILLA_FALLBACK_ICON, which nothing reads
Its readers were our own ActionBar and group-loot files, and both were
retired when those windows moved to the stock FrameXML. The stock files
leave a missing texture empty.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:55:51 +07:00
SamandClaude Opus 5.5 70358a2bfd check: drop the assets/ui case arm, which no path can reach
There is no top-level assets/ directory: assets/ui lives under
crates/benilla-app/, which the crates arm already scopes to benilla-app.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:55:51 +07:00
SamandClaude Opus 5.5 63705dccd2 gates: the green stamp records the addon corpus link
The test gate refuses skips only where both the install and the
wow-addons-vanilla link are present. The link is gitignored, so the
tree hash cannot see it, and the stamp kept only the install path. A
green earned without the corpus was therefore reused after the link
appeared, and skips were never refused on that tree. The corpus's
presence now sits beside the install in the stamp. The memo message
also names docs/ as well as top-level *.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:54:20 +07:00
SamandClaude Opus 5.5 8f522a8455 comments: the gate script says what each gate refuses
Each rung keeps one or two lines: what it refuses and the fact that
makes it necessary. The stories of how each gate came to exist are
gone. 148 comment lines become 48; the code is unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:52:57 +07:00
SamandClaude Opus 5.5 7c012bd3ec comments: protocol, the pet, petition, pose, progression, honor and quest-giver messages
Each item says what it is and the wire or server fact behind it, with
the vmangos or client citation; the two kept deviations say why.
History, record numbers and emphasis go. With comments stripped the six
files are identical.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:35:54 +07:00
SamandClaude Opus 5.5 989e5917e0 scripts: their printed messages stop citing record and bug numbers
A failure message pointed at records and bug ids that are not in this
repo; each now says the fact alone. Only message text changes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:35:17 +07:00
SamandClaude Opus 5.5 1828e4d5e7 comments: the interface manifest keeps only its load-order rules
Each remaining comment says what a group of entries is or which entry
must load before which, and why. Entries, directives and their order
are unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:32:26 +07:00
SamandClaude Opus 5.5 7c17921601 comments: the generators, the tools and the reference table headers
Docstrings keep their usage and exit codes; table headers keep the
column contract and the client addresses and lose the dates, the
correction history and every path into another repository. A
generated header changes in its generator's template, so each of the
four generators still reproduces its output byte for byte, and no data
row changed in any of the seven tables.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:32:13 +07:00
SamandClaude Opus 5.5 a32300fad9 comments: six interface files say what each frame is and what it mirrors
A frame's comment names the stock file or 1.12 default its shape follows;
a Lua comment stays where the code would otherwise be "fixed". Notes the
code contradicts are gone. With XML and Lua comments stripped every file
is identical, and each is well-formed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:28:45 +07:00
SamandClaude Opus 5.5 6a7a6a473d comments: the model shader keeps its reference facts in a quarter of the lines
The pass, the blend and texenv facts with their client addresses, the
precision rules and the two marked deviations stay; history and record
numbers go. Struct field notes now match what the shader and its Rust
mirrors do, and two blocks move onto the items they describe. With
comments stripped the shader is identical.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:27:57 +07:00
SamandClaude Opus 5.5 b9502decd3 comments: the shaders keep the reference facts and lose the history
Each header names its pass and the fixed-function state, blend and
formula it reproduces, with the client address; GPU traps, precision
rules and marked deviations stay. Bevy's own comments in the two
vendored UI shaders stay verbatim so an upgrade re-diffs cleanly. With
comments stripped every shader is identical.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:25:19 +07:00
SamandClaude Opus 5.5 1722816634 the crate descriptions drop their record numbers
The generated map shows each description, so the numbers pointed every
reader at records that are not in this repo. Only `description` changes;
every other key parses identical.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:24:59 +07:00
SamandClaude Opus 5.5 746254ba26 smoke: an account given in the shell no longer fails the realm leg
With no `.probe-identity`, the scrub kept the shell's WOW_USER, WOW_PASS
and WOW_CHAR in the environment, so the realm leg inherited WOW_CHAR and
`realm_select::smoke` refused it: the documented
`WOW_USER=… WOW_PASS=… WOW_CHAR=… scripts/smoke.sh` could never pass.
The account is resolved into the script's own variables first and each
leg passes it by name, so it now leaves the environment either way.

Verified: the scrub run alone with the account in the shell leaves only
WOW_HOST in a child's environment, with and without a declared identity.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:24:22 +07:00
SamandClaude Opus 5.5 af8c9f5eb6 comments: the manifests say why a dependency or a profile setting is there
One line per dependency where the reason is not obvious, measurements
kept as the number and the unit. Parsed with tomllib before and after,
every manifest is identical.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:23:36 +07:00
SamandClaude Opus 5.5 b484fe0d27 comments: the scripts say what they do and how to run them
Each header is a one-line summary, the environment it reads and its
usage; the history, measurements and record numbers go. Only comment
lines change: with comments stripped the scripts are byte-identical.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:23:35 +07:00
SamandClaude Opus 5.5 449324b7be a clone without the install runs the suite green
465 tests loaded the stock interface off the install without declaring
it, and 25 addon tests assumed the install beside the corpus; each now
opens with `wow_data_or_skip!`. The gates run the workspace tests a
second time with `WOW_DATA=`, so a test that reads the install
undeclared fails at land instead of on a contributor's clone. The skip
log writes each line in one call so parallel tests do not interleave.

Verified: the workspace tests with `WOW_DATA=` in a checkout that has
the addon corpus pass 6972, fail 0, and log 1555 skips; on a fresh
clone of main before this change they failed 465.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 19:10:41 +07:00
SamandClaude Fable 5.1 23c14aaec1 the reference tables, the install guard and the vendored forks stop naming the maintainer's analysis
The notes and comments say what is true of the 1.12.1 client and cite the
byte address; the record numbers, the dates and the private repository's
file paths go.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 18:47:48 +07:00
SamandClaude Fable 5.1 7e4cf3a054 README: battlegrounds are built, and the third-party fix ports leave the roadmap
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 18:01:44 +07:00
SamandClaude Fable 5.1 798edfe3eb genmap: the header cites the method doc once
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 18:00:59 +07:00
Sam 0492e3499b map: regenerate — sess/gaps landing 2026-09-23 17:27:32 +07:00
SamandClaude Fable 5.1 b05d5d18d5 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>
2026-09-23 17:27:14 +07:00