Fixes#32. Every vmangos `File.cpp:N` citation in the crates whose comments have been rewritten now reads in one revision, vmangos core `6b34a36`, the one the comments are written against, a few commits from the server benilla is run against. Some citations had been taken from a newer vmangos checkout, where the lines have moved. #32's own targets came from that newer checkout too, so where this PR and #32 differ, this PR follows `6b34a36`.
- 53 citations in 31 files are re-pointed: most in benilla-protocol, a few in benilla-ui and benilla-app. Each new line was read and is the construct its comment names.
- #32's cases:
- The root-ack kick is `MovementHandler.cpp:715-722`; three comments cited the falling deferral after it.
- Movement is discarded before `CMSG_SET_ACTIVE_MOVER` lands at `:291-293`, through `Player::GetConfirmedMover`.
- The released mover's parting stop is `:955-964`.
- The mount-special echo is sent with `self` false at `:972`. Whether the sender gets its own echo depends on the server's broadcaster (`Object.cpp:2273-2280`); that is stated once, where the packet is parsed, and the opcode comment points there.
- Ten more citations were a line or two off in every revision. One comment also stated a wrong fact: vmangos's ignoring-you party refusal names the invitee, and the empty name is the raid-convert confirmation's.
- Comment text only. Every file strips to identical code, and `cargo fmt --check` is clean.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Until now this repo was an export of a private tree, pushed as squashed snapshots. From here on
it is the working tree itself, and the private repo is archived.
The root holds AGENTS.md and the Rust and GitHub files only. Everything an agent needs to orient
is in docs/: METHOD.md (the rules and how the project is built, 123 lines, project method only),
MAP.md (generated from the code at every land) and CONTRIBUTING.md (what gets in and how a
change is judged). One skill, `probe`, holds the procedure for running the client unattended
against the local server.
Brought over because the project needs it: reference/ (the 1.12 name catalogues 34 source
files read; the export failed its own tests without them), the gate chain and the pool
(scripts/), the hooks that enforce the install rule and the worktree rule, the full .gitignore,
the `cargo play` alias, and the original wording of eleven source files the export had reworded.
Left out: the decision records (archived with the private repo), the export tooling, the
operator's Discord and triage loop, the lab-laptop scripts and the instruments nothing
references, which live outside the repo now. What read the records is gone from the tooling:
no corpus lint, no records index, no `reserve` verb, no number-collision check.
Three hooks are gone: fmt-at-commit and the file-size nudge were redundant with the gates, and
the assets/ui guard is now a test (`assets_ui_does_not_grow`) that fails for everyone, not only
for a Claude Code session. The remaining pool hooks stand down on a machine without a pool.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Until now this repo was an export of a private tree, pushed as squashed snapshots. From here on
it is the working tree itself, and the private repo is archived.
The root holds AGENTS.md and the Rust and GitHub files only. Everything an agent needs to orient
is in docs/: METHOD.md (the rules and how the project is built, 123 lines, project method only),
MAP.md (generated from the code at every land) and CONTRIBUTING.md (what gets in and how a
change is judged). One skill, `probe`, holds the procedure for running the client unattended
against the local server.
Brought over because the project needs it: reference/ (the 1.12 name catalogues 34 source
files read; the export failed its own tests without them), the gate chain and the pool
(scripts/), the hooks that enforce the install rule and the worktree rule, the full .gitignore,
the `cargo play` alias, and the original wording of eleven source files the export had reworded.
Left out: the decision records (archived with the private repo), the export tooling, the
operator's Discord and triage loop, the lab-laptop scripts and the instruments nothing
references, which live outside the repo now. What read the records is gone from the tooling:
no corpus lint, no records index, no `reserve` verb, no number-collision check.
Three hooks are gone: fmt-at-commit and the file-size nudge were redundant with the gates, and
the assets/ui guard is now a test (`assets_ui_does_not_grow`) that fails for everyone, not only
for a Claude Code session. The remaining pool hooks stand down on a machine without a pool.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- a Vanish, a stealth or a unit leaving range clears your target at once, not two seconds later, and TAB reaches a mob behind you (2345)
- a fully painted terrain layer covers fully: roads and rock no longer let about 6% of the grass underneath show through (2345)
- companion pets show their names, the saved camera pitch survives a login, and a missed resurrect offer no longer blocks later ones (2345)
- ESC on a quest giver closes it, browsing the auction house by category searches the right items, and abandon removes the quest you chose (2345)
- a profession window open at logout no longer reopens for the next character (2345)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- a Vanish, a stealth or a unit leaving range clears your target at once, not two seconds later, and TAB reaches a mob behind you (2345)
- a fully painted terrain layer covers fully: roads and rock no longer let about 6% of the grass underneath show through (2345)
- companion pets show their names, the saved camera pitch survives a login, and a missed resurrect offer no longer blocks later ones (2345)
- ESC on a quest giver closes it, browsing the auction house by category searches the right items, and abandon removes the quest you chose (2345)
- a profession window open at logout no longer reopens for the next character (2345)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- a creature walking a path no longer cuts its first corner: the path's first waypoint was dropped at decode (2342)
- two characters whose names differ only in accented or non-Latin letters no longer share macros, bindings and SavedVariables; a file that failed to load is not overwritten at logout (2342)
- custom chat channels survive a logout, a collapsed quest header keeps its quests watched, and a trackpad swipe scrolls as far as it adds up to (2342)
- a hearth off a zeppelin no longer lands back on its deck, and an opened lockbox with loot left in it unlocks (2342)
- every snapshot runs on Vulkan, in a container, before it ships (2344)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- a creature walking a path no longer cuts its first corner: the path's first waypoint was dropped at decode (2342)
- two characters whose names differ only in accented or non-Latin letters no longer share macros, bindings and SavedVariables; a file that failed to load is not overwritten at logout (2342)
- custom chat channels survive a logout, a collapsed quest header keeps its quests watched, and a trackpad swipe scrolls as far as it adds up to (2342)
- a hearth off a zeppelin no longer lands back on its deck, and an opened lockbox with loot left in it unlocks (2342)
- every snapshot runs on Vulkan, in a container, before it ships (2344)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- an item is an object in the one index, and its enchant and lifetime countdowns are its own (2334, 2340)
- the server's stand state applies, a bag equipped into a bag slot fires BAG_OPEN, and the inspect echo is dropped on purpose (2339)
- the schedule census counts declared orders only, and the architecture walls gate leaks rather than the API (2337, 2338)
- one queue for every event into the UI is not built: the reference orders its events per mechanism, not by the wire (2341)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>