Repository navigation
v0.3.1
A structural release. Nothing on the wire changed, no behaviour changed, and a caller on 0.3.0 has nothing to do.
Twelve files were split by responsibility
Twelve source files had grown past a thousand lines each, and a file that size stops being read and starts being searched. Each is now a directory filed by what its parts answer, and each kept its module path and its barrel — so no import anywhere in the tree moved, and src/protocol/index.ts, the one public door of the wire protocol, is untouched.
engine/typesis filed by what a declaration describes: the canonical slots, the joint table, one avatar resolved, what a model states about itself, one frame of movement, the staging, a turn, the voice, the ports a renderer implements, the session readouts.protocol/commandsis filed by what a command talks to, andprotocol/messagesby who is speaking to whom.engine/motion/gesturesis one file per group, spread back into one flat table in group order, so an id is still reachable asGESTURES.wave.i18n/messages/panelis one file per tab. Each now carries its own English/Japanese parity check, so a string added in one language and forgotten in the other is an error in that tab's file.Session,Rig,ArmAnatomy,Body,BrowserBgmandAvatarRuntimeeach gave up the questions that were not theirs — the turn queue, the staging order, the elbow search, the fingertip back-solve, the body volumes, the character-space boundary, the insert chain, the camera — while keeping their public surfaces.ctlis one file per command family over shared argv handling.
The engine's tuned numbers were checked mechanically
Most constants in src/engine were arrived at by watching two real avatars, and most carry a comment saying which failure they exist to prevent. Those comments are the most valuable thing in the tree, so the move was verified rather than trusted: the multiset of numeric literals across src/ has no removals against 0.3.0, only the additions the new wiring brought, and the one comment that went missing in the first pass — the block explaining the trunk cylinder's measured radius — was restored before anything was committed.
The suites were split the same way
The four largest test files became one file per subject over a shared harness and a shared set of renderer fakes. Every case moved verbatim; the suite asserts exactly what it did before.
The one thing a reader might notice
debug is now filed with the renderer commands rather than the body ones, since it reaches nothing in the session and only says what a renderer draws over itself. That is where its schema lives now, not a change to the command.