fix: all imports updated to cortex.xxx namespace — 405 tests green
Some checks failed
Tests / test (push) Failing after 5s
Some checks failed
Tests / test (push) Failing after 5s
- Fixed bare 'from governance.' imports in source + tests - Fixed bare 'from intelligence.' imports in tests - Fixed mock.patch targets to use full cortex.xxx paths - All 405 tests passing
This commit is contained in:
parent
fd7d75c0ed
commit
c5e5ce9dc0
12 changed files with 41 additions and 41 deletions
|
|
@ -45,20 +45,20 @@ def _build_context(args: argparse.Namespace) -> dict:
|
||||||
|
|
||||||
|
|
||||||
def _get_engine():
|
def _get_engine():
|
||||||
from governance.policy import PolicyEngine
|
from cortex.governance.policy import PolicyEngine
|
||||||
return PolicyEngine(policies_dir=DEFAULT_POLICIES_DIR)
|
return PolicyEngine(policies_dir=DEFAULT_POLICIES_DIR)
|
||||||
|
|
||||||
|
|
||||||
def _get_scorer():
|
def _get_scorer():
|
||||||
from governance.risk_scorer import RiskScorer
|
from cortex.governance.risk_scorer import RiskScorer
|
||||||
return RiskScorer()
|
return RiskScorer()
|
||||||
|
|
||||||
|
|
||||||
def _get_enforcer():
|
def _get_enforcer():
|
||||||
from governance.enforcer import Enforcer
|
from cortex.governance.enforcer import Enforcer
|
||||||
from governance.policy import PolicyEngine
|
from cortex.governance.policy import PolicyEngine
|
||||||
from governance.risk_scorer import RiskScorer
|
from cortex.governance.risk_scorer import RiskScorer
|
||||||
from governance.evidence import EvidenceCollector, ControlMapping
|
from cortex.governance.evidence import EvidenceCollector, ControlMapping
|
||||||
|
|
||||||
return Enforcer(
|
return Enforcer(
|
||||||
policy_engine=PolicyEngine(policies_dir=DEFAULT_POLICIES_DIR),
|
policy_engine=PolicyEngine(policies_dir=DEFAULT_POLICIES_DIR),
|
||||||
|
|
@ -150,8 +150,8 @@ def cmd_status(args: argparse.Namespace) -> None:
|
||||||
|
|
||||||
def cmd_report(args: argparse.Namespace) -> None:
|
def cmd_report(args: argparse.Namespace) -> None:
|
||||||
"""Generate compliance report (placeholder — needs live evidence)."""
|
"""Generate compliance report (placeholder — needs live evidence)."""
|
||||||
from governance.evidence import EvidenceCollector, ControlMapping
|
from cortex.governance.evidence import EvidenceCollector, ControlMapping
|
||||||
from governance.report_generator import ReportGenerator
|
from cortex.governance.report_generator import ReportGenerator
|
||||||
|
|
||||||
collector = EvidenceCollector(
|
collector = EvidenceCollector(
|
||||||
control_mapping=ControlMapping(DEFAULT_CONTROLS_MAPPING)
|
control_mapping=ControlMapping(DEFAULT_CONTROLS_MAPPING)
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@ import logging
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from governance.evidence import EvidenceCollector
|
from cortex.governance.evidence import EvidenceCollector
|
||||||
from governance.policy import PolicyEngine
|
from cortex.governance.policy import PolicyEngine
|
||||||
from governance.risk_scorer import RiskResult, RiskScorer
|
from cortex.governance.risk_scorer import RiskResult, RiskScorer
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ from dataclasses import dataclass
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from governance.evidence import EvidenceCollector, EvidenceRecord
|
from cortex.governance.evidence import EvidenceCollector, EvidenceRecord
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,10 @@ import pytest
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
||||||
|
|
||||||
from governance.enforcer import Enforcer, Decision
|
from cortex.governance.enforcer import Enforcer, Decision
|
||||||
from governance.policy import PolicyEngine
|
from cortex.governance.policy import PolicyEngine
|
||||||
from governance.risk_scorer import RiskScorer
|
from cortex.governance.risk_scorer import RiskScorer
|
||||||
from governance.evidence import EvidenceCollector, ControlMapping
|
from cortex.governance.evidence import EvidenceCollector, ControlMapping
|
||||||
|
|
||||||
|
|
||||||
def _make_enforcer(tmp_path, rules=None):
|
def _make_enforcer(tmp_path, rules=None):
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import pytest
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
||||||
|
|
||||||
from governance.evidence import EvidenceCollector, EvidenceRecord, ControlMapping
|
from cortex.governance.evidence import EvidenceCollector, EvidenceRecord, ControlMapping
|
||||||
|
|
||||||
|
|
||||||
class TestControlMapping:
|
class TestControlMapping:
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ from pathlib import Path
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
||||||
|
|
||||||
from governance.evidence import EvidenceCollector, ControlMapping
|
from cortex.governance.evidence import EvidenceCollector, ControlMapping
|
||||||
from governance.report_generator import ReportGenerator
|
from cortex.governance.report_generator import ReportGenerator
|
||||||
|
|
||||||
|
|
||||||
class TestReportGenerator:
|
class TestReportGenerator:
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from pathlib import Path
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
||||||
|
|
||||||
from governance.risk_scorer import RiskScorer, RiskResult, _classify_level
|
from cortex.governance.risk_scorer import RiskScorer, RiskResult, _classify_level
|
||||||
|
|
||||||
|
|
||||||
class TestClassifyLevel:
|
class TestClassifyLevel:
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from unittest.mock import patch, MagicMock
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence"))
|
||||||
|
|
||||||
import knowledge_cleanup as kc
|
import cortex.intelligence.knowledge_cleanup as kc
|
||||||
|
|
||||||
|
|
||||||
class TestBackup:
|
class TestBackup:
|
||||||
|
|
@ -107,28 +107,28 @@ class TestScoreRelationships:
|
||||||
|
|
||||||
|
|
||||||
class TestClassifyUnknowns:
|
class TestClassifyUnknowns:
|
||||||
@patch("knowledge_cleanup.ollama_generate")
|
@patch("cortex.intelligence.knowledge_cleanup.ollama_generate")
|
||||||
def test_no_unknowns(self, mock_ollama):
|
def test_no_unknowns(self, mock_ollama):
|
||||||
entities = {"albert": {"type": "person"}}
|
entities = {"albert": {"type": "person"}}
|
||||||
result = kc.classify_unknowns(entities, dry_run=False)
|
result = kc.classify_unknowns(entities, dry_run=False)
|
||||||
mock_ollama.assert_not_called()
|
mock_ollama.assert_not_called()
|
||||||
assert result == entities
|
assert result == entities
|
||||||
|
|
||||||
@patch("knowledge_cleanup.ollama_generate")
|
@patch("cortex.intelligence.knowledge_cleanup.ollama_generate")
|
||||||
def test_classifies_unknowns(self, mock_ollama):
|
def test_classifies_unknowns(self, mock_ollama):
|
||||||
mock_ollama.return_value = '{"1": "person"}'
|
mock_ollama.return_value = '{"1": "person"}'
|
||||||
entities = {"albert": {"type": "unknown"}}
|
entities = {"albert": {"type": "unknown"}}
|
||||||
result = kc.classify_unknowns(entities, dry_run=False)
|
result = kc.classify_unknowns(entities, dry_run=False)
|
||||||
assert result["albert"]["type"] == "person"
|
assert result["albert"]["type"] == "person"
|
||||||
|
|
||||||
@patch("knowledge_cleanup.ollama_generate")
|
@patch("cortex.intelligence.knowledge_cleanup.ollama_generate")
|
||||||
def test_dry_run_no_change(self, mock_ollama):
|
def test_dry_run_no_change(self, mock_ollama):
|
||||||
mock_ollama.return_value = '{"1": "person"}'
|
mock_ollama.return_value = '{"1": "person"}'
|
||||||
entities = {"albert": {"type": "unknown"}}
|
entities = {"albert": {"type": "unknown"}}
|
||||||
result = kc.classify_unknowns(entities, dry_run=True)
|
result = kc.classify_unknowns(entities, dry_run=True)
|
||||||
assert result["albert"]["type"] == "unknown"
|
assert result["albert"]["type"] == "unknown"
|
||||||
|
|
||||||
@patch("knowledge_cleanup.ollama_generate")
|
@patch("cortex.intelligence.knowledge_cleanup.ollama_generate")
|
||||||
def test_handles_llm_failure(self, mock_ollama):
|
def test_handles_llm_failure(self, mock_ollama):
|
||||||
mock_ollama.side_effect = Exception("timeout")
|
mock_ollama.side_effect = Exception("timeout")
|
||||||
entities = {"albert": {"type": "unknown"}}
|
entities = {"albert": {"type": "unknown"}}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ from unittest.mock import patch
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
||||||
|
|
||||||
from knowledge_extractor import importance_heuristic, parse_since
|
from cortex.knowledge_extractor import importance_heuristic, parse_since
|
||||||
|
|
||||||
|
|
||||||
class TestImportanceHeuristic:
|
class TestImportanceHeuristic:
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ from unittest.mock import patch, MagicMock
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence"))
|
||||||
|
|
||||||
from llm_extractor import (
|
from cortex.intelligence.llm_extractor import (
|
||||||
_parse_json_response,
|
_parse_json_response,
|
||||||
_normalize_entities,
|
_normalize_entities,
|
||||||
extract_entities_llm,
|
extract_entities_llm,
|
||||||
|
|
@ -83,26 +83,26 @@ class TestNormalizeEntities:
|
||||||
|
|
||||||
|
|
||||||
class TestExtractEntitiesLlm:
|
class TestExtractEntitiesLlm:
|
||||||
@patch("llm_extractor._call_ollama")
|
@patch("cortex.intelligence.llm_extractor._call_ollama")
|
||||||
def test_empty_text(self, mock_ollama):
|
def test_empty_text(self, mock_ollama):
|
||||||
assert extract_entities_llm("") == {}
|
assert extract_entities_llm("") == {}
|
||||||
assert extract_entities_llm("short") == {}
|
assert extract_entities_llm("short") == {}
|
||||||
mock_ollama.assert_not_called()
|
mock_ollama.assert_not_called()
|
||||||
|
|
||||||
@patch("llm_extractor._call_ollama")
|
@patch("cortex.intelligence.llm_extractor._call_ollama")
|
||||||
def test_ollama_unavailable(self, mock_ollama):
|
def test_ollama_unavailable(self, mock_ollama):
|
||||||
mock_ollama.return_value = None
|
mock_ollama.return_value = None
|
||||||
result = extract_entities_llm("This is a test about Albert and Mondo Gate AG")
|
result = extract_entities_llm("This is a test about Albert and Mondo Gate AG")
|
||||||
assert result is None # signals fallback
|
assert result is None # signals fallback
|
||||||
|
|
||||||
@patch("llm_extractor._call_ollama")
|
@patch("cortex.intelligence.llm_extractor._call_ollama")
|
||||||
def test_successful_extraction(self, mock_ollama):
|
def test_successful_extraction(self, mock_ollama):
|
||||||
mock_ollama.return_value = '{"albert": {"type": "person", "context": "mentioned"}}'
|
mock_ollama.return_value = '{"albert": {"type": "person", "context": "mentioned"}}'
|
||||||
result = extract_entities_llm("Albert discussed the project with the team members today")
|
result = extract_entities_llm("Albert discussed the project with the team members today")
|
||||||
assert "albert" in result
|
assert "albert" in result
|
||||||
assert result["albert"]["type"] == "person"
|
assert result["albert"]["type"] == "person"
|
||||||
|
|
||||||
@patch("llm_extractor._call_ollama")
|
@patch("cortex.intelligence.llm_extractor._call_ollama")
|
||||||
def test_truncates_long_text(self, mock_ollama):
|
def test_truncates_long_text(self, mock_ollama):
|
||||||
mock_ollama.return_value = "{}"
|
mock_ollama.return_value = "{}"
|
||||||
extract_entities_llm("x" * 3000)
|
extract_entities_llm("x" * 3000)
|
||||||
|
|
@ -112,19 +112,19 @@ class TestExtractEntitiesLlm:
|
||||||
|
|
||||||
|
|
||||||
class TestExtractEntitiesLlmBatch:
|
class TestExtractEntitiesLlmBatch:
|
||||||
@patch("llm_extractor._call_ollama")
|
@patch("cortex.intelligence.llm_extractor._call_ollama")
|
||||||
def test_empty_list(self, mock_ollama):
|
def test_empty_list(self, mock_ollama):
|
||||||
assert extract_entities_llm_batch([]) == {}
|
assert extract_entities_llm_batch([]) == {}
|
||||||
mock_ollama.assert_not_called()
|
mock_ollama.assert_not_called()
|
||||||
|
|
||||||
@patch("llm_extractor._call_ollama")
|
@patch("cortex.intelligence.llm_extractor._call_ollama")
|
||||||
def test_filters_short_texts(self, mock_ollama):
|
def test_filters_short_texts(self, mock_ollama):
|
||||||
mock_ollama.return_value = "{}"
|
mock_ollama.return_value = "{}"
|
||||||
result = extract_entities_llm_batch(["hi", "yo", ""])
|
result = extract_entities_llm_batch(["hi", "yo", ""])
|
||||||
assert result == {}
|
assert result == {}
|
||||||
mock_ollama.assert_not_called()
|
mock_ollama.assert_not_called()
|
||||||
|
|
||||||
@patch("llm_extractor._call_ollama")
|
@patch("cortex.intelligence.llm_extractor._call_ollama")
|
||||||
def test_batch_extraction(self, mock_ollama):
|
def test_batch_extraction(self, mock_ollama):
|
||||||
mock_ollama.return_value = '{"python": {"type": "technology", "context": "language"}}'
|
mock_ollama.return_value = '{"python": {"type": "technology", "context": "language"}}'
|
||||||
result = extract_entities_llm_batch(["Python is a great programming language for data science"])
|
result = extract_entities_llm_batch(["Python is a great programming language for data science"])
|
||||||
|
|
@ -132,7 +132,7 @@ class TestExtractEntitiesLlmBatch:
|
||||||
|
|
||||||
|
|
||||||
class TestIsAvailable:
|
class TestIsAvailable:
|
||||||
@patch("llm_extractor.urllib.request.urlopen")
|
@patch("cortex.intelligence.llm_extractor.urllib.request.urlopen")
|
||||||
def test_available(self, mock_urlopen):
|
def test_available(self, mock_urlopen):
|
||||||
mock_resp = MagicMock()
|
mock_resp = MagicMock()
|
||||||
mock_resp.status = 200
|
mock_resp.status = 200
|
||||||
|
|
@ -141,7 +141,7 @@ class TestIsAvailable:
|
||||||
mock_urlopen.return_value = mock_resp
|
mock_urlopen.return_value = mock_resp
|
||||||
assert is_available() is True
|
assert is_available() is True
|
||||||
|
|
||||||
@patch("llm_extractor.urllib.request.urlopen")
|
@patch("cortex.intelligence.llm_extractor.urllib.request.urlopen")
|
||||||
def test_unavailable(self, mock_urlopen):
|
def test_unavailable(self, mock_urlopen):
|
||||||
mock_urlopen.side_effect = Exception("connection refused")
|
mock_urlopen.side_effect = Exception("connection refused")
|
||||||
assert is_available() is False
|
assert is_available() is False
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from unittest.mock import patch, MagicMock
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence"))
|
||||||
|
|
||||||
import loop as darkplex_loop
|
import cortex.intelligence.loop as darkplex_loop
|
||||||
|
|
||||||
|
|
||||||
class TestImportance:
|
class TestImportance:
|
||||||
|
|
@ -101,19 +101,19 @@ class TestLoopState:
|
||||||
|
|
||||||
|
|
||||||
class TestCheckNewEvents:
|
class TestCheckNewEvents:
|
||||||
@patch("loop.subprocess.run")
|
@patch("cortex.intelligence.loop.subprocess.run")
|
||||||
def test_returns_pending(self, mock_run):
|
def test_returns_pending(self, mock_run):
|
||||||
mock_run.return_value = MagicMock(
|
mock_run.return_value = MagicMock(
|
||||||
returncode=0, stdout=json.dumps({"num_pending": 42})
|
returncode=0, stdout=json.dumps({"num_pending": 42})
|
||||||
)
|
)
|
||||||
assert darkplex_loop.check_new_events() == 42
|
assert darkplex_loop.check_new_events() == 42
|
||||||
|
|
||||||
@patch("loop.subprocess.run")
|
@patch("cortex.intelligence.loop.subprocess.run")
|
||||||
def test_returns_negative_on_failure(self, mock_run):
|
def test_returns_negative_on_failure(self, mock_run):
|
||||||
mock_run.return_value = MagicMock(returncode=1, stdout="")
|
mock_run.return_value = MagicMock(returncode=1, stdout="")
|
||||||
assert darkplex_loop.check_new_events() == -1
|
assert darkplex_loop.check_new_events() == -1
|
||||||
|
|
||||||
@patch("loop.subprocess.run")
|
@patch("cortex.intelligence.loop.subprocess.run")
|
||||||
def test_handles_exception(self, mock_run):
|
def test_handles_exception(self, mock_run):
|
||||||
mock_run.side_effect = Exception("nats not found")
|
mock_run.side_effect = Exception("nats not found")
|
||||||
assert darkplex_loop.check_new_events() == -1
|
assert darkplex_loop.check_new_events() == -1
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import pytest
|
||||||
|
|
||||||
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence"))
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core" / "intelligence"))
|
||||||
|
|
||||||
from temporal import TemporalEntry, TemporalQuery, TemporalContext
|
from cortex.intelligence.temporal import TemporalEntry, TemporalQuery, TemporalContext
|
||||||
|
|
||||||
|
|
||||||
class TestTemporalEntry:
|
class TestTemporalEntry:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue