from __future__ import annotations import json from pathlib import Path ROOT = Path(__file__).resolve().parents[2] def test_module_spec_declares_pure_research_engine_boundary() -> None: spec = json.loads((ROOT / "MODULE_SPEC.yaml").read_text(encoding="utf-8")) assert spec["module_id"] == "quant_engine" assert spec["authority"]["subject"] == spec["module_id"] assert spec["repository"]["type"] == "research_engine" assert spec["bounded_context"]["domain"] == "quantitative-research-engine" prohibited = " ".join(spec["bounded_context"]["prohibited_responsibilities"]).lower() for term in ("investment advice", "live order", "credentials", "source facts"): assert term in prohibited assert spec["authority"]["revision"] == 6 assert { (item["contract_id"], item["version"]) for item in spec["contracts"]["provides"] } == { ("researchhub.factor-definition", "1.0.0"), ("researchhub.factor-set-ref", "1.0.0"), ("researchhub.backtest-run-ref", "1.0.0"), ("researchhub.backtest-evidence-manifest", "1.0.0"), ("researchhub.performance-evidence", "1.0.0"), ("researchhub.portfolio-decision", "1.0.0"), ("researchhub.risk-assessment", "1.0.0"), ("researchhub.factor-set-ref", "2.0.0"), ("researchhub.backtest-run-ref", "2.0.0"), ("researchhub.backtest-evidence-manifest", "2.0.0"), ("researchhub.performance-evidence", "2.0.0"), ("researchhub.portfolio-target", "2.0.0"), ("researchhub.portfolio-decision", "2.0.0"), ("researchhub.risk-assessment", "2.0.0"), } expected_paths = { "researchhub.factor-definition": "src/quant_engine/factor_contracts.py", "researchhub.factor-set-ref": "src/quant_engine/factor_contracts.py", "researchhub.backtest-run-ref": "src/quant_engine/governed_pipeline.py", "researchhub.backtest-evidence-manifest": "src/quant_engine/artifact.py", "researchhub.performance-evidence": "src/quant_engine/artifact.py", "researchhub.portfolio-decision": "src/quant_engine/portfolio_risk_contracts.py", "researchhub.risk-assessment": "src/quant_engine/portfolio_risk_contracts.py", } assert all(item["authority"] == "quant_engine" for item in spec["contracts"]["provides"]) assert { item["contract_id"]: item["path"] for item in spec["contracts"]["provides"] if item["version"] == "1.0.0" } == expected_paths assert { item["contract_id"]: item["path"] for item in spec["contracts"]["provides"] if item["version"] == "2.0.0" } == { "researchhub.factor-set-ref": "src/quant_engine/retrospective_factor_contracts.py", "researchhub.backtest-run-ref": "src/quant_engine/retrospective_backtest_contracts.py", "researchhub.backtest-evidence-manifest": "src/quant_engine/retrospective_artifact_contracts.py", "researchhub.performance-evidence": "src/quant_engine/retrospective_artifact_contracts.py", "researchhub.portfolio-target": "src/quant_engine/retrospective_portfolio_risk_contracts.py", "researchhub.portfolio-decision": "src/quant_engine/retrospective_portfolio_risk_contracts.py", "researchhub.risk-assessment": "src/quant_engine/retrospective_portfolio_risk_contracts.py", } assert { (item["contract_id"], item["version"]) for item in spec["contracts"]["consumes"] } == { ("researchhub.dataset-snapshot", "1.0.0"), ("researchhub.data-foundation", "1.0.0"), ("researchhub.dataset-snapshot", "2.0.0"), ("researchhub.data-foundation", "2.0.0"), } assert all( item["authority"] == "researchhub.data" for item in spec["contracts"]["consumes"] ) assert spec["dependencies"] == [] capabilities = {item["id"]: item for item in spec["capabilities"]} evidence_contract = capabilities["backtest-evidence-contracts"] assert evidence_contract["status"] == "operational" evidence_summary = evidence_contract["summary"].lower() for term in ("performance-methodology", "without recomputation", "decision authority"): assert term in evidence_summary portfolio_contract = capabilities["portfolio-risk-computation-contracts"] assert portfolio_contract["status"] == "operational" summary = portfolio_contract["summary"].lower() for term in ("receipt", "portfolio decisions", "risk assessments", "without"): assert term in summary retrospective = capabilities["retrospective-computation-contracts"] assert retrospective["status"] == "operational" for term in ("two clocks", "retrospective", "no historical-availability", "no execution"): assert term in retrospective["summary"].lower() for term in ("approval", "maker-checker", "publication", "paper", "live"): assert term in prohibited assert all( command["required"] and not command["network"] for command in spec["verification"]["commands"] ) if __name__ == "__main__": test_module_spec_declares_pure_research_engine_boundary()