From e5aa49cd696124b516143ea418531d70f382a367 Mon Sep 17 00:00:00 2001 From: Dotta Date: Mon, 26 Oct 2026 11:22:14 -0500 Subject: [PATCH] docs(connections): record linked-resource and quota qualification Co-Authored-By: Paperclip --- doc/plans/2026-10-13-connection-api-parity.md | 5 ++++ maps/agent-access-map/chat-channels.md | 24 +++++++++---------- maps/agent-access-map/gateways-profiles.md | 16 ++++++------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/doc/plans/2026-10-13-connection-api-parity.md b/doc/plans/2026-10-13-connection-api-parity.md index da4c9cfdf91..cb9144316df 100644 --- a/doc/plans/2026-10-13-connection-api-parity.md +++ b/doc/plans/2026-10-13-connection-api-parity.md @@ -129,3 +129,8 @@ The implementation was rebased onto `a1f77821b9cd5c9c846fdf7a0fa5cc620ad2b6bb`. - Saved-login route policy and Apps connect components: **236 tests passed** after the entry fix; the added route-policy case was red before the fix. Token gates and map validation passed. - Master advanced during PR qualification. The implementation now merges `5823e9a664`; its already published Copilot v60 identity is preserved byte-for-byte, and the combined connection guidance is declared as v61. Generated TypeScript/Rust identity checks and all **58 Copilot installation tests passed**. These checks do not imply a new live provider qualification. + +- Latest authorization qualification: **36 assembled-server scenarios passed**. Additional cases cover application-provider spoofing and proposed metadata changes, real agent action approval with its reserved rate slot, distinct subsequent-call denial, concurrent run-authenticated finish/reorder/update operations, issue/routine/gateway binding targets and retained gateway profiles, private GitHub review list/detail filtering, and rate-limited Slack test messages/invitations. Exact action retries retain their saved receipt and do not consume a second provider call. +- Generic caller-labelled application/connection creation cannot establish a provider-scoped grant. Provider-scoped setup uses the catalog operation whose provider the server resolves; default unscoped management remains available. Existing and proposed application metadata are checked independently. +- Authorization runs before profile/policy transaction locks in finish and reorder. The concurrency fixture allows a stale reorder's documented 422 while requiring the other writes to complete without lock-order errors. Approval admission preserves only the recorded unchanged policy generation and does not grant approval or waive current blocks/grants. +- The preceding Linux CI heads passed their browser shards but exposed scheduling flakes in `workspace-recovery`, `environment-cleanup-work`, and `login-cleanup-work`; their actual assertion failures remain recorded separately from the connection qualification. Fresh latest-head CI remains required. Earlier new fixture attempts also used an invalid application type and omitted a profile key; the corrected fixtures use production schemas. A profile already assigned to a gateway is already bound to that gateway's agent and cannot serve as an unrelated positive control. diff --git a/maps/agent-access-map/chat-channels.md b/maps/agent-access-map/chat-channels.md index b3351f15d8a..117b8dc625b 100644 --- a/maps/agent-access-map/chat-channels.md +++ b/maps/agent-access-map/chat-channels.md @@ -492,19 +492,19 @@ Review: `operation-reviewed`. API: `present` — `GET /api/chat-endpoints/{endpointId}/github/reviews/{reviewId}`; JSON REST. Agent access: `available` — agent REST and default native `search_api` / `call_api`. -Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. -Evidence: `source-only` — [route](../../server/src/routes/chat-channels.ts); reviewed in the working tree based on the source commit above. -Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial. -Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified. +Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. Linked task and project visibility apply to every review row in addition to endpoint and credential visibility. +Evidence: `verified` — [production-authenticated integration fixture](../../server/src/__tests__/connection-management.integration.test.ts) with real database persistence and deterministic provider responses where required. +Verification: `passed` — Actual agent-key reads return the visible review and omit or return 404 for a review linked to an inaccessible private task. Real database persistence; no live GitHub call. +Gaps: Fixture evidence does not qualify live provider behavior or an empirical model success rate. ### `get-chat-endpoints-github-reviews` API: `present` — `GET /api/chat-endpoints/{endpointId}/github/reviews`; JSON REST. Agent access: `available` — agent REST and default native `search_api` / `call_api`. -Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. -Evidence: `source-only` — [route](../../server/src/routes/chat-channels.ts); reviewed in the working tree based on the source commit above. -Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial. -Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified. +Policy: `tools:manage_connections`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. Linked task and project visibility apply to every review row in addition to endpoint and credential visibility. +Evidence: `verified` — [production-authenticated integration fixture](../../server/src/__tests__/connection-management.integration.test.ts) with real database persistence and deterministic provider responses where required. +Verification: `passed` — Actual agent-key reads return the visible review and omit or return 404 for a review linked to an inaccessible private task. Real database persistence; no live GitHub call. +Gaps: Fixture evidence does not qualify live provider behavior or an empirical model success rate. ### `get-chat-endpoints-conversations` @@ -795,10 +795,10 @@ Review: `operation-reviewed`. API: `present` — `POST /api/chat-endpoints/{endpointId}/slack/test-message`; JSON REST. Agent access: `available` — agent REST and default native `search_api` / `call_api`. -Policy: `tools:use`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. -Evidence: `verified` — [route](../../server/src/routes/chat-channels.ts); reviewed in the working tree based on the source commit above. [Authenticated fixtures](../../server/src/__tests__/connection-management.integration.test.ts) passed with database persistence and actual bearer/session middleware. -Verification: `passed` — deterministic provider fixtures / local assembled server; no live provider qualification. -Gaps: Provider fixtures do not qualify live provider setup or availability. +Policy: `tools:use`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. Test messages and identity-link invitations consume normal action-policy rate limits once before dispatch; saved request receipts prevent duplicate sends. +Evidence: `verified` — [production-authenticated integration fixture](../../server/src/__tests__/connection-management.integration.test.ts) with real database persistence and deterministic provider responses where required. +Verification: `passed` — Actual agent-key requests honor Off/Allowed policy, consume the configured one-message quota, replay a saved request without another send, and deny distinct test/invitation requests after the quota. Provider responses are fixtures. +Gaps: Fixture evidence does not qualify live provider behavior or an empirical model success rate. ### `post-chat-endpoints-slack-resume` diff --git a/maps/agent-access-map/gateways-profiles.md b/maps/agent-access-map/gateways-profiles.md index fb7ebd62b97..1f8886d7a25 100644 --- a/maps/agent-access-map/gateways-profiles.md +++ b/maps/agent-access-map/gateways-profiles.md @@ -136,19 +136,19 @@ Gaps: This individual operation has source review but no recorded HTTP verificat API: `present` — `POST /api/companies/{companyId}/tools/profiles/{profileId}/bind`; JSON REST. Agent access: `available` — agent REST and default native `search_api` / `call_api`. -Policy: `tools:manage_profiles`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. -Evidence: `verified` — [route](../../server/src/routes/tool-access.ts); [authenticated fixtures](../../server/src/__tests__/connection-management.integration.test.ts) bind a saved profile to a company project before configuring its gateway. -Verification: `passed` — local assembled server, production agent authentication and database persistence; the saved project binding participates in subsequent gateway authorization. -Gaps: Provider fixtures do not qualify live provider setup or availability. +Policy: `tools:manage_profiles`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. Resolve issue/routine/gateway targets, private parent/project access, and affected agents. Existing bindings and saved gateway profile references retain the same checks. +Evidence: `verified` — [production-authenticated integration fixture](../../server/src/__tests__/connection-management.integration.test.ts) with real database persistence and deterministic provider responses where required. +Verification: `passed` — Actual authenticated requests bind/unbind an authorized task and reject issue/routine/gateway targets outside agent configuration scope. Existing bindings and gateway profile references are rechecked on profile edits. +Gaps: Fixture evidence does not qualify live provider behavior or an empirical model success rate. ### `post-companies-tools-profiles-unbind` API: `present` — `POST /api/companies/{companyId}/tools/profiles/{profileId}/unbind`; JSON REST. Agent access: `available` — agent REST and default native `search_api` / `call_api`. -Policy: `tools:manage_profiles`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. -Evidence: `source-only` — [route](../../server/src/routes/tool-access.ts); reviewed in the working tree based on the source commit above. -Verification: `not-run` — individual operation not executed in this audit; shared authorization and representative family flows are exercised by the authenticated integration suite. Follow the route schema, inspect persistence/audit, and assert owner, scope and revoked-authority denial. -Gaps: This individual operation has source review but no recorded HTTP verification. Provider availability and live setup remain unqualified. +Policy: `tools:manage_profiles`; [shared management policy](../../doc/plans/2026-10-13-connection-api-parity.md#authorization-contract). Resolved resources and every affected target are checked; personal ownership remains the responsible user. Resolve issue/routine/gateway targets, private parent/project access, and affected agents. Existing bindings and saved gateway profile references retain the same checks. +Evidence: `verified` — [production-authenticated integration fixture](../../server/src/__tests__/connection-management.integration.test.ts) with real database persistence and deterministic provider responses where required. +Verification: `passed` — Actual authenticated requests bind/unbind an authorized task and reject issue/routine/gateway targets outside agent configuration scope. Existing bindings and gateway profile references are rechecked on profile edits. +Gaps: Fixture evidence does not qualify live provider behavior or an empirical model success rate. ## `client-connect` Capability ID: `gateways-profiles/client-connect`.