diff --git a/evals/drill/cli.py b/evals/drill/cli.py index e1dcbe4a..d9979402 100644 --- a/evals/drill/cli.py +++ b/evals/drill/cli.py @@ -2,6 +2,7 @@ from __future__ import annotations +import os import secrets from pathlib import Path @@ -13,6 +14,22 @@ PROJECT_ROOT: Path = Path(__file__).parent.parent load_dotenv(PROJECT_ROOT / ".env") +def _set_superpowers_root_default() -> None: + """Default SUPERPOWERS_ROOT to the parent of evals/ if not already set. + + Drill historically required contributors to export SUPERPOWERS_ROOT + pointing at the superpowers checkout. After lifting drill into + superpowers/evals/, the parent of PROJECT_ROOT is always the + superpowers root, so we can supply this default automatically. + + Existing SUPERPOWERS_ROOT environment values are respected as overrides. + """ + os.environ.setdefault("SUPERPOWERS_ROOT", str(PROJECT_ROOT.parent)) + + +_set_superpowers_root_default() + + @click.group() def main() -> None: """Drill: Superpowers skill compliance benchmark.""" diff --git a/evals/tests/test_cli.py b/evals/tests/test_cli.py index e95db7e3..648d8238 100644 --- a/evals/tests/test_cli.py +++ b/evals/tests/test_cli.py @@ -59,3 +59,25 @@ class TestCompareCommand: runner = CliRunner() result = runner.invoke(main, ["compare", "nonexistent", "--sweep", "abc123"]) assert result.exit_code != 0 # No results dir, but flag is parsed + + +def test_set_superpowers_root_default_when_unset(monkeypatch, tmp_path): + """When SUPERPOWERS_ROOT is unset, helper sets it to PROJECT_ROOT.parent.""" + monkeypatch.delenv("SUPERPOWERS_ROOT", raising=False) + from drill.cli import _set_superpowers_root_default, PROJECT_ROOT + + _set_superpowers_root_default() + + import os + assert os.environ["SUPERPOWERS_ROOT"] == str(PROJECT_ROOT.parent) + + +def test_set_superpowers_root_default_respects_existing(monkeypatch): + """When SUPERPOWERS_ROOT is already set, helper does not override.""" + monkeypatch.setenv("SUPERPOWERS_ROOT", "/custom/path") + from drill.cli import _set_superpowers_root_default + + _set_superpowers_root_default() + + import os + assert os.environ["SUPERPOWERS_ROOT"] == "/custom/path"