Module Location
src/artifactminer/evidence/
Architecture Overview
Evidence Model
File:models.py
Location: src/artifactminer/evidence/models.py:9-17
EvidenceItem Dataclass
metric: Quantitative metrics (commit counts, contribution %, frequency)testing: Test coverage, frameworks, file countsdocumentation: Documentation presence and qualitycode_quality: Linting, type checking, pre-commit hooksevaluation: Derived insights and architectural assessmentstest_coverage: Test-related gaps or issues
Evidence Bridges
Bridges convert analysis results intoEvidenceItem lists.
1. Insight Bridge
File:extractors/insight_bridge.py
Function: insights_to_evidence(insights, repo_last_commit=None)
Location: src/artifactminer/evidence/extractors/insight_bridge.py:13-45
Purpose: Convert Insight objects from DeepRepoAnalyzer into evidence items.
Process:
2. Git Stats Bridge
File:extractors/git_stats_bridge.py
Function: git_stats_to_evidence(git_stats)
Location: src/artifactminer/evidence/extractors/git_stats_bridge.py:12-39
Purpose: Convert GitStatsResult into evidence items.
Process:
3. Repo Quality Bridge
File:extractors/repo_quality_bridge.py
Function: repo_quality_to_evidence(quality, evidence_date=None)
Location: src/artifactminer/evidence/extractors/repo_quality_bridge.py:20-79
Purpose: Convert RepoQualityResult into evidence items.
Process:
Positive Signals
Testing (lines 32-39):_DOCS_FLAGS is:
_QUALITY_FLAGS is:
Negative Signals
Missing Tests (lines 63-69):4. Infra Signals Bridge
File:extractors/infra_signals_bridge.py
Function: infra_signals_to_evidence(infra_signals, evidence_date=None)
Location: src/artifactminer/evidence/extractors/infra_signals_bridge.py:12-37
Purpose: Convert InfraSignalsResult into evidence items.
Process:
Evidence Orchestrator
File:orchestrator.py
Location: src/artifactminer/evidence/orchestrator.py
Core Functions
persist_generated_evidence()
Signature:-
Validation (lines 36-44):
-
Load Existing Evidence (lines 46-51):
-
Deduplication (lines 18-24, 54-77):
-
Insert with Cap (lines 54-77):
-
Commit (lines 79-81):
- Case-insensitive comparison
- Whitespace normalized (multiple spaces → single space)
- Key:
(normalized_type, normalized_content) - Example:
"Testing"+"Has 42 test files"= same as"testing"+" Has 42 test files "
- Default: 15 items per run
- Prevents evidence table from growing too large
- Favors items appearing earlier in the input list
persist_insights_as_project_evidence()
Signature:- Converts insights to evidence items
- Persists with deduplication and capping
Complete Evidence Pipeline
Example Usage
Output Example
Database Schema
Table:project_evidence
Model: src/artifactminer/db/models.py:262-276
Evidence Retrieval
Evidence is retrieved via the projects router: Endpoint:GET /projects/{project_id}/evidence
Query:
- Resume generation: Pull evidence as bullet points
- Portfolio generation: Highlight top evidence items
- Skill validation: Evidence supports claimed skills
Best Practices
- Always use bridges: Don’t create
EvidenceItemdirectly from analysis results - Respect the cap: 15 items is usually sufficient; prioritize high-value evidence
- Deduplicate: Orchestrator handles this, but be mindful of content variations
- Include dates: Associate evidence with repo’s last commit date for timeline context
- Validate sources: Source field helps trace evidence origin for debugging
- Handle missing data: Bridges gracefully handle None/missing analysis results