Lift the ungated-request shape out of core/room into core/management so any capability can use it, not just room:member.
capability-request = { verb: "capability.request", capability: tstr, * tstr => any }
No scope field in the params: every manage-request-frame already carries its own top-level scope: CapabilityScope (mesh-session.ts:98-104, sendManageRequest(command, scope, ...)), so restating it inside params would just be a second copy of the same fact that could silently disagree with the first. room.join's own params already omit it for the same reason (spec/room.cddl:137) — this just makes that consistent for the generic verb too, rather than reintroducing the redundancy.
Granted via a manage-ok extension carrying the freshly minted token, mirroring room-join-ok's existing shape (spec/room.cddl:154-155) rather than inventing a new response frame.
Blocks the valid-until field (needs the verb to exist first) and the room.join/room.invite migration (they move onto this once it exists).
Lift the ungated-request shape out of
core/roomintocore/managementso any capability can use it, not justroom:member.No
scopefield in the params: everymanage-request-framealready carries its own top-levelscope: CapabilityScope(mesh-session.ts:98-104,sendManageRequest(command, scope, ...)), so restating it inside params would just be a second copy of the same fact that could silently disagree with the first.room.join's own params already omit it for the same reason (spec/room.cddl:137) — this just makes that consistent for the generic verb too, rather than reintroducing the redundancy.Granted via a
manage-okextension carrying the freshly minted token, mirroringroom-join-ok's existing shape (spec/room.cddl:154-155) rather than inventing a new response frame.Blocks the valid-until field (needs the verb to exist first) and the room.join/room.invite migration (they move onto this once it exists).