- Shipped
- October 21, 2026 at 8:06 AM UTC
- Author
- Kamo
- Commit
- 1fdf43f
Approval follow-up 2026-10-21 (controller review of the approvals UI). Rights (item 4): an audit of every tool's declared rights against the rights its downstream endpoint enforces found tools whose service wants a right the descriptor never named, so tool offering, Approve-and-always- allow, the planner and a teammate's order could not see it, and a call could be 'allowed' and then refused downstream (leads_update on a lead the SI does not own: EDIT_LEAD_CONTACT_INFO_OTHERS). - ToolDescriptor.rightsWhen / ToolSpec.when(): a right needed in one case only, with its plain words; told to the planner in the description, lent by a teammate's order (OrderDelegation.CallScope), shown on the card's alwaysAllow, and - where one call tells it (a probe) - refused by the pipeline before any approval, in plain words (FORBIDDEN, reason MISSING_RIGHT, condition, requiredRights). - Declared on 40 tools (leads x20, timecards x8, docs_share, quotes_update, opportunities_file, kb_update_article, phone_get_recording, state licences, webinars_cancel, ehr_notes_list, attachments on mail/sms/bugs/growth/social); VIEW_DOCUMENTS added to chat_send_file, growth_submit, materials_set_review and materials_share_link, which always read the document. - ToolRightsAuditTest: every tool is run against a fake of its services and every endpoint it reaches is checked against the audited endpoint list; a new tool on one of them must declare the right. Card (items 1-2): a record the reader is not shown reads in plain words ("a task you can't see", "... you can't open (it may have been deleted)", "... that couldn't be looked up just now"); every phrase holds its records in a Known select (PhraseGuard, guard test over every phrase in every state). Numbers read as people write them, after the person they belong to ("text Jane Smith at (512) 555-0142"); the card lists every number and address it shows (contacts) for the popups.
