@tdd_issue @tdd_issue_10490 Feature: TDD Issue #10490 — LspRuntime._read_file has no workspace path containment check As a security-conscious developer I want LspRuntime._read_file() to restrict file access to the workspace directory So that a malicious or misconfigured LLM tool call cannot read arbitrary files This test captures bug #10490. The ``_read_file`` static method in ``src/cleveragents/lsp/runtime.py`` calls ``os.path.realpath()`` to resolve symlinks and ``..`` components, but does NOT verify that the resolved path is contained within the workspace directory. An attacker who can control ``file_path`` (e.g. via a malicious LLM tool call) could read any file on the filesystem by supplying a path such as ``/../../../etc/passwd``. The method is a ``@staticmethod`` and has no access to the workspace path, so it cannot perform containment checks without a design change. The scenario below uses ``@tdd_expected_fail`` because the assertion FAILS while the bug exists — ``_read_file`` does NOT raise ``LspError`` when given a path that resolves outside the workspace. The tag inversion mechanism causes CI to report the scenario as passed until the fix lands. Once the fix for #10490 is merged, the ``@tdd_expected_fail`` tag must be removed so the scenario runs normally. See CONTRIBUTING.md > Bug Fix Workflow > TDD Issue Test Tags. @tdd_expected_fail Scenario: _read_file should reject paths outside workspace but currently does not Given lsp_pc a workspace directory containing a safe file And lsp_pc a sensitive file exists outside the workspace When lsp_pc I call _read_file with a path that traverses outside the workspace Then lsp_pc an LspError should be raised with message containing "outside workspace" Scenario: _read_file can read a file inside the workspace Given lsp_pc a workspace directory containing a safe file When lsp_pc I call _read_file with the safe file path Then lsp_pc the file content should be returned successfully