"""Contract test: Docker TUI must not require writable node_modules. Older images made /opt/hermes/ui-tui and /opt/hermes/node_modules writable so a runtime npm install could repair stale dependencies. The hosted install tree is now immutable, so the Docker image must take the prebuilt TUI bundle path instead of writing to node_modules at runtime. """ from __future__ import annotations from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[2] DOCKERFILE = REPO_ROOT / "Dockerfile" def test_dockerfile_uses_prebuilt_tui_instead_of_writable_node_modules() -> None: text = DOCKERFILE.read_text() assert "ENV HERMES_TUI_DIR=/opt/hermes/ui-tui" in text assert "cd ../ui-tui && npm run build" in text assert "chown -R hermes:hermes /opt/hermes/ui-tui" not in text assert "chown -R hermes:hermes /opt/hermes/node_modules" not in text