- Shipped
- October 14, 2026 at 11:04 PM UTC
- Author
- Kamo
- Commit
- be2a15a
Owner 2026-10-14: Luna (crm) asked the owner to approve joining a meeting he had told her to join; meetings_join was classed PLACE_CALL, so the charter's "Placing phone calls: ask for approval first" applied (approvals 3f6fe9fc, 4ad68782). Joining one of the org's meetings is not a phone call: meetings_join is now JOIN_MEETING (shared-lib 2d2f2efd), still needing VIEW_MEETINGS and keeping maxCallsPerDay. Its dial-in fallback dials the meeting's bridge from the SI's own line (kamoai-service KM1, kind MEETING); its plan names no outside recipient, so the outreach gate never treats it as a customer call. CharterPolicy: an unnamed JOIN_MEETING (absent from a charter resolved before SecurityService knew the class, or at its DEFAULT level) executes before the autonomy ceiling, as SEND_INTERNAL_MESSAGE does, except for a SHADOW SI and under a fail-closed charter; a layer that names it (an admin's rule for meetings) is followed as any class. ActionClasses appends JOIN_MEETING, unlisted by approvals_request (meetings_join asks for itself), so a PLACE_CALL redirect now names phone_call alone and its PREFERRED entry goes. Snapshots change for meetings_join's actionClass only. Tests: CharterPolicyTest (unnamed and absent execute for SUPERVISED and AUTONOMOUS, SHADOW and fail-closed ask, a named rule is followed, a FORBIDDEN PLACE_CALL leaves it alone), RegistryCompletenessTest, ApprovalsPackTest, ApprovalsCoverageTest, CalendarAndMeetingsPackTest, ToolListParityTest, McpToolJsonTest, BasisArgumentTest
