feat(rust): permissions as event rewards — lend or give any registered permission (PLAN_REDESIGNS §12) #42
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/rust-perm-rewards"
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?
Builds PLAN_REDESIGNS §12 (D342–D346, planned in docs#342). An event can now reward any permission a server's plugins registered: night vision, a chat colour, a
/removecommand. No perk-specific code. Both steps write rows the permission mirror already pushes, so there is no plugin, sidecar, protocol, installer or app change.The steps
rust.perm.lend— Permissions until the event endsrust.perm.give— Permissions for goodrust_perm_run_grantsrow per recipient per permission (a kit reward's lease)rust_perm_grantsrow per website user per permission, scoped to the step's server, sourceevent, note "event run N, step M"change/ledger, withrust.kit.entitle's revert and reconcileirreversible/none, likerust.coins.payrust.permissions— Permissions lentrust.permissions.kept— Permissions given for goodBoth steps share these rules:
multipleparam (website#213, MODULE_API 1.14.0), at most 10.{permissions}puts in the names.Picker
rust.options.permissions: every permission in the enabled servers' catalogues, grouped by the plugin that registered it. Unowned permissions are grouped as "<prefix> (not registered by a plugin)". Sorted by plugin, then by permission, ignoring case. A permission that is not on every server carries the note "Only on Main".Permission manager: a for-good grant shows a given by event run N, step M chip. Staff turn it off like any other grant.
Checks
test/permRewards.test.js(15).entry.test.jsnow lists the two verbs and budgets, prices a list param as core does, and checks the param sources of every verb, including the irreversible ones.check:externalsOK.check:imports,check:bundle(the new file is inci/bundle.json),check:swaggerandcheck:engagementall OK.engagement-triggers.jsonis regenerated for the newcoreApi.routes.manifest.jsonis unchanged, since there are no new routes.confirmrequired;ci/core-ref.jsonis pinned to website#213's branch head (743f1bc), because a 1.13.0 core refuses^1.14.0. I'll re-pin it to #213's merge sha once that merges, as I did for #212.The walk rows in §12.9 are deferred to the end-of-plan walk (D331).
🤖 Generated with Claude Code
https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY