Skip to content

docs: add an Ubuntu 26.04 migration guide#2673

Open
lengau wants to merge 10 commits intomainfrom
work/CHARMCRAFT-658
Open

docs: add an Ubuntu 26.04 migration guide#2673
lengau wants to merge 10 commits intomainfrom
work/CHARMCRAFT-658

Conversation

@lengau
Copy link
Copy Markdown
Collaborator

@lengau lengau commented Apr 23, 2026

Adds the migration guide drafted at https://docs.google.com/document/d/1HT3PHBNkKl2zc_gG_aUXY90F0IJHTf6B0hJnJRL_ppU/edit?tab=t.d1id7295jqbu#heading=h.wo85iddo4jkd

CHARMCRAFT-658


  • I've followed the contribution guidelines.
  • I've signed the CLA.
  • I've successfully run make lint && make test.
  • I've added or updated any relevant documentation.
  • In documents I changed, I added a meta description if one was missing.
  • I've updated the relevant release notes.

@lengau lengau requested a review from a team as a code owner April 23, 2026 15:56
@lengau lengau force-pushed the work/CHARMCRAFT-658 branch from 9c1f662 to 7729ba6 Compare April 23, 2026 15:59
@canonical canonical deleted a comment from github-actions Bot Apr 23, 2026
@canonical canonical deleted a comment from github-actions Bot Apr 23, 2026
@canonical canonical deleted a comment from github-actions Bot Apr 23, 2026
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread docs/howto/index.rst
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Contributor

@medubelko medubelko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are all small bits and bobs, but the gist is good!

Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-plugins/charm-to-poetry.rst Outdated
Comment thread docs/howto/migrate-plugins/charm-to-python.rst Outdated
Comment thread docs/howto/migrate-plugins/charm-to-uv.rst Outdated
@medubelko medubelko requested a review from jahn-junior April 24, 2026 01:00
Co-authored-by: Michael DuBelko <michael.dubelko@gmail.com>
Signed-off-by: Alex Lowe <alex.lowe@canonical.com>
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Signed-off-by: Alex Lowe <alex.lowe@canonical.com>
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

Co-authored-by: Michael DuBelko <michael.dubelko@gmail.com>
Signed-off-by: Alex Lowe <alex.lowe@canonical.com>
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

1 similar comment
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

@lengau lengau requested a review from medubelko April 24, 2026 14:06
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Copy link
Copy Markdown
Contributor

@jahn-junior jahn-junior left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The overall structure and content looks good to me! I suggested a few minor tweaks, but none of them are blocking.

Thanks, @lengau!

Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
Co-authored-by: Michael DuBelko <michael.dubelko@canonical.com>
Signed-off-by: Alex Lowe <alex.lowe@canonical.com>
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

Co-authored-by: JJ Coldiron <jj.coldiron@canonical.com>
Signed-off-by: Alex Lowe <alex.lowe@canonical.com>
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst
Comment thread docs/howto/migrate-bases/change-to-ubuntu@26.04.rst Outdated
lengau and others added 2 commits April 27, 2026 15:42
Co-authored-by: JJ Coldiron <jj.coldiron@canonical.com>
Signed-off-by: Alex Lowe <alex.lowe@canonical.com>
Co-authored-by: JJ Coldiron <jj.coldiron@canonical.com>
Signed-off-by: Alex Lowe <alex.lowe@canonical.com>
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

1 similar comment
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1431/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1431/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

@lengau lengau requested a review from medubelko April 27, 2026 19:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants