all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feb7:44cd
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: ea16a4b8-4881-425e-8853-ca50313de216
        host_id: 7f2607eceb24f4583c6f9496c53c64b51afe50de5eacda4379b21c42
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feb7:44cd
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.109
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.244
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feb7:44cd
        region: null
        slot: null
      tox_environment:
        NOSE_HTML_OUT_FILE: nose_results.html
        NOSE_WITH_HTML_OUTPUT: 1
        NOSE_WITH_XUNIT: 1
        OPENSTACK_VERSION: '2024.1'
      tox_envlist: cookiecutter
  vars:
    tox_environment:
      NOSE_HTML_OUT_FILE: nose_results.html
      NOSE_WITH_HTML_OUTPUT: 1
      NOSE_WITH_XUNIT: 1
      OPENSTACK_VERSION: '2024.1'
    tox_envlist: cookiecutter
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job unittests explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: osism/openinfra-zuul-jobs/zuul.d/general-jobs.yaml@master#9>'
      - '<Job tox explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: osism/openinfra-zuul-jobs/zuul.d/python-jobs.yaml@master#1>'
      - '<Job cfg-cookiecutter-tox explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/cfg-cookiecutter/.zuul.yaml@main#55>'
      - '<Job cfg-cookiecutter-tox-2024.1 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/cfg-cookiecutter/.zuul.yaml@main#61>'
      - '<Job cfg-cookiecutter-tox-2024.1 explicit: None implied: None source: osism/cfg-cookiecutter/.zuul.yaml@main#89>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 118c8276d9cc41d982c9368e415e26c6
      build_refs:
      - branch: main
        change: '833'
        change_message: "chore(deps): 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/cfg-cookiecutter).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/cfg-cookiecutter/pull/833
        commit_id: 18ab15f30facad7624e367bc5731af8b79b69cdd
        patchset: 18ab15f30facad7624e367bc5731af8b79b69cdd
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cfg-cookiecutter
          name: osism/cfg-cookiecutter
          short_name: cfg-cookiecutter
        src_dir: src/github.com/osism/cfg-cookiecutter
        topic: null
      buildset: 52d4b0a8f63f473fa3056f979e835a45
      buildset_refs:
      - branch: main
        change: '833'
        change_message: "chore(deps): 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/cfg-cookiecutter).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/cfg-cookiecutter/pull/833
        commit_id: 18ab15f30facad7624e367bc5731af8b79b69cdd
        patchset: 18ab15f30facad7624e367bc5731af8b79b69cdd
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cfg-cookiecutter
          name: osism/cfg-cookiecutter
          short_name: cfg-cookiecutter
        src_dir: src/github.com/osism/cfg-cookiecutter
        topic: null
      change: '833'
      change_message: "chore(deps): 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/cfg-cookiecutter).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
      change_url: https://github.com/osism/cfg-cookiecutter/pull/833
      child_jobs: []
      commit_id: 18ab15f30facad7624e367bc5731af8b79b69cdd
      event_id: c89e4130-55a7-11f1-9626-3f64b11d98ec
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/118c8276d9cc41d982c9368e415e26c6/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/118c8276d9cc41d982c9368e415e26c6/work/logs
        result_data_file: /var/lib/zuul/builds/118c8276d9cc41d982c9368e415e26c6/work/results.json
        src_root: /var/lib/zuul/builds/118c8276d9cc41d982c9368e415e26c6/work/src
        work_root: /var/lib/zuul/builds/118c8276d9cc41d982c9368e415e26c6/work
      include_vars: []
      items:
      - branch: main
        change: '833'
        change_message: "chore(deps): 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/cfg-cookiecutter).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/cfg-cookiecutter/pull/833
        commit_id: 18ab15f30facad7624e367bc5731af8b79b69cdd
        patchset: 18ab15f30facad7624e367bc5731af8b79b69cdd
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cfg-cookiecutter
          name: osism/cfg-cookiecutter
          short_name: cfg-cookiecutter
          src_dir: src/github.com/osism/cfg-cookiecutter
        topic: null
      job: cfg-cookiecutter-tox-2024.1
      jobtags: []
      max_attempts: 3
      message: Y2hvcmUoZGVwcyk6IHVwZGF0ZSBkZXBlbmRlbmN5IGNsaWNrIHRvIHY4LjQuMQoKVGhpcyBQUiBjb250YWlucyB0aGUgZm9sbG93aW5nIHVwZGF0ZXM6Cgp8IFBhY2thZ2UgfCBDaGFuZ2UgfCBbQWdlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFtDb25maWRlbmNlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CnwtLS18LS0tfC0tLXwtLS18CnwgW2NsaWNrXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljaykgKFtjaGFuZ2Vsb2ddKGh0dHBzOi8vY2xpY2sucGFsbGV0c3Byb2plY3RzLmNvbS9wYWdlL2NoYW5nZXMvKSkgfCBgPT04LjMuMmAg4oaSIGA9PTguNC4xYCB8ICFbYWdlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWdlL3B5cGkvY2xpY2svOC40LjE/c2xpbT10cnVlKSB8ICFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvcHlwaS9jbGljay84LjMuMi84LjQuMT9zbGltPXRydWUpIHwKCi0tLQoKIyMjIFJlbGVhc2UgTm90ZXMKCjxkZXRhaWxzPgo8c3VtbWFyeT5wYWxsZXRzL2NsaWNrIChjbGljayk8L3N1bW1hcnk+CgojIyMgW2B2OC40LjFgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljay9ibG9iL0hFQUQvQ0hBTkdFUy5yc3QjVmVyc2lvbi04NDEpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2NvbXBhcmUvOC40LjAuLi44LjQuMSkKClJlbGVhc2VkIDIwMjYtMDUtMjEKCi0gYGdldF9wYXJhbWV0ZXJfc291cmNlKClgIGlzIGF2YWlsYWJsZSBkdXJpbmcgZWFnZXIgY2FsbGJhY2tzIGFuZCB0eXBlCiAgY29udmVyc2lvbiBhZ2Fpbi4gOmlzc3VlOmAzNDU4YCA6aXNzdWU6YDM0ODRgCi0gWnNoIGNvbXBsZXRpb24gc2NyaXB0cyBwYXJzZSBjb3JyZWN0bHkgb24gV2luZG93cy4gOmlzc3VlOmAzMjc3YCA6cHI6YDM0NjZgCi0gU2hlbGwgY29tcGxldGlvbiBvZiBgQ2hvaWNlYCBgRW51bWAgdmFsdWVzIHByb2R1Y2VzIGEgdmFsaWQgY29tcGxldGlvbgogIHJlc3VsdC4gOmlzc3VlOmAzMDE1YAotIEZpeCBlbXB0eSBieXRlLXN0cmluZyBoYW5kbGluZyBpbiBlY2hvLiA6aXNzdWU6YDM0ODdgCi0gRml4IGNsb3NlZCBmaWxlIGVycm9yIHdpdGggYGVjaG9fdmlhX3BhZ2VyYC4gOmlzc3VlOmAzNDQ5YAoKIyMjIFtgdjguNC4wYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BhbGxldHMvY2xpY2svYmxvYi9IRUFEL0NIQU5HRVMucnN0I1ZlcnNpb24tODQwKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljay9jb21wYXJlLzguMy4zLi4uOC40LjApCgpVbnJlbGVhc2VkCgotIDpjbGFzczpgUGFyYW1UeXBlYCB0eXBpbmcgaW1wcm92ZW1lbnRzLiA6cHI6YDMzNzFgCgogIC0gOmNsYXNzOmBQYXJhbVR5cGVgIGlzIG5vdyBhIGdlbmVyaWMgYWJzdHJhY3QgYmFzZSBjbGFzcywKICAgIHBhcmFtZXRlcml6ZWQgYnkgaXRzIGNvbnZlcnRlZCB2YWx1ZSB0eXBlLgogIC0gOm1ldGg6YH5QYXJhbVR5cGUuY29udmVydGAgcmV0dXJuIHR5cGVzIGFyZSBuYXJyb3dlZCBvbiBhbGwKICAgIGNvbmNyZXRlIHR5cGVzIChgc3RyYCBmb3IgOmNsYXNzOmBTVFJJTkdgLCBgaW50YCBmb3IKICAgIDpjbGFzczpgSU5UYCwgZXRjLikuCiAgLSA6bWV0aDpgflBhcmFtVHlwZS50b19pbmZvX2RpY3RgIHJldHVybnMgc3BlY2lmaWMKICAgIDpjbGFzczpgfnR5cGluZy5UeXBlZERpY3RgIHN1YmNsYXNzZXMgaW5zdGVhZCBvZgogICAgYGRpY3Rbc3RyLCBBbnldYC4KICAtIDpjbGFzczpgQ29tcG9zaXRlUGFyYW1UeXBlYCBhbmQgdGhlIG51bWJlci1yYW5nZSBiYXNlIGFyZSBub3cKICAgIGdlbmVyaWMgd2l0aCBhYnN0cmFjdCBtZXRob2RzLgotIFJlZmFjdG9yIGBjb252ZXJ0X3R5cGVgIHRvIGV4dHJhY3QgdHlwZSBpbmZlcmVuY2UgaW50byBhIHByaXZhdGUKICBgX2d1ZXNzX3R5cGVgIGhlbHBlciwgYW5kIGFkZCA6ZnVuYzpgdHlwaW5nLm92ZXJsb2FkYCBzaWduYXR1cmVzLgogIDpwcjpgMzM3MmAKLSA6Y2xhc3M6YFBhcmFtZXRlcmAgdHlwaW5nIGltcHJvdmVtZW50cy4gOnByOmAyODA1YAoKICAtIDpjbGFzczpgUGFyYW1ldGVyYCBpcyBub3cgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcywgbWFraW5nIGV4cGxpY2l0CiAgICB0aGF0IGl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuCiAgLSA6YXR0cjpgUGFyYW1ldGVyLm5hbWVgIGlzIG5vdyBgc3RyYCBpbnN0ZWFkIG9mIGBzdHIgfCBOb25lYC4KICAgIFdoZW4gYGV4cG9zZV92YWx1ZT1GYWxzZWAsIHRoZSBuYW1lIGlzIHNldCB0byBgIiJgIGluc3RlYWQKICAgIG9mIGBOb25lYC4KICAtIFRoZSBgY3R4YCBwYXJhbWV0ZXIgb2YgOm1ldGg6YFBhcmFtZXRlci5nZXRfZXJyb3JfaGludGAgaXMgbm93CiAgICB0eXBlZCBhcyBgQ29udGV4dCB8IE5vbmVgLCBtYXRjaGluZyB0aGUgcnVudGltZSBiZWhhdmlvci4KLSBTcGxpdCBzdHJpbmcgdmFsdWVzIGZyb20gYGRlZmF1bHRfbWFwYCBmb3IgcGFyYW1ldGVycyB3aXRoIGBuYXJncyA+IDFgCiAgb3IgOmNsYXNzOmBUdXBsZWAgdHlwZSwgbWF0Y2hpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVoYXZpb3IuCiAgOmlzc3VlOmAyNzQ1YCA6cHI6YDMzNjRgCi0gQXV0by1kZXRlY3QgYHR5cGU9VU5QUk9DRVNTRURgIGZvciBgZmxhZ192YWx1ZWAgb2Ygbm9uLWJhc2ljIHR5cGVzCiAgKG5vdCBgc3RyYCwgYGludGAsIGBmbG9hdGAsIG9yIGBib29sYCksIHNvIHByb2dyYW1tZXItcHJvdmlkZWQKICBQeXRob24gb2JqZWN0cyBsaWtlIGNsYXNzZXMgYW5kIGVudW0gbWVtYmVycyBhcmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkCiAgaW5zdGVhZCBvZiBiZWluZyBzdHJpbmdpZmllZC4gUHJldmlvdXNseSBgdHlwZT1jbGljay5VTlBST0NFU1NFRGAgaGFkCiAgdG8gYmUgc2V0IGV4cGxpY2l0bHkuIDppc3N1ZTpgMjAxMmAgOnByOmAzMzYzYAotIFRoZSBlcnJvciBoaW50IG5vdyB1c2VzIDptZXRoOmBDb21tYW5kLmdldF9oZWxwX29wdGlvbl9uYW1lc2AgdG8gcGljawogIG5vbi1zaGFkb3dlZCBoZWxwIG9wdGlvbiBuYW1lcywgc28gYFRyeSAnLi4uIC1oJ2Agbm8gbG9uZ2VyIHBvaW50cyB0byBhCiAgc3ViY29tbWFuZCBvcHRpb24gdGhhdCBzaGFkb3dzIGAtaGAuIEFsbCBzdXJ2aXZpbmcgbmFtZXMgYXJlIHNob3duCiAgKGAtaC8tLWhlbHBgKS4gOmlzc3VlOmAyNzkwYCA6cHI6YDMyMDhgCi0gRml4IHJlYWRsaW5lIGZ1bmN0aW9uYWxpdHkgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zLiBQcm9tcHQgdGV4dCBpcyBub3cKICBwYXNzZWQgZGlyZWN0bHkgdG8gcmVhZGxpbmUgaW5zdGVhZCBvZiBiZWluZyBwcmludGVkIHNlcGFyYXRlbHksIGFsbG93aW5nCiAgcHJvcGVyIGJhY2tzcGFjZSwgbGluZSBlZGl0aW5nLCBhbmQgbGluZSB3cmFwcGluZyBiZWhhdmlvci4gOmlzc3VlOmAyOTY4YAogIDpwcjpgMjk2OWAKLSBVc2UgOmZ1bmM6YG9zLnN0YXJ0ZmlsZWAgb24gV2luZG93cyB0byBvcGVuIFVSTHMgaW4gOmZ1bmM6YG9wZW5fdXJsYCwKICByZXBsYWNpbmcgdGhlIGBzdGFydGAgYnVpbHQtaW4gd2hpY2ggY2Fubm90IGJlIGludm9rZWQgd2l0aG91dAogIGBzaGVsbD1UcnVlYC4gOmlzc3VlOmAzMTY0YCA6cHI6YDMxODZgCi0gRml4IEZpc2ggc2hlbGwgY29tcGxldGlvbiBlcnJvcnMgd2hlbiBvcHRpb24gaGVscCB0ZXh0IGNvbnRhaW5zIG5ld2xpbmVzLgogIDppc3N1ZTpgMzA0M2AgOnByOmAzMTI2YAotIEFkZCA6Y2xhc3M6YE5vU3VjaENvbW1hbmRgIGV4Y2VwdGlvbiB3aXRoIHN1Z2dlc3Rpb25zIGZvciBtaXNzcGVsbGVkCiAgY29tbWFuZHMuIDppc3N1ZTpgMzEwN2AgOnByOmAzMjI4YAotIFVzZSA6Y2xhc3M6YFZhbHVlRXJyb3JgIG1lc3NhZ2Ugd2hlbiBjb252ZXJzaW9uIGluIDpjbGFzczpgRnVuY1BhcmFtVHlwZWAgd291bGQKICBmYWlsLiA6aXNzdWU6YDMxMDVgIDpwcjpgMzIxMWAKLSBBZGQgYGNsaWNrLmdldF9wYWdlcl9maWxlYCBmb3IgZmlsZS1saWtlIGFjY2VzcyB0byBhbiBvdXRwdXQKICBwYWdlci4gOnByOmAxNTcyYCA6cHI6YDM0MDVgCi0gOmNsYXNzOmB+Y2xpY2suZm9ybWF0dGluZy5UZXh0V3JhcHBlcmAgYW5kCiAgOmZ1bmM6YH5jbGljay5mb3JtYXR0aW5nLndyYXBfdGV4dGAgbm93IG1lYXN1cmUgbGluZSB3aWR0aCBpbiB2aXNpYmxlCiAgY2hhcmFjdGVycywgaWdub3JpbmcgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLiA6cHI6YDM0MjBgCi0gRml4IDptZXRoOmBIZWxwRm9ybWF0dGVyLndyaXRlX3VzYWdlYCBlbWl0dGluZyBvbmx5IGEgYmxhbmsgbGluZSB3aGVuCiAgY2FsbGVkIHdpdGhvdXQgYGFyZ3NgLiBUaGUgdXNhZ2UgcHJlZml4IGFuZCBwcm9ncmFtIG5hbWUgYXJlIG5vdwogIHdyaXR0ZW4gZXZlbiB3aGVuIG5vIGFyZ3VtZW50cyBmb2xsb3csIGFuZCB0aGUgdHJhaWxpbmcgc2VwYXJhdG9yCiAgc3BhY2UgaXMgc3RyaXBwZWQgc28gdGhlIGxpbmUgZW5kcyBhdCB0aGUgcHJvZ3JhbSBuYW1lLgogIDppc3N1ZTpgMzM2MGAgOnByOmAzNDM0YAotIFNob3cgY3VzdG9tIGVycm9yIG1lc3NhZ2VzIGZyb20gdHlwZXMgd2hlbiA6ZnVuYzpgcHJvbXB0YCB3aXRoCiAgYGhpZGVfaW5wdXQ9VHJ1ZWAgZmFpbHMgdmFsaWRhdGlvbiwgaW5zdGVhZCBvZiBhbHdheXMgc2hvd2luZyBhCiAgZ2VuZXJpYyBtZXNzYWdlLiBCdWlsdC1pbiB0eXBlIG1lc3NhZ2VzIG1hc2sgdGhlIGlucHV0IHZhbHVlLgogIDppc3N1ZTpgMjgwOWAgOnByOmAzMjU2YAotIEFkZCBgY2FwdHVyZWAgcGFyYW1ldGVyIHRvIDpjbGFzczpgQ2xpUnVubmVyYCB3aXRoIHR3byBtb2RlczogYHN5c2AKICAoZGVmYXVsdCkgYW5kIGBmZGAuIGBmZGAgcmVkaXJlY3RzIGZpbGUgZGVzY3JpcHRvcnMgYDFgIGFuZCBgMmAKICB2aWEgOmZ1bmM6YG9zLmR1cDJgIHNvIG91dHB1dCB0aGF0IGJ5cGFzc2VzIGBzeXMuc3Rkb3V0YCAoc3RhbGUgc3RyZWFtCiAgcmVmZXJlbmNlcywgQyBleHRlbnNpb25zLCBzdWJwcm9jZXNzZXMsIGBmYXVsdGhhbmRsZXJgKSBpcyBjYXB0dXJlZAogIHdpdGggcHJvcGVyIGlzb2xhdGlvbi4gOmlzc3VlOmA4NTRgIDppc3N1ZTpgMjQxMmAgOmlzc3VlOmAyNDY4YAogIDppc3N1ZTpgMjQ5N2AgOmlzc3VlOmAyNzYxYCA6aXNzdWU6YDI4MjdgIDppc3N1ZTpgMjg2NWAKLSBSZXZlcnQgdGhlIGA4LjMuM2AgY2hhbmdlIHRoYXQgZXhwb3NlZCB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yCiAgdmlhIGBmaWxlbm8oKWAgb24gdGhlIHJlZGlyZWN0ZWQgYENsaVJ1bm5lcmAgc3RyZWFtcyBpbiB0aGUgZGVmYXVsdAogIGNhcHR1cmUgbW9kZS4gYG9zLmR1cDIodywgc3lzLnN0ZG91dC5maWxlbm8oKSlgIGNhbGxzIGluc2lkZSBhIENMSSBubwogIGxvbmdlciBtdXRhdGUgdGhlIGhvc3QgcnVubmVyJ3Mgc3Rkb3V0LCB3aGljaCBicm9rZSBQeXRlc3QncyBgZmRgLWxldmVsCiAgY2FwdHVyZSB0ZWFyZG93bi4gQy1sZXZlbCBjb25zdW1lcnMgdGhhdCBuZWVkIGEgcmVhbCBgZmRgIHNob3VsZCB1c2UKICBgY2FwdHVyZT0iZmQiYC4gOmlzc3VlOmAzMzg0YCA6cHI6YDMzOTFgCi0gTWFyayBhZGRpdGlvbmFsIGJ1aWx0LWluIHN0cmluZ3Mgd2l0aCBgZ2V0dGV4dCgpYCB0byBleHRlbmQgdHJhbnNsYXRpb24KICBjb3ZlcmFnZS4gOnByOmAyOTAyYAotIEZpeCBmZWF0dXJlIHN3aXRjaCBncm91cHMgKHNldmVyYWwgYGZsYWdfdmFsdWVgIG9wdGlvbnMgc2hhcmluZyBvbmUKICBwYXJhbWV0ZXIgbmFtZSkgc2lsZW50bHkgZHJvcHBpbmcgYW4gZXhwbGljaXQgYGRlZmF1bHRgIHdoZW4gYSBzaWJsaW5nCiAgb3B0aW9uIHdpdGhvdXQgYW4gZXhwbGljaXQgZGVmYXVsdCB3YXMgZGVjbGFyZWQgZmlyc3QuIEFyYml0cmF0aW9uIGlzIG5vdwogIHNvdXJjZS1hd2FyZTogYSBtb3JlIGV4cGxpY2l0IDpjbGFzczpgUGFyYW1ldGVyU291cmNlYCBhbHdheXMgd2lucywgYW5kCiAgd2l0aGluIGBQYXJhbWV0ZXJTb3VyY2UuREVGQVVMVGAsIGFuIG9wdGlvbiB0aGF0IHJlY2VpdmVkIGFuIGV4cGxpY2l0CiAgYGRlZmF1bHQ9YCBrZXl3b3JkIHdpbnMgb3ZlciBhIHNpYmxpbmcgd2hvc2UgZGVmYXVsdCB3YXMgYXV0by1kZXJpdmVkLgogIFRoZSA4LjMueCBmaXJzdC13aW5zIGZhbGxiYWNrIGZvciByZW1haW5pbmcgdGllcyB3YXMgcmV2ZXJ0ZWQgdG8gdGhlCiAgcHJlLTguMy54IGxhc3Qtd2lucyBmYWxsYmFjay4gOmlzc3VlOmAzNDAzYCA6cHI6YDM0MDRgCi0gRml4IG1pc3Npbmcgc3BhY2UgYmV0d2VlbiBvcHRpb24gaGVscCB0ZXh0IGFuZCB0aGUgYChERVBSRUNBVEVEKWAKICBsYWJlbCwgYW5kIGxvY2FsaXplIHRoZSBvcHRpb24gbGFiZWwgc28gaXQgbWF0Y2hlcyB0aGUgY29tbWFuZCBsYWJlbC4KICBUaGUgbGFiZWwgYW5kIHRoZSBgRGVwcmVjYXRpb25XYXJuaW5nYCByZWFzb24gc3VmZml4IGFyZSBub3cgcHJvZHVjZWQKICBieSBzaGFyZWQgaGVscGVycy4gOnByOmAzNDIzYAotIERvY3VtZW50IHNob3J0IG9wdGlvbiBzdGFja2luZyAoYC1hYmNgIGlzIHBhcnNlZCBhcyBgLWEgLWIgLWNgKSBhbmQKICBjbGFyaWZ5IHRoYXQgbXVsdGktY2hhcmFjdGVyIHNob3J0IG9wdGlvbiBuYW1lcyBhcmUgbm90IHN1cHBvcnRlZC4KICA6aXNzdWU6YDI3NzlgIDpwcjpgMzQzMWAKCiMjIyBbYHY4LjMuM2BdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2NvbXBhcmUvOC4zLjIuLi44LjMuMykKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BhbGxldHMvY2xpY2svY29tcGFyZS84LjMuMi4uLjguMy4zKQoKPC9kZXRhaWxzPgoKLS0tCgojIyMgQ29uZmlndXJhdGlvbgoK8J+ThSAqKlNjaGVkdWxlKio6IChVVEMpCgotIEJyYW5jaCBjcmVhdGlvbgogIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpCi0gQXV0b21lcmdlCiAgLSBBdCBhbnkgdGltZSAobm8gc2NoZWR1bGUgZGVmaW5lZCkKCvCfmqYgKipBdXRvbWVyZ2UqKjogRGlzYWJsZWQgYnkgY29uZmlnLiBQbGVhc2UgbWVyZ2UgdGhpcyBtYW51YWxseSBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkLgoK4pm7ICoqUmViYXNpbmcqKjogV2hlbmV2ZXIgUFIgYmVjb21lcyBjb25mbGljdGVkLCBvciB5b3UgdGljayB0aGUgcmViYXNlL3JldHJ5IGNoZWNrYm94LgoK8J+UlSAqKklnbm9yZSoqOiBDbG9zZSB0aGlzIFBSIGFuZCB5b3Ugd29uJ3QgYmUgcmVtaW5kZWQgYWJvdXQgdGhpcyB1cGRhdGUgYWdhaW4uCgotLS0KCiAtIFsgXSA8IS0tIHJlYmFzZS1jaGVjayAtLT5JZiB5b3Ugd2FudCB0byByZWJhc2UvcmV0cnkgdGhpcyBQUiwgY2hlY2sgdGhpcyBib3gKCi0tLQoKVGhpcyBQUiB3YXMgZ2VuZXJhdGVkIGJ5IFtNZW5kIFJlbm92YXRlXShodHRwczovL21lbmQuaW8vcmVub3ZhdGUvKS4gVmlldyB0aGUgW3JlcG9zaXRvcnkgam9iIGxvZ10oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9naXRodWIvb3Npc20vY2ZnLWNvb2tpZWN1dHRlcikuCjwhLS1yZW5vdmF0ZS1kZWJ1ZzpleUpqY21WaGRHVmtTVzVXWlhJaU9pSTBNeTR4TXprdU5DSXNJblZ3WkdGMFpXUkpibFpsY2lJNklqUXpMakU0TlM0eElpd2lkR0Z5WjJWMFFuSmhibU5vSWpvaWJXRnBiaUlzSW14aFltVnNjeUk2V3lKeVpXNXZkbUYwWlNKZGZRPT0tLT4K
      patchset: 18ab15f30facad7624e367bc5731af8b79b69cdd
      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/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          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/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
        playbooks:
        - path: untrusted/project_0/github.com/osism/openinfra-zuul-jobs/playbooks/tox/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: playbook branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_0/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_2/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/cfg-cookiecutter
        name: osism/cfg-cookiecutter
        short_name: cfg-cookiecutter
        src_dir: src/github.com/osism/cfg-cookiecutter
      projects:
        github.com/osism/cfg-cookiecutter:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cfg-cookiecutter
          checkout: main
          checkout_description: zuul branch
          commit: fdbcb236f3812fe138b67622edcab4d2e36991be
          name: osism/cfg-cookiecutter
          required: false
          short_name: cfg-cookiecutter
          src_dir: src/github.com/osism/cfg-cookiecutter
      ref: refs/pull/833/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
