generated from coulomb/repo-seed
Finalize repo-scoping runtime rename
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from repo_registry.acceptance import AgenticReviewDecision
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_scoping.acceptance import AgenticReviewDecision
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
class BoundaryApprovingReviewer:
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import pytest
|
||||
|
||||
from repo_registry.acceptance import (
|
||||
from repo_scoping.acceptance import (
|
||||
AgenticReviewDecision,
|
||||
validate_agentic_review_decision,
|
||||
)
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
class RecordingAgenticReviewer:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from repo_registry.candidate_graph.generator import CandidateGraphGenerator
|
||||
from repo_registry.core.models import ContentChunk, ObservedFact, Repository
|
||||
from repo_scoping.candidate_graph.generator import CandidateGraphGenerator
|
||||
from repo_scoping.core.models import ContentChunk, ObservedFact, Repository
|
||||
|
||||
|
||||
def fact(id, kind, name, path="", value="", metadata=None):
|
||||
@@ -533,7 +533,7 @@ def test_candidate_generator_does_not_promote_owned_provider_vocabulary_to_capab
|
||||
3,
|
||||
"llm_provider",
|
||||
"OpenRouter",
|
||||
"src/repo_registry/repo_scanning/scanner.py",
|
||||
"src/repo_scoping/repo_scanning/scanner.py",
|
||||
"openrouter",
|
||||
{"source_role": "implementation_source", "utility_relationship": "owned"},
|
||||
),
|
||||
@@ -541,7 +541,7 @@ def test_candidate_generator_does_not_promote_owned_provider_vocabulary_to_capab
|
||||
4,
|
||||
"provider_registry",
|
||||
"LLM provider registry",
|
||||
"src/repo_registry/repo_scanning/scanner.py",
|
||||
"src/repo_scoping/repo_scanning/scanner.py",
|
||||
metadata={
|
||||
"source_role": "implementation_source",
|
||||
"utility_relationship": "owned",
|
||||
@@ -551,7 +551,7 @@ def test_candidate_generator_does_not_promote_owned_provider_vocabulary_to_capab
|
||||
5,
|
||||
"credential_config",
|
||||
"OpenRouter API key",
|
||||
"src/repo_registry/repo_scanning/scanner.py",
|
||||
"src/repo_scoping/repo_scanning/scanner.py",
|
||||
"OPENROUTER_API_KEY",
|
||||
{"source_role": "implementation_source", "utility_relationship": "configure"},
|
||||
),
|
||||
@@ -619,7 +619,7 @@ def test_candidate_generator_recovers_repo_scoping_native_candidate_families():
|
||||
17,
|
||||
"interface",
|
||||
"python route decorator",
|
||||
"src/repo_registry/web_api/app.py",
|
||||
"src/repo_scoping/web_api/app.py",
|
||||
'@app.post("/repos")',
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
from repo_registry.candidate_graph.generator import (
|
||||
from repo_scoping.candidate_graph.generator import (
|
||||
CandidateAbilityDraft,
|
||||
CandidateCapabilityDraft,
|
||||
CandidateFeatureDraft,
|
||||
)
|
||||
from repo_registry.candidate_graph.normalization import normalize_candidate_drafts
|
||||
from repo_registry.core.models import SourceReference
|
||||
from repo_scoping.candidate_graph.normalization import normalize_candidate_drafts
|
||||
from repo_scoping.core.models import SourceReference
|
||||
|
||||
|
||||
def ref(fact_id, path):
|
||||
|
||||
@@ -2,10 +2,10 @@ import json
|
||||
|
||||
import pytest
|
||||
|
||||
from repo_registry.cli import main
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_scoping.cli import main
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
def make_service(tmp_path):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from repo_registry.content_indexing.extractor import ContentExtractor
|
||||
from repo_registry.core.models import ObservedFact
|
||||
from repo_scoping.content_indexing.extractor import ContentExtractor
|
||||
from repo_scoping.core.models import ObservedFact
|
||||
|
||||
|
||||
def fact(id, kind, name, path="", line=None, source_role=""):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import subprocess
|
||||
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
|
||||
|
||||
def run(command, cwd):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from datetime import date
|
||||
|
||||
from repo_registry.intent.bootstrap import bootstrap_intent_from_scope, scope_to_intent_text
|
||||
from repo_scoping.intent.bootstrap import bootstrap_intent_from_scope, scope_to_intent_text
|
||||
|
||||
|
||||
def test_scope_to_intent_text_replaces_scope_heading_and_marks_bootstrap():
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import pytest
|
||||
|
||||
from repo_registry.core.models import ContentChunk, Repository
|
||||
from repo_registry.llm_extraction import (
|
||||
from repo_scoping.core.models import ContentChunk, Repository
|
||||
from repo_scoping.llm_extraction import (
|
||||
LLMCandidateExtractor,
|
||||
LLMExtractionError,
|
||||
create_llm_connect_adapter,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from repo_registry.core.models import ContentChunk, ObservedFact
|
||||
from repo_registry.llm_extraction import (
|
||||
from repo_scoping.core.models import ContentChunk, ObservedFact
|
||||
from repo_scoping.llm_extraction import (
|
||||
ExtractedAbility,
|
||||
ExtractedCapability,
|
||||
ExtractedEvidence,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from repo_registry.acceptance import (
|
||||
from repo_scoping.acceptance import (
|
||||
active_quality_criteria_version,
|
||||
criteria_registry_markdown,
|
||||
load_quality_criteria,
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
from repo_registry.acceptance import (
|
||||
from repo_scoping.acceptance import (
|
||||
blocking_quality_gate_outcomes,
|
||||
evaluate_candidate_capability_quality,
|
||||
evaluate_candidate_graph_quality,
|
||||
quality_gate_outcome_dicts,
|
||||
)
|
||||
from repo_registry.core.models import (
|
||||
from repo_scoping.core.models import (
|
||||
AnalysisRun,
|
||||
CandidateAbility,
|
||||
CandidateCapability,
|
||||
@@ -13,9 +13,9 @@ from repo_registry.core.models import (
|
||||
Repository,
|
||||
SourceReference,
|
||||
)
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
def source_ref(path="src/app.py", kind="source"):
|
||||
|
||||
@@ -2,17 +2,17 @@ import json
|
||||
import logging
|
||||
import subprocess
|
||||
|
||||
from repo_registry.core.logging import LOGGER_NAME
|
||||
from repo_registry.core.models import SourceReference
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.llm_extraction import (
|
||||
from repo_scoping.core.logging import LOGGER_NAME
|
||||
from repo_scoping.core.models import SourceReference
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.llm_extraction import (
|
||||
ExtractedAbility,
|
||||
ExtractedCapability,
|
||||
ExtractedFeature,
|
||||
)
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.semantic import HashingEmbeddingProvider
|
||||
from repo_registry.storage.sqlite import NotFoundError, RegistryStore
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.semantic import HashingEmbeddingProvider
|
||||
from repo_scoping.storage.sqlite import NotFoundError, RegistryStore
|
||||
from tests.fixtures import (
|
||||
write_dependency_only_repo,
|
||||
write_empty_repo,
|
||||
|
||||
@@ -1,7 +1,21 @@
|
||||
from repo_registry.repo_ingestion.metadata import RepositoryMetadataExtractor
|
||||
from repo_scoping.repo_ingestion.metadata import RepositoryMetadataExtractor
|
||||
|
||||
|
||||
def test_metadata_prefers_pyproject(tmp_path):
|
||||
def test_metadata_prefers_source_identity_over_pyproject(tmp_path):
|
||||
repo = tmp_path / "repo-scoping"
|
||||
repo.mkdir()
|
||||
(repo / "pyproject.toml").write_text(
|
||||
'[project]\nname = "repo-registry"\ndescription = "Repository Scoping."\n',
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
metadata = RepositoryMetadataExtractor().extract(repo, str(repo))
|
||||
|
||||
assert metadata.name == "repo-scoping"
|
||||
assert metadata.description == "Repository Scoping."
|
||||
|
||||
|
||||
def test_metadata_uses_pyproject_when_source_name_is_generic(tmp_path):
|
||||
repo = tmp_path / "repo"
|
||||
repo.mkdir()
|
||||
(repo / "pyproject.toml").write_text(
|
||||
@@ -15,7 +29,7 @@ def test_metadata_prefers_pyproject(tmp_path):
|
||||
assert metadata.description == "Extract invoice data."
|
||||
|
||||
|
||||
def test_metadata_uses_package_json(tmp_path):
|
||||
def test_metadata_uses_package_json_when_source_name_is_generic(tmp_path):
|
||||
repo = tmp_path / "repo"
|
||||
repo.mkdir()
|
||||
(repo / "package.json").write_text(
|
||||
@@ -29,8 +43,8 @@ def test_metadata_uses_package_json(tmp_path):
|
||||
assert metadata.description == "Browse repository abilities."
|
||||
|
||||
|
||||
def test_metadata_falls_back_to_readme_title(tmp_path):
|
||||
repo = tmp_path / "repo-name"
|
||||
def test_metadata_uses_readme_title_when_source_name_is_generic(tmp_path):
|
||||
repo = tmp_path / "repository"
|
||||
repo.mkdir()
|
||||
(repo / "README.md").write_text(
|
||||
"# Useful Registry\n\nExtra details follow.\n",
|
||||
@@ -41,3 +55,19 @@ def test_metadata_falls_back_to_readme_title(tmp_path):
|
||||
|
||||
assert metadata.name == "Useful Registry"
|
||||
assert metadata.description == "Extra details follow."
|
||||
|
||||
|
||||
def test_metadata_strips_git_suffix_from_url_identity(tmp_path):
|
||||
repo = tmp_path / "checkout"
|
||||
repo.mkdir()
|
||||
(repo / "pyproject.toml").write_text(
|
||||
'[project]\nname = "old-package-name"\n',
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
metadata = RepositoryMetadataExtractor().extract(
|
||||
repo,
|
||||
"https://example.test/acme/repo-scoping.git",
|
||||
)
|
||||
|
||||
assert metadata.name == "repo-scoping"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from repo_registry.repo_scanning.scanner import DeterministicScanner
|
||||
from repo_scoping.repo_scanning.scanner import DeterministicScanner
|
||||
from tests.fixtures import (
|
||||
write_javascript_typescript_package_repo,
|
||||
write_misleading_docs_repo,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
def test_llm_connect_provider_expectations_are_detected_without_llm(tmp_path):
|
||||
|
||||
@@ -3,7 +3,7 @@ from pathlib import Path
|
||||
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from repo_registry.web_api.app import Settings, app, get_settings
|
||||
from repo_scoping.web_api.app import Settings, app, get_settings
|
||||
|
||||
|
||||
def override_settings(tmp_path):
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.scope.generator import SCOPE_SECTIONS, ScopeGenerator
|
||||
from repo_registry.scope.validator import ScopeValidator
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.scope.generator import SCOPE_SECTIONS, ScopeGenerator
|
||||
from repo_scoping.scope.validator import ScopeValidator
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
def make_service(tmp_path):
|
||||
@@ -15,7 +15,7 @@ def test_scope_generator_renders_canonical_sections_and_capability_blocks(tmp_pa
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(
|
||||
name="Repo Registry",
|
||||
url="https://example.test/coulomb/repo-registry.git",
|
||||
url="https://example.test/coulomb/repo-scoping.git",
|
||||
description="Generates repository scope files from approved characteristics.",
|
||||
)
|
||||
service.update_scope(
|
||||
@@ -46,10 +46,10 @@ def test_scope_generator_renders_canonical_sections_and_capability_blocks(tmp_pa
|
||||
type="business-usecase",
|
||||
primary_class="business-usecase",
|
||||
attributes=["scope", "preview"],
|
||||
location="src/repo_registry/scope/generator.py",
|
||||
location="src/repo_scoping/scope/generator.py",
|
||||
)
|
||||
|
||||
content = ScopeGenerator(service).generate("repo-registry")
|
||||
content = ScopeGenerator(service).generate("repo-scoping")
|
||||
|
||||
assert content.startswith("# SCOPE\n")
|
||||
for section in SCOPE_SECTIONS:
|
||||
@@ -57,7 +57,7 @@ def test_scope_generator_renders_canonical_sections_and_capability_blocks(tmp_pa
|
||||
assert "Generates and validates SCOPE.md files" in content
|
||||
assert "Maintain Repository Scope" in content
|
||||
assert "Preview generated SCOPE.md" in content
|
||||
assert "src/repo_registry/scope/generator.py" in content
|
||||
assert "src/repo_scoping/scope/generator.py" in content
|
||||
assert "```capability" in content
|
||||
assert "type: api" in content
|
||||
assert "title: Generate SCOPE.md" in content
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
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
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.self_scoping.assessment import export_assessment_artifact
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
def make_service(tmp_path):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from pathlib import Path
|
||||
|
||||
from repo_registry.self_scoping.comparison import (
|
||||
from repo_scoping.self_scoping.comparison import (
|
||||
compare_assessment_to_golden,
|
||||
comparison_markdown,
|
||||
load_json,
|
||||
|
||||
@@ -2,7 +2,7 @@ import json
|
||||
|
||||
import pytest
|
||||
|
||||
from repo_registry.self_scoping.review_store import (
|
||||
from repo_scoping.self_scoping.review_store import (
|
||||
list_assessment_artifacts,
|
||||
list_golden_profiles,
|
||||
load_json_artifact,
|
||||
|
||||
@@ -2,7 +2,7 @@ import json
|
||||
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from repo_registry.web_api.app import app
|
||||
from repo_scoping.web_api.app import app
|
||||
|
||||
|
||||
def write_json(path, payload):
|
||||
@@ -47,7 +47,7 @@ def seed_review_artifacts(root):
|
||||
{
|
||||
"name": "HTTP API surface",
|
||||
"type": "API",
|
||||
"location": "src/repo_registry/web_api/app.py",
|
||||
"location": "src/repo_scoping/web_api/app.py",
|
||||
}
|
||||
],
|
||||
}
|
||||
@@ -76,7 +76,7 @@ def seed_review_artifacts(root):
|
||||
{
|
||||
"name": "HTTP API surface",
|
||||
"type": "API",
|
||||
"location": "src/repo_registry/web_api/app.py",
|
||||
"location": "src/repo_scoping/web_api/app.py",
|
||||
}
|
||||
],
|
||||
}
|
||||
@@ -92,7 +92,7 @@ def seed_review_artifacts(root):
|
||||
def test_self_scoping_ui_compares_and_records_outcome(tmp_path, monkeypatch):
|
||||
root = tmp_path / "self-scoping"
|
||||
seed_review_artifacts(root)
|
||||
monkeypatch.setenv("REPO_REGISTRY_SELF_SCOPING_ROOT", str(root))
|
||||
monkeypatch.setenv("REPO_SCOPING_SELF_SCOPING_ROOT", str(root))
|
||||
client = TestClient(app)
|
||||
|
||||
index = client.get("/ui/self-scoping")
|
||||
@@ -126,7 +126,7 @@ def test_self_scoping_ui_compares_and_records_outcome(tmp_path, monkeypatch):
|
||||
def test_self_scoping_ui_compares_two_assessment_runs(tmp_path, monkeypatch):
|
||||
root = tmp_path / "self-scoping"
|
||||
seed_review_artifacts(root)
|
||||
monkeypatch.setenv("REPO_REGISTRY_SELF_SCOPING_ROOT", str(root))
|
||||
monkeypatch.setenv("REPO_SCOPING_SELF_SCOPING_ROOT", str(root))
|
||||
client = TestClient(app)
|
||||
|
||||
review = client.get(
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import sqlite3
|
||||
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
def make_service(tmp_path):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
|
||||
|
||||
def make_service(tmp_path):
|
||||
|
||||
@@ -3,11 +3,11 @@ import sqlite3
|
||||
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.storage.sqlite import RegistryStore
|
||||
from repo_registry.web_api import app as app_module
|
||||
from repo_registry.web_api.app import Settings, app, get_service, get_settings
|
||||
from repo_scoping.core.service import RegistryService
|
||||
from repo_scoping.repo_ingestion.git import GitIngestionService
|
||||
from repo_scoping.storage.sqlite import RegistryStore
|
||||
from repo_scoping.web_api import app as app_module
|
||||
from repo_scoping.web_api.app import Settings, app, get_service, get_settings
|
||||
|
||||
|
||||
def add_candidate_capability(database_path, repository_id, analysis_run_id, name):
|
||||
@@ -1063,12 +1063,12 @@ def test_api_service_settings_can_enable_hashing_embedding_provider(tmp_path):
|
||||
|
||||
|
||||
def test_settings_can_load_from_environment(monkeypatch):
|
||||
monkeypatch.setenv("REPO_REGISTRY_DATABASE_PATH", "var/env.sqlite3")
|
||||
monkeypatch.setenv("REPO_REGISTRY_CHECKOUT_ROOT", "var/env-checkouts")
|
||||
monkeypatch.setenv("REPO_REGISTRY_LLM_PROVIDER", "mock")
|
||||
monkeypatch.setenv("REPO_REGISTRY_LLM_MODEL", "demo-model")
|
||||
monkeypatch.setenv("REPO_REGISTRY_EMBEDDING_PROVIDER", "hashing")
|
||||
monkeypatch.setenv("REPO_REGISTRY_LOG_LEVEL", "DEBUG")
|
||||
monkeypatch.setenv("REPO_SCOPING_DATABASE_PATH", "var/env.sqlite3")
|
||||
monkeypatch.setenv("REPO_SCOPING_CHECKOUT_ROOT", "var/env-checkouts")
|
||||
monkeypatch.setenv("REPO_SCOPING_LLM_PROVIDER", "mock")
|
||||
monkeypatch.setenv("REPO_SCOPING_LLM_MODEL", "demo-model")
|
||||
monkeypatch.setenv("REPO_SCOPING_EMBEDDING_PROVIDER", "hashing")
|
||||
monkeypatch.setenv("REPO_SCOPING_LOG_LEVEL", "DEBUG")
|
||||
|
||||
settings = Settings()
|
||||
|
||||
@@ -2696,7 +2696,7 @@ def test_ui_manual_registry_entry_loop(tmp_path):
|
||||
|
||||
delete_repository_response = client.post(
|
||||
f"{repository_path}/delete",
|
||||
data={"confirm_name": "Manual Repo"},
|
||||
data={"confirm_name": "manual-repo"},
|
||||
follow_redirects=False,
|
||||
)
|
||||
assert delete_repository_response.status_code == 303
|
||||
|
||||
Reference in New Issue
Block a user