treefmt-check
checks.x86_64-linux.treefmt
· build #171
· raw
1treefmt v2.5.0ERRO formatter | ruff-check: failed to apply with options '[check --fix]': exit status 123D301 Use `r"""` if any backslashes in a docstring4 --> lib/spaces_install_lib.py:400:55 |6399 | def nix_string(value: str) -> str:7400 | / """`value` as a Nix double-quoted string literal. The three sequences8401 | | that Nix reads inside `"…"` are escaped: `\\`, `"` and `${`.9402 | | """10 | |_______^11403 | escaped = value.replace("\\", "\\\\").replace('"', '\\"').replace("${", "\\${")12404 | return f'"{escaped}"'13 |14help: Add `r` prefix1516RUF005 Consider iterable unpacking instead of concatenation17 --> packages/spaces-install-backend/backend.py:728:2218 |19726 | host = plan["hostname"]20727 | live_modules = [m.format(host=host) for m in LIVE_FLAKE_MODULES] if live else []21728 | config_modules = live_modules + [22 | ______________________^23729 | | f"./machines/{host}/generated.nix",24730 | | f"./machines/{host}/configuration.nix",25731 | | f"./machines/{host}/hardware-configuration.nix",26732 | | f"./machines/{host}/hermes.nix",27733 | | ]28 | |_____^29734 | extra = []30735 | if Path("/etc/spaces-test-support").exists():31 |32help: Replace with iterable unpacking3334PLR2004 Magic value used in comparison, consider replacing `127` with a constant variable35 --> packages/spaces-install-backend/backend.py:954:5336 |37952 | # merge-file exits with the conflict count, 0 for a clean merge,38953 | # and negative (255 here) on an error.39954 | if proc.returncode < 0 or proc.returncode > 127:40 | ^^^41955 | msg = f"git merge-file failed on {dest}: {proc.stderr.strip()}"42956 | raise InstallError(msg)43 |4445TRY301 Abstract `raise` to an inner function46 --> packages/spaces-install-backend/backend.py:1804:1747 |481802 | run_checked(["systemctl", "reboot"])491803 | else: # pragma: no cover501804 | raise AssertionError(action)51 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^521805 | except Exception:531806 | # Past the stop the user has no agent. Whatever failed (the stop54 |5556PT008 Use `return_value=` instead of patching with `lambda`57 --> packages/spaces-install-backend/test_backend.py:832:1358 |59830 | with (60831 | tempfile.TemporaryDirectory() as tmp,61832 | mock.patch.object(backend.os, "uname", lambda: uname),62 | ^^^^^^^^^^^^^^^^^63833 | ):64834 | repo = Path(tmp) / "dotfiles"65 |6667RUF012 Mutable default value for class attribute68 --> packages/spaces-install-backend/test_backend.py:856:1769 |70854 | HARDWARE = LiveRepoTest.HARDWARE71855 | SPACES_FLAKE = "/nix/store/aaaa-spaces-src"72856 | OVERRIDES = {"nixpkgs": "/nix/store/bbbb-nixpkgs"}73 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^74857 |75858 | def seed(self):76 |77help: Consider initializing in `__init__` or annotating with `typing.ClassVar`7879RUF012 Mutable default value for class attribute80 --> packages/spaces-install-backend/test_backend.py:941:1781 |82939 | HARDWARE_TARGET = '{ ... }:\n{ boot.initrd.availableKernelModules = [ "nvme" ]; }\n'83940 | SPACES_FLAKE = "/nix/store/aaaa-spaces-src"84941 | OVERRIDES = {"nixpkgs": "/nix/store/bbbb-nixpkgs"}85 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^86942 | DRV = "/nix/store/cccc-nixos-system-testhost.drv"87943 | TOPLEVEL = "/nix/store/dddd-nixos-system-testhost"88 |89help: Consider initializing in `__init__` or annotating with `typing.ClassVar`9091SIM117 Use a single `with` statement with multiple contexts instead of nested `with` statements92 --> packages/spaces-install-backend/test_backend.py:1162:1393 |941160 | stale = run_dir / "configuration.nix.rej"951161 | stale.write_text("<<<<<<< stale\n")961162 | / with mock.patch.object(backend, "RUN_DIR", run_dir):971163 | | with self.assertRaises(backend.InstallError):98 | |_____________________________________________________________^991164 | backend.install_to(1001165 | tmp / "mnt", plan(password_file=str(tmp / "missing")), "efi"101 |102help: Combine `with` statements103104SIM117 Use a single `with` statement with multiple contexts instead of nested `with` statements105 --> packages/spaces-install-backend/test_backend.py:1178:13106 |1071176 | stale = run_dir / "installed.json"1081177 | stale.write_text("{}\n")1091178 | / with mock.patch.object(backend, "RUN_DIR", run_dir):1101179 | | with self.assertRaises(backend.InstallError):111 | |_____________________________________________________________^1121180 | backend.install_to(1131181 | tmp / "mnt", plan(password_file=str(tmp / "missing")), "efi"114 |115help: Combine `with` statements116117EM102 Exception must not use an f-string literal, assign to variable first118 --> packages/spaces-install-backend/test_backend.py:1501:44119 |1201499 | mode_at_reboot.append(unplug.stat().st_mode & 0o777 if unplug.exists() else None)1211500 | if armed and argv[0] == fail_at:1221501 | raise backend.InstallError(f"{argv[0]} failed")123 | ^^^^^^^^^^^^^^^^^^^1241502 | if argv[0] == "ssh-keygen":1251503 | return real_run(argv, **kwargs)126 |127help: Assign to variable; remove f-string literal128129ARG001 Unused function argument: `unit`130 --> packages/spaces-install-backend/test_backend.py:1524:29131 |1321522 | return ""1331523 |1341524 | def fake_unit_state(unit):135 | ^^^^1361525 | return "inactive"137 |138139S105 Possible hardcoded password assigned to: "TOKEN_HEADER"140 --> packages/spaces-installer-session/bootstrap.py:51:16141 |14249 | from websockets.exceptions import WebSocketException14350 |14451 | TOKEN_HEADER = "X-Hermes-Session-Token"145 | ^^^^^^^^^^^^^^^^^^^^^^^^14652 |14753 | # The first user turn. It names the situation and the skill, nothing148 |149150ANN201 Missing return type annotation for public function `log`151 --> packages/spaces-installer-session/bootstrap.py:60:5152 |15360 | def log(msg):154 | ^^^15561 | print(f"spaces-installer-session: {msg}", file=sys.stderr)156 |157help: Add return type annotation: `None`158159ANN001 Missing type annotation for function argument `msg`160 --> packages/spaces-installer-session/bootstrap.py:60:9161 |16260 | def log(msg):163 | ^^^16461 | print(f"spaces-installer-session: {msg}", file=sys.stderr)165 |166167ANN204 Missing return type annotation for special method `__init__`168 --> packages/spaces-installer-session/bootstrap.py:65:9169 |17064 | class Dashboard:17165 | def __init__(self, base_url, ws_url, token):172 | ^^^^^^^^17366 | self.base_url = base_url.rstrip("/")17467 | self.ws_url = ws_url175 |176help: Add return type annotation: `None`177178ANN001 Missing type annotation for function argument `base_url`179 --> packages/spaces-installer-session/bootstrap.py:65:24180 |18164 | class Dashboard:18265 | def __init__(self, base_url, ws_url, token):183 | ^^^^^^^^18466 | self.base_url = base_url.rstrip("/")18567 | self.ws_url = ws_url186 |187188ANN001 Missing type annotation for function argument `ws_url`189 --> packages/spaces-installer-session/bootstrap.py:65:34190 |19164 | class Dashboard:19265 | def __init__(self, base_url, ws_url, token):193 | ^^^^^^19466 | self.base_url = base_url.rstrip("/")19567 | self.ws_url = ws_url196 |197198ANN001 Missing type annotation for function argument `token`199 --> packages/spaces-installer-session/bootstrap.py:65:42200 |20164 | class Dashboard:20265 | def __init__(self, base_url, ws_url, token):203 | ^^^^^20466 | self.base_url = base_url.rstrip("/")20567 | self.ws_url = ws_url206 |207208ANN202 Missing return type annotation for private function `_request`209 --> packages/spaces-installer-session/bootstrap.py:70:9210 |21168 | self.token = token21269 |21370 | def _request(self, method, path, body=None):214 | ^^^^^^^^21571 | data = None21672 | headers = {TOKEN_HEADER: self.token}217 |218help: Add return type annotation219220ANN001 Missing type annotation for function argument `method`221 --> packages/spaces-installer-session/bootstrap.py:70:24222 |22368 | self.token = token22469 |22570 | def _request(self, method, path, body=None):226 | ^^^^^^22771 | data = None22872 | headers = {TOKEN_HEADER: self.token}229 |230231ANN001 Missing type annotation for function argument `path`232 --> packages/spaces-installer-session/bootstrap.py:70:32233 |23468 | self.token = token23569 |23670 | def _request(self, method, path, body=None):237 | ^^^^23871 | data = None23972 | headers = {TOKEN_HEADER: self.token}240 |241242ANN001 Missing type annotation for function argument `body`243 --> packages/spaces-installer-session/bootstrap.py:70:38244 |24568 | self.token = token24669 |24770 | def _request(self, method, path, body=None):248 | ^^^^24971 | data = None25072 | headers = {TOKEN_HEADER: self.token}251 |252253ANN201 Missing return type annotation for public function `ready`254 --> packages/spaces-installer-session/bootstrap.py:84:9255 |25682 | return err.code, err.read()25783 |25884 | def ready(self):259 | ^^^^^26085 | try:26186 | with urllib.request.urlopen(self.base_url + "/api/status", timeout=5) as resp:262 |263help: Add return type annotation264265PLR2004 Magic value used in comparison, consider replacing `200` with a constant variable266 --> packages/spaces-installer-session/bootstrap.py:87:39267 |26885 | try:26986 | with urllib.request.urlopen(self.base_url + "/api/status", timeout=5) as resp:27087 | return resp.status == 200271 | ^^^27288 | except urllib.error.HTTPError as err:27389 | err.close()274 |275276ANN201 Missing return type annotation for public function `session_exists`277 --> packages/spaces-installer-session/bootstrap.py:94:9278 |27992 | return False28093 |28194 | def session_exists(self, sid):282 | ^^^^^^^^^^^^^^28395 | status, _ = self._request("GET", f"/api/sessions/{sid}")28496 | return status == 200285 |286help: Add return type annotation287288ANN001 Missing type annotation for function argument `sid`289 --> packages/spaces-installer-session/bootstrap.py:94:30290 |29192 | return False29293 |29394 | def session_exists(self, sid):294 | ^^^29595 | status, _ = self._request("GET", f"/api/sessions/{sid}")29696 | return status == 200297 |298299PLR2004 Magic value used in comparison, consider replacing `200` with a constant variable300 --> packages/spaces-installer-session/bootstrap.py:96:26301 |30294 | def session_exists(self, sid):30395 | status, _ = self._request("GET", f"/api/sessions/{sid}")30496 | return status == 200305 | ^^^30697 |30798 | def find_by_title(self, title):308 |309310ANN201 Missing return type annotation for public function `find_by_title`311 --> packages/spaces-installer-session/bootstrap.py:98:9312 |313 96 | return status == 200314 97 |315 98 | def find_by_title(self, title):316 | ^^^^^^^^^^^^^317 99 | # `order=recent` puts the newest activity first, so the session318100 | # the user last talked to wins when several carry the title.319 |320help: Add return type annotation321322ANN001 Missing type annotation for function argument `title`323 --> packages/spaces-installer-session/bootstrap.py:98:29324 |325 96 | return status == 200326 97 |327 98 | def find_by_title(self, title):328 | ^^^^^329 99 | # `order=recent` puts the newest activity first, so the session330100 | # the user last talked to wins when several carry the title.331 |332333PLR2004 Magic value used in comparison, consider replacing `200` with a constant variable334 --> packages/spaces-installer-session/bootstrap.py:106:26335 |336104 | "GET", f"/api/sessions?limit=100&offset={offset}&archived=include&order=recent"337105 | )338106 | if status != 200:339 | ^^^340107 | raise RuntimeError(f"GET /api/sessions answered {status}: {body!r}")341108 | rows = body.get("sessions") or []342 |343344EM102 Exception must not use an f-string literal, assign to variable first345 --> packages/spaces-installer-session/bootstrap.py:107:36346 |347105 | )348106 | if status != 200:349107 | raise RuntimeError(f"GET /api/sessions answered {status}: {body!r}")350 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^351108 | rows = body.get("sessions") or []352109 | for row in rows:353 |354help: Assign to variable; remove f-string literal355356ANN201 Missing return type annotation for public function `set_title`357 --> packages/spaces-installer-session/bootstrap.py:116:9358 |359114 | return None360115 |361116 | def set_title(self, sid, title):362 | ^^^^^^^^^363117 | status, body = self._request("PATCH", f"/api/sessions/{sid}", {"title": title})364118 | if status != 200:365 |366help: Add return type annotation: `None`367368ANN001 Missing type annotation for function argument `sid`369 --> packages/spaces-installer-session/bootstrap.py:116:25370 |371114 | return None372115 |373116 | def set_title(self, sid, title):374 | ^^^375117 | status, body = self._request("PATCH", f"/api/sessions/{sid}", {"title": title})376118 | if status != 200:377 |378379ANN001 Missing type annotation for function argument `title`380 --> packages/spaces-installer-session/bootstrap.py:116:30381 |382114 | return None383115 |384116 | def set_title(self, sid, title):385 | ^^^^^386117 | status, body = self._request("PATCH", f"/api/sessions/{sid}", {"title": title})387118 | if status != 200:388 |389390PLR2004 Magic value used in comparison, consider replacing `200` with a constant variable391 --> packages/spaces-installer-session/bootstrap.py:118:22392 |393116 | def set_title(self, sid, title):394117 | status, body = self._request("PATCH", f"/api/sessions/{sid}", {"title": title})395118 | if status != 200:396 | ^^^397119 | raise RuntimeError(f"PATCH /api/sessions/{sid} answered {status}: {body!r}")398 |399400EM102 Exception must not use an f-string literal, assign to variable first401 --> packages/spaces-installer-session/bootstrap.py:119:32402 |403117 | status, body = self._request("PATCH", f"/api/sessions/{sid}", {"title": title})404118 | if status != 200:405119 | raise RuntimeError(f"PATCH /api/sessions/{sid} answered {status}: {body!r}")406 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^407120 |408121 | async def _rpc(self, ws, rid, method, params):409 |410help: Assign to variable; remove f-string literal411412ANN202 Missing return type annotation for private function `_rpc`413 --> packages/spaces-installer-session/bootstrap.py:121:15414 |415119 | raise RuntimeError(f"PATCH /api/sessions/{sid} answered {status}: {body!r}")416120 |417121 | async def _rpc(self, ws, rid, method, params):418 | ^^^^419122 | await ws.send(json.dumps({"jsonrpc": "2.0", "id": rid, "method": method, "params": params}))420123 | # Events (gateway.ready, message.start, ...) interleave with replies.421 |422help: Add return type annotation423424ANN001 Missing type annotation for function argument `ws`425 --> packages/spaces-installer-session/bootstrap.py:121:26426 |427119 | raise RuntimeError(f"PATCH /api/sessions/{sid} answered {status}: {body!r}")428120 |429121 | async def _rpc(self, ws, rid, method, params):430 | ^^431122 | await ws.send(json.dumps({"jsonrpc": "2.0", "id": rid, "method": method, "params": params}))432123 | # Events (gateway.ready, message.start, ...) interleave with replies.433 |434435ANN001 Missing type annotation for function argument `rid`436 --> packages/spaces-installer-session/bootstrap.py:121:30437 |438119 | raise RuntimeError(f"PATCH /api/sessions/{sid} answered {status}: {body!r}")439120 |440121 | async def _rpc(self, ws, rid, method, params):441 | ^^^442122 | await ws.send(json.dumps({"jsonrpc": "2.0", "id": rid, "method": method, "params": params}))443123 | # Events (gateway.ready, message.start, ...) interleave with replies.444 |445446ANN001 Missing type annotation for function argument `method`447 --> packages/spaces-installer-session/bootstrap.py:121:35448 |449119 | raise RuntimeError(f"PATCH /api/sessions/{sid} answered {status}: {body!r}")450120 |451121 | async def _rpc(self, ws, rid, method, params):452 | ^^^^^^453122 | await ws.send(json.dumps({"jsonrpc": "2.0", "id": rid, "method": method, "params": params}))454123 | # Events (gateway.ready, message.start, ...) interleave with replies.455 |456457ANN001 Missing type annotation for function argument `params`458 --> packages/spaces-installer-session/bootstrap.py:121:43459 |460119 | raise RuntimeError(f"PATCH /api/sessions/{sid} answered {status}: {body!r}")461120 |462121 | async def _rpc(self, ws, rid, method, params):463 | ^^^^^^464122 | await ws.send(json.dumps({"jsonrpc": "2.0", "id": rid, "method": method, "params": params}))465123 | # Events (gateway.ready, message.start, ...) interleave with replies.466 |467468EM102 Exception must not use an f-string literal, assign to variable first469 --> packages/spaces-installer-session/bootstrap.py:129:36470 |471127 | continue472128 | if "error" in frame:473129 | raise RuntimeError(f"{method}: {frame['error']}")474 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^475130 | return frame.get("result") or {}476131 | raise RuntimeError(f"{method}: the gateway closed the socket before it answered")477 |478help: Assign to variable; remove f-string literal479480EM102 Exception must not use an f-string literal, assign to variable first481 --> packages/spaces-installer-session/bootstrap.py:131:28482 |483129 | raise RuntimeError(f"{method}: {frame['error']}")484130 | return frame.get("result") or {}485131 | raise RuntimeError(f"{method}: the gateway closed the socket before it answered")486 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^487132 |488133 | async def _create_and_prompt(self, title, text):489 |490help: Assign to variable; remove f-string literal491492ANN202 Missing return type annotation for private function `_create_and_prompt`493 --> packages/spaces-installer-session/bootstrap.py:133:15494 |495131 | raise RuntimeError(f"{method}: the gateway closed the socket before it answered")496132 |497133 | async def _create_and_prompt(self, title, text):498 | ^^^^^^^^^^^^^^^^^^499134 | url = f"{self.ws_url}?token={self.token}"500135 | async with connect(url, open_timeout=30) as ws:501 |502help: Add return type annotation503504ANN001 Missing type annotation for function argument `title`505 --> packages/spaces-installer-session/bootstrap.py:133:40506 |507131 | raise RuntimeError(f"{method}: the gateway closed the socket before it answered")508132 |509133 | async def _create_and_prompt(self, title, text):510 | ^^^^^511134 | url = f"{self.ws_url}?token={self.token}"512135 | async with connect(url, open_timeout=30) as ws:513 |514515ANN001 Missing type annotation for function argument `text`516 --> packages/spaces-installer-session/bootstrap.py:133:47517 |518131 | raise RuntimeError(f"{method}: the gateway closed the socket before it answered")519132 |520133 | async def _create_and_prompt(self, title, text):521 | ^^^^522134 | url = f"{self.ws_url}?token={self.token}"523135 | async with connect(url, open_timeout=30) as ws:524 |525526EM102 Exception must not use an f-string literal, assign to variable first527 --> packages/spaces-installer-session/bootstrap.py:140:36528 |529138 | stored_id = created.get("stored_session_id")530139 | if not runtime_id or not stored_id:531140 | raise RuntimeError(f"session.create returned no ids: {created!r}")532 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^533141 | await self._rpc(ws, 2, "prompt.submit", {"session_id": runtime_id, "text": text})534142 | return stored_id535 |536help: Assign to variable; remove f-string literal537538ANN201 Missing return type annotation for public function `create_and_prompt`539 --> packages/spaces-installer-session/bootstrap.py:144:9540 |541142 | return stored_id542143 |543144 | def create_and_prompt(self, title, text):544 | ^^^^^^^^^^^^^^^^^545145 | return asyncio.run(self._create_and_prompt(title, text))546 |547help: Add return type annotation548549ANN001 Missing type annotation for function argument `title`550 --> packages/spaces-installer-session/bootstrap.py:144:33551 |552142 | return stored_id553143 |554144 | def create_and_prompt(self, title, text):555 | ^^^^^556145 | return asyncio.run(self._create_and_prompt(title, text))557 |558559ANN001 Missing type annotation for function argument `text`560 --> packages/spaces-installer-session/bootstrap.py:144:40561 |562142 | return stored_id563143 |564144 | def create_and_prompt(self, title, text):565 | ^^^^566145 | return asyncio.run(self._create_and_prompt(title, text))567 |568569ANN201 Missing return type annotation for public function `parse_args`570 --> packages/spaces-installer-session/bootstrap.py:148:5571 |572148 | def parse_args(argv):573 | ^^^^^^^^^^574149 | p = argparse.ArgumentParser(description="open the install conversation once per boot")575150 | p.add_argument("--base-url", required=True, help="dashboard URL, http://127.0.0.1:<port>")576 |577help: Add return type annotation578579ANN001 Missing type annotation for function argument `argv`580 --> packages/spaces-installer-session/bootstrap.py:148:16581 |582148 | def parse_args(argv):583 | ^^^^584149 | p = argparse.ArgumentParser(description="open the install conversation once per boot")585150 | p.add_argument("--base-url", required=True, help="dashboard URL, http://127.0.0.1:<port>")586 |587588PTH118 `os.path.join()` should be replaced by `Path` with `/` operator589 --> packages/spaces-installer-session/bootstrap.py:154:17590 |591152 | p.add_argument(592153 | "--state-file",593154 | default=os.path.join(os.environ.get("XDG_RUNTIME_DIR", "/run/user/%d" % os.getuid()), "spaces-installer", "session"),594 | ^^^^^^^^^^^^595155 | help="where the stored session id is recorded",596156 | )597 |598599UP031 Use format specifiers instead of percent format600 --> packages/spaces-installer-session/bootstrap.py:154:64601 |602152 | p.add_argument(603153 | "--state-file",604154 | default=os.path.join(os.environ.get("XDG_RUNTIME_DIR", "/run/user/%d" % os.getuid()), "spaces-installer", "session"),605 | ^^^^^^^^^^^^^^606155 | help="where the stored session id is recorded",607156 | )608 |609help: Replace with format specifiers610611ANN201 Missing return type annotation for public function `record`612 --> packages/spaces-installer-session/bootstrap.py:165:5613 |614165 | def record(state_file, sid):615 | ^^^^^^616166 | path = Path(state_file)617167 | path.parent.mkdir(parents=True, exist_ok=True)618 |619help: Add return type annotation: `None`620621ANN001 Missing type annotation for function argument `state_file`622 --> packages/spaces-installer-session/bootstrap.py:165:12623 |624165 | def record(state_file, sid):625 | ^^^^^^^^^^626166 | path = Path(state_file)627167 | path.parent.mkdir(parents=True, exist_ok=True)628 |629630ANN001 Missing type annotation for function argument `sid`631 --> packages/spaces-installer-session/bootstrap.py:165:24632 |633165 | def record(state_file, sid):634 | ^^^635166 | path = Path(state_file)636167 | path.parent.mkdir(parents=True, exist_ok=True)637 |638639PTH105 `os.replace()` should be replaced by `Path.replace()`640 --> packages/spaces-installer-session/bootstrap.py:170:5641 |642168 | tmp = path.with_name(path.name + ".tmp")643169 | tmp.write_text(sid)644170 | os.replace(tmp, path)645 | ^^^^^^^^^^646help: Replace with `Path(...).replace(...)`647648ANN201 Missing return type annotation for public function `main`649 --> packages/spaces-installer-session/bootstrap.py:173:5650 |651173 | def main(argv=None):652 | ^^^^653174 | args = parse_args(argv)654175 | try:655 |656help: Add return type annotation: `int | None`657658ANN001 Missing type annotation for function argument `argv`659 --> packages/spaces-installer-session/bootstrap.py:173:10660 |661173 | def main(argv=None):662 | ^^^^663174 | args = parse_args(argv)664175 | try:665 |666667TRY300 Consider moving this statement to an `else` block668 --> packages/spaces-installer-session/bootstrap.py:209:9669 |670207 | log(f"created session {sid} titled {args.title!r}")671208 | record(args.state_file, sid)672209 | return 0673 | ^^^^^^^^674210 | except (RuntimeError, OSError, WebSocketException, ValueError) as err:675211 | log(str(err))676 |677678Found 80 errors (19 fixed, 61 remaining).679No fixes available (13 hidden fixes can be enabled with the `--unsafe-fixes` option).680681ERRO formatter | shellcheck: failed to apply with options '[]': exit status 1682683684In packages/spaces-install-secret/spaces-install-secret.sh line 1:685# Usage: spaces-install-secret password|luks-passphrase686^-- SC2148 (error): Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.687688For more information:689 https://www.shellcheck.net/wiki/SC2148 -- Tips depend on target shell and y...690691traversed 596 files692emitted 398 files for processing693formatted 239 files (14 changed) in 910ms694Error: failed to finalise formatting: formatting failures detected