generated from coulomb/repo-seed
Status drift warnings
This commit is contained in:
@@ -746,10 +746,92 @@ def test_analyze_repository_can_trusted_auto_approve_candidates(tmp_path):
|
||||
decisions = service.list_review_decisions(repository.id, summary.analysis_run.id)
|
||||
|
||||
assert service.get_repository(repository.id).status == "indexed"
|
||||
assert graph.abilities[0].status == "approved"
|
||||
statuses_by_capability = {
|
||||
capability.name: capability.status
|
||||
for capability in graph.abilities[0].capabilities
|
||||
}
|
||||
assert statuses_by_capability["Expose Repository Interface"] == "approved"
|
||||
assert statuses_by_capability["Describe Repository Structure"] == "candidate"
|
||||
assert ability_map.abilities[0].name == "Report Health Over HTTP"
|
||||
assert decisions[0].action == "trusted_auto_approve_candidate_graph"
|
||||
assert "deterministic candidate generation" in decisions[0].notes
|
||||
assert "Auto-approved 1 safe candidate capability(s); left 1 for review." in decisions[0].notes
|
||||
|
||||
|
||||
def test_rebuild_characteristics_dry_run_preserves_approved_map(tmp_path):
|
||||
source = tmp_path / "repo"
|
||||
source.mkdir()
|
||||
(source / "README.md").write_text("# Rebuild\nReports health over HTTP.\n", encoding="utf-8")
|
||||
(source / "app.py").write_text('@app.get("/health")\ndef health():\n return {}\n', encoding="utf-8")
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(name="Rebuild", url=str(source))
|
||||
summary = service.analyze_repository(repository.id, use_llm_assistance=False)
|
||||
service.approve_candidate_graph(repository.id, summary.analysis_run.id)
|
||||
|
||||
result = service.rebuild_characteristics_from_scratch(
|
||||
repository.id,
|
||||
dry_run=True,
|
||||
source_path=str(source),
|
||||
use_llm_assistance=False,
|
||||
)
|
||||
|
||||
assert result.dry_run is True
|
||||
assert result.cleared_approved is False
|
||||
assert result.previous_counts["abilities"] == 1
|
||||
assert result.previous_ids["abilities"]
|
||||
assert result.candidate_counts["abilities"] == 1
|
||||
assert service.ability_map(repository.id).abilities
|
||||
decisions = service.list_review_decisions(repository.id, result.analysis_run.id)
|
||||
assert decisions[-1].action == "dry_run_rebuild_characteristics_from_scratch"
|
||||
|
||||
|
||||
def test_rebuild_characteristics_requires_confirmation_before_clearing(tmp_path):
|
||||
service = make_service(tmp_path)
|
||||
source = tmp_path / "repo"
|
||||
source.mkdir()
|
||||
(source / "README.md").write_text("# Rebuild\n", encoding="utf-8")
|
||||
repository = service.register_repository(name="Rebuild", url=str(source))
|
||||
|
||||
try:
|
||||
service.rebuild_characteristics_from_scratch(
|
||||
repository.id,
|
||||
dry_run=False,
|
||||
confirm=False,
|
||||
source_path=str(source),
|
||||
use_llm_assistance=False,
|
||||
)
|
||||
except ValueError as exc:
|
||||
assert "confirm=True" in str(exc)
|
||||
else:
|
||||
raise AssertionError("expected confirmed rebuild to require confirm=True")
|
||||
|
||||
|
||||
def test_rebuild_characteristics_confirmed_clears_approved_map(tmp_path):
|
||||
source = tmp_path / "repo"
|
||||
source.mkdir()
|
||||
(source / "README.md").write_text("# Rebuild\nReports health over HTTP.\n", encoding="utf-8")
|
||||
(source / "app.py").write_text('@app.get("/health")\ndef health():\n return {}\n', encoding="utf-8")
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(name="Rebuild", url=str(source))
|
||||
summary = service.analyze_repository(repository.id, use_llm_assistance=False)
|
||||
service.approve_candidate_graph(repository.id, summary.analysis_run.id)
|
||||
|
||||
result = service.rebuild_characteristics_from_scratch(
|
||||
repository.id,
|
||||
dry_run=False,
|
||||
confirm=True,
|
||||
source_path=str(source),
|
||||
use_llm_assistance=False,
|
||||
)
|
||||
|
||||
assert result.cleared_approved is True
|
||||
assert result.previous_counts["abilities"] == 1
|
||||
assert result.previous_ids["abilities"]
|
||||
assert service.ability_map(repository.id).abilities == []
|
||||
assert service.get_repository(repository.id).status == "analyzed"
|
||||
decisions = service.list_review_decisions(repository.id, result.analysis_run.id)
|
||||
assert decisions[-1].action == "rebuild_characteristics_from_scratch"
|
||||
assert "Previous approved IDs" in decisions[-1].notes
|
||||
|
||||
|
||||
def test_analyze_repository_records_llm_failure_and_falls_back(tmp_path):
|
||||
|
||||
Reference in New Issue
Block a user