We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Local key assets are not used in package-repositories for core24
### Bug Description

Local key assets are not used in package-repositories for core24 (only the keyserver is supported)

### To Reproduce

.

### Environment

.

### snapcraft.yaml

```shell
.
```


### Relevant log output

```shell
.
```


### Additional context

_No response_

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `snapcraft/services/lifecycle.py`
Content:
```
1 # -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
2 #
3 # Copyright 2024 Canonical Ltd.
4 #
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License version 3 as
7 # published by the Free Software Foundation.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 """Snapcraft Lifecycle Service."""
17 
18 import copy
19 import json
20 import os
21 from datetime import datetime
22 from pathlib import Path
23 from typing import Any, cast
24 
25 from craft_application import AppMetadata, LifecycleService, ServiceFactory
26 from craft_application.models import BuildInfo
27 from craft_parts import ProjectInfo, StepInfo, callbacks
28 from craft_parts.packages import Repository as Repo
29 from overrides import overrides
30 
31 from snapcraft import __version__, errors, models, os_release, parts, utils
32 
33 
34 class Lifecycle(LifecycleService):
35     """Snapcraft specialization of the Lifecycle Service."""
36 
37     def __init__(  # noqa: PLR0913 (too many arguments)
38         self,
39         app: AppMetadata,
40         services: ServiceFactory,
41         *,
42         project: models.Project,
43         work_dir: Path | str,
44         cache_dir: Path | str,
45         build_plan: list[BuildInfo],
46         **lifecycle_kwargs: Any,  # noqa: ANN401 - eventually used in an Any
47     ) -> None:
48         super().__init__(
49             app,
50             services,
51             project=project,
52             work_dir=work_dir,
53             cache_dir=cache_dir,
54             build_plan=build_plan,
55             **lifecycle_kwargs,
56         )
57         self._start_time = datetime.now()
58         self._manifest: models.Manifest
59 
60     @overrides
61     def setup(self) -> None:
62         project = cast(models.Project, self._project)
63 
64         if project.package_repositories:
65             # Note: we unfortunately need to handle missing gpg/dirmngr binaries
66             # ourselves here, as this situation happens in Launchpad (where
67             # builds are executed destructively).
68             required_packages = ["gpg", "dirmngr"]
69             if any(p for p in required_packages if not Repo.is_package_installed(p)):
70                 Repo.install_packages(required_packages, refresh_package_cache=False)
71 
72         # Have the lifecycle install the base snap, and look into it when
73         # determining the package cutoff.
74         self._manager_kwargs.update(
75             base=project.get_effective_base(),
76             extra_build_snaps=project.get_extra_build_snaps(),
77             confinement=project.confinement,
78             project_base=project.base or "",
79         )
80         callbacks.register_prologue(parts.set_global_environment)
81         callbacks.register_pre_step(parts.set_step_environment)
82         super().setup()
83 
84     @overrides
85     def post_prime(self, step_info: StepInfo) -> bool:
86         """Run post-prime parts steps for Snapcraft."""
87         return parts.patch_elf(step_info)
88 
89     def get_prime_dir(self, component: str | None = None) -> Path:
90         """Get the prime directory path for the default prime dir or a component.
91 
92         :param component: Name of the component to get the prime directory for.
93 
94         :returns: The default prime directory or a component's prime directory.
95 
96         :raises SnapcraftError: If the component does not exist.
97         """
98         try:
99             return self.prime_dirs[component]
100         except KeyError as err:
101             raise errors.SnapcraftError(
102                 f"Could not get prime directory for component {component!r} "
103                 "because it does not exist."
104             ) from err
105 
106     @property
107     def prime_dirs(self) -> dict[str | None, Path]:
108         """Return a mapping of component names to prime directories.
109 
110         'None' maps to the default prime directory.
111         """
112         return get_prime_dirs_from_project(self._lcm.project_info)
113 
114     def generate_manifest(self) -> models.Manifest:
115         """Create and populate the manifest file."""
116         primed_stage_packages: set[str] = set()
117 
118         image_information = os.getenv("SNAPCRAFT_IMAGE_INFO", "{}")
119         try:
120             image_info = json.loads(image_information)
121         except json.decoder.JSONDecodeError as err:
122             raise errors.SnapcraftError(
123                 f"Image information decode error at {err.lineno}:{err.colno}: "
124                 f"{err.doc!r}: {err.msg}"
125             ) from err
126 
127         project = cast(models.Project, self._project)
128 
129         project_parts = copy.deepcopy(project.parts)
130         for name, part in project_parts.items():
131             assets = self.get_pull_assets(part_name=name)
132             if assets:
133                 part["stage-packages"] = assets.get("stage-packages", []) or []
134             for key in ("stage", "prime", "stage-packages", "build-packages"):
135                 part.setdefault(key, [])
136 
137             stage_packages = self.get_primed_stage_packages(part_name=name)
138             if stage_packages:
139                 primed_stage_packages |= set(stage_packages)
140 
141         osrel = os_release.OsRelease()
142         version = utils.process_version(project.version)
143         host_arch = utils.get_host_architecture()
144         build_for = self._build_plan[0].build_for if self._build_plan else host_arch
145 
146         return models.Manifest(
147             # Snapcraft annotations
148             snapcraft_version=__version__,
149             snapcraft_started_at=self._start_time.isoformat("T") + "Z",
150             snapcraft_os_release_id=osrel.name().lower(),
151             snapcraft_os_release_version_id=osrel.version_id().lower(),
152             # Project fields
153             name=project.name,
154             version=version,
155             summary=str(project.summary),
156             description=str(project.description),
157             base=project.base,
158             grade=project.grade or "stable",
159             confinement=project.confinement,
160             apps=project.apps,
161             parts=project_parts,
162             # Architecture
163             architectures=[build_for],
164             # Image info
165             image_info=image_info,
166             # Build environment
167             build_packages=[],
168             build_snaps=[],
169             primed_stage_packages=sorted(primed_stage_packages),
170         )
171 
172 
173 def get_prime_dirs_from_project(project_info: ProjectInfo) -> dict[str | None, Path]:
174     """Get a mapping of component names to prime directories from a ProjectInfo.
175 
176     'None' maps to the default prime directory.
177 
178     :param project_info: The ProjectInfo to get the prime directory mapping from.
179     """
180     partition_prime_dirs = project_info.prime_dirs
181     component_prime_dirs: dict[str | None, Path] = {None: project_info.prime_dir}
182 
183     # strip 'component/' prefix so that the component name is the key
184     for partition, prime_dir in partition_prime_dirs.items():
185         if partition and partition.startswith("component/"):
186             component = partition.split("/", 1)[1]
187             component_prime_dirs[component] = prime_dir
188 
189     return component_prime_dirs
190
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/snapcraft/services/lifecycle.py b/snapcraft/services/lifecycle.py
--- a/snapcraft/services/lifecycle.py
+++ b/snapcraft/services/lifecycle.py
@@ -29,6 +29,7 @@
 from overrides import overrides
 
 from snapcraft import __version__, errors, models, os_release, parts, utils
+from snapcraft.parts.yaml_utils import get_snap_project
 
 
 class Lifecycle(LifecycleService):
@@ -169,6 +170,15 @@
             primed_stage_packages=sorted(primed_stage_packages),
         )
 
+    @overrides
+    def _get_local_keys_path(self) -> Path | None:
+        snap_project = get_snap_project()
+        keys_dir = snap_project.assets_dir / "keys"
+        if keys_dir.is_dir():
+            return keys_dir
+
+        return None
+
 
 def get_prime_dirs_from_project(project_info: ProjectInfo) -> dict[str | None, Path]:
     """Get a mapping of component names to prime directories from a ProjectInfo.

{"golden_diff": "diff --git a/snapcraft/services/lifecycle.py b/snapcraft/services/lifecycle.py\n--- a/snapcraft/services/lifecycle.py\n+++ b/snapcraft/services/lifecycle.py\n@@ -29,6 +29,7 @@\n from overrides import overrides\n \n from snapcraft import __version__, errors, models, os_release, parts, utils\n+from snapcraft.parts.yaml_utils import get_snap_project\n \n \n class Lifecycle(LifecycleService):\n@@ -169,6 +170,15 @@\n             primed_stage_packages=sorted(primed_stage_packages),\n         )\n \n+    @overrides\n+    def _get_local_keys_path(self) -> Path | None:\n+        snap_project = get_snap_project()\n+        keys_dir = snap_project.assets_dir / \"keys\"\n+        if keys_dir.is_dir():\n+            return keys_dir\n+\n+        return None\n+\n \n def get_prime_dirs_from_project(project_info: ProjectInfo) -> dict[str | None, Path]:\n     \"\"\"Get a mapping of component names to prime directories from a ProjectInfo.\n", "issue": "Local key assets are not used in package-repositories for core24\n### Bug Description\n\nLocal key assets are not used in package-repositories for core24 (only the keyserver is supported)\n\n### To Reproduce\n\n.\n\n### Environment\n\n.\n\n### snapcraft.yaml\n\n```shell\n.\n```\n\n\n### Relevant log output\n\n```shell\n.\n```\n\n\n### Additional context\n\n_No response_\n", "before_files": [{"content": "# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-\n#\n# Copyright 2024 Canonical Ltd.\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License version 3 as\n# published by the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\"\"\"Snapcraft Lifecycle Service.\"\"\"\n\nimport copy\nimport json\nimport os\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Any, cast\n\nfrom craft_application import AppMetadata, LifecycleService, ServiceFactory\nfrom craft_application.models import BuildInfo\nfrom craft_parts import ProjectInfo, StepInfo, callbacks\nfrom craft_parts.packages import Repository as Repo\nfrom overrides import overrides\n\nfrom snapcraft import __version__, errors, models, os_release, parts, utils\n\n\nclass Lifecycle(LifecycleService):\n    \"\"\"Snapcraft specialization of the Lifecycle Service.\"\"\"\n\n    def __init__(  # noqa: PLR0913 (too many arguments)\n        self,\n        app: AppMetadata,\n        services: ServiceFactory,\n        *,\n        project: models.Project,\n        work_dir: Path | str,\n        cache_dir: Path | str,\n        build_plan: list[BuildInfo],\n        **lifecycle_kwargs: Any,  # noqa: ANN401 - eventually used in an Any\n    ) -> None:\n        super().__init__(\n            app,\n            services,\n            project=project,\n            work_dir=work_dir,\n            cache_dir=cache_dir,\n            build_plan=build_plan,\n            **lifecycle_kwargs,\n        )\n        self._start_time = datetime.now()\n        self._manifest: models.Manifest\n\n    @overrides\n    def setup(self) -> None:\n        project = cast(models.Project, self._project)\n\n        if project.package_repositories:\n            # Note: we unfortunately need to handle missing gpg/dirmngr binaries\n            # ourselves here, as this situation happens in Launchpad (where\n            # builds are executed destructively).\n            required_packages = [\"gpg\", \"dirmngr\"]\n            if any(p for p in required_packages if not Repo.is_package_installed(p)):\n                Repo.install_packages(required_packages, refresh_package_cache=False)\n\n        # Have the lifecycle install the base snap, and look into it when\n        # determining the package cutoff.\n        self._manager_kwargs.update(\n            base=project.get_effective_base(),\n            extra_build_snaps=project.get_extra_build_snaps(),\n            confinement=project.confinement,\n            project_base=project.base or \"\",\n        )\n        callbacks.register_prologue(parts.set_global_environment)\n        callbacks.register_pre_step(parts.set_step_environment)\n        super().setup()\n\n    @overrides\n    def post_prime(self, step_info: StepInfo) -> bool:\n        \"\"\"Run post-prime parts steps for Snapcraft.\"\"\"\n        return parts.patch_elf(step_info)\n\n    def get_prime_dir(self, component: str | None = None) -> Path:\n        \"\"\"Get the prime directory path for the default prime dir or a component.\n\n        :param component: Name of the component to get the prime directory for.\n\n        :returns: The default prime directory or a component's prime directory.\n\n        :raises SnapcraftError: If the component does not exist.\n        \"\"\"\n        try:\n            return self.prime_dirs[component]\n        except KeyError as err:\n            raise errors.SnapcraftError(\n                f\"Could not get prime directory for component {component!r} \"\n                \"because it does not exist.\"\n            ) from err\n\n    @property\n    def prime_dirs(self) -> dict[str | None, Path]:\n        \"\"\"Return a mapping of component names to prime directories.\n\n        'None' maps to the default prime directory.\n        \"\"\"\n        return get_prime_dirs_from_project(self._lcm.project_info)\n\n    def generate_manifest(self) -> models.Manifest:\n        \"\"\"Create and populate the manifest file.\"\"\"\n        primed_stage_packages: set[str] = set()\n\n        image_information = os.getenv(\"SNAPCRAFT_IMAGE_INFO\", \"{}\")\n        try:\n            image_info = json.loads(image_information)\n        except json.decoder.JSONDecodeError as err:\n            raise errors.SnapcraftError(\n                f\"Image information decode error at {err.lineno}:{err.colno}: \"\n                f\"{err.doc!r}: {err.msg}\"\n            ) from err\n\n        project = cast(models.Project, self._project)\n\n        project_parts = copy.deepcopy(project.parts)\n        for name, part in project_parts.items():\n            assets = self.get_pull_assets(part_name=name)\n            if assets:\n                part[\"stage-packages\"] = assets.get(\"stage-packages\", []) or []\n            for key in (\"stage\", \"prime\", \"stage-packages\", \"build-packages\"):\n                part.setdefault(key, [])\n\n            stage_packages = self.get_primed_stage_packages(part_name=name)\n            if stage_packages:\n                primed_stage_packages |= set(stage_packages)\n\n        osrel = os_release.OsRelease()\n        version = utils.process_version(project.version)\n        host_arch = utils.get_host_architecture()\n        build_for = self._build_plan[0].build_for if self._build_plan else host_arch\n\n        return models.Manifest(\n            # Snapcraft annotations\n            snapcraft_version=__version__,\n            snapcraft_started_at=self._start_time.isoformat(\"T\") + \"Z\",\n            snapcraft_os_release_id=osrel.name().lower(),\n            snapcraft_os_release_version_id=osrel.version_id().lower(),\n            # Project fields\n            name=project.name,\n            version=version,\n            summary=str(project.summary),\n            description=str(project.description),\n            base=project.base,\n            grade=project.grade or \"stable\",\n            confinement=project.confinement,\n            apps=project.apps,\n            parts=project_parts,\n            # Architecture\n            architectures=[build_for],\n            # Image info\n            image_info=image_info,\n            # Build environment\n            build_packages=[],\n            build_snaps=[],\n            primed_stage_packages=sorted(primed_stage_packages),\n        )\n\n\ndef get_prime_dirs_from_project(project_info: ProjectInfo) -> dict[str | None, Path]:\n    \"\"\"Get a mapping of component names to prime directories from a ProjectInfo.\n\n    'None' maps to the default prime directory.\n\n    :param project_info: The ProjectInfo to get the prime directory mapping from.\n    \"\"\"\n    partition_prime_dirs = project_info.prime_dirs\n    component_prime_dirs: dict[str | None, Path] = {None: project_info.prime_dir}\n\n    # strip 'component/' prefix so that the component name is the key\n    for partition, prime_dir in partition_prime_dirs.items():\n        if partition and partition.startswith(\"component/\"):\n            component = partition.split(\"/\", 1)[1]\n            component_prime_dirs[component] = prime_dir\n\n    return component_prime_dirs\n", "path": "snapcraft/services/lifecycle.py"}], "after_files": [{"content": "# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-\n#\n# Copyright 2024 Canonical Ltd.\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License version 3 as\n# published by the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\"\"\"Snapcraft Lifecycle Service.\"\"\"\n\nimport copy\nimport json\nimport os\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Any, cast\n\nfrom craft_application import AppMetadata, LifecycleService, ServiceFactory\nfrom craft_application.models import BuildInfo\nfrom craft_parts import ProjectInfo, StepInfo, callbacks\nfrom craft_parts.packages import Repository as Repo\nfrom overrides import overrides\n\nfrom snapcraft import __version__, errors, models, os_release, parts, utils\nfrom snapcraft.parts.yaml_utils import get_snap_project\n\n\nclass Lifecycle(LifecycleService):\n    \"\"\"Snapcraft specialization of the Lifecycle Service.\"\"\"\n\n    def __init__(  # noqa: PLR0913 (too many arguments)\n        self,\n        app: AppMetadata,\n        services: ServiceFactory,\n        *,\n        project: models.Project,\n        work_dir: Path | str,\n        cache_dir: Path | str,\n        build_plan: list[BuildInfo],\n        **lifecycle_kwargs: Any,  # noqa: ANN401 - eventually used in an Any\n    ) -> None:\n        super().__init__(\n            app,\n            services,\n            project=project,\n            work_dir=work_dir,\n            cache_dir=cache_dir,\n            build_plan=build_plan,\n            **lifecycle_kwargs,\n        )\n        self._start_time = datetime.now()\n        self._manifest: models.Manifest\n\n    @overrides\n    def setup(self) -> None:\n        project = cast(models.Project, self._project)\n\n        if project.package_repositories:\n            # Note: we unfortunately need to handle missing gpg/dirmngr binaries\n            # ourselves here, as this situation happens in Launchpad (where\n            # builds are executed destructively).\n            required_packages = [\"gpg\", \"dirmngr\"]\n            if any(p for p in required_packages if not Repo.is_package_installed(p)):\n                Repo.install_packages(required_packages, refresh_package_cache=False)\n\n        # Have the lifecycle install the base snap, and look into it when\n        # determining the package cutoff.\n        self._manager_kwargs.update(\n            base=project.get_effective_base(),\n            extra_build_snaps=project.get_extra_build_snaps(),\n            confinement=project.confinement,\n            project_base=project.base or \"\",\n        )\n        callbacks.register_prologue(parts.set_global_environment)\n        callbacks.register_pre_step(parts.set_step_environment)\n        super().setup()\n\n    @overrides\n    def post_prime(self, step_info: StepInfo) -> bool:\n        \"\"\"Run post-prime parts steps for Snapcraft.\"\"\"\n        return parts.patch_elf(step_info)\n\n    def get_prime_dir(self, component: str | None = None) -> Path:\n        \"\"\"Get the prime directory path for the default prime dir or a component.\n\n        :param component: Name of the component to get the prime directory for.\n\n        :returns: The default prime directory or a component's prime directory.\n\n        :raises SnapcraftError: If the component does not exist.\n        \"\"\"\n        try:\n            return self.prime_dirs[component]\n        except KeyError as err:\n            raise errors.SnapcraftError(\n                f\"Could not get prime directory for component {component!r} \"\n                \"because it does not exist.\"\n            ) from err\n\n    @property\n    def prime_dirs(self) -> dict[str | None, Path]:\n        \"\"\"Return a mapping of component names to prime directories.\n\n        'None' maps to the default prime directory.\n        \"\"\"\n        return get_prime_dirs_from_project(self._lcm.project_info)\n\n    def generate_manifest(self) -> models.Manifest:\n        \"\"\"Create and populate the manifest file.\"\"\"\n        primed_stage_packages: set[str] = set()\n\n        image_information = os.getenv(\"SNAPCRAFT_IMAGE_INFO\", \"{}\")\n        try:\n            image_info = json.loads(image_information)\n        except json.decoder.JSONDecodeError as err:\n            raise errors.SnapcraftError(\n                f\"Image information decode error at {err.lineno}:{err.colno}: \"\n                f\"{err.doc!r}: {err.msg}\"\n            ) from err\n\n        project = cast(models.Project, self._project)\n\n        project_parts = copy.deepcopy(project.parts)\n        for name, part in project_parts.items():\n            assets = self.get_pull_assets(part_name=name)\n            if assets:\n                part[\"stage-packages\"] = assets.get(\"stage-packages\", []) or []\n            for key in (\"stage\", \"prime\", \"stage-packages\", \"build-packages\"):\n                part.setdefault(key, [])\n\n            stage_packages = self.get_primed_stage_packages(part_name=name)\n            if stage_packages:\n                primed_stage_packages |= set(stage_packages)\n\n        osrel = os_release.OsRelease()\n        version = utils.process_version(project.version)\n        host_arch = utils.get_host_architecture()\n        build_for = self._build_plan[0].build_for if self._build_plan else host_arch\n\n        return models.Manifest(\n            # Snapcraft annotations\n            snapcraft_version=__version__,\n            snapcraft_started_at=self._start_time.isoformat(\"T\") + \"Z\",\n            snapcraft_os_release_id=osrel.name().lower(),\n            snapcraft_os_release_version_id=osrel.version_id().lower(),\n            # Project fields\n            name=project.name,\n            version=version,\n            summary=str(project.summary),\n            description=str(project.description),\n            base=project.base,\n            grade=project.grade or \"stable\",\n            confinement=project.confinement,\n            apps=project.apps,\n            parts=project_parts,\n            # Architecture\n            architectures=[build_for],\n            # Image info\n            image_info=image_info,\n            # Build environment\n            build_packages=[],\n            build_snaps=[],\n            primed_stage_packages=sorted(primed_stage_packages),\n        )\n\n    @overrides\n    def _get_local_keys_path(self) -> Path | None:\n        snap_project = get_snap_project()\n        keys_dir = snap_project.assets_dir / \"keys\"\n        if keys_dir.is_dir():\n            return keys_dir\n\n        return None\n\n\ndef get_prime_dirs_from_project(project_info: ProjectInfo) -> dict[str | None, Path]:\n    \"\"\"Get a mapping of component names to prime directories from a ProjectInfo.\n\n    'None' maps to the default prime directory.\n\n    :param project_info: The ProjectInfo to get the prime directory mapping from.\n    \"\"\"\n    partition_prime_dirs = project_info.prime_dirs\n    component_prime_dirs: dict[str | None, Path] = {None: project_info.prime_dir}\n\n    # strip 'component/' prefix so that the component name is the key\n    for partition, prime_dir in partition_prime_dirs.items():\n        if partition and partition.startswith(\"component/\"):\n            component = partition.split(\"/\", 1)[1]\n            component_prime_dirs[component] = prime_dir\n\n    return component_prime_dirs\n", "path": "snapcraft/services/lifecycle.py"}]}