Rust-Plugins now releases a ZoneManager helper, RunicGatewayZones.cs, beside
RunicGateway.cs (docs/modules/rust/PLAN_FIXES.md D181, D182), and the org lead
decided it is installed by default. The tarball reader took only the bridge,
so the helper would have been downloaded and dropped.
- plugin::read_tarball reads every other .cs the release's manifest lists in
`files`, and refuses the release when one is missing, does not match its own
sha256, or is not a plain `<Name>.cs` (the name is written into a plugins
directory, so nothing in a tarball may reach outside it). A .cs the manifest
does not list is ignored, so a release older than helpers has none.
- install/update place each helper before the bridge, in place like the
bridge (Oxide and Carbon reload on a change, not on a rename), put back one
that was deleted or edited, and remove one a later release stops shipping.
- The record gains per-instance `helpers` (path + sha256). It is absent from
every record written before this and reads back as none.
- doctor warns — never fails — on a missing or edited helper and says what
the bridge loses without it; uninstall removes helpers before the bridge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY