diff --git a/docs/self-scoping/README.md b/docs/self-scoping/README.md index c42f449..4083e5e 100644 --- a/docs/self-scoping/README.md +++ b/docs/self-scoping/README.md @@ -17,6 +17,11 @@ instead of relying on memory or screenshots. generation still collapses repo-scoping's native surfaces under the forbidden provider-routing capability, but its source set no longer includes `var/checkouts/` contamination. +- `assessments/repo-scoping-post-wp0016-native-2026-05-15.json` captures the + first deterministic challenger after native candidate generation recovery. It + matches every expected capability in the golden profile and has no known + provider-routing regression, while still leaving generated candidates pending + review with quality-gate signals. - `workflow.md` explains how to run challenger assessments, interpret outcomes, and decide whether to update the golden profile or fix the engine. - `outcomes/` stores append-only reviewer decisions created from side-by-side diff --git a/docs/self-scoping/assessments/repo-scoping-post-wp0016-native-2026-05-15.json b/docs/self-scoping/assessments/repo-scoping-post-wp0016-native-2026-05-15.json new file mode 100644 index 0000000..68c04c4 --- /dev/null +++ b/docs/self-scoping/assessments/repo-scoping-post-wp0016-native-2026-05-15.json @@ -0,0 +1,9110 @@ +{ + "approved_map": { + "abilities": [], + "scope": { + "confidence": 1.0, + "confidence_label": "high", + "description": "Self-scoping assessment target.", + "id": 1, + "name": "repo-scoping" + } + }, + "artifact_id": "repo-scoping-challenger-run-1", + "artifact_type": "assessment_run", + "assessment": { + "comparison_eligibility": "eligible", + "outcome": "challenger", + "rationale": [], + "reviewer": "self-assess", + "role": "challenger", + "summary": "Generated self-scoping assessment artifact for comparison." + }, + "content_chunk_summary": { + "counts_by_kind": { + "config": 1, + "credential_config": 50, + "documentation": 162, + "fallback_policy": 198, + "intent": 5, + "interface": 255, + "llm_provider": 368, + "manifest": 1, + "provider_registry": 281, + "scope": 5, + "test": 248 + }, + "counts_by_source_role": { + "dependency_declaration": 2, + "derived_scope": 5, + "implementation_source": 255, + "intent_summary": 5, + "product_documentation": 451, + "test_evidence": 856 + }, + "paths": [ + "INTENT.md", + "README.md", + "SCOPE.md", + "docs/abstraction-strategy.md", + "docs/acceptance-policy.md", + "docs/adr-dependency-graph-visualization-framework.md", + "docs/adr-ep-cap-003-vocabulary-ref-guard.md", + "docs/api-contract.md", + "docs/characteristic-evidence-model.md", + "docs/classification-strategy.md", + "docs/dependency-aware-scope-propagation.md", + "docs/dependency-visualization-exploration.md", + "docs/migrations/trusted-auto-approval.md", + "docs/operations.md", + "docs/quality-criteria/README.md", + "docs/quality-criteria/acceptance-quality-criteria.v1.json", + "docs/schemas/quality-criteria-registry.schema.json", + "docs/schemas/repo-scope-context-response.json", + "docs/schemas/self-scoping-assessment.schema.json", + "docs/scope-md-spec.md", + "docs/self-scoping/README.md", + "docs/self-scoping/assessments/repo-scoping-known-bad-2026-05-15-run-39.json", + "docs/self-scoping/assessments/repo-scoping-post-wp0015-clean-2026-05-15.json", + "docs/self-scoping/assessments/repo-scoping-post-wp0015-clean-2026-05-15.md", + "docs/self-scoping/golden/repo-scoping-golden-profile.v1.json", + "docs/self-scoping/outcomes/README.md", + "docs/self-scoping/workflow.md", + "docs/semantic-retrieval.md", + "docs/terminology.md", + "pyproject.toml", + "src/repo_registry/candidate_graph/normalization.py", + "src/repo_registry/cli.py", + "src/repo_registry/repo_scanning/scanner.py", + "src/repo_registry/web_api/__init__.py", + "src/repo_registry/web_api/app.py", + "src/repo_registry/web_api/schemas.py", + "tests/__init__.py", + "tests/expectations/llm_connect_provider_expectations.json", + "tests/fixtures.py", + "tests/test_acceptance_boundary.py", + "tests/test_acceptance_policy_docs.py", + "tests/test_agentic_review.py", + "tests/test_candidate_graph.py", + "tests/test_candidate_normalization.py", + "tests/test_cli.py", + "tests/test_content_indexing.py", + "tests/test_git_ingestion.py", + "tests/test_intent_bootstrap.py", + "tests/test_llm_extraction.py", + "tests/test_llm_extraction_mapper.py", + "tests/test_quality_criteria.py", + "tests/test_quality_gates.py", + "tests/test_registry_service.py", + "tests/test_repository_metadata.py", + "tests/test_repository_scanner.py", + "tests/test_scanner_coevolution.py", + "tests/test_scope_context_api.py", + "tests/test_scope_generator.py", + "tests/test_self_scoping_artifacts.py", + "tests/test_self_scoping_assessment_export.py", + "tests/test_self_scoping_comparison.py", + "tests/test_self_scoping_review_store.py", + "tests/test_self_scoping_web_ui.py", + "tests/test_storage_migrations.py", + "tests/test_trusted_auto_approval_migration.py", + "tests/test_web_api.py", + "wiki/AbilityExtractionHeuristics.md", + "workplans/RREG-WP-0003-automatic-repository-exploration.md", + "workplans/RREG-WP-0004-characteristic-classification-navigation.md", + "workplans/RREG-WP-0012-activity-core-context-api.md" + ], + "total": 1574 + }, + "created_at": "2026-05-15T16:30:45Z", + "engine_identity": { + "candidate_generator_version": "unversioned", + "engine_commit": "2c3dad80d646869827335cb6de849cdca272c85b", + "engine_dirty_state": "clean", + "engine_release": null, + "prompt_version": null, + "quality_criteria_version": "repo-scoping-quality-criteria/v1", + "release_binding_note": "Engine commit was captured from git.", + "release_binding_status": "complete", + "repo_scoping_version": "0.1.0", + "scanner_version": "deterministic-v0.1" + }, + "execution": { + "acceptance_mode": "pending_review", + "analysis_run_id": 1, + "candidate_source": "deterministic", + "completed_at": "2026-05-15T16:30:44Z", + "mode": "deterministic-only", + "started_at": "2026-05-15T16:30:41Z" + }, + "fact_summary": { + "contamination_sources": [ + { + "path": "src/repo_registry/candidate_graph/normalization.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "src/repo_registry/repo_scanning/scanner.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "src/repo_registry/web_api/schemas.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/expectations/llm_connect_provider_expectations.json", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/fixtures.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_acceptance_boundary.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_candidate_graph.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_candidate_normalization.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_cli.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_content_indexing.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_llm_extraction.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_quality_gates.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_registry_service.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_repository_scanner.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_scanner_coevolution.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_self_scoping_assessment_export.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "tests/test_web_api.py", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "workplans/RREG-WP-0003-automatic-repository-exploration.md", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + }, + { + "path": "workplans/RREG-WP-0004-characteristic-classification-navigation.md", + "reason": "Provider-related fact came from scanner rules, tests, fixtures, schemas, or workplan context and needs native-utility review." + } + ], + "counts_by_kind": { + "config": 1, + "credential_config": 13, + "documentation": 27, + "fallback_policy": 12, + "framework": 2, + "intent": 1, + "interface": 136, + "language": 1, + "llm_provider": 55, + "manifest": 1, + "provider_registry": 14, + "scope": 1, + "test": 30 + } + }, + "generated_tree": { + "abilities": [ + { + "capabilities": [ + { + "evidence": [ + { + "reference": "tests/test_git_ingestion.py", + "source_refs": [ + { + "fact_id": 275, + "kind": "test", + "line": null, + "name": "test_git_ingestion.py", + "path": "tests/test_git_ingestion.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + }, + { + "reference": "tests/test_repository_metadata.py", + "source_refs": [ + { + "fact_id": 282, + "kind": "test", + "line": null, + "name": "test_repository_metadata.py", + "path": "tests/test_repository_metadata.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + } + ], + "features": [ + { + "location": "src/repo_registry/web_api/app.py", + "name": "Create and update repository records", + "primary_class": "api", + "source_refs": [ + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + } + ], + "status": "candidate", + "type": "api" + }, + { + "location": "tests/test_git_ingestion.py", + "name": "Resolve local or remote Git checkouts", + "primary_class": "backend", + "source_refs": [ + { + "fact_id": 275, + "kind": "test", + "line": null, + "name": "test_git_ingestion.py", + "path": "tests/test_git_ingestion.py" + } + ], + "status": "candidate", + "type": "backend" + }, + { + "location": "tests/test_repository_metadata.py", + "name": "Import repository metadata", + "primary_class": "backend", + "source_refs": [ + { + "fact_id": 282, + "kind": "test", + "line": null, + "name": "test_repository_metadata.py", + "path": "tests/test_repository_metadata.py" + } + ], + "status": "candidate", + "type": "backend" + }, + { + "location": "multiple files", + "name": "CLI command surface: CLI command build_parser, CLI command make_service", + "primary_class": "CLI", + "source_refs": [ + { + "fact_id": 58, + "kind": "interface", + "line": null, + "name": "possible CLI", + "path": "src/repo_registry/cli.py" + }, + { + "fact_id": 189, + "kind": "interface", + "line": null, + "name": "possible CLI", + "path": "tests/test_cli.py" + } + ], + "status": "candidate", + "type": "CLI" + } + ], + "name": "Register And Track Repositories", + "primary_class": "ingestion", + "source_refs": [ + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 275, + "kind": "test", + "line": null, + "name": "test_git_ingestion.py", + "path": "tests/test_git_ingestion.py" + }, + { + "fact_id": 282, + "kind": "test", + "line": null, + "name": "test_repository_metadata.py", + "path": "tests/test_repository_metadata.py" + } + ], + "status": "candidate" + }, + { + "evidence": [ + { + "reference": "tests/test_repository_scanner.py", + "source_refs": [ + { + "fact_id": 283, + "kind": "test", + "line": null, + "name": "test_repository_scanner.py", + "path": "tests/test_repository_scanner.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + }, + { + "reference": "docs/characteristic-evidence-model.md", + "source_refs": [ + { + "fact_id": 21, + "kind": "documentation", + "line": null, + "name": "characteristic-evidence-model.md", + "path": "docs/characteristic-evidence-model.md" + } + ], + "status": "candidate", + "strength": "medium", + "type": "documentation" + } + ], + "features": [ + { + "location": "multiple files", + "name": "Detect source languages, manifests, docs, tests, config, and interfaces", + "primary_class": "backend", + "source_refs": [ + { + "fact_id": 2, + "kind": "credential_config", + "line": null, + "name": "Anthropic API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 3, + "kind": "credential_config", + "line": null, + "name": "Gemini API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 4, + "kind": "credential_config", + "line": null, + "name": "Google API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 5, + "kind": "credential_config", + "line": null, + "name": "OpenAI API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 6, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 11, + "kind": "credential_config", + "line": null, + "name": "Anthropic API key", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 12, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 45, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 50, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 210, + "kind": "llm_provider", + "line": null, + "name": "Anthropic", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 211, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 212, + "kind": "llm_provider", + "line": null, + "name": "Gemini", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 213, + "kind": "llm_provider", + "line": null, + "name": "OpenAI", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 214, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 233, + "kind": "llm_provider", + "line": null, + "name": "Anthropic", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 234, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 235, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 252, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 260, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 283, + "kind": "test", + "line": null, + "name": "test_repository_scanner.py", + "path": "tests/test_repository_scanner.py" + } + ], + "status": "candidate", + "type": "backend" + }, + { + "location": "multiple files", + "name": "Classify source roles for facts", + "primary_class": "backend", + "source_refs": [ + { + "fact_id": 2, + "kind": "credential_config", + "line": null, + "name": "Anthropic API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 3, + "kind": "credential_config", + "line": null, + "name": "Gemini API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 4, + "kind": "credential_config", + "line": null, + "name": "Google API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 5, + "kind": "credential_config", + "line": null, + "name": "OpenAI API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 6, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 21, + "kind": "documentation", + "line": null, + "name": "characteristic-evidence-model.md", + "path": "docs/characteristic-evidence-model.md" + }, + { + "fact_id": 45, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 210, + "kind": "llm_provider", + "line": null, + "name": "Anthropic", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 211, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 212, + "kind": "llm_provider", + "line": null, + "name": "Gemini", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 213, + "kind": "llm_provider", + "line": null, + "name": "OpenAI", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 214, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 252, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "src/repo_registry/repo_scanning/scanner.py" + } + ], + "status": "candidate", + "type": "backend" + } + ], + "name": "Scan Repositories Into Observed Facts", + "primary_class": "analysis", + "source_refs": [ + { + "fact_id": 2, + "kind": "credential_config", + "line": null, + "name": "Anthropic API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 3, + "kind": "credential_config", + "line": null, + "name": "Gemini API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 4, + "kind": "credential_config", + "line": null, + "name": "Google API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 5, + "kind": "credential_config", + "line": null, + "name": "OpenAI API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 6, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 11, + "kind": "credential_config", + "line": null, + "name": "Anthropic API key", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 12, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 45, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 50, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 210, + "kind": "llm_provider", + "line": null, + "name": "Anthropic", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 211, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 212, + "kind": "llm_provider", + "line": null, + "name": "Gemini", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 213, + "kind": "llm_provider", + "line": null, + "name": "OpenAI", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 214, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 233, + "kind": "llm_provider", + "line": null, + "name": "Anthropic", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 234, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 235, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 252, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "src/repo_registry/repo_scanning/scanner.py" + }, + { + "fact_id": 260, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 283, + "kind": "test", + "line": null, + "name": "test_repository_scanner.py", + "path": "tests/test_repository_scanner.py" + }, + { + "fact_id": 21, + "kind": "documentation", + "line": null, + "name": "characteristic-evidence-model.md", + "path": "docs/characteristic-evidence-model.md" + } + ], + "status": "candidate" + }, + { + "evidence": [ + { + "reference": "tests/test_content_indexing.py", + "source_refs": [ + { + "fact_id": 274, + "kind": "test", + "line": null, + "name": "test_content_indexing.py", + "path": "tests/test_content_indexing.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + } + ], + "features": [ + { + "location": "tests/test_content_indexing.py", + "name": "Create source-linked content chunks from observed facts", + "primary_class": "backend", + "source_refs": [ + { + "fact_id": 10, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "tests/test_content_indexing.py" + }, + { + "fact_id": 228, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_content_indexing.py" + }, + { + "fact_id": 274, + "kind": "test", + "line": null, + "name": "test_content_indexing.py", + "path": "tests/test_content_indexing.py" + } + ], + "status": "candidate", + "type": "backend" + } + ], + "name": "Index Source Content With Provenance", + "primary_class": "analysis", + "source_refs": [ + { + "fact_id": 10, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "tests/test_content_indexing.py" + }, + { + "fact_id": 228, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_content_indexing.py" + }, + { + "fact_id": 274, + "kind": "test", + "line": null, + "name": "test_content_indexing.py", + "path": "tests/test_content_indexing.py" + } + ], + "status": "candidate" + }, + { + "evidence": [ + { + "reference": "tests/test_candidate_graph.py", + "source_refs": [ + { + "fact_id": 271, + "kind": "test", + "line": null, + "name": "test_candidate_graph.py", + "path": "tests/test_candidate_graph.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + }, + { + "reference": "tests/test_llm_extraction.py", + "source_refs": [ + { + "fact_id": 277, + "kind": "test", + "line": null, + "name": "test_llm_extraction.py", + "path": "tests/test_llm_extraction.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + } + ], + "features": [ + { + "location": "multiple files", + "name": "Build candidate abilities, capabilities, features, and evidence", + "primary_class": "backend", + "source_refs": [ + { + "fact_id": 9, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 48, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 205, + "kind": "llm_provider", + "line": null, + "name": "Anthropic", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 206, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 207, + "kind": "llm_provider", + "line": null, + "name": "Gemini", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 208, + "kind": "llm_provider", + "line": null, + "name": "OpenAI", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 209, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 223, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 224, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 256, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 271, + "kind": "test", + "line": null, + "name": "test_candidate_graph.py", + "path": "tests/test_candidate_graph.py" + } + ], + "status": "candidate", + "type": "backend" + }, + { + "location": "tests/test_llm_extraction.py", + "name": "Optionally map structured LLM extraction into candidates", + "primary_class": "integration", + "source_refs": [ + { + "fact_id": 229, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_llm_extraction.py" + }, + { + "fact_id": 277, + "kind": "test", + "line": null, + "name": "test_llm_extraction.py", + "path": "tests/test_llm_extraction.py" + } + ], + "status": "candidate", + "type": "integration" + } + ], + "name": "Generate Reviewable Candidate Characteristics", + "primary_class": "analysis", + "source_refs": [ + { + "fact_id": 9, + "kind": "credential_config", + "line": null, + "name": "OpenRouter API key", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 48, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 205, + "kind": "llm_provider", + "line": null, + "name": "Anthropic", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 206, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 207, + "kind": "llm_provider", + "line": null, + "name": "Gemini", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 208, + "kind": "llm_provider", + "line": null, + "name": "OpenAI", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 209, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "src/repo_registry/candidate_graph/normalization.py" + }, + { + "fact_id": 223, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 224, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 256, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 271, + "kind": "test", + "line": null, + "name": "test_candidate_graph.py", + "path": "tests/test_candidate_graph.py" + }, + { + "fact_id": 229, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_llm_extraction.py" + }, + { + "fact_id": 277, + "kind": "test", + "line": null, + "name": "test_llm_extraction.py", + "path": "tests/test_llm_extraction.py" + } + ], + "status": "candidate" + }, + { + "evidence": [ + { + "reference": "tests/test_registry_service.py", + "source_refs": [ + { + "fact_id": 281, + "kind": "test", + "line": null, + "name": "test_registry_service.py", + "path": "tests/test_registry_service.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + } + ], + "features": [ + { + "location": "multiple files", + "name": "Edit, reject, merge, and relink candidate graph entries", + "primary_class": "api", + "source_refs": [ + { + "fact_id": 49, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 231, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 232, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 259, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 281, + "kind": "test", + "line": null, + "name": "test_registry_service.py", + "path": "tests/test_registry_service.py" + } + ], + "status": "candidate", + "type": "api" + }, + { + "location": "src/repo_registry/web_api/schemas.py", + "name": "Record review decisions and expectation gaps", + "primary_class": "audit", + "source_refs": [ + { + "fact_id": 129, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/schemas.py" + }, + { + "fact_id": 215, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "src/repo_registry/web_api/schemas.py" + } + ], + "status": "candidate", + "type": "audit" + } + ], + "name": "Review And Approve Candidate Characteristics", + "primary_class": "review", + "source_refs": [ + { + "fact_id": 49, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 231, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 232, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 259, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 281, + "kind": "test", + "line": null, + "name": "test_registry_service.py", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 129, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/schemas.py" + }, + { + "fact_id": 215, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "src/repo_registry/web_api/schemas.py" + } + ], + "status": "candidate" + }, + { + "evidence": [ + { + "reference": "tests/test_registry_service.py", + "source_refs": [ + { + "fact_id": 281, + "kind": "test", + "line": null, + "name": "test_registry_service.py", + "path": "tests/test_registry_service.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + }, + { + "reference": "docs/api-contract.md", + "source_refs": [ + { + "fact_id": 20, + "kind": "documentation", + "line": null, + "name": "api-contract.md", + "path": "docs/api-contract.md" + } + ], + "status": "candidate", + "strength": "medium", + "type": "documentation" + } + ], + "features": [ + { + "location": "tests/test_registry_service.py", + "name": "Search approved abilities, capabilities, features, and evidence", + "primary_class": "api", + "source_refs": [ + { + "fact_id": 49, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 231, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 232, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 259, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 281, + "kind": "test", + "line": null, + "name": "test_registry_service.py", + "path": "tests/test_registry_service.py" + } + ], + "status": "candidate", + "type": "api" + }, + { + "location": "src/repo_registry/web_api/app.py", + "name": "Compare repositories and identify capability gaps", + "primary_class": "api", + "source_refs": [ + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + } + ], + "status": "candidate", + "type": "api" + }, + { + "location": "multiple files", + "name": "Export repository profiles", + "primary_class": "api", + "source_refs": [ + { + "fact_id": 20, + "kind": "documentation", + "line": null, + "name": "api-contract.md", + "path": "docs/api-contract.md" + }, + { + "fact_id": 57, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "docs/api-contract.md" + }, + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + } + ], + "status": "candidate", + "type": "api" + } + ], + "name": "Search Compare And Export Approved Profiles", + "primary_class": "discovery", + "source_refs": [ + { + "fact_id": 49, + "kind": "fallback_policy", + "line": null, + "name": "LLM provider fallback policy", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 231, + "kind": "llm_provider", + "line": null, + "name": "Claude", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 232, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 259, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 281, + "kind": "test", + "line": null, + "name": "test_registry_service.py", + "path": "tests/test_registry_service.py" + }, + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 20, + "kind": "documentation", + "line": null, + "name": "api-contract.md", + "path": "docs/api-contract.md" + }, + { + "fact_id": 57, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "docs/api-contract.md" + } + ], + "status": "candidate" + }, + { + "evidence": [ + { + "reference": "tests/test_scope_generator.py", + "source_refs": [ + { + "fact_id": 286, + "kind": "test", + "line": null, + "name": "test_scope_generator.py", + "path": "tests/test_scope_generator.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + }, + { + "reference": "docs/scope-md-spec.md", + "source_refs": [ + { + "fact_id": 32, + "kind": "documentation", + "line": null, + "name": "scope-md-spec.md", + "path": "docs/scope-md-spec.md" + } + ], + "status": "candidate", + "strength": "medium", + "type": "documentation" + } + ], + "features": [ + { + "location": "multiple files", + "name": "Render SCOPE.md from approved characteristics", + "primary_class": "backend", + "source_refs": [ + { + "fact_id": 32, + "kind": "documentation", + "line": null, + "name": "scope-md-spec.md", + "path": "docs/scope-md-spec.md" + }, + { + "fact_id": 286, + "kind": "test", + "line": null, + "name": "test_scope_generator.py", + "path": "tests/test_scope_generator.py" + } + ], + "status": "candidate", + "type": "backend" + }, + { + "location": "src/repo_registry/web_api/app.py", + "name": "Diff, validate, and write scope files", + "primary_class": "api", + "source_refs": [ + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + } + ], + "status": "candidate", + "type": "api" + } + ], + "name": "Generate And Maintain SCOPE.md", + "primary_class": "scope-generation", + "source_refs": [ + { + "fact_id": 32, + "kind": "documentation", + "line": null, + "name": "scope-md-spec.md", + "path": "docs/scope-md-spec.md" + }, + { + "fact_id": 286, + "kind": "test", + "line": null, + "name": "test_scope_generator.py", + "path": "tests/test_scope_generator.py" + }, + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + } + ], + "status": "candidate" + }, + { + "evidence": [ + { + "reference": "tests/test_web_api.py", + "source_refs": [ + { + "fact_id": 294, + "kind": "test", + "line": null, + "name": "test_web_api.py", + "path": "tests/test_web_api.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + }, + { + "reference": "docs/dependency-aware-scope-propagation.md", + "source_refs": [ + { + "fact_id": 23, + "kind": "documentation", + "line": null, + "name": "dependency-aware-scope-propagation.md", + "path": "docs/dependency-aware-scope-propagation.md" + } + ], + "status": "candidate", + "strength": "medium", + "type": "documentation" + }, + { + "reference": "docs/dependency-visualization-exploration.md", + "source_refs": [ + { + "fact_id": 24, + "kind": "documentation", + "line": null, + "name": "dependency-visualization-exploration.md", + "path": "docs/dependency-visualization-exploration.md" + } + ], + "status": "candidate", + "strength": "medium", + "type": "documentation" + } + ], + "features": [ + { + "location": "multiple files", + "name": "Model dependencies between facts, evidence, features, capabilities, abilities, and scope", + "primary_class": "backend", + "source_refs": [ + { + "fact_id": 23, + "kind": "documentation", + "line": null, + "name": "dependency-aware-scope-propagation.md", + "path": "docs/dependency-aware-scope-propagation.md" + }, + { + "fact_id": 24, + "kind": "documentation", + "line": null, + "name": "dependency-visualization-exploration.md", + "path": "docs/dependency-visualization-exploration.md" + } + ], + "status": "candidate", + "type": "backend" + }, + { + "location": "multiple files", + "name": "Render dependency graph views and profiles", + "primary_class": "ui", + "source_refs": [ + { + "fact_id": 130, + "kind": "interface", + "line": 437, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 131, + "kind": "interface", + "line": 442, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 132, + "kind": "interface", + "line": 537, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 133, + "kind": "interface", + "line": 542, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 134, + "kind": "interface", + "line": 621, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 135, + "kind": "interface", + "line": 652, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 136, + "kind": "interface", + "line": 731, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 137, + "kind": "interface", + "line": 1069, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 138, + "kind": "interface", + "line": 1107, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 139, + "kind": "interface", + "line": 1139, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 140, + "kind": "interface", + "line": 1182, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 141, + "kind": "interface", + "line": 1366, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 142, + "kind": "interface", + "line": 1439, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 143, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 144, + "kind": "interface", + "line": 1664, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 145, + "kind": "interface", + "line": 1676, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 146, + "kind": "interface", + "line": 1693, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 147, + "kind": "interface", + "line": 1710, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 148, + "kind": "interface", + "line": 1723, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 149, + "kind": "interface", + "line": 1744, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 150, + "kind": "interface", + "line": 1771, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 151, + "kind": "interface", + "line": 1796, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 152, + "kind": "interface", + "line": 1823, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 153, + "kind": "interface", + "line": 1846, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 154, + "kind": "interface", + "line": 1856, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 155, + "kind": "interface", + "line": 1883, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 156, + "kind": "interface", + "line": 1893, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 157, + "kind": "interface", + "line": 1918, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 158, + "kind": "interface", + "line": 1928, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 159, + "kind": "interface", + "line": 1955, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 160, + "kind": "interface", + "line": 1965, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 161, + "kind": "interface", + "line": 1991, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 162, + "kind": "interface", + "line": 2015, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 163, + "kind": "interface", + "line": 2132, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 164, + "kind": "interface", + "line": 2156, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 165, + "kind": "interface", + "line": 2182, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 166, + "kind": "interface", + "line": 2201, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 167, + "kind": "interface", + "line": 2330, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 168, + "kind": "interface", + "line": 2402, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 169, + "kind": "interface", + "line": 2955, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 170, + "kind": "interface", + "line": 2969, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 171, + "kind": "interface", + "line": 2984, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 172, + "kind": "interface", + "line": 3006, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 173, + "kind": "interface", + "line": 3025, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 174, + "kind": "interface", + "line": 3047, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 175, + "kind": "interface", + "line": 3066, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 176, + "kind": "interface", + "line": 3088, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 177, + "kind": "interface", + "line": 3107, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 178, + "kind": "interface", + "line": 3129, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 179, + "kind": "interface", + "line": 3148, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 180, + "kind": "interface", + "line": 3180, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 181, + "kind": "interface", + "line": 3212, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 182, + "kind": "interface", + "line": 3246, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 183, + "kind": "interface", + "line": 3270, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 184, + "kind": "interface", + "line": 3294, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 185, + "kind": "interface", + "line": 3318, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 186, + "kind": "interface", + "line": 3342, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 187, + "kind": "interface", + "line": 3366, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 188, + "kind": "interface", + "line": 3390, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 191, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "tests/test_web_api.py" + }, + { + "fact_id": 240, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_web_api.py" + }, + { + "fact_id": 263, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_web_api.py" + }, + { + "fact_id": 294, + "kind": "test", + "line": null, + "name": "test_web_api.py", + "path": "tests/test_web_api.py" + } + ], + "status": "candidate", + "type": "ui" + } + ], + "name": "Explore Dependency And Impact Graphs", + "primary_class": "dependency-analysis", + "source_refs": [ + { + "fact_id": 23, + "kind": "documentation", + "line": null, + "name": "dependency-aware-scope-propagation.md", + "path": "docs/dependency-aware-scope-propagation.md" + }, + { + "fact_id": 24, + "kind": "documentation", + "line": null, + "name": "dependency-visualization-exploration.md", + "path": "docs/dependency-visualization-exploration.md" + }, + { + "fact_id": 130, + "kind": "interface", + "line": 437, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 131, + "kind": "interface", + "line": 442, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 132, + "kind": "interface", + "line": 537, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 133, + "kind": "interface", + "line": 542, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 134, + "kind": "interface", + "line": 621, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 135, + "kind": "interface", + "line": 652, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 136, + "kind": "interface", + "line": 731, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 137, + "kind": "interface", + "line": 1069, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 138, + "kind": "interface", + "line": 1107, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 139, + "kind": "interface", + "line": 1139, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 140, + "kind": "interface", + "line": 1182, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 141, + "kind": "interface", + "line": 1366, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 142, + "kind": "interface", + "line": 1439, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 143, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 144, + "kind": "interface", + "line": 1664, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 145, + "kind": "interface", + "line": 1676, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 146, + "kind": "interface", + "line": 1693, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 147, + "kind": "interface", + "line": 1710, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 148, + "kind": "interface", + "line": 1723, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 149, + "kind": "interface", + "line": 1744, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 150, + "kind": "interface", + "line": 1771, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 151, + "kind": "interface", + "line": 1796, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 152, + "kind": "interface", + "line": 1823, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 153, + "kind": "interface", + "line": 1846, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 154, + "kind": "interface", + "line": 1856, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 155, + "kind": "interface", + "line": 1883, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 156, + "kind": "interface", + "line": 1893, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 157, + "kind": "interface", + "line": 1918, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 158, + "kind": "interface", + "line": 1928, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 159, + "kind": "interface", + "line": 1955, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 160, + "kind": "interface", + "line": 1965, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 161, + "kind": "interface", + "line": 1991, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 162, + "kind": "interface", + "line": 2015, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 163, + "kind": "interface", + "line": 2132, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 164, + "kind": "interface", + "line": 2156, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 165, + "kind": "interface", + "line": 2182, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 166, + "kind": "interface", + "line": 2201, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 167, + "kind": "interface", + "line": 2330, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 168, + "kind": "interface", + "line": 2402, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 169, + "kind": "interface", + "line": 2955, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 170, + "kind": "interface", + "line": 2969, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 171, + "kind": "interface", + "line": 2984, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 172, + "kind": "interface", + "line": 3006, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 173, + "kind": "interface", + "line": 3025, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 174, + "kind": "interface", + "line": 3047, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 175, + "kind": "interface", + "line": 3066, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 176, + "kind": "interface", + "line": 3088, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 177, + "kind": "interface", + "line": 3107, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 178, + "kind": "interface", + "line": 3129, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 179, + "kind": "interface", + "line": 3148, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 180, + "kind": "interface", + "line": 3180, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 181, + "kind": "interface", + "line": 3212, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 182, + "kind": "interface", + "line": 3246, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 183, + "kind": "interface", + "line": 3270, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 184, + "kind": "interface", + "line": 3294, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 185, + "kind": "interface", + "line": 3318, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 186, + "kind": "interface", + "line": 3342, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 187, + "kind": "interface", + "line": 3366, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 188, + "kind": "interface", + "line": 3390, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 191, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "tests/test_web_api.py" + }, + { + "fact_id": 240, + "kind": "llm_provider", + "line": null, + "name": "OpenRouter", + "path": "tests/test_web_api.py" + }, + { + "fact_id": 263, + "kind": "provider_registry", + "line": null, + "name": "LLM provider registry", + "path": "tests/test_web_api.py" + }, + { + "fact_id": 294, + "kind": "test", + "line": null, + "name": "test_web_api.py", + "path": "tests/test_web_api.py" + } + ], + "status": "candidate" + }, + { + "evidence": [ + { + "reference": "tests/test_scope_context_api.py", + "source_refs": [ + { + "fact_id": 285, + "kind": "test", + "line": null, + "name": "test_scope_context_api.py", + "path": "tests/test_scope_context_api.py" + } + ], + "status": "candidate", + "strength": "strong", + "type": "test" + }, + { + "reference": "docs/schemas/repo-scope-context-response.json", + "source_refs": [ + { + "fact_id": 30, + "kind": "documentation", + "line": null, + "name": "repo-scope-context-response.json", + "path": "docs/schemas/repo-scope-context-response.json" + } + ], + "status": "candidate", + "strength": "medium", + "type": "documentation" + } + ], + "features": [ + { + "location": "multiple files", + "name": "Return compact JSON scope context by repository slug", + "primary_class": "api", + "source_refs": [ + { + "fact_id": 30, + "kind": "documentation", + "line": null, + "name": "repo-scope-context-response.json", + "path": "docs/schemas/repo-scope-context-response.json" + }, + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 190, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "tests/test_scope_context_api.py" + }, + { + "fact_id": 285, + "kind": "test", + "line": null, + "name": "test_scope_context_api.py", + "path": "tests/test_scope_context_api.py" + } + ], + "status": "candidate", + "type": "api" + }, + { + "location": "multiple files", + "name": "HTTP API surface: possible API surface, GET /health, @app.get(, +49 more", + "primary_class": "API", + "source_refs": [ + { + "fact_id": 57, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "docs/api-contract.md" + }, + { + "fact_id": 59, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/__init__.py" + }, + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 129, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/schemas.py" + }, + { + "fact_id": 130, + "kind": "interface", + "line": 437, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 131, + "kind": "interface", + "line": 442, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 132, + "kind": "interface", + "line": 537, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 133, + "kind": "interface", + "line": 542, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 134, + "kind": "interface", + "line": 621, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 135, + "kind": "interface", + "line": 652, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 136, + "kind": "interface", + "line": 731, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 137, + "kind": "interface", + "line": 1069, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 138, + "kind": "interface", + "line": 1107, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 139, + "kind": "interface", + "line": 1139, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 140, + "kind": "interface", + "line": 1182, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 141, + "kind": "interface", + "line": 1366, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 142, + "kind": "interface", + "line": 1439, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 143, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 144, + "kind": "interface", + "line": 1664, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 145, + "kind": "interface", + "line": 1676, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 146, + "kind": "interface", + "line": 1693, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 147, + "kind": "interface", + "line": 1710, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 148, + "kind": "interface", + "line": 1723, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 149, + "kind": "interface", + "line": 1744, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 150, + "kind": "interface", + "line": 1771, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 151, + "kind": "interface", + "line": 1796, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 152, + "kind": "interface", + "line": 1823, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 153, + "kind": "interface", + "line": 1846, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 154, + "kind": "interface", + "line": 1856, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 155, + "kind": "interface", + "line": 1883, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 156, + "kind": "interface", + "line": 1893, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 157, + "kind": "interface", + "line": 1918, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 158, + "kind": "interface", + "line": 1928, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 159, + "kind": "interface", + "line": 1955, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 160, + "kind": "interface", + "line": 1965, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 161, + "kind": "interface", + "line": 1991, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 162, + "kind": "interface", + "line": 2015, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 163, + "kind": "interface", + "line": 2132, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 164, + "kind": "interface", + "line": 2156, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 165, + "kind": "interface", + "line": 2182, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 166, + "kind": "interface", + "line": 2201, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 167, + "kind": "interface", + "line": 2330, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 168, + "kind": "interface", + "line": 2402, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 169, + "kind": "interface", + "line": 2955, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 170, + "kind": "interface", + "line": 2969, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 171, + "kind": "interface", + "line": 2984, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 172, + "kind": "interface", + "line": 3006, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 173, + "kind": "interface", + "line": 3025, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 174, + "kind": "interface", + "line": 3047, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 175, + "kind": "interface", + "line": 3066, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 176, + "kind": "interface", + "line": 3088, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 177, + "kind": "interface", + "line": 3107, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 178, + "kind": "interface", + "line": 3129, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 179, + "kind": "interface", + "line": 3148, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 180, + "kind": "interface", + "line": 3180, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 181, + "kind": "interface", + "line": 3212, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 182, + "kind": "interface", + "line": 3246, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 183, + "kind": "interface", + "line": 3270, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 184, + "kind": "interface", + "line": 3294, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 185, + "kind": "interface", + "line": 3318, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 186, + "kind": "interface", + "line": 3342, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 187, + "kind": "interface", + "line": 3366, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 188, + "kind": "interface", + "line": 3390, + "name": "python route decorator", + "path": "src/repo_registry/web_ui/views.py" + }, + { + "fact_id": 190, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "tests/test_scope_context_api.py" + }, + { + "fact_id": 191, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "tests/test_web_api.py" + }, + { + "fact_id": 192, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "workplans/RREG-WP-0012-activity-core-context-api.md" + } + ], + "status": "candidate", + "type": "API" + } + ], + "name": "Provide Scope Context To Downstream Agents", + "primary_class": "coordination", + "source_refs": [ + { + "fact_id": 30, + "kind": "documentation", + "line": null, + "name": "repo-scope-context-response.json", + "path": "docs/schemas/repo-scope-context-response.json" + }, + { + "fact_id": 60, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 61, + "kind": "interface", + "line": 173, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 62, + "kind": "interface", + "line": 203, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 63, + "kind": "interface", + "line": 212, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 64, + "kind": "interface", + "line": 226, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 65, + "kind": "interface", + "line": 243, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 66, + "kind": "interface", + "line": 250, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 67, + "kind": "interface", + "line": 265, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 68, + "kind": "interface", + "line": 286, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 69, + "kind": "interface", + "line": 297, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 70, + "kind": "interface", + "line": 324, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 71, + "kind": "interface", + "line": 351, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 72, + "kind": "interface", + "line": 366, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 73, + "kind": "interface", + "line": 382, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 74, + "kind": "interface", + "line": 401, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 75, + "kind": "interface", + "line": 427, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 76, + "kind": "interface", + "line": 450, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 77, + "kind": "interface", + "line": 468, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 78, + "kind": "interface", + "line": 490, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 79, + "kind": "interface", + "line": 513, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 80, + "kind": "interface", + "line": 532, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 81, + "kind": "interface", + "line": 551, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 82, + "kind": "interface", + "line": 570, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 83, + "kind": "interface", + "line": 588, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 84, + "kind": "interface", + "line": 611, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 85, + "kind": "interface", + "line": 634, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 86, + "kind": "interface", + "line": 660, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 87, + "kind": "interface", + "line": 686, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 88, + "kind": "interface", + "line": 712, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 89, + "kind": "interface", + "line": 738, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 90, + "kind": "interface", + "line": 764, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 91, + "kind": "interface", + "line": 790, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 92, + "kind": "interface", + "line": 816, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 93, + "kind": "interface", + "line": 842, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 94, + "kind": "interface", + "line": 868, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 95, + "kind": "interface", + "line": 894, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 96, + "kind": "interface", + "line": 920, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 97, + "kind": "interface", + "line": 946, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 98, + "kind": "interface", + "line": 972, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 99, + "kind": "interface", + "line": 990, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 100, + "kind": "interface", + "line": 1013, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 101, + "kind": "interface", + "line": 1029, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 102, + "kind": "interface", + "line": 1047, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 103, + "kind": "interface", + "line": 1070, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 104, + "kind": "interface", + "line": 1086, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 105, + "kind": "interface", + "line": 1104, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 106, + "kind": "interface", + "line": 1127, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 107, + "kind": "interface", + "line": 1143, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 108, + "kind": "interface", + "line": 1161, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 109, + "kind": "interface", + "line": 1184, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 110, + "kind": "interface", + "line": 1200, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 111, + "kind": "interface", + "line": 1215, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 112, + "kind": "interface", + "line": 1241, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 113, + "kind": "interface", + "line": 1269, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 114, + "kind": "interface", + "line": 1287, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 115, + "kind": "interface", + "line": 1311, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 116, + "kind": "interface", + "line": 1327, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 117, + "kind": "interface", + "line": 1352, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 118, + "kind": "interface", + "line": 1378, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 119, + "kind": "interface", + "line": 1394, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 120, + "kind": "interface", + "line": 1416, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 121, + "kind": "interface", + "line": 1455, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 122, + "kind": "interface", + "line": 1478, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 123, + "kind": "interface", + "line": 1501, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 124, + "kind": "interface", + "line": 1684, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 125, + "kind": "interface", + "line": 1703, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 126, + "kind": "interface", + "line": 1718, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 127, + "kind": "interface", + "line": 1760, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 128, + "kind": "interface", + "line": 1767, + "name": "python route decorator", + "path": "src/repo_registry/web_api/app.py" + }, + { + "fact_id": 190, + "kind": "interface", + "line": null, + "name": "possible API surface", + "path": "tests/test_scope_context_api.py" + }, + { + "fact_id": 285, + "kind": "test", + "line": null, + "name": "test_scope_context_api.py", + "path": "tests/test_scope_context_api.py" + } + ], + "status": "candidate" + } + ], + "name": "Support Repo Scoping", + "primary_class": "repository-intelligence", + "source_refs": [ + { + "fact_id": 56, + "kind": "intent", + "line": null, + "name": "INTENT", + "path": "INTENT.md" + }, + { + "fact_id": 15, + "kind": "documentation", + "line": null, + "name": "README", + "path": "README.md" + }, + { + "fact_id": 16, + "kind": "documentation", + "line": null, + "name": "abstraction-strategy.md", + "path": "docs/abstraction-strategy.md" + }, + { + "fact_id": 17, + "kind": "documentation", + "line": null, + "name": "acceptance-policy.md", + "path": "docs/acceptance-policy.md" + }, + { + "fact_id": 18, + "kind": "documentation", + "line": null, + "name": "adr-dependency-graph-visualization-framework.md", + "path": "docs/adr-dependency-graph-visualization-framework.md" + }, + { + "fact_id": 19, + "kind": "documentation", + "line": null, + "name": "adr-ep-cap-003-vocabulary-ref-guard.md", + "path": "docs/adr-ep-cap-003-vocabulary-ref-guard.md" + }, + { + "fact_id": 20, + "kind": "documentation", + "line": null, + "name": "api-contract.md", + "path": "docs/api-contract.md" + }, + { + "fact_id": 21, + "kind": "documentation", + "line": null, + "name": "characteristic-evidence-model.md", + "path": "docs/characteristic-evidence-model.md" + }, + { + "fact_id": 22, + "kind": "documentation", + "line": null, + "name": "classification-strategy.md", + "path": "docs/classification-strategy.md" + }, + { + "fact_id": 23, + "kind": "documentation", + "line": null, + "name": "dependency-aware-scope-propagation.md", + "path": "docs/dependency-aware-scope-propagation.md" + }, + { + "fact_id": 24, + "kind": "documentation", + "line": null, + "name": "dependency-visualization-exploration.md", + "path": "docs/dependency-visualization-exploration.md" + }, + { + "fact_id": 25, + "kind": "documentation", + "line": null, + "name": "trusted-auto-approval.md", + "path": "docs/migrations/trusted-auto-approval.md" + }, + { + "fact_id": 26, + "kind": "documentation", + "line": null, + "name": "operations.md", + "path": "docs/operations.md" + }, + { + "fact_id": 27, + "kind": "documentation", + "line": null, + "name": "README", + "path": "docs/quality-criteria/README.md" + }, + { + "fact_id": 28, + "kind": "documentation", + "line": null, + "name": "acceptance-quality-criteria.v1.json", + "path": "docs/quality-criteria/acceptance-quality-criteria.v1.json" + }, + { + "fact_id": 29, + "kind": "documentation", + "line": null, + "name": "quality-criteria-registry.schema.json", + "path": "docs/schemas/quality-criteria-registry.schema.json" + }, + { + "fact_id": 30, + "kind": "documentation", + "line": null, + "name": "repo-scope-context-response.json", + "path": "docs/schemas/repo-scope-context-response.json" + }, + { + "fact_id": 31, + "kind": "documentation", + "line": null, + "name": "self-scoping-assessment.schema.json", + "path": "docs/schemas/self-scoping-assessment.schema.json" + }, + { + "fact_id": 32, + "kind": "documentation", + "line": null, + "name": "scope-md-spec.md", + "path": "docs/scope-md-spec.md" + }, + { + "fact_id": 33, + "kind": "documentation", + "line": null, + "name": "README", + "path": "docs/self-scoping/README.md" + }, + { + "fact_id": 34, + "kind": "documentation", + "line": null, + "name": "repo-scoping-known-bad-2026-05-15-run-39.json", + "path": "docs/self-scoping/assessments/repo-scoping-known-bad-2026-05-15-run-39.json" + }, + { + "fact_id": 35, + "kind": "documentation", + "line": null, + "name": "repo-scoping-post-wp0015-clean-2026-05-15.json", + "path": "docs/self-scoping/assessments/repo-scoping-post-wp0015-clean-2026-05-15.json" + }, + { + "fact_id": 36, + "kind": "documentation", + "line": null, + "name": "repo-scoping-post-wp0015-clean-2026-05-15.md", + "path": "docs/self-scoping/assessments/repo-scoping-post-wp0015-clean-2026-05-15.md" + }, + { + "fact_id": 37, + "kind": "documentation", + "line": null, + "name": "repo-scoping-golden-profile.v1.json", + "path": "docs/self-scoping/golden/repo-scoping-golden-profile.v1.json" + }, + { + "fact_id": 38, + "kind": "documentation", + "line": null, + "name": "README", + "path": "docs/self-scoping/outcomes/README.md" + }, + { + "fact_id": 39, + "kind": "documentation", + "line": null, + "name": "workflow.md", + "path": "docs/self-scoping/workflow.md" + }, + { + "fact_id": 40, + "kind": "documentation", + "line": null, + "name": "semantic-retrieval.md", + "path": "docs/semantic-retrieval.md" + }, + { + "fact_id": 41, + "kind": "documentation", + "line": null, + "name": "terminology.md", + "path": "docs/terminology.md" + } + ], + "status": "candidate" + } + ] + }, + "known_regression_patterns": [], + "notes": [ + "Generated by repo-scoping self-scoping assessment exporter.", + "Artifact has enough engine identity metadata for comparison." + ], + "quality_gate_outcomes": [ + { + "criteria_version": "repo-scoping-quality-criteria/v1", + "criterion_id": "RREG-QC-001", + "criterion_title": "Source Role Supports The Claim", + "element_id": 3, + "element_name": "Index Source Content With Provenance", + "element_type": "capability", + "outcome": "requires_review", + "reason": "All supporting refs are weak source roles for capability truth.", + "severity": "medium" + }, + { + "criteria_version": "repo-scoping-quality-criteria/v1", + "criterion_id": "RREG-QC-006", + "criterion_title": "Fixtures And Schemas Do Not Become Product Claims", + "element_id": 3, + "element_name": "Index Source Content With Provenance", + "element_type": "capability", + "outcome": "downgraded", + "reason": "Candidate is primarily supported by tests, fixtures, schemas, or examples.", + "severity": "high" + } + ], + "review_decisions": [ + { + "accepted_after_edits": false, + "action": "quality_gate_evaluation", + "analysis_run_id": 1, + "created_at": "2026-05-15 16:30:44", + "criteria_version": "repo-scoping-quality-criteria/v1", + "criterion_ids": [ + "RREG-QC-001", + "RREG-QC-006" + ], + "decision_kind": "other", + "evidence_refs": [], + "id": 1, + "notes": "criteria_version=repo-scoping-quality-criteria/v1; criteria=RREG-QC-001, RREG-QC-006; outcomes=downgraded:1, requires_review:1; quality_gate_outcomes=2; rationale=Deterministic quality gates flagged candidates for review without approving registry truth.", + "policy_version": "", + "quality_criteria_version": "repo-scoping-quality-criteria/v1", + "rationale": "Deterministic quality gates flagged candidates for review without approving registry truth.", + "repository_id": 1, + "reviewer_id": "", + "reviewer_type": "deterministic-gate" + } + ], + "schema_version": "self-scoping-assessment/v1", + "target_repository": { + "dirty_state": "clean", + "file_count": 139, + "repo_slug": "repo-scoping", + "repository_id": 1, + "source": "/home/worsch/repo-scoping", + "target_branch": "main", + "target_commit": "2c3dad80d646869827335cb6de849cdca272c85b" + } +} diff --git a/docs/self-scoping/assessments/repo-scoping-post-wp0016-native-2026-05-15.md b/docs/self-scoping/assessments/repo-scoping-post-wp0016-native-2026-05-15.md new file mode 100644 index 0000000..2f1146d --- /dev/null +++ b/docs/self-scoping/assessments/repo-scoping-post-wp0016-native-2026-05-15.md @@ -0,0 +1,33 @@ +# Self-Scoping Comparison: repo-scoping-challenger-run-1 + +- Status: `candidate_improvement` +- Golden profile: `repo-scoping-golden-profile-v1` +- Target repo: `repo-scoping` +- Summary: Assessment covers the golden profile without known regression patterns. + +## Missing Expected Capabilities +- None + +## Forbidden Native Capabilities Present +- None + +## Known Regression Patterns +- None + +## Misplaced Features +- None + +## Matched Expected Capabilities +- Explore Dependency And Impact Graphs +- Generate And Maintain SCOPE.md +- Generate Reviewable Candidate Characteristics +- Index Source Content With Provenance +- Provide Scope Context To Downstream Agents +- Register And Track Repositories +- Review And Approve Candidate Characteristics +- Scan Repositories Into Observed Facts +- Search Compare And Export Approved Profiles + +## Review Hints +- Candidate appears better than the known golden checks. +- Human or agentic review should still confirm source evidence quality. diff --git a/tests/test_self_scoping_artifacts.py b/tests/test_self_scoping_artifacts.py index b8a1e86..348823a 100644 --- a/tests/test_self_scoping_artifacts.py +++ b/tests/test_self_scoping_artifacts.py @@ -18,6 +18,13 @@ POST_WP0015_PATH = ( / "assessments" / "repo-scoping-post-wp0015-clean-2026-05-15.json" ) +POST_WP0016_PATH = ( + ROOT + / "docs" + / "self-scoping" + / "assessments" + / "repo-scoping-post-wp0016-native-2026-05-15.json" +) GOLDEN_PROFILE_PATH = ( ROOT / "docs" @@ -117,6 +124,33 @@ def test_post_wp0015_self_scoping_artifact_is_cleanly_bound_and_unapproved(): assert criteria == {"RREG-QC-002", "RREG-QC-003"} +def test_post_wp0016_self_scoping_artifact_matches_golden_without_regression(): + artifact = load_json(POST_WP0016_PATH) + + capability_names = { + capability["name"] + for ability in artifact["generated_tree"]["abilities"] + for capability in ability["capabilities"] + } + expected_names = { + capability["name"] + for capability in load_json(GOLDEN_PROFILE_PATH)["ability"][ + "expected_capabilities" + ] + } + regression_ids = { + item["id"] for item in artifact.get("known_regression_patterns", []) + } + criteria = {outcome["criterion_id"] for outcome in artifact["quality_gate_outcomes"]} + + assert artifact["engine_identity"]["release_binding_status"] == "complete" + assert artifact["engine_identity"]["engine_dirty_state"] == "clean" + assert capability_names == expected_names + assert regression_ids == set() + assert artifact["approved_map"]["abilities"] == [] + assert criteria == {"RREG-QC-001", "RREG-QC-006"} + + def test_golden_profile_names_expected_native_capabilities_and_forbidden_false_positive(): profile = load_json(GOLDEN_PROFILE_PATH) diff --git a/workplans/RREG-WP-0016-native-candidate-generation-recovery.md b/workplans/RREG-WP-0016-native-candidate-generation-recovery.md index 5c77d9c..30f136c 100644 --- a/workplans/RREG-WP-0016-native-candidate-generation-recovery.md +++ b/workplans/RREG-WP-0016-native-candidate-generation-recovery.md @@ -4,7 +4,7 @@ type: workplan title: "Native Candidate Generation Recovery" domain: capabilities repo: repo-scoping -status: active +status: done owner: codex topic_slug: foerster-capabilities created: "2026-05-15" @@ -101,7 +101,7 @@ and no misplaced API/CLI features were reported. ```task id: RREG-WP-0016-T03 -status: todo +status: done priority: high state_hub_task_id: "9ae662c0-3858-4c7d-b06e-26e1c8da7921" ``` @@ -115,3 +115,12 @@ Acceptance criteria: - The comparison report shows matched expected capabilities. - Remaining gaps are captured as generator follow-up, golden-profile update, or human review notes. + +Implementation note 2026-05-15: captured +`docs/self-scoping/assessments/repo-scoping-post-wp0016-native-2026-05-15.json` +and the paired Markdown comparison report from a clean engine commit. The +comparison status is `candidate_improvement`: all nine golden expected +capabilities match, no known provider-routing regression is present, no +misplaced API/CLI features are reported, and generated candidates remain +unapproved with transparent quality-gate outcomes `RREG-QC-001` and +`RREG-QC-006` for review.