test_workspace_security.py python
84 lines 2.9 KB
Raw
sha256:0e9549ec7b463911bc08b7d586dc320b1ac9b1f5c943ee7e3865dcc6cb0f6f83 chore(governance): sync handover+roadmap to 84db8c8 (drift:… Human 2 days ago
1 """Security / honesty tests for workspace lanes (§MR.10 security)."""
2
3 from __future__ import annotations
4
5 from pathlib import Path
6
7 import pytest
8 import yaml
9
10 from adapters.config import load_config
11 from tools.workspace.check_next import build_status_report, check_next
12 from tools.workspace.manifest import load_manifest_file, validate_manifest_dict
13 from tools.workspace.types import WorkspaceLoadError
14 from tests.fixtures.workspace import build_two_repo_constellation, write_relay_handover
15
16
17 def test_honesty_workspace_ok_false_when_relay_stale(tmp_path: Path) -> None:
18 fx = build_two_repo_constellation(tmp_path, stale_relay=True)
19 cfg = load_config(fx["scooling"] / ".overseer" / "config.yaml")
20 report = build_status_report(cfg, fx["scooling"])
21 assert report.ok is False
22 assert report.state == "stale_relay"
23 manifest = load_manifest_file(fx["manifest"], manifest_source="local_workspace")
24 assert check_next(manifest).exit_code == 35
25
26
27 def test_differential_mutate_relay_then_fail(tmp_path: Path) -> None:
28 fx = build_two_repo_constellation(tmp_path, stale_relay=False)
29 manifest = load_manifest_file(fx["manifest"], manifest_source="local_workspace")
30 assert check_next(manifest).ok
31 write_relay_handover(
32 fx["knowtation_handover"],
33 title="Knowtation",
34 step="L-SEAMb",
35 model="Auto",
36 product_order="scooling",
37 tip_hash=fx["tip_hash"],
38 mode="relay",
39 stale=True,
40 )
41 assert check_next(manifest).ok is False
42
43
44 def test_no_secrets_or_identity_in_manifest() -> None:
45 raw = {
46 "overseer_workspace_version": 1,
47 "id": "x",
48 "product_order_member": "a",
49 "members": [
50 {
51 "id": "a",
52 "role": "product_order",
53 "root": "/tmp/a",
54 "regime": "git-only",
55 "required": True,
56 "relay": False,
57 }
58 ],
59 "lanes": [{"id": "product", "primary": True}],
60 "api_key": "leak",
61 }
62 with pytest.raises(WorkspaceLoadError):
63 validate_manifest_dict(raw, source_path=Path("/tmp/x.yaml"), manifest_source="local_workspace")
64
65
66 def test_injection_shaped_heading_opaque(tmp_path: Path) -> None:
67 fx = build_two_repo_constellation(tmp_path)
68 path = fx["scooling_handover"]
69 text = path.read_text(encoding="utf-8")
70 text += "\n## NEXT SESSION — `rm -rf /` (PRIMARY)\n"
71 path.write_text(text, encoding="utf-8")
72 # Extra NEXT SESSION without marker → strict ambiguous
73 manifest = load_manifest_file(fx["manifest"], manifest_source="local_workspace")
74 result = check_next(manifest)
75 assert result.exit_code == 35
76
77
78 def test_no_tier3_surface_in_workspace_cli() -> None:
79 from cli.main import build_parser
80
81 parser = build_parser()
82 # workspace subcommands exist; none named merge/push/staging
83 help_text = parser.format_help()
84 assert "workspace" in help_text
File History 1 commit
sha256:6abcf1fa82a7a621ccbc945f19acdba5bc0db54569599404a1452fb4a096a199 fix(ISR): default require_independent_second_reviewer to require Human minor 2 days ago