diff --git a/docs/audience-scoping-backlog.md b/docs/audience-scoping-backlog.md index 51e0bd6..c6387a1 100644 --- a/docs/audience-scoping-backlog.md +++ b/docs/audience-scoping-backlog.md @@ -18,10 +18,10 @@ - `resource.importSkillMatrix`: documented as self-service and auth-verified - `project.isImageGenConfigured`, `project.isDalleConfigured`: covered as authenticated low-risk configuration checks - `notification` self-service and manager boundaries: auth-covered across list, unread counts, reminders, deletes, broadcasts, task creation, and assignment boundaries +- `assistant-tools` parity metadata: descriptions and parity assertions now match narrowed router audiences for resource overview, controller-only, self-service, and manager broadcast/task tools ### Dirty Files To Avoid Mixing Into This Batch -- `packages/api/src/router/assistant-tools.ts` - `packages/api/src/__tests__/assistant-tools-advanced.test.ts` - `packages/api/src/router/notification.ts` - `packages/api/src/__tests__/assistant-tools-import-export.test.ts` @@ -42,8 +42,8 @@ These files already have unrelated local edits. Audience parity work that would ### No Further Small Slices Currently Ready -- the previously identified small hardening and tests/docs candidates have been completed, including the notification auth follow-up -- the remaining audience work is now either architectural (`comment.ts`) or blocked by dirty files owned elsewhere +- the previously identified small hardening and tests/docs candidates have been completed, including the notification auth follow-up and assistant tool parity metadata cleanup +- the remaining audience work is now architectural (`comment.ts`) or depends on broader policy decisions rather than another ready-made auth slice ### Needs Architecture Or Policy Design @@ -63,21 +63,9 @@ These routes should not be batch-edited as “small safe slices” until a visib - Recommended path: - treat comments as a separate architecture ticket, not part of the quick hardening batch -### Blocked By Dirty Files - -#### `packages/api/src/router/assistant-tools.ts` - -- Why blocked: - - unrelated local edits are already present - - tool gating changes would mix poorly with concurrent work -- Interim rule: - - keep parity changes on the `assistant.ts` side where possible - - defer tool-level cleanups until the file is stable - ## Recommended Next Order 1. `comment` architecture design ticket -2. assistant-tools parity cleanup once the dirty files are free again ## Slice Definition diff --git a/packages/api/src/__tests__/assistant-router.test.ts b/packages/api/src/__tests__/assistant-router.test.ts index e39ca42..1e7138c 100644 --- a/packages/api/src/__tests__/assistant-router.test.ts +++ b/packages/api/src/__tests__/assistant-router.test.ts @@ -955,9 +955,16 @@ describe("assistant router tool gating", () => { expect(toolDescriptions.get("list_users")).toContain("Admin role"); expect(toolDescriptions.get("list_assignable_users")).toContain("Manager or admin role"); expect(toolDescriptions.get("get_current_user")).toContain("authenticated user's own profile"); + expect(toolDescriptions.get("search_resources")).toContain("Resource overview access required"); + expect(toolDescriptions.get("search_by_skill")).toContain("Controller/manager/admin access required"); + expect(toolDescriptions.get("list_notifications")).toContain("current user"); + expect(toolDescriptions.get("get_unread_notification_count")).toContain("current user"); + expect(toolDescriptions.get("list_tasks")).toContain("current user"); + expect(toolDescriptions.get("get_task_counts")).toContain("current user"); expect(toolDescriptions.get("create_notification")).toContain("Manager or admin role"); expect(toolDescriptions.get("create_task_for_user")).toContain("Manager or admin role"); expect(toolDescriptions.get("send_broadcast")).toContain("Manager or admin role"); + expect(toolDescriptions.get("list_broadcasts")).toContain("Manager or admin role"); expect(toolDescriptions.get("get_broadcast_detail")).toContain("Manager or admin role"); expect(toolDescriptions.get("create_client")).toContain("manager or admin role"); expect(toolDescriptions.get("update_client")).toContain("manager or admin role"); diff --git a/packages/api/src/router/assistant-tools.ts b/packages/api/src/router/assistant-tools.ts index 10e06f8..d7f1e30 100644 --- a/packages/api/src/router/assistant-tools.ts +++ b/packages/api/src/router/assistant-tools.ts @@ -1912,7 +1912,7 @@ export const TOOL_DEFINITIONS: ToolDef[] = [ type: "function", function: { name: "search_resources", - description: "Search for resources (employees) by name, employee ID, chapter, country, metro city, org unit, or role. Returns a list of matching resources with key details.", + description: "Search for resources (employees) by name, employee ID, chapter, country, metro city, org unit, or role. Resource overview access required. Returns a list of matching resources with key details.", parameters: { type: "object", properties: { @@ -2442,7 +2442,7 @@ export const TOOL_DEFINITIONS: ToolDef[] = [ type: "function", function: { name: "search_by_skill", - description: "Find resources that have a specific skill.", + description: "Find resources that have a specific skill. Controller/manager/admin access required.", parameters: { type: "object", properties: {