<commit_before>####################################################################################
####################################################################################
#                               Angular Code Ownership                             #
####################################################################################
####################################################################################
#
#  Configuration of code ownership and review approvals for the angular/angular repo.
#
#  More info: https://docs.pullapprove.com/
#
# =========================================================
#  General rules / philosophy
# =========================================================
#
#  - We trust that people do the right thing and won't approve changes they don't feel confident reviewing
#  - We enforce that only approved PRs are merged ensuring that unreviewed code isn't accidentally merged
#  - We distribute approval rights as much as possible to help us scale better
#  - Groups have one or two global approvers groups as fallbacks:
#    - @angular/fw-global-approvers: for approving minor changes, large-scale refactorings, and emergency situations.
#    - @angular/fw-global-approvers-for-docs-only-changes: for approving minor documentation-only changes that don't require engineering review
#  - A small number of file groups have very limited number of reviewers because incorrect changes to the files they guard would have serious consequences (e.g. security, public api)
#
#  Configuration nuances:
#
#  - This configuration works in conjunction with the protected branch settings that require all changes to be made via pull requests with at least one approval.
#  - This approval can come from an appropriate codeowner, or any repo collaborator (person with write access) if the PR is authored by a codeowner.
#  - All groups whose pullapprove rules are matched will be required for overall approval.
#
#  NOTE:
#    In the case of emergency, the repo administrators which include the current angular caretaker
#    can bypass this reviewer approval requirement, this is expected as a last resort and to be
#    done exceedingly sparingly.

####################################################################################
#  GitHub usernames
####################################################################################
# See reviewer list under `required-minimum-review` group.  Team member names and
# usernames are managed there.

####################################################################################
#  Approval Groups
####################################################################################
# =========================================================
# @angular/framework-global-approvers
# =========================================================
#  Used for approving minor changes, large-scale refactorings, and in emergency situations.
#
# alxhub
# jelbourn
# josephperrott
#
# =========================================================
# @angular/framework-global-approvers-for-docs-only-changes
# =========================================================
#  Used for approving minor documentation-only changes that don't require engineering review.
#
# gkalpak
# josmar-crwdstffng
# ileil
# TeriGlover
# TMDavisGoogle

version: 3

#availability:
#  users_unavailable:
#    - username

# Meta field that goes unused by PullApprove to allow for defining aliases to be
# used throughout the config.
meta:
  # Note: Because all inactive groups start as pending, we are only checking pending and rejected active groups.
  no-groups-above-this-pending: &no-groups-above-this-pending len(groups.active.pending.exclude("required-minimum-review")) == 0
  no-groups-above-this-rejected: &no-groups-above-this-rejected len(groups.active.rejected.exclude("required-minimum-review")) == 0

  defaults: &defaults
    reviews:
      # Authors provide their approval implicitly, this approval allows for a reviewer
      # from a group not to need a review specifically for an area of the repository
      # they own.  This is coupled with the `required-minimum-review` group which requires
      # that all PRs are reviewed by at least one team member who is not the author of
      # the PR.
      author_value: 1

# turn on 'draft' support
# https://docs.pullapprove.com/config/github-api-version/
# https://developer.github.com/v3/previews/#draft-pull-requests
github_api_version: 'shadow-cat-preview'

# https://docs.pullapprove.com/config/overrides/
# Note that overrides are processed in order.
overrides:
  # For PRs which are still being worked on, either still in draft mode or indicated through WIP in
  # title or label, PullApprove stays in a pending state until its ready for review.
  - if: "draft or 'WIP' in title or 'PR state: WIP' in labels"
    status: pending
    explanation: 'Waiting to send reviews as PR is WIP'
  # Disable PullApprove on specific PRs by adding the `PullApprove: disable` label
  - if: "'PullApprove: disable' in labels"
    status: success
    explanation: "PullApprove skipped because of 'PullApprove: disable' label"
  # If no file matching based groups are active, report this pull request as failing. Most likely,
  # the PR author would need to update the PullApprove config, or create new group.
  - if: len(groups.active.exclude("required-minimum-review").exclude("global-*")) == 0 and len(groups.approved.include("global-*")) == 0
    status: failure
    explanation: 'At least one group must match this PR. Please update an existing review group, or create a new group.'
  # If any global dev-infra approval is given the status should be passing.
  - if: len(groups.approved.include("global-dev-infra-approvers")) == 1
    status: success
    explanation: 'Passing as globally approved by dev-infra'
  # If any global docs approval is given the status should be passing.
  - if: len(groups.approved.include("global-docs-approvers")) == 1
    status: success
    explanation: 'Passing as globally approved by docs'
  # If any global approval is given the status should be passing.
  - if: len(groups.approved.include("global-approvers")) == 1
    status: success
    explanation: 'Passing as globally approved by global approvers'

groups:
  # =========================================================
  #  Framework: Animations
  # =========================================================
  fw-animations:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/animations/**/{*,.*}',
          'packages/platform-browser/animations/**/{*,.*}',
          'aio/content/guide/animations.md',
          'aio/content/examples/animations/**/{*,.*}',
          'aio/content/images/guide/animations/**/{*,.*}',
          'aio/content/guide/complex-animation-sequences.md',
          'aio/content/guide/reusable-animations.md',
          'aio/content/guide/route-animations.md',
          'aio/content/guide/transition-and-triggers.md'
          ])
    reviewers:
      users:
        - alxhub
        - crisbeto
        - ~jelbourn
        - jessicajaniuk

  # =========================================================
  #  Framework: Compiler
  # =========================================================
  fw-compiler:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude('packages/compiler-cli/ngcc/*'), [
          'packages/compiler/**/{*,.*}',
          'packages/examples/compiler/**/{*,.*}',
          'aio/content/examples/angular-compiler-options/**/{*,.*}',
          'packages/compiler-cli/**/{*,.*}',
          'aio/content/guide/angular-compiler-options.md',
          'aio/content/guide/aot-compiler.md',
          'aio/content/guide/aot-metadata-errors.md',
          'aio/content/guide/template-typecheck.md'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - JoostK

  # =========================================================
  #  Framework: Compiler / ngcc
  # =========================================================
  fw-ngcc:
    <<: *defaults
    conditions:
      - files.include('packages/compiler-cli/ngcc/*')
    reviewers:
      users:
        - alxhub
        - gkalpak
        - JoostK

  # =========================================================
  #  Framework: Migrations
  # =========================================================
  fw-migrations:
    <<: *defaults
    conditions:
      - files.include("packages/core/schematics/*")
    reviewers:
      users:
        - alxhub
        - crisbeto
        - devversion
        - dylhunn

  # =========================================================
  #  Framework: Core
  # =========================================================
  fw-core:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude("packages/core/schematics/*"), [
          'packages/core/**/{*,.*}',
          'packages/examples/core/**/{*,.*}',
          'packages/platform-browser/**/{*,.*}',
          'packages/examples/platform-browser/**/{*,.*}',
          'packages/platform-browser-dynamic/**/{*,.*}',
          'packages/docs/**/{*,.*}',
          'aio/content/guide/accessibility.md',
          'aio/content/examples/accessibility/**/{*,.*}',
          'aio/content/guide/architecture-components.md',
          'aio/content/guide/architecture-modules.md',
          'aio/content/guide/architecture-next-steps.md',
          'aio/content/guide/architecture-services.md',
          'aio/content/guide/architecture.md',
          'aio/content/examples/architecture/**/{*,.*}',
          'aio/content/images/guide/architecture/**/{*,.*}',
          'aio/content/guide/attribute-directives.md',
          'aio/content/examples/attribute-directives/**/{*,.*}',
          'aio/content/images/guide/attribute-directives/**/{*,.*}',
          'aio/content/guide/bootstrapping.md',
          'aio/content/examples/bootstrapping/**/{*,.*}',
          'aio/content/guide/change-detection.md',
          'aio/content/guide/change-detection-zone-pollution.md',
          'aio/content/guide/change-detection-slow-computations.md',
          'aio/content/guide/change-detection-skipping-subtrees.md',
          'aio/content/images/guide/change-detection/**/{*,.*}',
          'aio/content/guide/class-binding.md',
          'aio/content/guide/cheatsheet.md',
          'aio/content/guide/component-interaction.md',
          'aio/content/examples/component-interaction/**/{*,.*}',
          'aio/content/images/guide/component-interaction/**/{*,.*}',
          'aio/content/guide/component-overview.md',
          'aio/content/examples/component-overview/**/{*,.*}',
          'aio/content/guide/component-styles.md',
          'aio/content/guide/developer-guide-overview.md',
          'aio/content/guide/view-encapsulation.md',
          'aio/content/examples/component-styles/**/{*,.*}',
          'aio/content/examples/content-projection/**/{*,.*}',
          'aio/content/guide/content-projection.md',
          'aio/content/guide/dependency-injection.md',
          'aio/content/examples/dependency-injection/**/{*,.*}',
          'aio/content/images/guide/dependency-injection/**/{*,.*}',
          'aio/content/guide/dependency-injection-in-action.md',
          'aio/content/examples/dependency-injection-in-action/**/{*,.*}',
          'aio/content/images/guide/dependency-injection-in-action/**/{*,.*}',
          'aio/content/guide/dependency-injection-navtree.md',
          'aio/content/guide/dependency-injection-providers.md',
          'aio/content/guide/lightweight-injection-tokens.md',
          'aio/content/guide/displaying-data.md',
          'aio/content/examples/displaying-data/**/{*,.*}',
          'aio/content/images/guide/displaying-data/**/{*,.*}',
          'aio/content/guide/dynamic-component-loader.md',
          'aio/content/examples/dynamic-component-loader/**/{*,.*}',
          'aio/content/images/guide/dynamic-component-loader/**/{*,.*}',
          'aio/content/guide/example-apps-list.md',
          'aio/content/guide/entry-components.md',
          'aio/content/guide/feature-modules.md',
          'aio/content/examples/feature-modules/**/{*,.*}',
          'aio/content/images/guide/feature-modules/**/{*,.*}',
          'aio/content/guide/frequent-ngmodules.md',
          'aio/content/images/guide/frequent-ngmodules/**/{*,.*}',
          'aio/content/guide/hierarchical-dependency-injection.md',
          'aio/content/examples/hierarchical-dependency-injection/**/{*,.*}',
          'aio/content/examples/providers-viewproviders/**/{*,.*}',
          'aio/content/examples/resolution-modifiers/**/{*,.*}',
          'aio/content/guide/lazy-loading-ngmodules.md',
          'aio/content/examples/lazy-loading-ngmodules/**/{*,.*}',
          'aio/content/images/guide/lazy-loading-ngmodules/**/{*,.*}',
          'aio/content/guide/lifecycle-hooks.md',
          'aio/content/examples/lifecycle-hooks/**/{*,.*}',
          'aio/content/images/guide/lifecycle-hooks/**/{*,.*}',
          'aio/content/examples/ngcontainer/**/{*,.*}',
          'aio/content/guide/ngmodules.md',
          'aio/content/examples/ngmodules/**/{*,.*}',
          'aio/content/guide/ngmodule-api.md',
          'aio/content/guide/ngmodule-faq.md',
          'aio/content/guide/ngmodule-vs-jsmodule.md',
          'aio/content/guide/module-types.md',
          'aio/content/guide/template-overview.md',
          'aio/content/guide/template-syntax.md',
          'aio/content/guide/built-in-template-functions.md',
          'aio/content/examples/built-in-template-functions/**/{*,.*}',
          'aio/content/guide/event-binding.md',
          'aio/content/guide/event-binding-concepts.md',
          'aio/content/examples/event-binding/**/{*,.*}',
          'aio/content/guide/interpolation.md',
          'aio/content/examples/interpolation/**/{*,.*}',
          'aio/content/examples/template-syntax/**/{*,.*}',
          'aio/content/images/guide/template-syntax/**/{*,.*}',
          'aio/content/guide/binding-overview.md',
          'aio/content/guide/binding-syntax.md',
          'aio/content/examples/binding-syntax/**/{*,.*}',
          'aio/content/guide/property-binding.md',
          'aio/content/examples/property-binding/**/{*,.*}',
          'aio/content/guide/property-binding-best-practices.md',
          'aio/content/guide/attribute-binding.md',
          'aio/content/examples/attribute-binding/**/{*,.*}',
          'aio/content/guide/two-way-binding.md',
          'aio/content/examples/two-way-binding/**/{*,.*}',
          'aio/content/guide/built-in-directives.md',
          'aio/content/examples/built-in-directives/**/{*,.*}',
          'aio/content/images/guide/built-in-directives/**/{*,.*}',
          'aio/content/guide/template-reference-variables.md',
          'aio/content/examples/template-reference-variables/**/{*,.*}',
          'aio/content/guide/inputs-outputs.md',
          'aio/content/examples/inputs-outputs/**/{*,.*}',
          'aio/content/images/guide/inputs-outputs/**/{*,.*}',
          'aio/content/guide/understanding-template-expr-overview.md',
          'aio/content/guide/template-expression-operators.md',
          'aio/content/examples/template-expression-operators/**/{*,.*}',
          'aio/content/guide/pipes.md',
          'aio/content/guide/pipes-custom-data-trans.md',
          'aio/content/guide/pipes-overview.md',
          'aio/content/guide/pipes-transform-data.md',
          'aio/content/guide/pipe-template.md',
          'aio/content/examples/pipes/**/{*,.*}',
          'aio/content/images/guide/pipes/**/{*,.*}',
          'aio/content/guide/providers.md',
          'aio/content/examples/providers/**/{*,.*}',
          'aio/content/images/guide/providers/**/{*,.*}',
          'aio/content/guide/singleton-services.md',
          'aio/content/guide/sharing-ngmodules.md',
          'aio/content/guide/standalone-components.md',
          'aio/content/guide/structural-directives.md',
          'aio/content/examples/structural-directives/**/{*,.*}',
          'aio/content/guide/svg-in-templates.md',
          'aio/content/guide/style-precedence.md',
          'aio/content/images/guide/structural-directives/**/{*,.*}',
          'aio/content/guide/template-statements.md',
          'aio/content/guide/understanding-angular-overview.md',
          'aio/content/guide/user-input.md',
          'aio/content/examples/user-input/**/{*,.*}',
          'aio/content/images/guide/user-input/**/{*,.*}',
          'aio/content/guide/view-encapsulation.md',
          'aio/content/examples/view-encapsulation/**/{*,.*}',
          'aio/content/images/guide/view-encapsulation/**/{*,.*}',
          'aio/content/special-elements/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Common
  # =========================================================
  fw-common:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude("packages/common/http/*"), [
          'packages/common/**/{*,.*}',
          'packages/examples/common/**/{*,.*}',
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Http
  # =========================================================
  fw-http:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/common/http/**/{*,.*}',
          'packages/examples/http/**/{*,.*}',
          'aio/content/guide/http.md',
          'aio/content/examples/http/**/{*,.*}',
          'aio/content/images/guide/http/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Elements
  # =========================================================
  fw-elements:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/elements/**/{*,.*}',
          'aio/content/examples/elements/**/{*,.*}',
          'aio/content/images/guide/elements/**/{*,.*}',
          'aio/content/guide/elements.md'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - andrewseguin
        - atscott
        - dylhunn
        - gkalpak
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Forms
  # =========================================================
  fw-forms:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/forms/**/{*,.*}',
          'packages/examples/forms/**/{*,.*}',
          'aio/content/guide/forms.md',
          'aio/content/examples/forms/**/{*,.*}',
          'aio/content/images/guide/forms/**/{*,.*}',
          'aio/content/guide/forms-overview.md',
          'aio/content/examples/forms-overview/**/{*,.*}',
          'aio/content/images/guide/forms-overview/**/{*,.*}',
          'aio/content/guide/form-validation.md',
          'aio/content/guide/typed-forms.md',
          'aio/content/examples/form-validation/**/{*,.*}',
          'aio/content/images/guide/form-validation/**/{*,.*}',
          'aio/content/guide/dynamic-form.md',
          'aio/content/examples/dynamic-form/**/{*,.*}',
          'aio/content/images/guide/dynamic-form/**/{*,.*}',
          'aio/content/guide/reactive-forms.md',
          'aio/content/examples/reactive-forms/**/{*,.*}',
          'aio/content/images/guide/reactive-forms/**/{*,.*}'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - dylhunn

  # =========================================================
  #  Framework: i18n
  # =========================================================
  fw-i18n:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/core/src/i18n/**/{*,.*}',
          'packages/core/src/render3/i18n/**/{*,.*}',
          'packages/core/src/render3/instructions/i18n.ts',
          'packages/core/src/render3/interfaces/i18n.ts',
          'packages/common/locales/**/{*,.*}',
          'packages/common/src/i18n/**/{*,.*}',
          'packages/common/src/pipes/date_pipe.ts',
          'packages/common/src/pipes/i18n_plural_pipe.ts',
          'packages/common/src/pipes/i18n_select_pipe.ts',
          'packages/common/src/pipes/number_pipe.ts',
          'packages/compiler/src/i18n/**/{*,.*}',
          'packages/compiler/src/render3/view/i18n/**/{*,.*}',
          'packages/compiler-cli/src/extract_i18n.ts',
          'packages/localize/**/{*,.*}',
          'aio/content/guide/i18n-overview.md',
          'aio/content/guide/i18n-common-overview.md',
          'aio/content/guide/i18n-common-add-package.md',
          'aio/content/guide/i18n-common-locale-id.md',
          'aio/content/guide/i18n-common-format-data-locale.md',
          'aio/content/guide/i18n-common-prepare.md',
          'aio/content/guide/i18n-common-translation-files.md',
          'aio/content/guide/i18n-common-merge.md',
          'aio/content/guide/i18n-common-deploy.md',
          'aio/content/guide/i18n-example.md',
          'aio/content/guide/i18n-optional-overview.md',
          'aio/content/guide/i18n-optional-manual-runtime-locale.md',
          'aio/content/guide/i18n-optional-import-global-variants.md',
          'aio/content/guide/i18n-optional-manage-marked-text.md',
          'aio/content/examples/i18n/**/{*,.*}'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - dgp1130

  # =========================================================
  #  Framework: Platform Server
  # =========================================================
  fw-platform-server:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/platform-server/**/{*,.*}',
          'aio/content/guide/prerendering.md',
          'aio/content/guide/universal.md',
          'aio/content/examples/universal/**/{*,.*}'
          ])
    reviewers:
      users:
        - alan-agius4
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Router
  # =========================================================
  fw-router:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/router/**/{*,.*}',
          'packages/examples/router/**/{*,.*}',
          'aio/content/guide/router.md',
          'aio/content/guide/router-tutorial.md',
          'aio/content/guide/router-tutorial-toh.md',
          'aio/content/guide/routing-overview.md',
          'aio/content/guide/router-reference.md',
          'aio/content/examples/router-tutorial/**/{*,.*}',
          'aio/content/examples/router/**/{*,.*}',
          'aio/content/images/guide/router/**/{*,.*}',
          'aio/content/guide/routing-with-urlmatcher.md',
          'aio/content/examples/routing-with-urlmatcher/**/{*,.*}'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - atscott

  # =========================================================
  #  Framework: Service Worker
  # =========================================================
  fw-service-worker:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/service-worker/**/{*,.*}',
          'packages/examples/service-worker/**/{*,.*}',
          'aio/content/guide/service-worker-getting-started.md',
          'aio/content/examples/service-worker-getting-started/**/{*,.*}',
          'aio/content/guide/app-shell.md',
          'aio/content/guide/service-worker-communications.md',
          'aio/content/guide/service-worker-config.md',
          'aio/content/guide/service-worker-devops.md',
          'aio/content/guide/service-worker-intro.md',
          'aio/content/guide/service-worker-notifications.md',
          'aio/content/images/guide/service-worker/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - gkalpak

  # =========================================================
  #  Framework: Upgrade
  # =========================================================
  fw-upgrade:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/upgrade/**/{*,.*}',
          'packages/common/upgrade/**/{*,.*}',
          'packages/examples/upgrade/**/{*,.*}',
          'aio/content/guide/upgrade.md',
          'aio/content/examples/upgrade-lazy-load-ajs/**/{*,.*}',
          'aio/content/examples/upgrade-module/**/{*,.*}',
          'aio/content/images/guide/upgrade/**/{*,.*}',
          'aio/content/examples/upgrade-phonecat-1-typescript/**/{*,.*}',
          'aio/content/examples/upgrade-phonecat-2-hybrid/**/{*,.*}',
          'aio/content/examples/upgrade-phonecat-3-final/**/{*,.*}',
          'aio/content/guide/upgrade-performance.md',
          'aio/content/guide/upgrade-setup.md',
          'aio/content/guide/ajs-quick-reference.md',
          'aio/content/examples/ajs-quick-reference/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - gkalpak
        - jessicajaniuk

  # =========================================================
  #  Framework: Testing
  # =========================================================
  fw-testing:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude('packages/compiler-cli/*').exclude('packages/language-service/*').exclude('packages/service-worker/*'), [
          'packages/**/testing/**/{*,.*}',
          'aio/content/guide/testing.md',
          'aio/content/guide/test-debugging.md',
          'aio/content/guide/testing-attribute-directives.md',
          'aio/content/guide/testing-code-coverage.md',
          'aio/content/guide/testing-components-basics.md',
          'aio/content/guide/testing-components-scenarios.md',
          'aio/content/guide/testing-pipes.md',
          'aio/content/guide/testing-services.md',
          'aio/content/guide/testing-utility-apis.md',
          'aio/content/examples/testing/**/{*,.*}',
          'aio/content/images/guide/testing/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Benchmarks
  # =========================================================
  fw-benchmarks:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'modules/benchmarks/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Playground
  # =========================================================
  fw-playground:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'modules/playground/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Security
  # =========================================================
  fw-security:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/core/src/sanitization/**/{*,.*}',
          'packages/core/test/linker/security_integration_spec.ts',
          'packages/compiler/src/schema/**/{*,.*}',
          'packages/platform-browser/src/security/**/{*,.*}',
          'packages/tsconfig-tsec-base.json',
          'packages/tsec-exemption.json',
          'tools/tsec.bzl',
          'aio/content/guide/security.md',
          'aio/content/examples/security/**/{*,.*}',
          'aio/content/images/guide/security/**/{*,.*}',
          ])
    reviewers:
      users:
        - alxhub
        - jelbourn
        - josephperrott
        - pkozlowski-opensource
    reviews:
      request: -1 # request reviews from everyone
      required: 2 # require at least 2 approvals
      reviewed_for: required

  # =========================================================
  #  Bazel
  # =========================================================
  bazel:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/bazel/**/{*,.*}',
          ])
    reviewers:
      users:
        - devversion
        - josephperrott

  # =========================================================
  #  Language Service
  # =========================================================
  language-service:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/language-service/**/{*,.*}',
          'aio/content/guide/language-service.md',
          'aio/content/images/guide/language-service/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - atscott

  # =========================================================
  #  zone.js
  # =========================================================
  zone-js:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/zone.js/**/{*,.*}',
          'aio/content/guide/zone.md'
          ])
    reviewers:
      users:
        - JiaLiPassion

  # =========================================================
  #  in-memory-web-api
  # =========================================================
  in-memory-web-api:
    conditions:
      - >
        contains_any_globs(files, [
          'packages/misc/angular-in-memory-web-api/**/{*,.*}',
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - crisbeto
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Benchpress
  # =========================================================
  benchpress:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/benchpress/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - josephperrott

  # =========================================================
  #  Integration Tests
  # =========================================================
  integration-tests:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'integration/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - josephperrott
        - pkozlowski-opensource

  # =========================================================
  #  Docs: Contributors
  # =========================================================
  docs-contributors:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/marketing/contributors.json',
          'aio/content/images/bios/**/{*,.*}',
          ])
    reviewers:
      users:
        - MarkTechson
        - mgechev
        - twerske

  # =========================================================
  #  Docs: Gettings Started & Tutorial
  # =========================================================
  docs-getting-started-and-tutorial:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/guide/setup-local.md',
          'aio/content/images/guide/setup-local/**/{*,.*}',
          'aio/content/tutorial/**/{*,.*}',
          'aio/content/images/guide/toh/**/{*,.*}',
          'aio/content/examples/toh-pt0/**/{*,.*}',
          'aio/content/examples/toh-pt1/**/{*,.*}',
          'aio/content/examples/toh-pt2/**/{*,.*}',
          'aio/content/examples/toh-pt3/**/{*,.*}',
          'aio/content/examples/toh-pt4/**/{*,.*}',
          'aio/content/examples/toh-pt5/**/{*,.*}',
          'aio/content/examples/toh-pt6/**/{*,.*}',
          'aio/content/examples/getting-started-v0/**/{*,.*}',
          'aio/content/examples/getting-started/**/{*,.*}',
          'aio/content/start/**/{*,.*}',
          'aio/content/images/guide/start/**/{*,.*}',
          'aio/content/examples/what-is-angular/**/{*,.*}',
          'aio/content/guide/what-is-angular.md'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - jessicajaniuk

  # =========================================================
  #  Docs: Marketing
  # =========================================================
  docs-marketing:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude("aio/content/marketing/contributors.json"), [
          'aio/content/guide/roadmap.md',
          'aio/content/marketing/**/{*,.*}',
          'aio/content/images/marketing/**/{*,.*}',
          'aio/content/file-not-found.md',
          'aio/content/license.md',
          'aio/content/navigation.json'
          ])
    reviewers:
      users:
        - MarkTechson
        - mgechev
        - twerske

  # =========================================================
  #  Docs: Observables
  # =========================================================
  docs-observables:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/guide/observables.md',
          'aio/content/examples/observables/**/{*,.*}',
          'aio/content/guide/comparing-observables.md',
          'aio/content/examples/comparing-observables/**/{*,.*}',
          'aio/content/guide/observables-in-angular.md',
          'aio/content/examples/observables-in-angular/**/{*,.*}',
          'aio/content/guide/practical-observable-usage.md',
          'aio/content/examples/practical-observable-usage/**/{*,.*}',
          'aio/content/guide/rx-library.md',
          'aio/content/examples/rx-library/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - atscott
        - dylhunn

  # =========================================================
  #  Docs: Packaging, Tooling, Releasing
  # =========================================================
  docs-packaging-and-releasing:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'docs/PUBLIC_API.md',
          'docs/RELEASE_SCHEDULE.md',
          'aio/content/guide/npm-packages.md',
          'aio/content/guide/browser-support.md',
          'aio/content/guide/releases.md',
          'aio/content/guide/updating.md',
          'aio/content/guide/deprecations.md',
          'aio/content/guide/migration-legacy-message-id.md',
          'aio/content/examples/deprecation-guide/**/{*,.*}',
          'aio/content/guide/migration-renderer.md',
          'aio/content/guide/migration-undecorated-classes.md',
          'aio/content/guide/migration-dynamic-flag.md',
          'aio/content/guide/migration-injectable.md',
          'aio/content/guide/migration-localize.md',
          'aio/content/guide/migration-module-with-providers.md',
          'aio/content/guide/static-query-migration.md',
          'aio/content/guide/update-to-latest-version.md',
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - jelbourn

  # =========================================================
  #  Docs: Angular DevTools
  # =========================================================
  docs-devtools:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/guide/devtools.md',
          'aio/content/images/guide/devtools/**/{*,.*}'
          ])
    reviewers:
      users:
        - MarkTechson
        - mgechev
        - twerske

  # =========================================================
  #  Tooling: Compiler API shared with Angular CLI
  #
  #  Changing this API might break Angular CLI, so we require
  #  the CLI team to approve changes here.
  # =========================================================
  tooling-cli-shared-api:
    conditions:
      - >
        contains_any_globs(files, [
          'packages/compiler-cli/private/tooling.ts',
          'packages/localize/tools/index.ts'
        ])
    reviewers:
      users:
        - alan-agius4
        - clydin
        - dgp1130
    reviews:
      request: -1 # request reviews from everyone
      required: 2 # require at least 2 approvals
      reviewed_for: required

  # =========================================================
  #  Docs: CLI
  # =========================================================
  docs-cli:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/cli/**/{*,.*}',
          'aio/content/guide/typescript-configuration.md',
          'aio/content/examples/setup/**/{*,.*}',
          'aio/content/guide/build.md',
          'aio/content/images/guide/build/**/{*,.*}',
          'aio/content/images/guide/cli/**/{*,.*}',
          'aio/content/guide/cli-builder.md',
          'aio/content/examples/cli-builder/**/{*,.*}',
          'aio/content/guide/deployment.md',
          'aio/content/images/guide/deployment/**/{*,.*}',
          'aio/content/guide/file-structure.md',
          'aio/content/guide/ivy.md',
          'aio/content/guide/strict-mode.md',
          'aio/content/guide/web-worker.md',
          'aio/content/guide/workspace-config.md',
          'aio/content/guide/migration-solution-style-tsconfig.md',
          'aio/content/guide/migration-update-libraries-tslib.md',
          ])
    reviewers:
      users:
        - alan-agius4
        - clydin
        - dgp1130
        - mgechev

  # =========================================================
  #  Docs: CLI Libraries
  # =========================================================
  docs-libraries:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/examples/angular-linker-plugin/webpack.config.mjs',
          'aio/content/guide/creating-libraries.md',
          'aio/content/guide/libraries.md',
          'aio/content/guide/using-libraries.md',
          'aio/content/guide/angular-package-format.md'
          ])
    reviewers:
      users:
        - alan-agius4
        - alxhub
        - mgechev

  # =========================================================
  #  Docs: Schematics
  # =========================================================
  docs-schematics:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/guide/schematics.md',
          'aio/content/guide/schematics-authoring.md',
          'aio/content/guide/schematics-for-libraries.md',
          'aio/content/images/guide/schematics/**/{*,.*}',
          'aio/content/examples/schematics-for-libraries/**/{*,.*}'
          ])
    reviewers:
      users:
        - alan-agius4
        - dylhunn
        - mgechev

  # =========================================================
  #  Docs-infra
  # =========================================================
  docs-infra:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/{*,.*}',
          'aio/aio-builds-setup/**/{*,.*}',
          'aio/content/cli-src/**/{*,.*}',
          'aio/content/examples/{*,.*}',
          'aio/scripts/**/{*,.*}',
          'aio/src/**/{*,.*}',
          'aio/tests/**/{*,.*}',
          'aio/tools/**/{*,.*}',
          'aio/tools/examples/shared/boilerplate/cli/.vscode/**/{*,.*}',
          'aio/content/images/guide/contributors-guide/**/{*,.*}',
          'aio/content/guide/contributors-guide-overview.md',
          'aio/content/guide/docs-style-guide.md',
          'aio/content/examples/docs-style-guide/**/{*,.*}',
          'aio/content/images/guide/docs-style-guide/**/{*,.*}',
          'aio/content/guide/localized-documentation.md',
          'aio/content/guide/localizing-angular.md',
          'aio/content/guide/reviewing-content.md',
          'aio/content/guide/updating-content-github-ui.md',
          'aio/content/guide/updating-search-keywords.md',
          ])
    reviewers:
      users:
        - alxhub
        - gkalpak
        - josephperrott

  # =========================================================
  #  Angular DevTools
  # =========================================================<commit_msg>build: Add Jessica and <NAME> to docs-infra (#46843)<commit_after>####################################################################################
####################################################################################
#                               Angular Code Ownership                             #
####################################################################################
####################################################################################
#
#  Configuration of code ownership and review approvals for the angular/angular repo.
#
#  More info: https://docs.pullapprove.com/
#
# =========================================================
#  General rules / philosophy
# =========================================================
#
#  - We trust that people do the right thing and won't approve changes they don't feel confident reviewing
#  - We enforce that only approved PRs are merged ensuring that unreviewed code isn't accidentally merged
#  - We distribute approval rights as much as possible to help us scale better
#  - Groups have one or two global approvers groups as fallbacks:
#    - @angular/fw-global-approvers: for approving minor changes, large-scale refactorings, and emergency situations.
#    - @angular/fw-global-approvers-for-docs-only-changes: for approving minor documentation-only changes that don't require engineering review
#  - A small number of file groups have very limited number of reviewers because incorrect changes to the files they guard would have serious consequences (e.g. security, public api)
#
#  Configuration nuances:
#
#  - This configuration works in conjunction with the protected branch settings that require all changes to be made via pull requests with at least one approval.
#  - This approval can come from an appropriate codeowner, or any repo collaborator (person with write access) if the PR is authored by a codeowner.
#  - All groups whose pullapprove rules are matched will be required for overall approval.
#
#  NOTE:
#    In the case of emergency, the repo administrators which include the current angular caretaker
#    can bypass this reviewer approval requirement, this is expected as a last resort and to be
#    done exceedingly sparingly.

####################################################################################
#  GitHub usernames
####################################################################################
# See reviewer list under `required-minimum-review` group.  Team member names and
# usernames are managed there.

####################################################################################
#  Approval Groups
####################################################################################
# =========================================================
# @angular/framework-global-approvers
# =========================================================
#  Used for approving minor changes, large-scale refactorings, and in emergency situations.
#
# alxhub
# jelbourn
# josephperrott
#
# =========================================================
# @angular/framework-global-approvers-for-docs-only-changes
# =========================================================
#  Used for approving minor documentation-only changes that don't require engineering review.
#
# gkalpak
# josmar-crwdstffng
# ileil
# TeriGlover
# TMDavisGoogle

version: 3

#availability:
#  users_unavailable:
#    - username

# Meta field that goes unused by PullApprove to allow for defining aliases to be
# used throughout the config.
meta:
  # Note: Because all inactive groups start as pending, we are only checking pending and rejected active groups.
  no-groups-above-this-pending: &no-groups-above-this-pending len(groups.active.pending.exclude("required-minimum-review")) == 0
  no-groups-above-this-rejected: &no-groups-above-this-rejected len(groups.active.rejected.exclude("required-minimum-review")) == 0

  defaults: &defaults
    reviews:
      # Authors provide their approval implicitly, this approval allows for a reviewer
      # from a group not to need a review specifically for an area of the repository
      # they own.  This is coupled with the `required-minimum-review` group which requires
      # that all PRs are reviewed by at least one team member who is not the author of
      # the PR.
      author_value: 1

# turn on 'draft' support
# https://docs.pullapprove.com/config/github-api-version/
# https://developer.github.com/v3/previews/#draft-pull-requests
github_api_version: 'shadow-cat-preview'

# https://docs.pullapprove.com/config/overrides/
# Note that overrides are processed in order.
overrides:
  # For PRs which are still being worked on, either still in draft mode or indicated through WIP in
  # title or label, PullApprove stays in a pending state until its ready for review.
  - if: "draft or 'WIP' in title or 'PR state: WIP' in labels"
    status: pending
    explanation: 'Waiting to send reviews as PR is WIP'
  # Disable PullApprove on specific PRs by adding the `PullApprove: disable` label
  - if: "'PullApprove: disable' in labels"
    status: success
    explanation: "PullApprove skipped because of 'PullApprove: disable' label"
  # If no file matching based groups are active, report this pull request as failing. Most likely,
  # the PR author would need to update the PullApprove config, or create new group.
  - if: len(groups.active.exclude("required-minimum-review").exclude("global-*")) == 0 and len(groups.approved.include("global-*")) == 0
    status: failure
    explanation: 'At least one group must match this PR. Please update an existing review group, or create a new group.'
  # If any global dev-infra approval is given the status should be passing.
  - if: len(groups.approved.include("global-dev-infra-approvers")) == 1
    status: success
    explanation: 'Passing as globally approved by dev-infra'
  # If any global docs approval is given the status should be passing.
  - if: len(groups.approved.include("global-docs-approvers")) == 1
    status: success
    explanation: 'Passing as globally approved by docs'
  # If any global approval is given the status should be passing.
  - if: len(groups.approved.include("global-approvers")) == 1
    status: success
    explanation: 'Passing as globally approved by global approvers'

groups:
  # =========================================================
  #  Framework: Animations
  # =========================================================
  fw-animations:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/animations/**/{*,.*}',
          'packages/platform-browser/animations/**/{*,.*}',
          'aio/content/guide/animations.md',
          'aio/content/examples/animations/**/{*,.*}',
          'aio/content/images/guide/animations/**/{*,.*}',
          'aio/content/guide/complex-animation-sequences.md',
          'aio/content/guide/reusable-animations.md',
          'aio/content/guide/route-animations.md',
          'aio/content/guide/transition-and-triggers.md'
          ])
    reviewers:
      users:
        - alxhub
        - crisbeto
        - ~jelbourn
        - jessicajaniuk

  # =========================================================
  #  Framework: Compiler
  # =========================================================
  fw-compiler:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude('packages/compiler-cli/ngcc/*'), [
          'packages/compiler/**/{*,.*}',
          'packages/examples/compiler/**/{*,.*}',
          'aio/content/examples/angular-compiler-options/**/{*,.*}',
          'packages/compiler-cli/**/{*,.*}',
          'aio/content/guide/angular-compiler-options.md',
          'aio/content/guide/aot-compiler.md',
          'aio/content/guide/aot-metadata-errors.md',
          'aio/content/guide/template-typecheck.md'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - JoostK

  # =========================================================
  #  Framework: Compiler / ngcc
  # =========================================================
  fw-ngcc:
    <<: *defaults
    conditions:
      - files.include('packages/compiler-cli/ngcc/*')
    reviewers:
      users:
        - alxhub
        - gkalpak
        - JoostK

  # =========================================================
  #  Framework: Migrations
  # =========================================================
  fw-migrations:
    <<: *defaults
    conditions:
      - files.include("packages/core/schematics/*")
    reviewers:
      users:
        - alxhub
        - crisbeto
        - devversion
        - dylhunn

  # =========================================================
  #  Framework: Core
  # =========================================================
  fw-core:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude("packages/core/schematics/*"), [
          'packages/core/**/{*,.*}',
          'packages/examples/core/**/{*,.*}',
          'packages/platform-browser/**/{*,.*}',
          'packages/examples/platform-browser/**/{*,.*}',
          'packages/platform-browser-dynamic/**/{*,.*}',
          'packages/docs/**/{*,.*}',
          'aio/content/guide/accessibility.md',
          'aio/content/examples/accessibility/**/{*,.*}',
          'aio/content/guide/architecture-components.md',
          'aio/content/guide/architecture-modules.md',
          'aio/content/guide/architecture-next-steps.md',
          'aio/content/guide/architecture-services.md',
          'aio/content/guide/architecture.md',
          'aio/content/examples/architecture/**/{*,.*}',
          'aio/content/images/guide/architecture/**/{*,.*}',
          'aio/content/guide/attribute-directives.md',
          'aio/content/examples/attribute-directives/**/{*,.*}',
          'aio/content/images/guide/attribute-directives/**/{*,.*}',
          'aio/content/guide/bootstrapping.md',
          'aio/content/examples/bootstrapping/**/{*,.*}',
          'aio/content/guide/change-detection.md',
          'aio/content/guide/change-detection-zone-pollution.md',
          'aio/content/guide/change-detection-slow-computations.md',
          'aio/content/guide/change-detection-skipping-subtrees.md',
          'aio/content/images/guide/change-detection/**/{*,.*}',
          'aio/content/guide/class-binding.md',
          'aio/content/guide/cheatsheet.md',
          'aio/content/guide/component-interaction.md',
          'aio/content/examples/component-interaction/**/{*,.*}',
          'aio/content/images/guide/component-interaction/**/{*,.*}',
          'aio/content/guide/component-overview.md',
          'aio/content/examples/component-overview/**/{*,.*}',
          'aio/content/guide/component-styles.md',
          'aio/content/guide/developer-guide-overview.md',
          'aio/content/guide/view-encapsulation.md',
          'aio/content/examples/component-styles/**/{*,.*}',
          'aio/content/examples/content-projection/**/{*,.*}',
          'aio/content/guide/content-projection.md',
          'aio/content/guide/dependency-injection.md',
          'aio/content/examples/dependency-injection/**/{*,.*}',
          'aio/content/images/guide/dependency-injection/**/{*,.*}',
          'aio/content/guide/dependency-injection-in-action.md',
          'aio/content/examples/dependency-injection-in-action/**/{*,.*}',
          'aio/content/images/guide/dependency-injection-in-action/**/{*,.*}',
          'aio/content/guide/dependency-injection-navtree.md',
          'aio/content/guide/dependency-injection-providers.md',
          'aio/content/guide/lightweight-injection-tokens.md',
          'aio/content/guide/displaying-data.md',
          'aio/content/examples/displaying-data/**/{*,.*}',
          'aio/content/images/guide/displaying-data/**/{*,.*}',
          'aio/content/guide/dynamic-component-loader.md',
          'aio/content/examples/dynamic-component-loader/**/{*,.*}',
          'aio/content/images/guide/dynamic-component-loader/**/{*,.*}',
          'aio/content/guide/example-apps-list.md',
          'aio/content/guide/entry-components.md',
          'aio/content/guide/feature-modules.md',
          'aio/content/examples/feature-modules/**/{*,.*}',
          'aio/content/images/guide/feature-modules/**/{*,.*}',
          'aio/content/guide/frequent-ngmodules.md',
          'aio/content/images/guide/frequent-ngmodules/**/{*,.*}',
          'aio/content/guide/hierarchical-dependency-injection.md',
          'aio/content/examples/hierarchical-dependency-injection/**/{*,.*}',
          'aio/content/examples/providers-viewproviders/**/{*,.*}',
          'aio/content/examples/resolution-modifiers/**/{*,.*}',
          'aio/content/guide/lazy-loading-ngmodules.md',
          'aio/content/examples/lazy-loading-ngmodules/**/{*,.*}',
          'aio/content/images/guide/lazy-loading-ngmodules/**/{*,.*}',
          'aio/content/guide/lifecycle-hooks.md',
          'aio/content/examples/lifecycle-hooks/**/{*,.*}',
          'aio/content/images/guide/lifecycle-hooks/**/{*,.*}',
          'aio/content/examples/ngcontainer/**/{*,.*}',
          'aio/content/guide/ngmodules.md',
          'aio/content/examples/ngmodules/**/{*,.*}',
          'aio/content/guide/ngmodule-api.md',
          'aio/content/guide/ngmodule-faq.md',
          'aio/content/guide/ngmodule-vs-jsmodule.md',
          'aio/content/guide/module-types.md',
          'aio/content/guide/template-overview.md',
          'aio/content/guide/template-syntax.md',
          'aio/content/guide/built-in-template-functions.md',
          'aio/content/examples/built-in-template-functions/**/{*,.*}',
          'aio/content/guide/event-binding.md',
          'aio/content/guide/event-binding-concepts.md',
          'aio/content/examples/event-binding/**/{*,.*}',
          'aio/content/guide/interpolation.md',
          'aio/content/examples/interpolation/**/{*,.*}',
          'aio/content/examples/template-syntax/**/{*,.*}',
          'aio/content/images/guide/template-syntax/**/{*,.*}',
          'aio/content/guide/binding-overview.md',
          'aio/content/guide/binding-syntax.md',
          'aio/content/examples/binding-syntax/**/{*,.*}',
          'aio/content/guide/property-binding.md',
          'aio/content/examples/property-binding/**/{*,.*}',
          'aio/content/guide/property-binding-best-practices.md',
          'aio/content/guide/attribute-binding.md',
          'aio/content/examples/attribute-binding/**/{*,.*}',
          'aio/content/guide/two-way-binding.md',
          'aio/content/examples/two-way-binding/**/{*,.*}',
          'aio/content/guide/built-in-directives.md',
          'aio/content/examples/built-in-directives/**/{*,.*}',
          'aio/content/images/guide/built-in-directives/**/{*,.*}',
          'aio/content/guide/template-reference-variables.md',
          'aio/content/examples/template-reference-variables/**/{*,.*}',
          'aio/content/guide/inputs-outputs.md',
          'aio/content/examples/inputs-outputs/**/{*,.*}',
          'aio/content/images/guide/inputs-outputs/**/{*,.*}',
          'aio/content/guide/understanding-template-expr-overview.md',
          'aio/content/guide/template-expression-operators.md',
          'aio/content/examples/template-expression-operators/**/{*,.*}',
          'aio/content/guide/pipes.md',
          'aio/content/guide/pipes-custom-data-trans.md',
          'aio/content/guide/pipes-overview.md',
          'aio/content/guide/pipes-transform-data.md',
          'aio/content/guide/pipe-template.md',
          'aio/content/examples/pipes/**/{*,.*}',
          'aio/content/images/guide/pipes/**/{*,.*}',
          'aio/content/guide/providers.md',
          'aio/content/examples/providers/**/{*,.*}',
          'aio/content/images/guide/providers/**/{*,.*}',
          'aio/content/guide/singleton-services.md',
          'aio/content/guide/sharing-ngmodules.md',
          'aio/content/guide/standalone-components.md',
          'aio/content/guide/structural-directives.md',
          'aio/content/examples/structural-directives/**/{*,.*}',
          'aio/content/guide/svg-in-templates.md',
          'aio/content/guide/style-precedence.md',
          'aio/content/images/guide/structural-directives/**/{*,.*}',
          'aio/content/guide/template-statements.md',
          'aio/content/guide/understanding-angular-overview.md',
          'aio/content/guide/user-input.md',
          'aio/content/examples/user-input/**/{*,.*}',
          'aio/content/images/guide/user-input/**/{*,.*}',
          'aio/content/guide/view-encapsulation.md',
          'aio/content/examples/view-encapsulation/**/{*,.*}',
          'aio/content/images/guide/view-encapsulation/**/{*,.*}',
          'aio/content/special-elements/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Common
  # =========================================================
  fw-common:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude("packages/common/http/*"), [
          'packages/common/**/{*,.*}',
          'packages/examples/common/**/{*,.*}',
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Http
  # =========================================================
  fw-http:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/common/http/**/{*,.*}',
          'packages/examples/http/**/{*,.*}',
          'aio/content/guide/http.md',
          'aio/content/examples/http/**/{*,.*}',
          'aio/content/images/guide/http/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Elements
  # =========================================================
  fw-elements:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/elements/**/{*,.*}',
          'aio/content/examples/elements/**/{*,.*}',
          'aio/content/images/guide/elements/**/{*,.*}',
          'aio/content/guide/elements.md'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - andrewseguin
        - atscott
        - dylhunn
        - gkalpak
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Forms
  # =========================================================
  fw-forms:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/forms/**/{*,.*}',
          'packages/examples/forms/**/{*,.*}',
          'aio/content/guide/forms.md',
          'aio/content/examples/forms/**/{*,.*}',
          'aio/content/images/guide/forms/**/{*,.*}',
          'aio/content/guide/forms-overview.md',
          'aio/content/examples/forms-overview/**/{*,.*}',
          'aio/content/images/guide/forms-overview/**/{*,.*}',
          'aio/content/guide/form-validation.md',
          'aio/content/guide/typed-forms.md',
          'aio/content/examples/form-validation/**/{*,.*}',
          'aio/content/images/guide/form-validation/**/{*,.*}',
          'aio/content/guide/dynamic-form.md',
          'aio/content/examples/dynamic-form/**/{*,.*}',
          'aio/content/images/guide/dynamic-form/**/{*,.*}',
          'aio/content/guide/reactive-forms.md',
          'aio/content/examples/reactive-forms/**/{*,.*}',
          'aio/content/images/guide/reactive-forms/**/{*,.*}'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - dylhunn

  # =========================================================
  #  Framework: i18n
  # =========================================================
  fw-i18n:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/core/src/i18n/**/{*,.*}',
          'packages/core/src/render3/i18n/**/{*,.*}',
          'packages/core/src/render3/instructions/i18n.ts',
          'packages/core/src/render3/interfaces/i18n.ts',
          'packages/common/locales/**/{*,.*}',
          'packages/common/src/i18n/**/{*,.*}',
          'packages/common/src/pipes/date_pipe.ts',
          'packages/common/src/pipes/i18n_plural_pipe.ts',
          'packages/common/src/pipes/i18n_select_pipe.ts',
          'packages/common/src/pipes/number_pipe.ts',
          'packages/compiler/src/i18n/**/{*,.*}',
          'packages/compiler/src/render3/view/i18n/**/{*,.*}',
          'packages/compiler-cli/src/extract_i18n.ts',
          'packages/localize/**/{*,.*}',
          'aio/content/guide/i18n-overview.md',
          'aio/content/guide/i18n-common-overview.md',
          'aio/content/guide/i18n-common-add-package.md',
          'aio/content/guide/i18n-common-locale-id.md',
          'aio/content/guide/i18n-common-format-data-locale.md',
          'aio/content/guide/i18n-common-prepare.md',
          'aio/content/guide/i18n-common-translation-files.md',
          'aio/content/guide/i18n-common-merge.md',
          'aio/content/guide/i18n-common-deploy.md',
          'aio/content/guide/i18n-example.md',
          'aio/content/guide/i18n-optional-overview.md',
          'aio/content/guide/i18n-optional-manual-runtime-locale.md',
          'aio/content/guide/i18n-optional-import-global-variants.md',
          'aio/content/guide/i18n-optional-manage-marked-text.md',
          'aio/content/examples/i18n/**/{*,.*}'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - dgp1130

  # =========================================================
  #  Framework: Platform Server
  # =========================================================
  fw-platform-server:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/platform-server/**/{*,.*}',
          'aio/content/guide/prerendering.md',
          'aio/content/guide/universal.md',
          'aio/content/examples/universal/**/{*,.*}'
          ])
    reviewers:
      users:
        - alan-agius4
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Router
  # =========================================================
  fw-router:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/router/**/{*,.*}',
          'packages/examples/router/**/{*,.*}',
          'aio/content/guide/router.md',
          'aio/content/guide/router-tutorial.md',
          'aio/content/guide/router-tutorial-toh.md',
          'aio/content/guide/routing-overview.md',
          'aio/content/guide/router-reference.md',
          'aio/content/examples/router-tutorial/**/{*,.*}',
          'aio/content/examples/router/**/{*,.*}',
          'aio/content/images/guide/router/**/{*,.*}',
          'aio/content/guide/routing-with-urlmatcher.md',
          'aio/content/examples/routing-with-urlmatcher/**/{*,.*}'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - atscott

  # =========================================================
  #  Framework: Service Worker
  # =========================================================
  fw-service-worker:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/service-worker/**/{*,.*}',
          'packages/examples/service-worker/**/{*,.*}',
          'aio/content/guide/service-worker-getting-started.md',
          'aio/content/examples/service-worker-getting-started/**/{*,.*}',
          'aio/content/guide/app-shell.md',
          'aio/content/guide/service-worker-communications.md',
          'aio/content/guide/service-worker-config.md',
          'aio/content/guide/service-worker-devops.md',
          'aio/content/guide/service-worker-intro.md',
          'aio/content/guide/service-worker-notifications.md',
          'aio/content/images/guide/service-worker/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - gkalpak

  # =========================================================
  #  Framework: Upgrade
  # =========================================================
  fw-upgrade:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/upgrade/**/{*,.*}',
          'packages/common/upgrade/**/{*,.*}',
          'packages/examples/upgrade/**/{*,.*}',
          'aio/content/guide/upgrade.md',
          'aio/content/examples/upgrade-lazy-load-ajs/**/{*,.*}',
          'aio/content/examples/upgrade-module/**/{*,.*}',
          'aio/content/images/guide/upgrade/**/{*,.*}',
          'aio/content/examples/upgrade-phonecat-1-typescript/**/{*,.*}',
          'aio/content/examples/upgrade-phonecat-2-hybrid/**/{*,.*}',
          'aio/content/examples/upgrade-phonecat-3-final/**/{*,.*}',
          'aio/content/guide/upgrade-performance.md',
          'aio/content/guide/upgrade-setup.md',
          'aio/content/guide/ajs-quick-reference.md',
          'aio/content/examples/ajs-quick-reference/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - gkalpak
        - jessicajaniuk

  # =========================================================
  #  Framework: Testing
  # =========================================================
  fw-testing:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude('packages/compiler-cli/*').exclude('packages/language-service/*').exclude('packages/service-worker/*'), [
          'packages/**/testing/**/{*,.*}',
          'aio/content/guide/testing.md',
          'aio/content/guide/test-debugging.md',
          'aio/content/guide/testing-attribute-directives.md',
          'aio/content/guide/testing-code-coverage.md',
          'aio/content/guide/testing-components-basics.md',
          'aio/content/guide/testing-components-scenarios.md',
          'aio/content/guide/testing-pipes.md',
          'aio/content/guide/testing-services.md',
          'aio/content/guide/testing-utility-apis.md',
          'aio/content/examples/testing/**/{*,.*}',
          'aio/content/images/guide/testing/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Benchmarks
  # =========================================================
  fw-benchmarks:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'modules/benchmarks/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Playground
  # =========================================================
  fw-playground:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'modules/playground/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Framework: Security
  # =========================================================
  fw-security:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/core/src/sanitization/**/{*,.*}',
          'packages/core/test/linker/security_integration_spec.ts',
          'packages/compiler/src/schema/**/{*,.*}',
          'packages/platform-browser/src/security/**/{*,.*}',
          'packages/tsconfig-tsec-base.json',
          'packages/tsec-exemption.json',
          'tools/tsec.bzl',
          'aio/content/guide/security.md',
          'aio/content/examples/security/**/{*,.*}',
          'aio/content/images/guide/security/**/{*,.*}',
          ])
    reviewers:
      users:
        - alxhub
        - jelbourn
        - josephperrott
        - pkozlowski-opensource
    reviews:
      request: -1 # request reviews from everyone
      required: 2 # require at least 2 approvals
      reviewed_for: required

  # =========================================================
  #  Bazel
  # =========================================================
  bazel:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/bazel/**/{*,.*}',
          ])
    reviewers:
      users:
        - devversion
        - josephperrott

  # =========================================================
  #  Language Service
  # =========================================================
  language-service:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/language-service/**/{*,.*}',
          'aio/content/guide/language-service.md',
          'aio/content/images/guide/language-service/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - atscott

  # =========================================================
  #  zone.js
  # =========================================================
  zone-js:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/zone.js/**/{*,.*}',
          'aio/content/guide/zone.md'
          ])
    reviewers:
      users:
        - JiaLiPassion

  # =========================================================
  #  in-memory-web-api
  # =========================================================
  in-memory-web-api:
    conditions:
      - >
        contains_any_globs(files, [
          'packages/misc/angular-in-memory-web-api/**/{*,.*}',
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - crisbeto
        - dylhunn
        - jessicajaniuk
        - pkozlowski-opensource

  # =========================================================
  #  Benchpress
  # =========================================================
  benchpress:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'packages/benchpress/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - josephperrott

  # =========================================================
  #  Integration Tests
  # =========================================================
  integration-tests:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'integration/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - dylhunn
        - jessicajaniuk
        - josephperrott
        - pkozlowski-opensource

  # =========================================================
  #  Docs: Contributors
  # =========================================================
  docs-contributors:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/marketing/contributors.json',
          'aio/content/images/bios/**/{*,.*}',
          ])
    reviewers:
      users:
        - MarkTechson
        - mgechev
        - twerske

  # =========================================================
  #  Docs: Gettings Started & Tutorial
  # =========================================================
  docs-getting-started-and-tutorial:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/guide/setup-local.md',
          'aio/content/images/guide/setup-local/**/{*,.*}',
          'aio/content/tutorial/**/{*,.*}',
          'aio/content/images/guide/toh/**/{*,.*}',
          'aio/content/examples/toh-pt0/**/{*,.*}',
          'aio/content/examples/toh-pt1/**/{*,.*}',
          'aio/content/examples/toh-pt2/**/{*,.*}',
          'aio/content/examples/toh-pt3/**/{*,.*}',
          'aio/content/examples/toh-pt4/**/{*,.*}',
          'aio/content/examples/toh-pt5/**/{*,.*}',
          'aio/content/examples/toh-pt6/**/{*,.*}',
          'aio/content/examples/getting-started-v0/**/{*,.*}',
          'aio/content/examples/getting-started/**/{*,.*}',
          'aio/content/start/**/{*,.*}',
          'aio/content/images/guide/start/**/{*,.*}',
          'aio/content/examples/what-is-angular/**/{*,.*}',
          'aio/content/guide/what-is-angular.md'
          ])
    reviewers:
      users:
        - AndrewKushnir
        - jessicajaniuk

  # =========================================================
  #  Docs: Marketing
  # =========================================================
  docs-marketing:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files.exclude("aio/content/marketing/contributors.json"), [
          'aio/content/guide/roadmap.md',
          'aio/content/marketing/**/{*,.*}',
          'aio/content/images/marketing/**/{*,.*}',
          'aio/content/file-not-found.md',
          'aio/content/license.md',
          'aio/content/navigation.json'
          ])
    reviewers:
      users:
        - MarkTechson
        - mgechev
        - twerske

  # =========================================================
  #  Docs: Observables
  # =========================================================
  docs-observables:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/guide/observables.md',
          'aio/content/examples/observables/**/{*,.*}',
          'aio/content/guide/comparing-observables.md',
          'aio/content/examples/comparing-observables/**/{*,.*}',
          'aio/content/guide/observables-in-angular.md',
          'aio/content/examples/observables-in-angular/**/{*,.*}',
          'aio/content/guide/practical-observable-usage.md',
          'aio/content/examples/practical-observable-usage/**/{*,.*}',
          'aio/content/guide/rx-library.md',
          'aio/content/examples/rx-library/**/{*,.*}'
          ])
    reviewers:
      users:
        - alxhub
        - atscott
        - dylhunn

  # =========================================================
  #  Docs: Packaging, Tooling, Releasing
  # =========================================================
  docs-packaging-and-releasing:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'docs/PUBLIC_API.md',
          'docs/RELEASE_SCHEDULE.md',
          'aio/content/guide/npm-packages.md',
          'aio/content/guide/browser-support.md',
          'aio/content/guide/releases.md',
          'aio/content/guide/updating.md',
          'aio/content/guide/deprecations.md',
          'aio/content/guide/migration-legacy-message-id.md',
          'aio/content/examples/deprecation-guide/**/{*,.*}',
          'aio/content/guide/migration-renderer.md',
          'aio/content/guide/migration-undecorated-classes.md',
          'aio/content/guide/migration-dynamic-flag.md',
          'aio/content/guide/migration-injectable.md',
          'aio/content/guide/migration-localize.md',
          'aio/content/guide/migration-module-with-providers.md',
          'aio/content/guide/static-query-migration.md',
          'aio/content/guide/update-to-latest-version.md',
          ])
    reviewers:
      users:
        - alxhub
        - AndrewKushnir
        - atscott
        - jelbourn

  # =========================================================
  #  Docs: Angular DevTools
  # =========================================================
  docs-devtools:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/guide/devtools.md',
          'aio/content/images/guide/devtools/**/{*,.*}'
          ])
    reviewers:
      users:
        - MarkTechson
        - mgechev
        - twerske

  # =========================================================
  #  Tooling: Compiler API shared with Angular CLI
  #
  #  Changing this API might break Angular CLI, so we require
  #  the CLI team to approve changes here.
  # =========================================================
  tooling-cli-shared-api:
    conditions:
      - >
        contains_any_globs(files, [
          'packages/compiler-cli/private/tooling.ts',
          'packages/localize/tools/index.ts'
        ])
    reviewers:
      users:
        - alan-agius4
        - clydin
        - dgp1130
    reviews:
      request: -1 # request reviews from everyone
      required: 2 # require at least 2 approvals
      reviewed_for: required

  # =========================================================
  #  Docs: CLI
  # =========================================================
  docs-cli:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/cli/**/{*,.*}',
          'aio/content/guide/typescript-configuration.md',
          'aio/content/examples/setup/**/{*,.*}',
          'aio/content/guide/build.md',
          'aio/content/images/guide/build/**/{*,.*}',
          'aio/content/images/guide/cli/**/{*,.*}',
          'aio/content/guide/cli-builder.md',
          'aio/content/examples/cli-builder/**/{*,.*}',
          'aio/content/guide/deployment.md',
          'aio/content/images/guide/deployment/**/{*,.*}',
          'aio/content/guide/file-structure.md',
          'aio/content/guide/ivy.md',
          'aio/content/guide/strict-mode.md',
          'aio/content/guide/web-worker.md',
          'aio/content/guide/workspace-config.md',
          'aio/content/guide/migration-solution-style-tsconfig.md',
          'aio/content/guide/migration-update-libraries-tslib.md',
          ])
    reviewers:
      users:
        - alan-agius4
        - clydin
        - dgp1130
        - mgechev

  # =========================================================
  #  Docs: CLI Libraries
  # =========================================================
  docs-libraries:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/examples/angular-linker-plugin/webpack.config.mjs',
          'aio/content/guide/creating-libraries.md',
          'aio/content/guide/libraries.md',
          'aio/content/guide/using-libraries.md',
          'aio/content/guide/angular-package-format.md'
          ])
    reviewers:
      users:
        - alan-agius4
        - alxhub
        - mgechev

  # =========================================================
  #  Docs: Schematics
  # =========================================================
  docs-schematics:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/content/guide/schematics.md',
          'aio/content/guide/schematics-authoring.md',
          'aio/content/guide/schematics-for-libraries.md',
          'aio/content/images/guide/schematics/**/{*,.*}',
          'aio/content/examples/schematics-for-libraries/**/{*,.*}'
          ])
    reviewers:
      users:
        - alan-agius4
        - dylhunn
        - mgechev

  # =========================================================
  #  Docs-infra
  # =========================================================
  docs-infra:
    <<: *defaults
    conditions:
      - >
        contains_any_globs(files, [
          'aio/{*,.*}',
          'aio/aio-builds-setup/**/{*,.*}',
          'aio/content/cli-src/**/{*,.*}',
          'aio/content/examples/{*,.*}',
          'aio/scripts/**/{*,.*}',
          'aio/src/**/{*,.*}',
          'aio/tests/**/{*,.*}',
          'aio/tools/**/{*,.*}',
          'aio/tools/examples/shared/boilerplate/cli/.vscode/**/{*,.*}',
          'aio/content/images/guide/contributors-guide/**/{*,.*}',
          'aio/content/guide/contributors-guide-overview.md',
          'aio/content/guide/docs-style-guide.md',
          'aio/content/examples/docs-style-guide/**/{*,.*}',
          'aio/content/images/guide/docs-style-guide/**/{*,.*}',
          'aio/content/guide/localized-documentation.md',
          'aio/content/guide/localizing-angular.md',
          'aio/content/guide/reviewing-content.md',
          'aio/content/guide/updating-content-github-ui.md',
          'aio/content/guide/updating-search-keywords.md',
          ])
    reviewers:
      users:
        - AndrewKushnir
        - gkalpak
        - jessicajaniuk
        - josephperrott

  # =========================================================
  #  Angular DevTools
  # =========================================================
{'fraction_non_alphanumeric': 0.2727693582184104, 'fraction_numerical': 0.0025461722138297354, 'mean_word_length': 2.4699442002029084, 'pattern_counts': {'":': 0, '<': 136, '<?xml version=': 0, '>': 70, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6669879', 'n_tokens_mistral': 25185, 'n_tokens_neox': 23853, 'n_words': 2954}