all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe27:f69
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: f947e11f-ef75-4aa8-b427-d5a3698b9eac
        host_id: 0d3d02185f810c959252bd1d303ec55040bf5bb0b401cceef814c3a7
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe27:f69
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.110
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.194
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe27:f69
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job mypy explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#42>'
      - '<Job openstack-project-manager-mypy explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/openstack-project-manager/.zuul.yaml@main#2>'
      - '<Job openstack-project-manager-mypy explicit: None implied: None source:
        osism/openstack-project-manager/.zuul.yaml@main#14>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: ea81bb18c0644c5aa4df51f3c80650e0
      build_refs:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.1\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.1`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-841)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.0...8.4.1)\n\nReleased
          2026-05-21\n\n- `get_parameter_source()` is available during eager callbacks
          and type\n  conversion again. :issue:`3458` :issue:`3484`\n- Zsh completion
          scripts parse correctly on Windows. :issue:`3277` :pr:`3466`\n- Shell completion
          of `Choice` `Enum` values produces a valid completion\n  result. :issue:`3015`\n-
          Fix empty byte-string handling in echo. :issue:`3487`\n- Fix closed file
          error with `echo_via_pager`. :issue:`3449`\n\n### [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nUnreleased\n\n-
          :class:`ParamType` typing improvements. :pr:`3371`\n\n  - :class:`ParamType`
          is now a generic abstract base class,\n    parameterized by its converted
          value type.\n  - :meth:`~ParamType.convert` return types are narrowed on
          all\n    concrete types (`str` for :class:`STRING`, `int` for\n    :class:`INT`,
          etc.).\n  - :meth:`~ParamType.to_info_dict` returns specific\n    :class:`~typing.TypedDict`
          subclasses instead of\n    `dict[str, Any]`.\n  - :class:`CompositeParamType`
          and the number-range base are now\n    generic with abstract methods.\n-
          Refactor `convert_type` to extract type inference into a private\n  `_guess_type`
          helper, and add :func:`typing.overload` signatures.\n  :pr:`3372`\n- :class:`Parameter`
          typing improvements. :pr:`2805`\n\n  - :class:`Parameter` is now an abstract
          base class, making explicit\n    that it cannot be instantiated directly.\n
          \ - :attr:`Parameter.name` is now `str` instead of `str | None`.\n    When
          `expose_value=False`, the name is set to `\"\"` instead\n    of `None`.\n
          \ - The `ctx` parameter of :meth:`Parameter.get_error_hint` is now\n    typed
          as `Context | None`, matching the runtime behavior.\n- Split string values
          from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple`
          type, matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n-
          Auto-detect `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not
          `str`, `int`, `float`, or `bool`), so programmer-provided\n  Python objects
          like classes and enum members are passed through unchanged\n  instead of
          being stringified. Previously `type=click.UNPROCESSED` had\n  to be set
          explicitly. :issue:`2012` :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
          to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
          to a\n  subcommand option that shadows `-h`. All surviving names are shown\n
          \ (`-h/--help`). :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :class:`~click.formatting.TextWrapper`
          and\n  :func:`~click.formatting.wrap_text` now measure line width in visible\n
          \ characters, ignoring ANSI escape sequences. :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage`
          emitting only a blank line when\n  called without `args`. The usage prefix
          and program name are now\n  written even when no arguments follow, and the
          trailing separator\n  space is stripped so the line ends at the program
          name.\n  :issue:`3360` :pr:`3434`\n- Show custom error messages from types
          when :func:`prompt` with\n  `hide_input=True` fails validation, instead
          of always showing a\n  generic message. Built-in type messages mask the
          input value.\n  :issue:`2809` :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner`
          with two modes: `sys`\n  (default) and `fd`. `fd` redirects file descriptors
          `1` and `2`\n  via :func:`os.dup2` so output that bypasses `sys.stdout`
          (stale stream\n  references, C extensions, subprocesses, `faulthandler`)
          is captured\n  with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n
          \ :issue:`2497` :issue:`2761` :issue:`2827` :issue:`2865`\n- Revert the
          `8.3.3` change that exposed the original file descriptor\n  via `fileno()`
          on the redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: b3e9657562b7355df99582f34f114f277c267dc8
        patchset: b3e9657562b7355df99582f34f114f277c267dc8
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      buildset: 40a545afa0514b50bc7c4e113bab1787
      buildset_refs:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.1\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.1`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-841)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.0...8.4.1)\n\nReleased
          2026-05-21\n\n- `get_parameter_source()` is available during eager callbacks
          and type\n  conversion again. :issue:`3458` :issue:`3484`\n- Zsh completion
          scripts parse correctly on Windows. :issue:`3277` :pr:`3466`\n- Shell completion
          of `Choice` `Enum` values produces a valid completion\n  result. :issue:`3015`\n-
          Fix empty byte-string handling in echo. :issue:`3487`\n- Fix closed file
          error with `echo_via_pager`. :issue:`3449`\n\n### [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nUnreleased\n\n-
          :class:`ParamType` typing improvements. :pr:`3371`\n\n  - :class:`ParamType`
          is now a generic abstract base class,\n    parameterized by its converted
          value type.\n  - :meth:`~ParamType.convert` return types are narrowed on
          all\n    concrete types (`str` for :class:`STRING`, `int` for\n    :class:`INT`,
          etc.).\n  - :meth:`~ParamType.to_info_dict` returns specific\n    :class:`~typing.TypedDict`
          subclasses instead of\n    `dict[str, Any]`.\n  - :class:`CompositeParamType`
          and the number-range base are now\n    generic with abstract methods.\n-
          Refactor `convert_type` to extract type inference into a private\n  `_guess_type`
          helper, and add :func:`typing.overload` signatures.\n  :pr:`3372`\n- :class:`Parameter`
          typing improvements. :pr:`2805`\n\n  - :class:`Parameter` is now an abstract
          base class, making explicit\n    that it cannot be instantiated directly.\n
          \ - :attr:`Parameter.name` is now `str` instead of `str | None`.\n    When
          `expose_value=False`, the name is set to `\"\"` instead\n    of `None`.\n
          \ - The `ctx` parameter of :meth:`Parameter.get_error_hint` is now\n    typed
          as `Context | None`, matching the runtime behavior.\n- Split string values
          from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple`
          type, matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n-
          Auto-detect `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not
          `str`, `int`, `float`, or `bool`), so programmer-provided\n  Python objects
          like classes and enum members are passed through unchanged\n  instead of
          being stringified. Previously `type=click.UNPROCESSED` had\n  to be set
          explicitly. :issue:`2012` :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
          to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
          to a\n  subcommand option that shadows `-h`. All surviving names are shown\n
          \ (`-h/--help`). :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :class:`~click.formatting.TextWrapper`
          and\n  :func:`~click.formatting.wrap_text` now measure line width in visible\n
          \ characters, ignoring ANSI escape sequences. :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage`
          emitting only a blank line when\n  called without `args`. The usage prefix
          and program name are now\n  written even when no arguments follow, and the
          trailing separator\n  space is stripped so the line ends at the program
          name.\n  :issue:`3360` :pr:`3434`\n- Show custom error messages from types
          when :func:`prompt` with\n  `hide_input=True` fails validation, instead
          of always showing a\n  generic message. Built-in type messages mask the
          input value.\n  :issue:`2809` :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner`
          with two modes: `sys`\n  (default) and `fd`. `fd` redirects file descriptors
          `1` and `2`\n  via :func:`os.dup2` so output that bypasses `sys.stdout`
          (stale stream\n  references, C extensions, subprocesses, `faulthandler`)
          is captured\n  with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n
          \ :issue:`2497` :issue:`2761` :issue:`2827` :issue:`2865`\n- Revert the
          `8.3.3` change that exposed the original file descriptor\n  via `fileno()`
          on the redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: b3e9657562b7355df99582f34f114f277c267dc8
        patchset: b3e9657562b7355df99582f34f114f277c267dc8
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      change: '276'
      change_message: "Update dependency click to v8.4.1\n\nThis PR contains the following
        updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
        | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
        [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
        | `==8.3.2` \u2192 `==8.4.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.1?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.1?slim=true)
        |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
        [`v8.4.1`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-841)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.4.0...8.4.1)\n\nReleased
        2026-05-21\n\n- `get_parameter_source()` is available during eager callbacks
        and type\n  conversion again. :issue:`3458` :issue:`3484`\n- Zsh completion
        scripts parse correctly on Windows. :issue:`3277` :pr:`3466`\n- Shell completion
        of `Choice` `Enum` values produces a valid completion\n  result. :issue:`3015`\n-
        Fix empty byte-string handling in echo. :issue:`3487`\n- Fix closed file error
        with `echo_via_pager`. :issue:`3449`\n\n### [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nUnreleased\n\n-
        :class:`ParamType` typing improvements. :pr:`3371`\n\n  - :class:`ParamType`
        is now a generic abstract base class,\n    parameterized by its converted
        value type.\n  - :meth:`~ParamType.convert` return types are narrowed on all\n
        \   concrete types (`str` for :class:`STRING`, `int` for\n    :class:`INT`,
        etc.).\n  - :meth:`~ParamType.to_info_dict` returns specific\n    :class:`~typing.TypedDict`
        subclasses instead of\n    `dict[str, Any]`.\n  - :class:`CompositeParamType`
        and the number-range base are now\n    generic with abstract methods.\n- Refactor
        `convert_type` to extract type inference into a private\n  `_guess_type` helper,
        and add :func:`typing.overload` signatures.\n  :pr:`3372`\n- :class:`Parameter`
        typing improvements. :pr:`2805`\n\n  - :class:`Parameter` is now an abstract
        base class, making explicit\n    that it cannot be instantiated directly.\n
        \ - :attr:`Parameter.name` is now `str` instead of `str | None`.\n    When
        `expose_value=False`, the name is set to `\"\"` instead\n    of `None`.\n
        \ - The `ctx` parameter of :meth:`Parameter.get_error_hint` is now\n    typed
        as `Context | None`, matching the runtime behavior.\n- Split string values
        from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple` type,
        matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n- Auto-detect
        `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not `str`, `int`,
        `float`, or `bool`), so programmer-provided\n  Python objects like classes
        and enum members are passed through unchanged\n  instead of being stringified.
        Previously `type=click.UNPROCESSED` had\n  to be set explicitly. :issue:`2012`
        :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
        to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
        to a\n  subcommand option that shadows `-h`. All surviving names are shown\n
        \ (`-h/--help`). :issue:`2790` :pr:`3208`\n- Fix readline functionality on
        non-Windows platforms. Prompt text is now\n  passed directly to readline instead
        of being printed separately, allowing\n  proper backspace, line editing, and
        line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use :func:`os.startfile`
        on Windows to open URLs in :func:`open_url`,\n  replacing the `start` built-in
        which cannot be invoked without\n  `shell=True`. :issue:`3164` :pr:`3186`\n-
        Fix Fish shell completion errors when option help text contains newlines.\n
        \ :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception with suggestions
        for misspelled\n  commands. :issue:`3107` :pr:`3228`\n- Use :class:`ValueError`
        message when conversion in :class:`FuncParamType` would\n  fail. :issue:`3105`
        :pr:`3211`\n- Add `click.get_pager_file` for file-like access to an output\n
        \ pager. :pr:`1572` :pr:`3405`\n- :class:`~click.formatting.TextWrapper` and\n
        \ :func:`~click.formatting.wrap_text` now measure line width in visible\n
        \ characters, ignoring ANSI escape sequences. :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage`
        emitting only a blank line when\n  called without `args`. The usage prefix
        and program name are now\n  written even when no arguments follow, and the
        trailing separator\n  space is stripped so the line ends at the program name.\n
        \ :issue:`3360` :pr:`3434`\n- Show custom error messages from types when :func:`prompt`
        with\n  `hide_input=True` fails validation, instead of always showing a\n
        \ generic message. Built-in type messages mask the input value.\n  :issue:`2809`
        :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner` with two modes:
        `sys`\n  (default) and `fd`. `fd` redirects file descriptors `1` and `2`\n
        \ via :func:`os.dup2` so output that bypasses `sys.stdout` (stale stream\n
        \ references, C extensions, subprocesses, `faulthandler`) is captured\n  with
        proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n  :issue:`2497`
        :issue:`2761` :issue:`2827` :issue:`2865`\n- Revert the `8.3.3` change that
        exposed the original file descriptor\n  via `fileno()` on the redirected `CliRunner`
        streams in the default\n  capture mode. `os.dup2(w, sys.stdout.fileno())`
        calls inside a CLI no\n  longer mutate the host runner's stdout, which broke
        Pytest's `fd`-level\n  capture teardown. C-level consumers that need a real
        `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n- Mark additional
        built-in strings with `gettext()` to extend translation\n  coverage. :pr:`2902`\n-
        Fix feature switch groups (several `flag_value` options sharing one\n  parameter
        name) silently dropping an explicit `default` when a sibling\n  option without
        an explicit default was declared first. Arbitration is now\n  source-aware:
        a more explicit :class:`ParameterSource` always wins, and\n  within `ParameterSource.DEFAULT`,
        an option that received an explicit\n  `default=` keyword wins over a sibling
        whose default was auto-derived.\n  The 8.3.x first-wins fallback for remaining
        ties was reverted to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n-
        Fix missing space between option help text and the `(DEPRECATED)`\n  label,
        and localize the option label so it matches the command label.\n  The label
        and the `DeprecationWarning` reason suffix are now produced\n  by shared helpers.
        :pr:`3423`\n- Document short option stacking (`-abc` is parsed as `-a -b -c`)
        and\n  clarify that multi-character short option names are not supported.\n
        \ :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
        Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
        At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
        defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
        manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
        conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
        Close this PR and you won't be reminded about this update again.\n\n---\n\n
        - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
        box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
        View the [repository job log](https://developer.mend.io/github/osism/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
      change_url: https://github.com/osism/openstack-project-manager/pull/276
      child_jobs: []
      commit_id: b3e9657562b7355df99582f34f114f277c267dc8
      event_id: b48ae460-5597-11f1-8b0c-ab071f64e3a2
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/ea81bb18c0644c5aa4df51f3c80650e0/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/ea81bb18c0644c5aa4df51f3c80650e0/work/logs
        result_data_file: /var/lib/zuul/builds/ea81bb18c0644c5aa4df51f3c80650e0/work/results.json
        src_root: /var/lib/zuul/builds/ea81bb18c0644c5aa4df51f3c80650e0/work/src
        work_root: /var/lib/zuul/builds/ea81bb18c0644c5aa4df51f3c80650e0/work
      include_vars: []
      items:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.1\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.1`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-841)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.4.0...8.4.1)\n\nReleased
          2026-05-21\n\n- `get_parameter_source()` is available during eager callbacks
          and type\n  conversion again. :issue:`3458` :issue:`3484`\n- Zsh completion
          scripts parse correctly on Windows. :issue:`3277` :pr:`3466`\n- Shell completion
          of `Choice` `Enum` values produces a valid completion\n  result. :issue:`3015`\n-
          Fix empty byte-string handling in echo. :issue:`3487`\n- Fix closed file
          error with `echo_via_pager`. :issue:`3449`\n\n### [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nUnreleased\n\n-
          :class:`ParamType` typing improvements. :pr:`3371`\n\n  - :class:`ParamType`
          is now a generic abstract base class,\n    parameterized by its converted
          value type.\n  - :meth:`~ParamType.convert` return types are narrowed on
          all\n    concrete types (`str` for :class:`STRING`, `int` for\n    :class:`INT`,
          etc.).\n  - :meth:`~ParamType.to_info_dict` returns specific\n    :class:`~typing.TypedDict`
          subclasses instead of\n    `dict[str, Any]`.\n  - :class:`CompositeParamType`
          and the number-range base are now\n    generic with abstract methods.\n-
          Refactor `convert_type` to extract type inference into a private\n  `_guess_type`
          helper, and add :func:`typing.overload` signatures.\n  :pr:`3372`\n- :class:`Parameter`
          typing improvements. :pr:`2805`\n\n  - :class:`Parameter` is now an abstract
          base class, making explicit\n    that it cannot be instantiated directly.\n
          \ - :attr:`Parameter.name` is now `str` instead of `str | None`.\n    When
          `expose_value=False`, the name is set to `\"\"` instead\n    of `None`.\n
          \ - The `ctx` parameter of :meth:`Parameter.get_error_hint` is now\n    typed
          as `Context | None`, matching the runtime behavior.\n- Split string values
          from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple`
          type, matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n-
          Auto-detect `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not
          `str`, `int`, `float`, or `bool`), so programmer-provided\n  Python objects
          like classes and enum members are passed through unchanged\n  instead of
          being stringified. Previously `type=click.UNPROCESSED` had\n  to be set
          explicitly. :issue:`2012` :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
          to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
          to a\n  subcommand option that shadows `-h`. All surviving names are shown\n
          \ (`-h/--help`). :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :class:`~click.formatting.TextWrapper`
          and\n  :func:`~click.formatting.wrap_text` now measure line width in visible\n
          \ characters, ignoring ANSI escape sequences. :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage`
          emitting only a blank line when\n  called without `args`. The usage prefix
          and program name are now\n  written even when no arguments follow, and the
          trailing separator\n  space is stripped so the line ends at the program
          name.\n  :issue:`3360` :pr:`3434`\n- Show custom error messages from types
          when :func:`prompt` with\n  `hide_input=True` fails validation, instead
          of always showing a\n  generic message. Built-in type messages mask the
          input value.\n  :issue:`2809` :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner`
          with two modes: `sys`\n  (default) and `fd`. `fd` redirects file descriptors
          `1` and `2`\n  via :func:`os.dup2` so output that bypasses `sys.stdout`
          (stale stream\n  references, C extensions, subprocesses, `faulthandler`)
          is captured\n  with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n
          \ :issue:`2497` :issue:`2761` :issue:`2827` :issue:`2865`\n- Revert the
          `8.3.3` change that exposed the original file descriptor\n  via `fileno()`
          on the redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: b3e9657562b7355df99582f34f114f277c267dc8
        patchset: b3e9657562b7355df99582f34f114f277c267dc8
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
          src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      job: openstack-project-manager-mypy
      jobtags: []
      max_attempts: 3
      message: VXBkYXRlIGRlcGVuZGVuY3kgY2xpY2sgdG8gdjguNC4xCgpUaGlzIFBSIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdXBkYXRlczoKCnwgUGFja2FnZSB8IENoYW5nZSB8IFtBZ2VdKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgW0NvbmZpZGVuY2VdKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwKfC0tLXwtLS18LS0tfC0tLXwKfCBbY2xpY2tdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrKSAoW2NoYW5nZWxvZ10oaHR0cHM6Ly9jbGljay5wYWxsZXRzcHJvamVjdHMuY29tL3BhZ2UvY2hhbmdlcy8pKSB8IGA9PTguMy4yYCDihpIgYD09OC40LjFgIHwgIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvcHlwaS9jbGljay84LjQuMT9zbGltPXRydWUpIHwgIVtjb25maWRlbmNlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29uZmlkZW5jZS9weXBpL2NsaWNrLzguMy4yLzguNC4xP3NsaW09dHJ1ZSkgfAoKLS0tCgojIyMgUmVsZWFzZSBOb3RlcwoKPGRldGFpbHM+CjxzdW1tYXJ5PnBhbGxldHMvY2xpY2sgKGNsaWNrKTwvc3VtbWFyeT4KCiMjIyBbYHY4LjQuMWBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2Jsb2IvSEVBRC9DSEFOR0VTLnJzdCNWZXJzaW9uLTg0MSkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BhbGxldHMvY2xpY2svY29tcGFyZS84LjQuMC4uLjguNC4xKQoKUmVsZWFzZWQgMjAyNi0wNS0yMQoKLSBgZ2V0X3BhcmFtZXRlcl9zb3VyY2UoKWAgaXMgYXZhaWxhYmxlIGR1cmluZyBlYWdlciBjYWxsYmFja3MgYW5kIHR5cGUKICBjb252ZXJzaW9uIGFnYWluLiA6aXNzdWU6YDM0NThgIDppc3N1ZTpgMzQ4NGAKLSBac2ggY29tcGxldGlvbiBzY3JpcHRzIHBhcnNlIGNvcnJlY3RseSBvbiBXaW5kb3dzLiA6aXNzdWU6YDMyNzdgIDpwcjpgMzQ2NmAKLSBTaGVsbCBjb21wbGV0aW9uIG9mIGBDaG9pY2VgIGBFbnVtYCB2YWx1ZXMgcHJvZHVjZXMgYSB2YWxpZCBjb21wbGV0aW9uCiAgcmVzdWx0LiA6aXNzdWU6YDMwMTVgCi0gRml4IGVtcHR5IGJ5dGUtc3RyaW5nIGhhbmRsaW5nIGluIGVjaG8uIDppc3N1ZTpgMzQ4N2AKLSBGaXggY2xvc2VkIGZpbGUgZXJyb3Igd2l0aCBgZWNob192aWFfcGFnZXJgLiA6aXNzdWU6YDM0NDlgCgojIyMgW2B2OC40LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljay9ibG9iL0hFQUQvQ0hBTkdFUy5yc3QjVmVyc2lvbi04NDApCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2NvbXBhcmUvOC4zLjMuLi44LjQuMCkKClVucmVsZWFzZWQKCi0gOmNsYXNzOmBQYXJhbVR5cGVgIHR5cGluZyBpbXByb3ZlbWVudHMuIDpwcjpgMzM3MWAKCiAgLSA6Y2xhc3M6YFBhcmFtVHlwZWAgaXMgbm93IGEgZ2VuZXJpYyBhYnN0cmFjdCBiYXNlIGNsYXNzLAogICAgcGFyYW1ldGVyaXplZCBieSBpdHMgY29udmVydGVkIHZhbHVlIHR5cGUuCiAgLSA6bWV0aDpgflBhcmFtVHlwZS5jb252ZXJ0YCByZXR1cm4gdHlwZXMgYXJlIG5hcnJvd2VkIG9uIGFsbAogICAgY29uY3JldGUgdHlwZXMgKGBzdHJgIGZvciA6Y2xhc3M6YFNUUklOR2AsIGBpbnRgIGZvcgogICAgOmNsYXNzOmBJTlRgLCBldGMuKS4KICAtIDptZXRoOmB+UGFyYW1UeXBlLnRvX2luZm9fZGljdGAgcmV0dXJucyBzcGVjaWZpYwogICAgOmNsYXNzOmB+dHlwaW5nLlR5cGVkRGljdGAgc3ViY2xhc3NlcyBpbnN0ZWFkIG9mCiAgICBgZGljdFtzdHIsIEFueV1gLgogIC0gOmNsYXNzOmBDb21wb3NpdGVQYXJhbVR5cGVgIGFuZCB0aGUgbnVtYmVyLXJhbmdlIGJhc2UgYXJlIG5vdwogICAgZ2VuZXJpYyB3aXRoIGFic3RyYWN0IG1ldGhvZHMuCi0gUmVmYWN0b3IgYGNvbnZlcnRfdHlwZWAgdG8gZXh0cmFjdCB0eXBlIGluZmVyZW5jZSBpbnRvIGEgcHJpdmF0ZQogIGBfZ3Vlc3NfdHlwZWAgaGVscGVyLCBhbmQgYWRkIDpmdW5jOmB0eXBpbmcub3ZlcmxvYWRgIHNpZ25hdHVyZXMuCiAgOnByOmAzMzcyYAotIDpjbGFzczpgUGFyYW1ldGVyYCB0eXBpbmcgaW1wcm92ZW1lbnRzLiA6cHI6YDI4MDVgCgogIC0gOmNsYXNzOmBQYXJhbWV0ZXJgIGlzIG5vdyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLCBtYWtpbmcgZXhwbGljaXQKICAgIHRoYXQgaXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS4KICAtIDphdHRyOmBQYXJhbWV0ZXIubmFtZWAgaXMgbm93IGBzdHJgIGluc3RlYWQgb2YgYHN0ciB8IE5vbmVgLgogICAgV2hlbiBgZXhwb3NlX3ZhbHVlPUZhbHNlYCwgdGhlIG5hbWUgaXMgc2V0IHRvIGAiImAgaW5zdGVhZAogICAgb2YgYE5vbmVgLgogIC0gVGhlIGBjdHhgIHBhcmFtZXRlciBvZiA6bWV0aDpgUGFyYW1ldGVyLmdldF9lcnJvcl9oaW50YCBpcyBub3cKICAgIHR5cGVkIGFzIGBDb250ZXh0IHwgTm9uZWAsIG1hdGNoaW5nIHRoZSBydW50aW1lIGJlaGF2aW9yLgotIFNwbGl0IHN0cmluZyB2YWx1ZXMgZnJvbSBgZGVmYXVsdF9tYXBgIGZvciBwYXJhbWV0ZXJzIHdpdGggYG5hcmdzID4gMWAKICBvciA6Y2xhc3M6YFR1cGxlYCB0eXBlLCBtYXRjaGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWhhdmlvci4KICA6aXNzdWU6YDI3NDVgIDpwcjpgMzM2NGAKLSBBdXRvLWRldGVjdCBgdHlwZT1VTlBST0NFU1NFRGAgZm9yIGBmbGFnX3ZhbHVlYCBvZiBub24tYmFzaWMgdHlwZXMKICAobm90IGBzdHJgLCBgaW50YCwgYGZsb2F0YCwgb3IgYGJvb2xgKSwgc28gcHJvZ3JhbW1lci1wcm92aWRlZAogIFB5dGhvbiBvYmplY3RzIGxpa2UgY2xhc3NlcyBhbmQgZW51bSBtZW1iZXJzIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQKICBpbnN0ZWFkIG9mIGJlaW5nIHN0cmluZ2lmaWVkLiBQcmV2aW91c2x5IGB0eXBlPWNsaWNrLlVOUFJPQ0VTU0VEYCBoYWQKICB0byBiZSBzZXQgZXhwbGljaXRseS4gOmlzc3VlOmAyMDEyYCA6cHI6YDMzNjNgCi0gVGhlIGVycm9yIGhpbnQgbm93IHVzZXMgOm1ldGg6YENvbW1hbmQuZ2V0X2hlbHBfb3B0aW9uX25hbWVzYCB0byBwaWNrCiAgbm9uLXNoYWRvd2VkIGhlbHAgb3B0aW9uIG5hbWVzLCBzbyBgVHJ5ICcuLi4gLWgnYCBubyBsb25nZXIgcG9pbnRzIHRvIGEKICBzdWJjb21tYW5kIG9wdGlvbiB0aGF0IHNoYWRvd3MgYC1oYC4gQWxsIHN1cnZpdmluZyBuYW1lcyBhcmUgc2hvd24KICAoYC1oLy0taGVscGApLiA6aXNzdWU6YDI3OTBgIDpwcjpgMzIwOGAKLSBGaXggcmVhZGxpbmUgZnVuY3Rpb25hbGl0eSBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMuIFByb21wdCB0ZXh0IGlzIG5vdwogIHBhc3NlZCBkaXJlY3RseSB0byByZWFkbGluZSBpbnN0ZWFkIG9mIGJlaW5nIHByaW50ZWQgc2VwYXJhdGVseSwgYWxsb3dpbmcKICBwcm9wZXIgYmFja3NwYWNlLCBsaW5lIGVkaXRpbmcsIGFuZCBsaW5lIHdyYXBwaW5nIGJlaGF2aW9yLiA6aXNzdWU6YDI5NjhgCiAgOnByOmAyOTY5YAotIFVzZSA6ZnVuYzpgb3Muc3RhcnRmaWxlYCBvbiBXaW5kb3dzIHRvIG9wZW4gVVJMcyBpbiA6ZnVuYzpgb3Blbl91cmxgLAogIHJlcGxhY2luZyB0aGUgYHN0YXJ0YCBidWlsdC1pbiB3aGljaCBjYW5ub3QgYmUgaW52b2tlZCB3aXRob3V0CiAgYHNoZWxsPVRydWVgLiA6aXNzdWU6YDMxNjRgIDpwcjpgMzE4NmAKLSBGaXggRmlzaCBzaGVsbCBjb21wbGV0aW9uIGVycm9ycyB3aGVuIG9wdGlvbiBoZWxwIHRleHQgY29udGFpbnMgbmV3bGluZXMuCiAgOmlzc3VlOmAzMDQzYCA6cHI6YDMxMjZgCi0gQWRkIDpjbGFzczpgTm9TdWNoQ29tbWFuZGAgZXhjZXB0aW9uIHdpdGggc3VnZ2VzdGlvbnMgZm9yIG1pc3NwZWxsZWQKICBjb21tYW5kcy4gOmlzc3VlOmAzMTA3YCA6cHI6YDMyMjhgCi0gVXNlIDpjbGFzczpgVmFsdWVFcnJvcmAgbWVzc2FnZSB3aGVuIGNvbnZlcnNpb24gaW4gOmNsYXNzOmBGdW5jUGFyYW1UeXBlYCB3b3VsZAogIGZhaWwuIDppc3N1ZTpgMzEwNWAgOnByOmAzMjExYAotIEFkZCBgY2xpY2suZ2V0X3BhZ2VyX2ZpbGVgIGZvciBmaWxlLWxpa2UgYWNjZXNzIHRvIGFuIG91dHB1dAogIHBhZ2VyLiA6cHI6YDE1NzJgIDpwcjpgMzQwNWAKLSA6Y2xhc3M6YH5jbGljay5mb3JtYXR0aW5nLlRleHRXcmFwcGVyYCBhbmQKICA6ZnVuYzpgfmNsaWNrLmZvcm1hdHRpbmcud3JhcF90ZXh0YCBub3cgbWVhc3VyZSBsaW5lIHdpZHRoIGluIHZpc2libGUKICBjaGFyYWN0ZXJzLCBpZ25vcmluZyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuIDpwcjpgMzQyMGAKLSBGaXggOm1ldGg6YEhlbHBGb3JtYXR0ZXIud3JpdGVfdXNhZ2VgIGVtaXR0aW5nIG9ubHkgYSBibGFuayBsaW5lIHdoZW4KICBjYWxsZWQgd2l0aG91dCBgYXJnc2AuIFRoZSB1c2FnZSBwcmVmaXggYW5kIHByb2dyYW0gbmFtZSBhcmUgbm93CiAgd3JpdHRlbiBldmVuIHdoZW4gbm8gYXJndW1lbnRzIGZvbGxvdywgYW5kIHRoZSB0cmFpbGluZyBzZXBhcmF0b3IKICBzcGFjZSBpcyBzdHJpcHBlZCBzbyB0aGUgbGluZSBlbmRzIGF0IHRoZSBwcm9ncmFtIG5hbWUuCiAgOmlzc3VlOmAzMzYwYCA6cHI6YDM0MzRgCi0gU2hvdyBjdXN0b20gZXJyb3IgbWVzc2FnZXMgZnJvbSB0eXBlcyB3aGVuIDpmdW5jOmBwcm9tcHRgIHdpdGgKICBgaGlkZV9pbnB1dD1UcnVlYCBmYWlscyB2YWxpZGF0aW9uLCBpbnN0ZWFkIG9mIGFsd2F5cyBzaG93aW5nIGEKICBnZW5lcmljIG1lc3NhZ2UuIEJ1aWx0LWluIHR5cGUgbWVzc2FnZXMgbWFzayB0aGUgaW5wdXQgdmFsdWUuCiAgOmlzc3VlOmAyODA5YCA6cHI6YDMyNTZgCi0gQWRkIGBjYXB0dXJlYCBwYXJhbWV0ZXIgdG8gOmNsYXNzOmBDbGlSdW5uZXJgIHdpdGggdHdvIG1vZGVzOiBgc3lzYAogIChkZWZhdWx0KSBhbmQgYGZkYC4gYGZkYCByZWRpcmVjdHMgZmlsZSBkZXNjcmlwdG9ycyBgMWAgYW5kIGAyYAogIHZpYSA6ZnVuYzpgb3MuZHVwMmAgc28gb3V0cHV0IHRoYXQgYnlwYXNzZXMgYHN5cy5zdGRvdXRgIChzdGFsZSBzdHJlYW0KICByZWZlcmVuY2VzLCBDIGV4dGVuc2lvbnMsIHN1YnByb2Nlc3NlcywgYGZhdWx0aGFuZGxlcmApIGlzIGNhcHR1cmVkCiAgd2l0aCBwcm9wZXIgaXNvbGF0aW9uLiA6aXNzdWU6YDg1NGAgOmlzc3VlOmAyNDEyYCA6aXNzdWU6YDI0NjhgCiAgOmlzc3VlOmAyNDk3YCA6aXNzdWU6YDI3NjFgIDppc3N1ZTpgMjgyN2AgOmlzc3VlOmAyODY1YAotIFJldmVydCB0aGUgYDguMy4zYCBjaGFuZ2UgdGhhdCBleHBvc2VkIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IKICB2aWEgYGZpbGVubygpYCBvbiB0aGUgcmVkaXJlY3RlZCBgQ2xpUnVubmVyYCBzdHJlYW1zIGluIHRoZSBkZWZhdWx0CiAgY2FwdHVyZSBtb2RlLiBgb3MuZHVwMih3LCBzeXMuc3Rkb3V0LmZpbGVubygpKWAgY2FsbHMgaW5zaWRlIGEgQ0xJIG5vCiAgbG9uZ2VyIG11dGF0ZSB0aGUgaG9zdCBydW5uZXIncyBzdGRvdXQsIHdoaWNoIGJyb2tlIFB5dGVzdCdzIGBmZGAtbGV2ZWwKICBjYXB0dXJlIHRlYXJkb3duLiBDLWxldmVsIGNvbnN1bWVycyB0aGF0IG5lZWQgYSByZWFsIGBmZGAgc2hvdWxkIHVzZQogIGBjYXB0dXJlPSJmZCJgLiA6aXNzdWU6YDMzODRgIDpwcjpgMzM5MWAKLSBNYXJrIGFkZGl0aW9uYWwgYnVpbHQtaW4gc3RyaW5ncyB3aXRoIGBnZXR0ZXh0KClgIHRvIGV4dGVuZCB0cmFuc2xhdGlvbgogIGNvdmVyYWdlLiA6cHI6YDI5MDJgCi0gRml4IGZlYXR1cmUgc3dpdGNoIGdyb3VwcyAoc2V2ZXJhbCBgZmxhZ192YWx1ZWAgb3B0aW9ucyBzaGFyaW5nIG9uZQogIHBhcmFtZXRlciBuYW1lKSBzaWxlbnRseSBkcm9wcGluZyBhbiBleHBsaWNpdCBgZGVmYXVsdGAgd2hlbiBhIHNpYmxpbmcKICBvcHRpb24gd2l0aG91dCBhbiBleHBsaWNpdCBkZWZhdWx0IHdhcyBkZWNsYXJlZCBmaXJzdC4gQXJiaXRyYXRpb24gaXMgbm93CiAgc291cmNlLWF3YXJlOiBhIG1vcmUgZXhwbGljaXQgOmNsYXNzOmBQYXJhbWV0ZXJTb3VyY2VgIGFsd2F5cyB3aW5zLCBhbmQKICB3aXRoaW4gYFBhcmFtZXRlclNvdXJjZS5ERUZBVUxUYCwgYW4gb3B0aW9uIHRoYXQgcmVjZWl2ZWQgYW4gZXhwbGljaXQKICBgZGVmYXVsdD1gIGtleXdvcmQgd2lucyBvdmVyIGEgc2libGluZyB3aG9zZSBkZWZhdWx0IHdhcyBhdXRvLWRlcml2ZWQuCiAgVGhlIDguMy54IGZpcnN0LXdpbnMgZmFsbGJhY2sgZm9yIHJlbWFpbmluZyB0aWVzIHdhcyByZXZlcnRlZCB0byB0aGUKICBwcmUtOC4zLnggbGFzdC13aW5zIGZhbGxiYWNrLiA6aXNzdWU6YDM0MDNgIDpwcjpgMzQwNGAKLSBGaXggbWlzc2luZyBzcGFjZSBiZXR3ZWVuIG9wdGlvbiBoZWxwIHRleHQgYW5kIHRoZSBgKERFUFJFQ0FURUQpYAogIGxhYmVsLCBhbmQgbG9jYWxpemUgdGhlIG9wdGlvbiBsYWJlbCBzbyBpdCBtYXRjaGVzIHRoZSBjb21tYW5kIGxhYmVsLgogIFRoZSBsYWJlbCBhbmQgdGhlIGBEZXByZWNhdGlvbldhcm5pbmdgIHJlYXNvbiBzdWZmaXggYXJlIG5vdyBwcm9kdWNlZAogIGJ5IHNoYXJlZCBoZWxwZXJzLiA6cHI6YDM0MjNgCi0gRG9jdW1lbnQgc2hvcnQgb3B0aW9uIHN0YWNraW5nIChgLWFiY2AgaXMgcGFyc2VkIGFzIGAtYSAtYiAtY2ApIGFuZAogIGNsYXJpZnkgdGhhdCBtdWx0aS1jaGFyYWN0ZXIgc2hvcnQgb3B0aW9uIG5hbWVzIGFyZSBub3Qgc3VwcG9ydGVkLgogIDppc3N1ZTpgMjc3OWAgOnByOmAzNDMxYAoKIyMjIFtgdjguMy4zYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BhbGxldHMvY2xpY2svY29tcGFyZS84LjMuMi4uLjguMy4zKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljay9jb21wYXJlLzguMy4yLi4uOC4zLjMpCgo8L2RldGFpbHM+CgotLS0KCiMjIyBDb25maWd1cmF0aW9uCgrwn5OFICoqU2NoZWR1bGUqKjogKFVUQykKCi0gQnJhbmNoIGNyZWF0aW9uCiAgLSBBdCBhbnkgdGltZSAobm8gc2NoZWR1bGUgZGVmaW5lZCkKLSBBdXRvbWVyZ2UKICAtIEF0IGFueSB0aW1lIChubyBzY2hlZHVsZSBkZWZpbmVkKQoK8J+apiAqKkF1dG9tZXJnZSoqOiBEaXNhYmxlZCBieSBjb25maWcuIFBsZWFzZSBtZXJnZSB0aGlzIG1hbnVhbGx5IG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQuCgrimbsgKipSZWJhc2luZyoqOiBXaGVuZXZlciBQUiBiZWNvbWVzIGNvbmZsaWN0ZWQsIG9yIHlvdSB0aWNrIHRoZSByZWJhc2UvcmV0cnkgY2hlY2tib3guCgrwn5SVICoqSWdub3JlKio6IENsb3NlIHRoaXMgUFIgYW5kIHlvdSB3b24ndCBiZSByZW1pbmRlZCBhYm91dCB0aGlzIHVwZGF0ZSBhZ2Fpbi4KCi0tLQoKIC0gWyBdIDwhLS0gcmViYXNlLWNoZWNrIC0tPklmIHlvdSB3YW50IHRvIHJlYmFzZS9yZXRyeSB0aGlzIFBSLCBjaGVjayB0aGlzIGJveAoKLS0tCgpUaGlzIFBSIHdhcyBnZW5lcmF0ZWQgYnkgW01lbmQgUmVub3ZhdGVdKGh0dHBzOi8vbWVuZC5pby9yZW5vdmF0ZS8pLiBWaWV3IHRoZSBbcmVwb3NpdG9yeSBqb2IgbG9nXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2dpdGh1Yi9vc2lzbS9vcGVuc3RhY2stcHJvamVjdC1tYW5hZ2VyKS4KPCEtLXJlbm92YXRlLWRlYnVnOmV5SmpjbVZoZEdWa1NXNVdaWElpT2lJME15NHhNemt1TkNJc0luVndaR0YwWldSSmJsWmxjaUk2SWpRekxqRTROUzR4SWl3aWRHRnlaMlYwUW5KaGJtTm9Jam9pYldGcGJpSXNJbXhoWW1Wc2N5STZXeUp5Wlc1dmRtRjBaU0pkZlE9PS0tPgo=
      patchset: b3e9657562b7355df99582f34f114f277c267dc8
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_0/github.com/osism/openstack-project-manager:
            canonical_name: github.com/osism/openstack-project-manager
            checkout: main
            commit: 2050e99bf0a9b26b44e043c56e3c613e8bd3046a
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          untrusted/project_3/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
        playbooks:
        - path: untrusted/project_3/github.com/osism/zuul-jobs/playbooks/mypy/run.yaml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_0/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_0/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-zuul-jobs/roles
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_3/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/openstack-project-manager
        name: osism/openstack-project-manager
        short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
      projects:
        github.com/osism/openstack-project-manager:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          checkout: main
          checkout_description: zuul branch
          commit: 2050e99bf0a9b26b44e043c56e3c613e8bd3046a
          name: osism/openstack-project-manager
          required: false
          short_name: openstack-project-manager
          src_dir: src/github.com/osism/openstack-project-manager
      ref: refs/pull/276/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
