docs(modules): phase 7 as built — the permission mirror, and the set arithmetic behind it #259
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/rust-phase-7"
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 4 (
PROTOCOL.md§10), phase 7 as built (PLAN.md§20), what an operator needs to know about it (INTEGRATION.md), and the in-game leg as a walk to run (PLAYER_WALK.md).Code: Rust-Plugins#4, Rust-Link#4, Module-Rust#8.
The spec
One verb carrying the whole desired set, diffed by the plugin against the live store. The report's two interesting fields are the ways a push looks like it worked and did not —
unresolved(no loaded plugin registered the name, and the grant API no-ops silently for one) andpending(the store has never seen that player, so there is no record to put in a group). Neither is recorded as pushed, because a site that recorded them would believe it had given a privilege it had not.Drift is reported and never undone, and the permission hooks are a live signal rather than the record: only the desired set can say whether a change is foreign, so a hook that stops firing on a framework upgrade costs latency, not correctness.
The finding the design turns on, written where it belongs
The store records who granted a permission nowhere. Only the website can tell them apart, from its own memory of what it pushed — which is why there is a pushed ledger, and why revoking a hand edit needed a table of its own (a foreign grant often names a Steam id no website account holds, so there is no user to author it against and nothing in the ledger to remove).
§10.5 is an old rule generalising
"A wedged sidecar must never stall the game" becomes "nothing the far side sends may cost the main thread an unbounded amount of work", because
perm.syncis the first command whose work is not bounded by its own shape. Three bounds, each placed on the side that can say something useful when it is hit — rows at the website, bytes at the sidecar, operations at the plugin.What is not proven, said plainly
§20.7: the acceptance line needs a second, non-admin Steam account on the rig (§12.5's ceiling, known before the phase started), and nothing in the plugin has been compiled.
PLAYER_WALK.mdcarries the seven steps, including the two things to confirm on Carbon rather than assume — theid(name)entry format (a wrong parse reports every holder as foreign, which is visible immediately) and whetherGetGroupPermissions(name, false)compiles there at all.AI disclosure
🤖 Generated with Claude Code
https://claude.ai/code/session_01PMH6bw1jXMgbyF3ZWGEzSM