{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": ".\/venv\/bin\/ruff check src tests scripts 2>&1 | tail -40",
"description": "Show remaining ruff issues"
}
}
{
"tool_response": {
"stdout": "--> scripts\/bootstrap_db.py:1:1\n\nEXE002 The file is executable but no shebang is present\n--> scripts\/htmx_lint.py:1:1\n\nE501 Line too long (101 > 100)\n --> scripts\/htmx_lint.py:86:101\n |\n84 | for fail in _check_tag(tag):\n85 | rule_id, _, message = fail.partition(\":\")\n86 | findings.append(Finding(path, _lineno_of(text, match.start()), rule_id, message.strip()))\n | ^\n87 | return findings\n |\n\nEXE002 The file is executable but no shebang is present\n--> scripts\/max_loc_linter.py:1:1\n\nEXE002 The file is executable but no shebang is present\n--> scripts\/schema_drift.py:1:1\n\nE501 Line too long (101 > 100)\n --> src\/domain\/ports\/browser_fetcher_port.py:28:101\n |\n26 | class BrowserFetcherPort(ABC):\n27 | @abstractmethod\n28 | async def fetch(self, url: NormalizedUrl, *, screenshot: bool = False) -> BrowserFetchResult: ...\n | ^\n |\n\nE501 Line too long (124 > 100)\n --> src\/domain\/ports\/structured_data_parser_port.py:11:101\n |\n 9 | class StructuredDataParserPort(ABC):\n10 | @abstractmethod\n11 | def parse(self, html: str, *, base_url: str) -> list[tuple[StructuredDataFormat, str | None, Mapping[str, object]]]: ...\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n |\n\nFound 7 errors.",
"stderr": "",
"interrupted": false,
"isImage": false,
"noOutputExpected": false
}
}