Files
repo-scoping/tests/test_self_scoping_assessment_export.py

132 lines
4.3 KiB
Python

from repo_registry.core.service import RegistryService
from repo_registry.repo_ingestion.git import GitIngestionService
from repo_registry.self_scoping.assessment import export_assessment_artifact
from repo_registry.storage.sqlite import RegistryStore
def make_service(tmp_path):
store = RegistryStore(tmp_path / "registry.sqlite3")
store.initialize()
return RegistryService(store, ingestion=GitIngestionService(tmp_path / "checkouts"))
def write_repo(tmp_path):
source = tmp_path / "repo"
source.mkdir()
(source / "README.md").write_text(
"# Exportable Repo\n\nReports service health.\n",
encoding="utf-8",
)
(source / "app.py").write_text(
'@app.get("/health")\n'
"def health():\n"
" return {}\n",
encoding="utf-8",
)
return source
def test_export_assessment_artifact_binds_analysis_to_engine_identity(tmp_path):
service = make_service(tmp_path)
source = write_repo(tmp_path)
repository = service.register_repository(
name="Exportable Repo",
url=str(source),
)
summary = service.analyze_repository(
repository.id,
use_llm_assistance=False,
)
artifact = export_assessment_artifact(
service,
repository.id,
summary.analysis_run.id,
role="challenger",
outcome="challenger",
reviewer="test",
)
assert artifact["schema_version"] == "self-scoping-assessment/v1"
assert artifact["artifact_id"] == "exportable-repo-challenger-run-1"
assert artifact["target_repository"]["repo_slug"] == "exportable-repo"
assert artifact["target_repository"]["target_commit"]
assert artifact["engine_identity"]["engine_commit"]
assert (
artifact["engine_identity"]["quality_criteria_version"]
== "repo-scoping-quality-criteria/v1"
)
assert artifact["engine_identity"]["release_binding_status"] == "complete"
assert artifact["assessment"]["comparison_eligibility"] == "eligible"
assert artifact["execution"]["mode"] == "deterministic-only"
assert artifact["content_chunk_summary"]["total"] > 0
assert artifact["generated_tree"]["abilities"]
assert artifact["approved_map"]["abilities"] == []
assert artifact["review_decisions"] == []
assert artifact["quality_gate_outcomes"] == []
def test_export_assessment_artifact_flags_known_provider_regression(tmp_path):
service = make_service(tmp_path)
source = tmp_path / "repo"
source.mkdir()
(source / "README.md").write_text("# Provider Vocabulary\n", encoding="utf-8")
(source / "providers.py").write_text(
"provider_registry = {'openrouter': OpenRouterAdapter}\n",
encoding="utf-8",
)
repository = service.register_repository(
name="Provider Vocabulary",
url=str(source),
)
summary = service.analyze_repository(
repository.id,
use_llm_assistance=False,
)
artifact = export_assessment_artifact(
service,
repository.id,
summary.analysis_run.id,
role="challenger",
outcome="challenger",
reviewer="test",
)
regression_ids = {item["id"] for item in artifact["known_regression_patterns"]}
gate_ids = {item["criterion_id"] for item in artifact["quality_gate_outcomes"]}
assert "RREG-SELF-REG-001" in regression_ids
assert "RREG-QC-002" in gate_ids
assert any(
item["path"] == "providers.py"
for item in artifact["fact_summary"]["contamination_sources"]
) is False
def test_export_assessment_review_decisions_include_quality_criteria_version(tmp_path):
service = make_service(tmp_path)
source = write_repo(tmp_path)
repository = service.register_repository(
name="Review Criteria Repo",
url=str(source),
)
summary = service.analyze_repository(
repository.id,
use_llm_assistance=False,
)
service.approve_candidate_graph(repository.id, summary.analysis_run.id)
artifact = export_assessment_artifact(
service,
repository.id,
summary.analysis_run.id,
role="challenger",
outcome="challenger",
reviewer="test",
)
assert artifact["review_decisions"]
assert artifact["review_decisions"][0]["quality_criteria_version"] == (
"repo-scoping-quality-criteria/v1"
)