- spell shimmer timing is right: shared clocks tick together, each cast anchors its own
- the flickering ground items in Orgrimmar are fixed, a transparent draw-order tie
- static scenery answers the mouse again, and the freeze debuff's crackle rings at the target
- bug reports moved to Discord, GitHub issues are closed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- root and snare state visuals are read from the spell kit's tenth effect slot and planted in the world at the unit's feet, where they belong
- Arcane Intellect's flare is one size cast to cast now: a joint-lane card was taking the sequence twinkle twice (joint and card), sometimes swelling it to 2.5 yards
- refusing a gear piece now names the reason instead of printing a bare count
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- buff durations count down properly: the bar polls the remaining time every frame and a server-sent span reads as real seconds
- ground-targeted spells find the floor: Consecration's and Flamestrike's hovering discs ride the decal projector, and Frost Nova's births ride its expanding ring (the emitter params are per-frame tracks now)
- a spell or action stuck on the cursor lets go on a left click, and a macOS hardware-cursor drift heals itself in-process
- a stealthed weapon fades right: the fade twin's cutout follows the source blend, so an opaque batch never alpha-tests mid-fade
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- the spellbook draws the cooldown pie on a spell that's cooling down, and the active form's slot lights its checked ring
- shader variants warm at startup (with a tripwire if one ever compiles live), so a first cast no longer hitches on shader compile
- additive glow stacks clamp the way the original scene does, taming Frost Nova's blown-out mist, and shoulder cards split only at rigidly separable bones
- the login handshake now reads the same under both SRP encodings, and cooldown events no longer race the net step
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- a stealthed unit's particles and ribbons now dim with the body, and a depth-prime pass stops overlapping translucent parts from darkening each other
- changing gear re-dresses the character in place instead of tearing the whole model down and rebuilding it
- terrain tiles furnish cell-by-cell and model render forms build paced across frames, so first contact with fresh ground no longer hitches
- Ghost Wolf renders properly ghostly, and a live toggle swaps its action-bar icon to the active form while it holds
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- crossing into a new zone lands the whole discovery moment: the "Discovered" toast, the experience line in chat, and the race-keyed jingle
- crossing a tile boundary no longer recycles a whole row of terrain: a keep-band holds what you just left, unloading is budgeted, and fresh requests stagger instead of bursting
- a sheath swap moves the weapon (and its sparkles) to the new slot instead of rebuilding it, and a fading model now dims its own effects with it
- pressing the cast button again cancels the cast, and a form that can't cast a spell refuses it locally instead of round-tripping the server
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- elementals no longer freeze mid-air as corpses: a one-shot death band's clock now clamps instead of wrapping, so the authored dissolve plays out
- an equipped item's sparkles, cards and glows reach the character-select booth and the character sheet's model pane, and a tint reaches a unit's attached items too
- unit lighting is back on the terrain-shade chain, and light ramps chase a clamped target so walking from sun into shade actually ramps
- test accounts gained a full-roster seeding verb (every class levelled, geared and specced in one command)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- stealth reads as stealth now: the body fades to the reference's 30 % and creeps with the proper stealth walk and stand poses
- the item and enchant glow subsystem exists: permanent weapon glows and enchant visuals show in the world and at character select
- the character-select background's colour banding (the reported "16-bit" look) is fixed at the render target, and the tauren stage's black corners with it
- aura body tints got a real per-instance channel, so a spell can tint the whole unit without touching its neighbours
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- terrain draws per chunk now, and one authority culls everything outside: buildings, billboard cards, particle emitters
- the fps and memory creep on long flights is fixed twice over: material animations only tick what something draws, and far-away art is released by distance (with a 30 s dwell floor so fast cameras don't thrash it)
- the second crash ever reported (a cast racing a despawning unit at flight speed) is fixed, with a regression test that reproduces the exact panic
- every build now prints which commit it is, so a bug report can say exactly what it ran
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Why fences glowed noon-warm at midnight: our sun lane multiplied the
day/night colour by the client's documented 2.5 for doodads on lit ground,
which pushes past white and clips to a daylit face. Two days of binary
archaeology confirmed that multiply is real — on a render path the
reference machine turns out not to run.
- The settle was an API trace of the actual 1.12.1 client standing at the
same fences: on its Direct3D path the sun arrives at the day/night colour
clamped to at most full strength — one for lit ground, half in baked
shadow, never brighter than the palette. Our lane now commits exactly
that. Midnight is moonlit blue, and adjacent lit/shaded fences blend the
way the original does.
- Along the way: a capture-window override for era-resolution A/Bs, and a
calibration dial that lived exactly one day — the by-eye level it found
matched the traced law to a few parts in 255, then retired.
- Separately, the $-macro text expander now runs everywhere the original
runs it: chat lines, mail bodies and item text, not just the UI strings.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Sun-lit fences rendered noon-bright at midnight. The hunt starts here: the
model sun response switches to the curve read out of the real client's own
shipped vertex program, the terrain-shadow bit under any doodad became a
one-command query, and a new golden frame holds a fence lying across the
shadow boundary — both states of the sun term in a single image (with a
night twin). The full resolution lands in the next snapshot.
- Arcane Explosion's ground decal drew as a black tile: the additive blend
was lost when a decal hopped render lanes. A regression, bisected with a
human grading each build, and fixed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- A creature and a chest, photographed in sunlight, in baked shade and
indoors, from both sides — a matrix of golden frames that pins how every
light lane renders a model, so a lighting regression in any one lane shows
up as exactly one failing cell. Building it found two real races.
- Captures pin the animation-LOD gate off now — the third discovered source
of run-to-run drift, where a slow capture run dropped bones from a skeleton
and the golden image quietly disagreed with itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Two new golden-capture spots framed by a human eye rather than a lane list:
the Goldshire inn common room (the interior everyone actually stands in) and
a Felwood vista. The sweep also captures the world-map field now.
- An honest-tooling fix: a scenario that failed to produce its image used to
vanish from the diff and the sweep still read green. A missing shot is now
its own loud failure — a clean sweep means every frame was actually compared.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Particles, ribbon trails, blob shadows, the selection ring, ground decals,
water foam and the weather all push their quads into one shared vertex
stream now — one buffer, batched draws, indices built per frame in draw
order. ~1,100 emitters at the crowded dungeon spot stopped being ~1,100 mesh
assets the engine reallocated every frame, no material asset is ever mutated
for an effect again, and adjacent draws merge like the original's own batches
(its measured shape: 793 quads in 23 draws). Vertices went camera-relative on
the way — the fix for streaks and flakes vanishing in far zones, where the
raw coordinates get big.
- Hovering an item in your bags cost +14 CPU ms for as long as the tooltip sat
open. The tooltip's refresh loop is faithful 1.12 behaviour (the bag button
re-runs its hover every frame, unthrottled, so a late-arriving item fills in
without a re-hover) — but each rebuild dropped the text measuring cache, so
every frame re-shaped every line. One line keeps the cache: +14 → +0.1 ms,
and the paperdoll, inspect and merchant tooltips stop paying the same tax as
spikes.
- "Which room is this creature in" walks one anchor per model instead of every
lit part — ~13,700 part visits a frame became ~1,700 anchor rows. The
frame-time win was honestly flat (the cost had already moved elsewhere); it
lands for the structure, and the old sweep's repair duties became
event-driven with it.
- The perf probe defends its own window now — always-on-top from the first
tick, occlusion counted on the measurement line — after two long overnight
runs were silently destroyed by the display going to sleep.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- A tester handed us a clean repro: note your framerate, tour a few dungeons,
come back — the client never recovers until restart. The cause: every dedup
cache held its assets for the life of the process, and two material tickers
touch every cached material every frame — so every map you visited made every
later frame more expensive, everywhere. Caches are map-scoped now: one hop
out of a dungeon measurably kills its whole payload (2,069 materials, ~300
models), and the perf probe grew a residency meter so this class of leak is
machine-checked from here on.
- Printed honestly: a second, far smaller retention (~25 models of toured
display payload) survives the teardown, holder still unknown — the hunt
continues, and the reporter's retest is the decisive check on the big one.
- The sky stopped re-uploading its materials every frame at rest — sun, both
moons, the star dome, the sky dome: ~17 uploads a frame with nothing moving
on screen, now zero until a displayed byte actually changes.
- The liquid animator sleeps on maps with no water, and the physics solver runs
one substep instead of six — the world has no dynamic bodies to solve for.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- An honest correction first: the previous snapshot's message announced the
owned skinning lane, but the code itself missed that snapshot by minutes —
two sessions landed at once and the export carried the older tree. The
skinning lane actually ships here, together with its follow-up.
- The follow-up is the bone-entity collapse. A creature's ~75-bone skeleton
existed as ~75 world entities, each paying transform propagation and
bookkeeping every frame, to serve the ~5 bones anything actually hangs off
(held weapons, glow emitters, the mount seat, overhead markers). A rig's pose
now lives in plain arrays on the model itself; only the consumer anchor
points remain as entities. At the crowded dungeon spot ~59,000 entities
became ~28,000 anchors (80k total → 50k), palette uploads coalesce into a
handful of writes, and another ~3 CPU ms came off the frame.
- The movement echo the server sends about your own character is applied now,
the way the original client always applied it — groundwork that GM flight
cashes in later today.
- The capture harness pins its clock per frame now, not just its frame count —
a slow run used to drift every animation out from under a golden image.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The voidwalker's eye glow vanished whenever the camera rose above eye level.
Three investigations said depth; measuring the depth buffer inside the live
quads said otherwise — the fragments reached the framebuffer every frame, and
the body's own transparent batches painted over them. The real client draws a
model's particles after that model's batches, always. Ours now does: every
effect carries a draw-order rung sized to clear exactly its own model.
- Widened to every effect family after asking "what else does this fix": ribbon
trails (a wisp's streamers wove six batches deep into its own body and
flickered as the head whipped) and 3-D model particles (Cone of Cold's
shards). A census over all 9,691 models found 967 whose own body could paint
over their effects; all take the rung now.
- The skinning lane is ours end to end: every rig's joint matrices live in our
shared GPU buffer, written only when a rig actually moved, and our shader
reads them. The engine's lane rewrote the entire joint buffer every frame and
swept every entity in the world for changed transforms — that machinery now
runs against empty sets. Another 6.7 CPU ms off the worst reported dungeon
spot, which now holds a flat 60 fps with p99 under 19 ms.
- Getting around while developing: Ctrl+Cmd+G lands your character where the
free-fly camera is, and Alt-clicking the world map teleports you there (both
ride the server's own teleport, GM-gated). The frozen-body coordinates the
panel used to copy while flying now follow the camera.
- A stuck main thread now diagnoses itself: a watchdog samples our own stacks
and prints where the time went, and a hung teardown names its last system
instead of hanging the window.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The dungeon framerate reports were right about the mechanism: the cost is
CPU-side and it scales with NPC count, not with what's drawn. Two per-unit
lanes were each 30–100x more expensive than the work they do. Measured at the
reported Lower Blackrock Spire spot: 29.7 ms/frame, 72 CPU ms, before.
- "Which room is this NPC in" scanned whole dungeon groups triangle by
triangle — a spire stacks several 15k-face groups into any vertical column,
so 37 moving NPCs cost 1.2 million triangle tests per frame. Each group's
faces now sit in a column index built at load; same verdicts (pinned by
exactness tests), 88k tests, the lane drops from 11.3 ms to 1.1 ms.
- Animating one creature cost ~190 microseconds per frame in generic per-bone
animation machinery — hash lookups and boxed curves per bone, mostly to
produce constants. A direct pose evaluator now does the same math into the
same joints for ~16 microseconds per rig, checked bone-for-bone against the
old output across crossfades, overlays and masks. The reference animates
every in-range unit with no view cull, and now so can we: a raid's worth of
animating rigs (~450) costs ~4 CPU ms where it used to cost ~85.
- Net at the reported spot: a flat 60 fps. The performance probes also learned
to report CPU work (ms and %) instead of wall-clock fps, which is what makes
these numbers repeatable on a busy machine — and comparable to the Mac
report's own units.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- A creature that was already walking when it came into view stood frozen at
its spawn point, then teleported — up to a full wander leg, 30 yards in the
worst measured case — when its next movement packet arrived. The create
packet carries the live path (where the unit is along it, how much is left)
and we parsed all of it into the void. The unit now joins its walk exactly
where the server has it: measured before/after, 13% of movement starts were
over-a-yard teleports, now effectively zero.
- Walking into Zul'Gurub or Stratholme through the portal dropped you straight
through the world. The landing check asks "is there a floor under me?" — but
on the arrival frame the loaded world is still the map you just left, and an
instance entrance is a copy of its outdoor ground at the same coordinates,
0.23 yards under your feet. The old floor said yes, then despawned. The hold
now waits for the destination's own ground to arrive, and a world that never
arrives keeps the loading screen instead of dropping you into the void.
- Same fix covers a decoder hazard found on the way: a plain two-point path
announces two points but ships only the destination, and trusting the count
over-ran the packet — it never fires on our server's pathfinder, but now it
can't.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- One text-input law for every field. Login, character create and the delete
dialog each improvised their own tiny keyboard handling — no caret movement,
no selection, no clipboard, and Ctrl/Cmd+V typed a literal "v" into the
password box. All of them now run the same byte-verified edit-box law as
chat: clipboard, select-all, word moves, shift-selection, the real 0.5 s
caret blink. The password box masks what you copy off it, like the original.
- Copy/paste on Linux had two independent causes, one per direction: our window
is Wayland but the clipboard backend spoke X11 only, and a copy relinquished
the X11 selection the moment it returned (an X11 clipboard lives only as long
as its owning connection). Both fixed — Wayland windows get a real Wayland
clipboard, X11 keeps a held handle. AltGr is not Ctrl anymore either, so
Polish and German layouts can type ą, ć and ź in chat instead of triggering
select-all. Compile-checked on Linux; wants a real-session retest.
- The exterior sun keeps its colour. A per-channel clamp saturated the warm
continental sun to pale yellow-white on every sunlit fence, post and doodad;
the clamp now happens once, at the sum, so the fiery orange survives — the
reported Silverpine fence and Blackrock steps match the reference's own
arithmetic.
- A pool has a floor. Undercity's upper slime channels claimed the dry room a
storey below them — 115 yards down still read as submerged. A pool now stops
at its own room's floor; a sweep of every building in the shipped world found
51 such stacked sites across 6 buildings, all closed.
- Ctrl/Cmd+Z hides the whole UI layer for clean screenshots, and instrumented
debug runs open their window in the background instead of stealing focus.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Twenty of the game's forty-three maps are not made of terrain at all — Molten
Core, Onyxia's Lair, Dire Maul, Gnomeregan, Uldaman, the Deeprun Tram and both
Blackrocks among them. Their whole world is one building named by the map file,
and that line was being thrown away, so those maps loaded nothing and a teleport
in fell forever. The building is now placed as an ordinary WMO placement — so
collision, props, liquid, interior lighting and portals all come along on the
existing path — verified on seven of the twenty against the server's own
independent floor heights.
- Particles keep the model's time. Emitter rate and on/off now bake per animation
sequence and follow the clip that is actually playing, so a quest object's
explosion choreography no longer burns at full roar while the object idles. And
the flipbook cell ramp is computed the way the reference computes it: sheets
that play backwards no longer crash the client (a certain Winterspring brazier
fired this on every approach), the tail streak reads its own ramp instead of the
head's, and the per-segment repeat count works — the Insect Swarm's wings
finally flap.
- A culled dungeon room takes its furniture with it: lanterns, crates, barrels and
cobwebs now cull with the WMO group that owns them, instead of hanging lit in
the void where their room used to be. The group's own liquid goes along too.
- Under the floor: the archive chain pins that a file the patch deletes can never
fall through to the stale copy in a base archive — a silent failure mode that
would serve deleted content looking perfectly healthy.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Area triggers exist now, so portals work: every teleport pad, dungeon entrance
and enter-a-place quest volume reports the reference's own way — one exit latch,
first containing volume on the map wins, a sphere or a yawed box. Verified live:
Rut'theran to Darnassus, the Deadmines worldport, and a level-gated entrance
refusing with the server's own "You must be at least level 10 to enter."
- GameObjects animate. Every animated object arms its idle the moment it goes live
(doors and chests used to flash bind pose for a frame), a missing rest pose is
remapped the way the reference remaps it instead of playing nothing — the
Ahn'Qiraj gate's root tangle stood frozen for want of a Closed clip — and the
state machine covers the verified twenty of thirty-one object types instead of
three: fourteen hundred spawns' worth of traps, goobers, books and questgivers
now change pose off the wire.
- The flickering tent is still. Cloth you can see from both sides is authored as
two reversed copies of the same sheet, and the real client backface-culls each
copy from its wrong side so exactly one covers any pixel; we drew every building
batch two-sided, which left the winner to floating-point noise, flickering while
the camera crept. WMO materials now honor their cull flag.
- A sweep of long-standing visual bugs: effects respect the far-clip wall — a
ferry's deck lanterns were drawing from 7,000 yards away; the night-elf eye glow
goes out in first person instead of leaving two orbs burning in mid-air; the
goblins' stray white hair tuft is gone (a duplicated table key resolved last-wins
where the client scans first-wins); lava and slime finally have their own
submerged view — the dense fiery orange and dense green of the real thing, off
two fixed lighting rows nothing in the zone data points at; and the far-horizon
band overlaps the detailed terrain instead of leaving a strip of sky at lowered
view distance.
- Two caught at the keyboard: the backpack icon greys instead of vanishing while
the escape menu is up, and the world map is a real panel now — it can no longer
open over the menu, and ESC closes it first like everything else.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The social window: friends, ignore and `/who`, in the reference's own two-level
arrangement with its inner tabs and per-row right-click menus. The lists ride the
real wire — guid-keyed with no names, resolved through the name cache, and capped
at 50 friends / 25 ignores because those are the client's own caps — and the
ignore list does its actual job: an ignored speaker's chat is dropped silently, a
whisper additionally tells the sender, and a duel challenge is auto-declined.
Guild ships as a disabled tab, which is what a guildless character sees.
- The escape menu: ESC's last rung finally opens something. The game menu lands at
the reference's own size and ladder, and leaving works — logout and quit with the
server owning the clock (instant at an inn, refused in combat, or the 20-second
countdown), narrated by the real camp/quit dialogs. While the menu holds the
center nothing else opens, and the bag bar greys out under it.
- Items on the action bar act like items. An equipped trinket was a dead button;
the reference's use law is two stages — not equippable means use, equippable and
already worn means use in place — over its exact search order (equipment first,
then the bags, then the backpack, then the keyring; never the bank). What can go
on the bar is now the reference's own two filters, byte-read: an item with an
on-use spell or one you can equip, and no passive spells — and dropping a passive
there speaks the real client's own line, "You can't put a passive ability in the
action bar."
- A quest-starter item opens its quest instead of "The item was not found." The
question goes to the item's own guid, never through item-use — which the server
refuses for every one of the 215 quest-starter items — and refusing the quest
says what the client says, then closes the window.
- For the toolbox: a pixel pick that reports everything under the cursor all the
way back, a lens that says which render phase a draw landed in, and switches that
separate "discarded" from "lost depth" from "never drawn" — built while cornering
a flickering tent, whose fix ships in the next snapshot.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The main menu bar's two empty recesses fill. The micro menu — the eight arched
buttons: character, spellbook, talents, quest log, socials, world map, main menu,
help — sits in the dark panel between the page arrows and the bags, transcribed
from the reference's own layout: the character button wears your portrait, a button
holds itself down while its panel is up, and the talent button appears at level 10.
The latency meter fills the one slot the bar art leaves transparent for exactly it,
tinted green/yellow/red on the reference's 300/600 ms thresholds and drawn UNDER
the bar art, seen through its window, the way 1.12 actually does it. The socials
and main-menu buttons find their panels one snapshot later; help still waits.
- The UI explains itself on hover: 1.12 ships its detailed two-line tooltips ON — a
FrameXML default, not the opt-in extra it is often remembered as — so the micro
buttons, your own portrait, the XP bar, the five bag buttons and the ping meter
all answer a hover with the reference's own explanations.
- The PvP flag, end to end: crossed swords on the player, target and party frames,
driven by the two descriptor bits the wire actually carries, and `/pvp` speaks —
the yellow toast plus the system chat line, the OFF sentence being the one that
warns the flag lingers for five minutes. It really does linger: turning it off
waits out the server's timer, which looks like a bug and is the reference.
- Quest markers stopped freezing. The grey `!` over a questgiver above your level
goes gold the moment you ding, an NPC re-entering view is asked afresh instead of
wearing a session-old answer, and the marker drops when the questgiver bit goes
off — the re-ask triggers mirror the reference's own set, plus one named addition
(your own level changing).
- Water and heights: swimming downhill no longer bounces between swim and fall ten
times a second — the surface line is a two-sided constraint, so the swimmer
settles with the river instead of being left behind by it. And collision height
is per-unit now, read from the unit's own model: a gnome used to swim with a
third of a yard of water over her head because five depth lines were quoting a
human's number.
- A round of pixel honesty in text and chat: the newest chat line no longer wears a
wider drop shadow than every line above it (shadows move in whole pixels now),
keeps its descenders, and hover boxes stop painting over the chat body. The chat
input's history browse survives programmatic edits, a failed script chunk warns
instead of vanishing, and recall deepens to 64 lines. Idle animation got honest
too: a model's idle is Stand resolved through its own lookup table — never
file order, which had the duel flag bobbing on its spawn clip — and an armed idle
is culled on the box its animation authors, not the bind pose, so the flag stops
vanishing at most camera angles.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Duels. Challenge another player from their right-click menu, or with `/duel`, and
`/forfeit` to give it up. Both popups are there — the challenge you accept or decline, and
the warning when you leave the field — with the flag countdown between them, and the outcome
printed in chat when someone is knocked out or flees. Read off the reference client's own
duel packets and the three globals it keeps client-side, which is why the challenger reads
"You have requested a duel." even though the server never echoes that back.
- Inspect. Right-click a player and open their paper doll: their nineteen publicly visible
equipment slots with icon, name, quality and a linkable item, and their body standing in
the pane, which follows along if you retarget while the window is open. No stack counts and
no durability — those are not fields another player publishes, which is exactly why the
reference client's inspect doll has never shown them either.
- Water knows where it stops. Swimming used to trigger in the dry tunnel thirty yards under
Stormwind's canal, and in mid-air over Blackrock's lava. A liquid is now the grid the map
file actually stores — one wet flag per cell, and the surface height a bilinear over the
four corners of the cell you are standing in, the same sample the reference client takes —
so the water starts at the bank and its surface sits where your eye puts it. Lava is a
liquid you swim in, an indoor liquid asks the building you are inside, and `/liquid` prints
every surface claiming your feet and where each one came from.
- Creature parts authored to appear only on death — the voidwalker, the banshee, the ooze,
the stone elemental, the infernal — were drawing the whole time: material alpha now bakes
per animation sequence and the unit lane actually evaluates it. The character and inspect
model panes are lit by the reference widget's own single light instead of blowing out white,
the rotate arrows spin while you hold them, and the transparent sort ladder had its sign
backwards, so overhead names draw over water again instead of being painted out by a canal
behind them. Underneath, the protocol writer's 95-verb drawer and its thousand-line spell
module split into per-family files — no behaviour change, just a tree you can find things in.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>