CI Pipeline / best-practices (push) Successful in 10s
CI Pipeline / documentation (push) Successful in 10s
CI Pipeline / lint (push) Failing after 52s
Auto-version and Release / release (push) Successful in 52s
CI Pipeline / gitea-offline (push) Successful in 17s
CI Pipeline / type-check (push) Successful in 32s
CI Pipeline / canary (push) Successful in 34s
CI Pipeline / unit-tests (push) Successful in 3m11s
CI Pipeline / required-checks (push) Failing after 2s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Successful in 8s
deploy / deploy (push) Failing after 7m32s
- 21.2B: resolve_cwd returns repo_identity (git:<path> stripped) not scaffold_location; worktree override; unknown project raises; no repo → refuse; 8 held-outs incl. old-bug reproduction. - 21.2C: wait_guard covers time.sleep(N) (inline + heredoc), polling loops (while/until + status on full command), repeated delay+status; 7 new held-outs; legitimate cases still pass. - 21.2D: canonical hook source at config/mimo-hooks/event-wait-guard.ts; scripts/install_mimo_hook.py verifies hash; drift test detects canonical↔installed divergence. - 21.2G: programme_gates.py — mandatory gates end in PASS/BLOCKED/ WAIVED_BY_USER only; GateDemotionError prevents mandatory→optional demotion; 6 held-outs.
65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
"""test_resolve_cwd.py — T21.2 §21.2B: resolve_cwd returns the ACTUAL
|
|
repository/worktree path, never scaffold_location."""
|
|
from __future__ import annotations
|
|
import sys
|
|
from pathlib import Path
|
|
import pytest
|
|
REPO = Path(__file__).resolve().parent.parent
|
|
sys.path.insert(0, str(REPO / "src"))
|
|
from rune import project_registry as pr # noqa: E402
|
|
|
|
def _reg(tmp_path, rune_repo="/mnt/workdrive/issue161-harness"):
|
|
r = pr.ProjectRegistry(tmp_path)
|
|
r.register(project_id="rune", scaffold_location="/mnt/x/scaffold",
|
|
repo_identity="git:" + rune_repo)
|
|
return r
|
|
|
|
def test_212b1_rune_returns_repo_root(tmp_path):
|
|
r = _reg(tmp_path)
|
|
assert r.resolve_cwd("rune") == "/mnt/workdrive/issue161-harness"
|
|
assert r.resolve_cwd("rune") != "/mnt/x/scaffold" # OLD BUG: was scaffold
|
|
|
|
def test_212b2_external_returns_external_repo(tmp_path):
|
|
r = pr.ProjectRegistry(tmp_path)
|
|
r.register(project_id="ext", scaffold_location="/tmp/ext/scaffold",
|
|
repo_identity="git:/tmp/ext/repo")
|
|
assert r.resolve_cwd("ext") == "/tmp/ext/repo"
|
|
assert r.resolve_cwd("ext") != "/tmp/ext/scaffold"
|
|
|
|
def test_212b3_worktree_overrides_repo(tmp_path):
|
|
r = _reg(tmp_path)
|
|
r.doc["projects"]["rune"]["active_worktree"] = "/tmp/wt-rune"
|
|
r.save()
|
|
assert r.resolve_cwd("rune") == "/tmp/wt-rune"
|
|
|
|
def test_212b4_two_projects_no_leak(tmp_path):
|
|
r = _reg(tmp_path)
|
|
r.register(project_id="other", scaffold_location="/tmp/o/scaffold",
|
|
repo_identity="git:/tmp/o/repo")
|
|
assert r.resolve_cwd("rune") != r.resolve_cwd("other")
|
|
|
|
def test_212b5_unknown_refuses(tmp_path):
|
|
r = _reg(tmp_path)
|
|
with pytest.raises(ValueError, match="unknown project"):
|
|
r.resolve_cwd("ghost")
|
|
|
|
def test_212b6_no_repo_identity_refuses(tmp_path):
|
|
r = pr.ProjectRegistry(tmp_path)
|
|
r.register(project_id="remote-only", scaffold_location="/tmp/r/s")
|
|
with pytest.raises(ValueError, match="no local execution"):
|
|
r.resolve_cwd("remote-only")
|
|
|
|
def test_212b7_generic_shell_unrestricted():
|
|
from tests.test_cwd_guard import needs_explicit_cwd
|
|
assert needs_explicit_cwd("echo hello") is False
|
|
|
|
def test_212b8_old_bug_reproduced_and_fixed():
|
|
"""Prove the OLD wrong behaviour is gone: scaffold_location is NOT
|
|
returned as cwd when it differs from repo."""
|
|
r = _reg(tmp_path=None) if False else _reg(
|
|
__import__("tempfile").mkdtemp())
|
|
r.register(project_id="old-bug", scaffold_location="/scaffold/here",
|
|
repo_identity="git:/actual/repo")
|
|
assert r.resolve_cwd("old-bug") == "/actual/repo"
|
|
assert r.resolve_cwd("old-bug") != "/scaffold/here"
|