Org, project, and repo settings hierarchy

How ADO Pilot resolves configuration across organization, project, and repository scopes — override semantics for scalars, additive merging for arrays.

Last updated

ADO Pilot evaluates settings at three scopes — organization, project, and repository. You set defaults at the organization level, narrow them at the project level, and lock down individual repositories where needed. The resolved configuration for any pull request is the merge of all three.

The three scopes

  • Organization — Widest scope. Acts as the default for every project and repository.
  • Project — Inherits from the organization. Overlays its own values on top.
  • Repository — Narrowest scope. Wins over project and organization for any field it sets.

Each scope can leave a field unset, in which case the next-broader scope provides the value.

Merge rules

ADO Pilot merges settings differently depending on the field type.

Scalar fields use override semantics — the most-specific scope wins.

FieldTypeDefaultScopes that take effect
enabledbooleantrueOrg / project / repo
reviewOnPushbooleantrueOrg / project / repo

If the organization sets enabled: true and a repository sets enabled: false, that repository is disabled. The repository value wins outright.

Org-only scalar fields are honoured only at the organization scope. Setting them at the project or repository level has no effect.

FieldTypeDefaultScope
allowManualInvocationbooleantrueOrg only

Exception — enabled: false short-circuits

When enabled is false at any scope, evaluation stops there. ADO Pilot does not consult narrower scopes — a project with enabled: false skips review even if a repository underneath it sets enabled: true. This makes enabled: false a clean way to pause reviews at any level without rewriting downstream configuration.

Array fields use additive semantics — patterns from every scope combine.

FieldTypeDefault
targetBranchFiltersstring array["*"]
fileExclusionPatternsstring array[]

If the organization excludes *.lock and a repository excludes *.generated.cs, both patterns are active for that repository.

How effective settings are computed

For every PR webhook, ADO Pilot resolves settings in this order:

  1. Load organization-level settings.
  2. Overlay project-level settings.
  3. Overlay repository-level settings.
  4. The result is the effective settings used for that review.

Example: a multi-project organization

Organization defaults
  enabled: true
  targetBranchFilters: ["main", "release/*"]
  fileExclusionPatterns: ["*.lock", "**/node_modules/**"]

  Project A  (no overrides)
    Backend repo
      effective enabled: true
      effective targetBranchFilters: ["main", "release/*"]
      effective fileExclusionPatterns: ["*.lock", "**/node_modules/**"]

  Project B
    targetBranchFilters: ["main", "release/v*", "hotfix/*"]
    Frontend repo
      enabled: false
      effective enabled: false   (repo wins)
      effective targetBranchFilters: ["main", "release/v*", "hotfix/*"]
      effective fileExclusionPatterns: ["*.lock", "**/node_modules/**"]

Choosing a starting point

  • Set company-wide rules at the organization level — branch filters that match your release model, exclusions for build artifacts that every team produces.
  • Use the project level for team-specific workflows — for example, a backend project that needs to exclude generated protobuf files.
  • Use the repository level for one-off cases — disabling reviews on an experimental repo, or adding exclusions for a vendored library.