Skip to content

External Permission Sync (CONCEPT:AU-ECO.connector.external-permission-sync)

Overview

Maps a connector-reported ExternalAccess (source groups/users/markings) onto the existing AU-KG.ontology.redact-object-materialize-restricted permissioning model: groups/users become read_roles on a NodeACL, compartments become mandatory Markings, and the document's controls propagate to its chunks along HAS_CHUNK edges. No new permission store — the default-on enforce() read gate then filters retrieval for actors who lack access.

Fail-closed default (AU-P0-4). An ExternalAccess with is_public=False and empty group_ids/user_emails registers no discretionary ACL at all — sync_access only builds one when roles is non-empty — and would otherwise silently fall through to the default-allow read gate. ExternalAccess.quarantined() (is_public=False + the connector-unconfigured-acl marking, no actor holds it by default) closes that gap: an unknown/unconfigured connector document is denied until an operator reviews it and grants the marking. This is now the default the generic mcp_package/mcp_tool connectors report when a preset/instance has no acl_* fields configured, via default_external_access() — replacing the previous ExternalAccess.public() default. CONNECTOR_DEFAULT_PUBLIC=true opts a dev/local deployment back into the old public-by-default behavior (default false).

Implementation Details

  • Source Code: agent_utilities/protocols/source_connectors/permission_sync.py, agent_utilities/protocols/source_connectors/base.py (ExternalAccess.quarantined(), default_external_access(), CONNECTOR_UNCONFIGURED_MARKING)
  • Pillar: ECO