Key points
- Product team paths are canonical. Team sync and OIDC
team_mappingmirror those paths into AAA auth-team subjects. - Pipelines, reusable steps, schedules, scopes, and Knowledge Context expose a selectable
globalbucket for resources without a concrete team path. rootandgeneralare not accepted aliases forglobal.All teamsis an aggregate filter only and must never be persisted as the resource owner.- Mapped SSO teams get viewer access to the matching product team path when it exists, unless a stronger
basic_role_mappingis configured. - Team-scoped create authorization works before any resource row exists.
How it works
Create preflight that depends on manifest ownership can pass team_path or run_team_path to GET /v1/access/effective-permissions. That is how an inherited team owner creates the first schedule, trigger, external trigger, webhook source, or scope under their team without a seed resource.
Teams can own applications, configuration repository bindings, notification routes, defaults, and their own LLM, Agent, and MCP profiles.
Run ownership comes from run_team_path on the entry point, which is what drives notification lineage and Pipeline Runs grouping.
Examples
curl -s -H "Authorization: Bearer $NOPSAI_TOKEN" "$NOPSAI_URL/v1/teams" | jq '.[] | {id, path}'
curl -s -H "Authorization: Bearer $NOPSAI_TOKEN" "$NOPSAI_URL/v1/teams/$TEAM_ID/applications" | jqImplementation evidence
doc/team-resource-ownership-design.mdSeparation of Teams from Pipeline Runs and team-scoped profiles.
services/nopsai/routes.goTeam, application, defaults, and profile routes.

