This commit is contained in:
Tomas Dvorak
2026-02-23 16:43:39 +01:00
parent b62cf649d9
commit 0977d95539
301 changed files with 52067 additions and 3801 deletions
+696
View File
@@ -0,0 +1,696 @@
{
"command": "scan",
"overall_score": 81.0,
"objective_score": 82.8,
"strict_score": 73.3,
"strict_target_score": 95.0,
"strict_target_gap": 21.7,
"prev_overall_score": 81.0,
"prev_objective_score": 82.8,
"prev_strict_score": 73.3,
"delta_comparable": true,
"delta_comparable_reason": null,
"profile": "full",
"noise_budget": 10,
"noise_global_budget": 0,
"hidden_by_detector": {
"subjective_review": 58,
"test_coverage": 29
},
"hidden_total": 87,
"diff": {
"new": 0,
"auto_resolved": 0,
"reopened": 0,
"total_current": 235,
"suspect_detectors": [],
"chronic_reopeners": [],
"skipped_other_lang": 0,
"skipped_out_of_scope": 0,
"ignored": 0,
"ignore_patterns": 0,
"ignored_by_detector": {},
"ignored_by_tier": {},
"raw_findings": 235,
"suppressed_pct": 0.0
},
"stats": {
"total": 599,
"open": 109,
"fixed": 110,
"auto_resolved": 254,
"wontfix": 126,
"false_positive": 0,
"by_tier": {
"1": {
"open": 1,
"fixed": 61,
"auto_resolved": 3,
"wontfix": 0,
"false_positive": 0
},
"2": {
"open": 0,
"fixed": 49,
"auto_resolved": 88,
"wontfix": 18,
"false_positive": 0
},
"3": {
"open": 40,
"fixed": 0,
"auto_resolved": 138,
"wontfix": 108,
"false_positive": 0
},
"4": {
"open": 68,
"fixed": 0,
"auto_resolved": 25,
"wontfix": 0,
"false_positive": 0
}
}
},
"warnings": [],
"dimension_scores": {
"File health": {
"score": 100.0,
"strict": 83.1,
"checks": 83,
"issues": 0,
"tier": 3,
"detectors": {
"structural": {
"potential": 83,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
}
}
},
"Code quality": {
"score": 100.0,
"strict": 92.2,
"checks": 574,
"issues": 0,
"tier": 3,
"detectors": {
"unused": {
"potential": 83,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"logs": {
"potential": 83,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"exports": {
"potential": 135,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"props": {
"potential": 53,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"smells": {
"potential": 83,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"react": {
"potential": 11,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"orphaned": {
"potential": 37,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"flat_dirs": {
"potential": 24,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"naming": {
"potential": 24,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"facade": {
"potential": 37,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"patterns": {
"potential": 4,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
}
}
},
"Duplication": {
"score": 100.0,
"strict": 99.8,
"checks": 130,
"issues": 0,
"tier": 3,
"detectors": {
"dupes": {
"potential": 130,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
}
}
},
"Test health": {
"score": 45.9,
"strict": 24.7,
"checks": 1122,
"issues": 107,
"tier": 4,
"detectors": {
"test_coverage": {
"potential": 1044,
"pass_rate": 0.4384041957357197,
"issues": 39,
"weighted_failures": 586.3060196519086
},
"subjective_review": {
"potential": 78,
"pass_rate": 0.7384615384615385,
"issues": 68,
"weighted_failures": 20.4
}
}
},
"Security": {
"score": 100.0,
"strict": 100.0,
"checks": 120,
"issues": 0,
"tier": 4,
"detectors": {
"security": {
"potential": 83,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
},
"cycles": {
"potential": 37,
"pass_rate": 1.0,
"issues": 0,
"weighted_failures": 0.0
}
}
},
"Naming Quality": {
"score": 82.0,
"strict": 82.0,
"checks": 10,
"issues": 0,
"tier": 4,
"detectors": {
"subjective_assessment": {
"potential": 10,
"pass_rate": 0.82,
"issues": 0,
"weighted_failures": 1.8
}
}
},
"Error Consistency": {
"score": 68.0,
"strict": 68.0,
"checks": 10,
"issues": 0,
"tier": 4,
"detectors": {
"subjective_assessment": {
"potential": 10,
"pass_rate": 0.68,
"issues": 0,
"weighted_failures": 3.2
}
}
},
"Abstraction Fit": {
"score": 75.0,
"strict": 75.0,
"checks": 10,
"issues": 0,
"tier": 4,
"detectors": {
"subjective_assessment": {
"potential": 10,
"pass_rate": 0.75,
"issues": 0,
"weighted_failures": 2.5
}
}
},
"Logic Clarity": {
"score": 88.0,
"strict": 88.0,
"checks": 10,
"issues": 0,
"tier": 4,
"detectors": {
"subjective_assessment": {
"potential": 10,
"pass_rate": 0.88,
"issues": 0,
"weighted_failures": 1.2
}
}
},
"AI Generated Debt": {
"score": 72.0,
"strict": 72.0,
"checks": 10,
"issues": 0,
"tier": 4,
"detectors": {
"subjective_assessment": {
"potential": 10,
"pass_rate": 0.72,
"issues": 0,
"weighted_failures": 2.8
}
}
},
"Type Safety": {
"score": 70.0,
"strict": 70.0,
"checks": 10,
"issues": 0,
"tier": 4,
"detectors": {
"subjective_assessment": {
"potential": 10,
"pass_rate": 0.7,
"issues": 0,
"weighted_failures": 3.0
}
}
},
"Contract Coherence": {
"score": 74.0,
"strict": 74.0,
"checks": 10,
"issues": 0,
"tier": 4,
"detectors": {
"subjective_assessment": {
"potential": 10,
"pass_rate": 0.74,
"issues": 0,
"weighted_failures": 2.6
}
}
}
},
"potentials": {
"typescript": {
"logs": 83,
"unused": 83,
"exports": 135,
"deprecated": 0,
"structural": 83,
"flat_dirs": 24,
"props": 53,
"single_use": 0,
"coupling": 0,
"cycles": 37,
"orphaned": 37,
"patterns": 4,
"naming": 24,
"facade": 37,
"test_coverage": 1044,
"smells": 83,
"react": 11,
"security": 83,
"subjective_review": 78,
"dupes": 130
}
},
"zone_distribution": {
"generated": 84,
"test": 27,
"production": 83,
"config": 2
},
"narrative": {
"phase": "middle_grind",
"headline": "109 findings open. Test health (24.7%) needs attention \u2014 run `desloppify next` to start.",
"dimensions": {
"lowest_dimensions": [
{
"name": "Test health",
"strict": 24.7,
"issues": 107,
"impact": 0.0
},
{
"name": "Error Consistency",
"strict": 68.0,
"issues": 0,
"impact": 0.0,
"subjective": true,
"impact_description": "re-review to improve"
},
{
"name": "Type Safety",
"strict": 70.0,
"issues": 0,
"impact": 0.0,
"subjective": true,
"impact_description": "re-review to improve"
}
],
"biggest_gap_dimensions": [
{
"name": "Test health",
"lenient": 45.9,
"strict": 24.7,
"gap": 21.2,
"wontfix_count": 16
},
{
"name": "File health",
"lenient": 100.0,
"strict": 83.1,
"gap": 16.9,
"wontfix_count": 20
},
{
"name": "Code quality",
"lenient": 100.0,
"strict": 92.2,
"gap": 7.8,
"wontfix_count": 89
}
],
"stagnant_dimensions": [
{
"name": "File health",
"strict": 83.1,
"stuck_scans": 5
},
{
"name": "Code quality",
"strict": 92.2,
"stuck_scans": 5
},
{
"name": "Duplication",
"strict": 99.8,
"stuck_scans": 5
},
{
"name": "Security",
"strict": 100.0,
"stuck_scans": 5
},
{
"name": "Naming Quality",
"strict": 82.0,
"stuck_scans": 5
},
{
"name": "Error Consistency",
"strict": 68.0,
"stuck_scans": 5
},
{
"name": "Abstraction Fit",
"strict": 75.0,
"stuck_scans": 5
},
{
"name": "Logic Clarity",
"strict": 88.0,
"stuck_scans": 5
},
{
"name": "AI Generated Debt",
"strict": 72.0,
"stuck_scans": 5
},
{
"name": "Type Safety",
"strict": 70.0,
"stuck_scans": 5
},
{
"name": "Contract Coherence",
"strict": 74.0,
"stuck_scans": 5
}
]
},
"actions": [
{
"priority": 1,
"type": "auto_fix",
"detector": "unused",
"count": 1,
"description": "1 unused findings \u2014 run `desloppify fix unused-imports --dry-run` to preview, then apply",
"command": "desloppify fix unused-imports --dry-run",
"impact": 0.0,
"dimension": "Code quality",
"lane": "cleanup"
},
{
"priority": 2,
"type": "auto_fix",
"detector": "smells",
"count": 1,
"description": "1 smells findings \u2014 run `desloppify fix dead-useeffect --dry-run` to preview, then apply",
"command": "desloppify fix dead-useeffect --dry-run",
"impact": 0.0,
"dimension": "Code quality",
"lane": "cleanup"
},
{
"priority": 3,
"type": "refactor",
"detector": "test_coverage",
"count": 39,
"description": "39 test_coverage findings \u2014 add tests for untested production modules \u2014 prioritize by import count",
"command": "desloppify show test_coverage --status open",
"impact": 0.0,
"dimension": "Test health",
"lane": "test_coverage"
},
{
"priority": 4,
"type": "manual_fix",
"detector": "subjective_review",
"count": 68,
"description": "68 files need design review \u2014 run `desloppify review --prepare` to generate review context",
"command": "desloppify review --prepare",
"impact": 0.0,
"dimension": "Test health",
"lane": "refactor"
},
{
"priority": 5,
"type": "debt_review",
"detector": null,
"description": "3.6 pts of wontfix debt \u2014 review stale decisions",
"command": "desloppify show --status wontfix",
"gap": 3.6,
"lane": "debt_review"
}
],
"strategy": {
"fixer_leverage": {
"auto_fixable_count": 2,
"total_count": 109,
"coverage": 0.018,
"impact_ratio": 0.0,
"recommendation": "none"
},
"lanes": {
"cleanup": {
"actions": [
2,
1
],
"file_count": 2,
"total_impact": 0.0,
"automation": "full",
"run_first": false
},
"refactor": {
"actions": [
4
],
"file_count": 68,
"total_impact": 0.0,
"automation": "manual",
"run_first": false
},
"test_coverage": {
"actions": [
3
],
"file_count": 39,
"total_impact": 0.0,
"automation": "manual",
"run_first": false
},
"debt_review": {
"actions": [
5
],
"file_count": 0,
"total_impact": 0.0,
"automation": "manual",
"run_first": false
}
},
"can_parallelize": true,
"hint": "3 independent workstreams, safe to parallelize. Rescan after each phase to verify."
},
"tools": {
"fixers": [
{
"name": "unused-imports",
"detector": "unused",
"open_count": 1,
"command": "desloppify fix unused-imports --dry-run"
},
{
"name": "unused-vars",
"detector": "unused",
"open_count": 1,
"command": "desloppify fix unused-vars --dry-run"
},
{
"name": "unused-params",
"detector": "unused",
"open_count": 1,
"command": "desloppify fix unused-params --dry-run"
},
{
"name": "dead-useeffect",
"detector": "smells",
"open_count": 1,
"command": "desloppify fix dead-useeffect --dry-run"
},
{
"name": "empty-if-chain",
"detector": "smells",
"open_count": 1,
"command": "desloppify fix empty-if-chain --dry-run"
}
],
"move": {
"available": true,
"relevant": false,
"reason": null,
"usage": "desloppify move <source> <dest> [--dry-run]"
},
"plan": {
"command": "desloppify plan",
"description": "Generate prioritized markdown cleanup plan"
},
"badge": {
"generated": true,
"in_readme": true,
"path": "scorecard.png",
"recommendation": null
}
},
"debt": {
"overall_gap": 3.6,
"wontfix_count": 126,
"worst_dimension": "Test health",
"worst_gap": 21.2,
"trend": "growing"
},
"milestone": null,
"primary_action": {
"priority": 1,
"type": "auto_fix",
"detector": "unused",
"command": "desloppify fix unused-imports --dry-run",
"description": "1 unused findings \u2014 run `desloppify fix unused-imports --dry-run` to preview, then apply",
"impact": 0.0,
"lane": "cleanup",
"count": 1
},
"why_now": "`unused` is currently the highest-priority unresolved workstream.",
"verification_step": {
"command": "desloppify scan",
"reason": "Re-scan to verify the change and catch cascading findings before reporting progress.",
"success_signal": "Open findings drop and strict score direction remains positive."
},
"risk_flags": [],
"strict_target": {
"target": 95.0,
"current": 73.3,
"gap": 21.7,
"state": "below",
"warning": null
},
"reminders": [
{
"type": "report_scores",
"message": "ALWAYS share ALL scores with the user: overall, objective, and strict, plus every dimension score (lenient + strict), including subjective dimensions. The goal is to maximize strict scores.",
"command": null,
"severity": "critical",
"priority": 0,
"stage": "reporting",
"no_decay": true
}
],
"reminder_history": {
"report_scores": 59,
"auto_fixers_available": 3,
"dry_run_first": 3,
"zone_classification": 3,
"feedback_nudge": 3,
"stagnant_nudge": 11,
"wontfix_growing": 3
}
},
"config": {
"review_max_age_days": 30,
"holistic_max_age_days": 30,
"generate_scorecard": true,
"badge_path": "scorecard.png",
"exclude": [],
"ignore": [],
"ignore_metadata": {},
"zone_overrides": {},
"review_dimensions": [],
"review_allow_custom_dimensions": false,
"review_custom_dimensions": [],
"large_files_threshold": 0,
"props_threshold": 0,
"finding_noise_budget": 10,
"finding_noise_global_budget": 0,
"target_strict_score": 95,
"languages": {}
}
}