feat(bridge): emit world.ruleset, the shard's published ruleset #3
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/bridge-ruleset"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Protocol 3.0 order 2 —
docs/link/v3.md§5. Plugin half of a four-repo change.What
A new
BridgeRuleset.csemitting oneworld.rulesetframe describing how this shard is actually configured: expansion, which optional systems are on, skill/stat caps, account and house limits, champion scroll rules, the save/restart schedule. The website renders it at/site/rules, so the rules page cannot drift from the server.Modelled on
BridgeBoot.EmitHello, not on the diff sweeps. The ruleset changes only when an operator edits a.cfg, so there is nothing to poll. It subscribesConnected_Core— a sidecar that comes up second still learns the ruleset — and[bridge reloadre-emits, for an operator who just edited a file and wants it live without a shard restart.The security-relevant part
The frame is built from an explicit allowlist of
Config.Getcalls.Config.Entriesis never enumerated: that would sweep in every key on the server, secrets included.Server.cfg,Staff.cfg,Email.cfg,DataPath.cfg,Bridge.cfg,Compiler.cfg,Reports.cfgandClient.cfgare named as excluded in a code comment as well as in the spec.The one connection detail published is
Bridge.PublicConnectAddress— blank by default, set deliberately by an operator for this purpose. The shard's real listen address is never read.Two details worth a reviewer's eye
revis FNV-1a, notString.GetHashCode().GetHashCodeis seeded per process on modern .NET, so it would change on every shard restart and defeat the whole point of a diff..cfgkey.Shadowguard.cfghas noEnabled(it's the TOL expansion gate);Factions.cfghas none either, becauseServices/Factions/Core/Faction.cssetsSettings.Enabled = !ViceVsVirtueSystem.Enabled— the two are mutually exclusive by construction.Config (
overlay/Config/Bridge.cfg)RulesetEnabledtruePublicConnectAddressRulesetIncludeScheduletrueVerification
Compiled the entire ServUO Scripts tree (6,205 files, net48, Expansion EJ) with this overlay substituted for the deployed Bridge copy — clean, zero errors. Contrary to the repo's "no standalone build" caveat this is achievable with the SDK's Roslyn
csc.dllat/langversion:7.3against the net48 reference assemblies (excludingScripts/objandScripts/bin); the method is recorded inv3.md§5 and is worth running on every plugin PR.deploy.ps1 -Verifyshows the expected singleADD Scripts\Custom\Bridge\BridgeRuleset.cs.The emitted frame was validated end to end against the Rust sidecar and the website — see the sibling PRs.
Sibling PRs
GET /ruleset+ the store projection/site/rulesINTEGRATION.mdcatalog,PROTOCOL_2.md§10.4 superseded note,v3.mdprogressPROTOCOL_VERSIONis not bumped here; that is a single operator-visible cutover at the end of v3 (§4).🤖 Generated with Claude Code
https://claude.ai/code/session_01U7CBg11prhLimL9iHSX1bP