evolution-engine 0.3.1__tar.gz → 0.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {evolution_engine-0.3.1/evolution_engine.egg-info → evolution_engine-0.3.3}/PKG-INFO +1 -1
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/friendly.py +4 -4
- evolution_engine-0.3.3/evolution/i18n/__init__.py +97 -0
- evolution_engine-0.3.3/evolution/i18n/de.json +250 -0
- evolution_engine-0.3.3/evolution/i18n/en.json +250 -0
- evolution_engine-0.3.3/evolution/i18n/es.json +250 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/report_generator.py +64 -24
- {evolution_engine-0.3.1 → evolution_engine-0.3.3/evolution_engine.egg-info}/PKG-INFO +1 -1
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution_engine.egg-info/SOURCES.txt +4 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/pyproject.toml +3 -2
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/LICENSE +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/LICENSE-MIT +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/MANIFEST.in +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/README.md +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/accepted.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapter_scaffold.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapter_security.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapter_validator.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapter_versions.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/ci/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/ci/circleci_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/ci/github_actions_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/ci/gitlab_pipelines_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/config/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/config/terraform_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/dependency/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/dependency/pip_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/deployment/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/deployment/github_releases_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/deployment/gitlab_releases_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/error_tracking/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/error_tracking/sentry_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/git/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/git/git_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/git/git_history_walker.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/github_client.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/gitlab_client.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/schema/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/schema/openapi_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/security/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/security/github_security_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/security/trivy_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/testing/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/testing/coverage_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/adapters/testing/junit_adapter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/agents/__init__.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/agents/anthropic_agent.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/agents/base.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/agents/cli_agent.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/cli.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/config.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/constants.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/data/adapter_blocklist.json +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/data/adapter_catalog.json +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/data/pattern_blocklist.json +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/data/pattern_index.json +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/data/sdk_fingerprints.json +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/data/universal_patterns.json +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/data/verified_adapters.json +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/fixer.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/format_comment.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/fp_validation.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/history.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/hooks.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/init.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/inline_suggestions.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/investigator.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/kb_export.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/kb_security.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/kb_sync.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/knowledge_store.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/license.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/llm_anthropic.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/llm_openrouter.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/notifications.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/orchestrator.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/pattern_registry.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/pattern_scaffold.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/pattern_validator.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/phase1_engine.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/phase2_engine.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/phase3_1_renderer.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/phase3_engine.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/phase4_engine.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/phase5_engine.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/pr_comment.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/prescan.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/registry.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/report_server.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/setup_ui.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/telemetry.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/validation_gate.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution/watcher.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution_engine.egg-info/dependency_links.txt +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution_engine.egg-info/entry_points.txt +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution_engine.egg-info/requires.txt +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/evolution_engine.egg-info/top_level.txt +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/setup.cfg +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/setup.py +0 -0
- {evolution_engine-0.3.1 → evolution_engine-0.3.3}/tests/test_git_history_walker.py +0 -0
|
@@ -106,7 +106,7 @@ _METRIC_INSIGHTS = {
|
|
|
106
106
|
("change_locality", "up"): "The changed files frequently change together, suggesting a focused modification.",
|
|
107
107
|
("change_locality", "down"): "The changed files don't usually change together, suggesting a cross-cutting modification.",
|
|
108
108
|
("cochange_novelty_ratio", "up"): "Many file pairings in this change haven't been seen together before.",
|
|
109
|
-
("cochange_novelty_ratio", "down"): "
|
|
109
|
+
("cochange_novelty_ratio", "down"): "Unusually low novelty — changes are more repetitive than normal, touching only well-known file combinations.",
|
|
110
110
|
|
|
111
111
|
# CI metrics
|
|
112
112
|
("run_duration", "up"): "Build took longer than usual.",
|
|
@@ -336,9 +336,9 @@ _PATTERN_RISK = {
|
|
|
336
336
|
"Investigate which files are being combined unexpectedly. Prioritize testing these changes.",
|
|
337
337
|
),
|
|
338
338
|
("cochange_novelty_ratio", "down"): (
|
|
339
|
-
"
|
|
340
|
-
"
|
|
341
|
-
"
|
|
339
|
+
"info",
|
|
340
|
+
"File co-change novelty is unusually low. While familiar patterns reduce risk, this could indicate repetitive or mechanical changes rather than normal development.",
|
|
341
|
+
"Review whether recent commits are routine maintenance or a sign of narrow, repetitive modifications that lack expected variety.",
|
|
342
342
|
),
|
|
343
343
|
# Change locality
|
|
344
344
|
("change_locality", "up"): (
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Report i18n — lightweight translation helper for HTML report generation.
|
|
3
|
+
|
|
4
|
+
Loads JSON translation files from this package directory and provides
|
|
5
|
+
a _t(key) lookup function used by report_generator.py.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import locale
|
|
10
|
+
import os
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
SUPPORTED_LANGS = ("en", "de", "es")
|
|
14
|
+
_translations: dict = {}
|
|
15
|
+
_current_lang: str = "en"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _detect_lang() -> str:
|
|
19
|
+
"""Detect language from env, config, or system locale."""
|
|
20
|
+
# 1. Explicit EVO_LANG env var
|
|
21
|
+
env_lang = os.environ.get("EVO_LANG", "").lower()
|
|
22
|
+
if env_lang in SUPPORTED_LANGS:
|
|
23
|
+
return env_lang
|
|
24
|
+
|
|
25
|
+
# 2. User config (~/.evo/config.toml)
|
|
26
|
+
try:
|
|
27
|
+
from evolution.config import get_config
|
|
28
|
+
cfg_lang = get_config("lang", "").lower()
|
|
29
|
+
if cfg_lang in SUPPORTED_LANGS:
|
|
30
|
+
return cfg_lang
|
|
31
|
+
except Exception:
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
# 3. System locale
|
|
35
|
+
try:
|
|
36
|
+
sys_locale = locale.getlocale()[0] or ""
|
|
37
|
+
prefix = sys_locale.split("_")[0].lower()
|
|
38
|
+
if prefix in SUPPORTED_LANGS:
|
|
39
|
+
return prefix
|
|
40
|
+
except Exception:
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
return "en"
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def load_translations(lang: str = None) -> dict:
|
|
47
|
+
"""Load translation dict for the given language (or auto-detect)."""
|
|
48
|
+
global _translations, _current_lang
|
|
49
|
+
|
|
50
|
+
if lang is None:
|
|
51
|
+
lang = _detect_lang()
|
|
52
|
+
if lang not in SUPPORTED_LANGS:
|
|
53
|
+
lang = "en"
|
|
54
|
+
|
|
55
|
+
_current_lang = lang
|
|
56
|
+
json_path = Path(__file__).parent / f"{lang}.json"
|
|
57
|
+
if not json_path.exists():
|
|
58
|
+
# Fallback to English
|
|
59
|
+
json_path = Path(__file__).parent / "en.json"
|
|
60
|
+
_current_lang = "en"
|
|
61
|
+
|
|
62
|
+
_translations = json.loads(json_path.read_text())
|
|
63
|
+
return _translations
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def t(key: str, **kwargs) -> str:
|
|
67
|
+
"""Look up a translation key (dot-separated) with optional formatting.
|
|
68
|
+
|
|
69
|
+
Example: t("cover.title") → "Evolution Advisory"
|
|
70
|
+
t("exec.based_on", n=20) → "Based on 20 prior commits"
|
|
71
|
+
"""
|
|
72
|
+
if not _translations:
|
|
73
|
+
load_translations()
|
|
74
|
+
|
|
75
|
+
parts = key.split(".")
|
|
76
|
+
val = _translations
|
|
77
|
+
for p in parts:
|
|
78
|
+
if isinstance(val, dict):
|
|
79
|
+
val = val.get(p)
|
|
80
|
+
else:
|
|
81
|
+
return key # key not found, return as-is
|
|
82
|
+
|
|
83
|
+
if val is None:
|
|
84
|
+
return key
|
|
85
|
+
|
|
86
|
+
if kwargs and isinstance(val, str):
|
|
87
|
+
try:
|
|
88
|
+
return val.format(**kwargs)
|
|
89
|
+
except (KeyError, IndexError):
|
|
90
|
+
return val
|
|
91
|
+
|
|
92
|
+
return val if isinstance(val, str) else key
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def get_lang() -> str:
|
|
96
|
+
"""Return the currently active language code."""
|
|
97
|
+
return _current_lang
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cover": {
|
|
3
|
+
"title": "Evolution Advisory",
|
|
4
|
+
"project": "Projekt:",
|
|
5
|
+
"period": "Zeitraum:",
|
|
6
|
+
"period_to": "bis",
|
|
7
|
+
"advisory_id": "Advisory-ID:",
|
|
8
|
+
"generated": "Erstellt:"
|
|
9
|
+
},
|
|
10
|
+
"exec": {
|
|
11
|
+
"title": "Zusammenfassung",
|
|
12
|
+
"significant_changes": "Signifikante Änderungen",
|
|
13
|
+
"areas_affected": "Betroffene Bereiche",
|
|
14
|
+
"patterns_matched": "Erkannte Muster",
|
|
15
|
+
"new_observations": "Neue Beobachtungen",
|
|
16
|
+
"events_analyzed": "Analysierte Ereignisse",
|
|
17
|
+
"signals_computed": "Berechnete Signale",
|
|
18
|
+
"affected_areas": "Betroffene Bereiche:",
|
|
19
|
+
"based_on": "Basierend auf {n} vorherigen Commit{s}",
|
|
20
|
+
"commit_plural": "s",
|
|
21
|
+
"commit_singular": ""
|
|
22
|
+
},
|
|
23
|
+
"verify": {
|
|
24
|
+
"title": "Fix-Verifizierung: {status}",
|
|
25
|
+
"subtitle": "Vergleich mit vorheriger Analyse",
|
|
26
|
+
"all_resolved": "Alle Probleme behoben",
|
|
27
|
+
"progress": "Fortschritt erkannt",
|
|
28
|
+
"no_change": "Noch keine Änderung",
|
|
29
|
+
"resolved": "Behoben",
|
|
30
|
+
"improving": "verbessert sich",
|
|
31
|
+
"not_improving": "verbessert sich nicht",
|
|
32
|
+
"returned_normal": "auf Normalwert zurückgekehrt",
|
|
33
|
+
"stabilized": "auf neuem Niveau stabilisiert",
|
|
34
|
+
"still_deviating": "weicht noch aktiv ab",
|
|
35
|
+
"new": "Neu",
|
|
36
|
+
"chip_resolved": "{n} behoben",
|
|
37
|
+
"chip_improving": "{n} verbessert",
|
|
38
|
+
"chip_not_improving": "{n} nicht verbessert",
|
|
39
|
+
"chip_new": "{n} neu",
|
|
40
|
+
"th_area": "Bereich",
|
|
41
|
+
"th_signal": "Signal",
|
|
42
|
+
"th_before": "Vorher",
|
|
43
|
+
"th_after_normal": "Nachher / Normal",
|
|
44
|
+
"th_trend": "Trend",
|
|
45
|
+
"transient_title": "Vorübergehender Ausreißer:",
|
|
46
|
+
"transient_text": "Einmaliger Ausreißer eines älteren Commits. Die Metrik ist inzwischen zur Baseline zurückgekehrt. Kann sicher akzeptiert werden.",
|
|
47
|
+
"stabilized_title": "Stabilisierte Abweichung:",
|
|
48
|
+
"stabilized_text": "Ein älterer Commit hat diese Metrik auf ein neues Niveau verschoben und sie ist dort geblieben. Das statistische Modell hat die Änderung absorbiert, aber der Wert unterscheidet sich von der ursprünglichen Baseline. Prüfen Sie, ob diese Verschiebung beabsichtigt war.",
|
|
49
|
+
"active_title": "Aktive Abweichung:",
|
|
50
|
+
"active_text": "Diese Metrik weicht in den aktuellen Daten noch aktiv ab. Eine Untersuchung wird empfohlen."
|
|
51
|
+
},
|
|
52
|
+
"findings": {
|
|
53
|
+
"title": "Hauptergebnisse",
|
|
54
|
+
"empty": "Keine ungewöhnlichen Aktivitäten erkannt. Die Entwicklungsmuster Ihres Projekts liegen im Normalbereich.",
|
|
55
|
+
"significant": "{fam} zeigte signifikante Abweichungen bei {metrics}.",
|
|
56
|
+
"moderate": "{fam} zeigte moderate Abweichungen bei {metrics}.",
|
|
57
|
+
"minor": "{fam} zeigte geringfügige Abweichungen bei {metrics}.",
|
|
58
|
+
"known_patterns": "{n} bekannte{s} Muster erkannt",
|
|
59
|
+
"new_patterns": "{n} neue{s} Muster entdeckt"
|
|
60
|
+
},
|
|
61
|
+
"changes": {
|
|
62
|
+
"title": "Was hat sich in Ihrem Code geändert",
|
|
63
|
+
"empty": "Keine ungewöhnlichen Änderungen erkannt.",
|
|
64
|
+
"detected": "Wir haben {n} Änderung{s} erkannt, die von den normalen Mustern Ihres Projekts abweichen. Jede Änderung zeigt, was typischerweise passiert im Vergleich zu dem, was diesmal beobachtet wurde.",
|
|
65
|
+
"accepted_not_shown": "{n} akzeptierte Abweichung{s} nicht angezeigt:",
|
|
66
|
+
"accepted_hint": "Diese wurden zuvor geprüft und als erwartet markiert. Verwalten mit <code>evo accept --list</code>",
|
|
67
|
+
"filter_all": "Alle",
|
|
68
|
+
"filter_critical": "Kritisch",
|
|
69
|
+
"filter_medium": "Mittel",
|
|
70
|
+
"filter_low": "Niedrig",
|
|
71
|
+
"resolved_of": "{resolved} von {total} behoben"
|
|
72
|
+
},
|
|
73
|
+
"card": {
|
|
74
|
+
"what_this_means": "Was das bedeutet:",
|
|
75
|
+
"was_compared": "{metric} war {value}, verglichen mit dem typischen Wert von {median}.",
|
|
76
|
+
"show_technical": "Technische Details anzeigen",
|
|
77
|
+
"technical_text": "Der Wert von {metric} für diese Änderung war {value}. Historisch hatten ähnliche Änderungen einen Wert von {median}.",
|
|
78
|
+
"typical": "Typisch:",
|
|
79
|
+
"this_time": "Diesmal:",
|
|
80
|
+
"above_range": "{dev}x über dem typischen Bereich",
|
|
81
|
+
"below_range": "{dev}x unter dem typischen Bereich",
|
|
82
|
+
"accept_expected": "Akzeptieren — Erwartet",
|
|
83
|
+
"accept_permanent": "Dauerhaft akzeptieren",
|
|
84
|
+
"accept_thisrun": "Nur für diesen Lauf akzeptieren",
|
|
85
|
+
"hint_permanent": "Dieses Signal nie wieder melden",
|
|
86
|
+
"hint_thisrun": "Jetzt verwerfen, bei nächster Analyse erneut melden",
|
|
87
|
+
"accepted": "Akzeptiert ✓",
|
|
88
|
+
"fix_with_ai": "Mit KI beheben",
|
|
89
|
+
"drift_prompt_title": "Drift-Untersuchungs-Prompt",
|
|
90
|
+
"copy": "Kopieren",
|
|
91
|
+
"use_with": "Verwenden mit:",
|
|
92
|
+
"cursor_hint": "Cursor — im Chat einfügen",
|
|
93
|
+
"claude_hint": "Claude Code — im Terminal einfügen",
|
|
94
|
+
"copilot_hint": "Copilot — im Chat-Panel einfügen",
|
|
95
|
+
"after_investigation": "Nach der Untersuchung:",
|
|
96
|
+
"after_step1": "KI schlägt Fixes vor → Änderungen auf Ihren Code anwenden",
|
|
97
|
+
"after_step2": "<code>evo analyze . --verify</code> ausführen, um erneut zu analysieren und mit diesem Lauf zu vergleichen",
|
|
98
|
+
"after_step3": "Wenn die Änderung beabsichtigt war, klicken Sie oben auf <strong>Akzeptieren</strong>, um sie zu verwerfen",
|
|
99
|
+
"trigger": "Auslöser:",
|
|
100
|
+
"still_elevated": "→ Noch erhöht (aktuelle Abweichung: {dev}σ)",
|
|
101
|
+
"returned_baseline": "↘ Zur Baseline zurückgekehrt"
|
|
102
|
+
},
|
|
103
|
+
"patterns": {
|
|
104
|
+
"title": "Muster",
|
|
105
|
+
"what_this_means": "Was das bedeutet:",
|
|
106
|
+
"recommendation": "Empfehlung:",
|
|
107
|
+
"similar_severity": "{n} Muster mit ähnlichem Schweregrad",
|
|
108
|
+
"show_more": "{n} weitere {heading} anzeigen",
|
|
109
|
+
"known_pattern": "Bekanntes Muster",
|
|
110
|
+
"new_pattern": "Neues Muster",
|
|
111
|
+
"emerging_pattern": "Entstehendes Muster",
|
|
112
|
+
"dedup_note": "{a} und {b} werden als verwandte Metriken behandelt",
|
|
113
|
+
"dedup_shown": "als einzelnes Muster angezeigt.",
|
|
114
|
+
"accepted_hidden": "{n} Muster nicht angezeigt (akzeptierte Metrik{ms}: {labels}).",
|
|
115
|
+
"what_are_patterns": "Was sind Muster?",
|
|
116
|
+
"what_are_patterns_text": "Muster sind wiederkehrende Korrelationen zwischen verschiedenen Bereichen Ihres Projekts. Wenn eine Änderung in einem Bereich (z. B. ein Deployment) konstant mit ungewöhnlichem Verhalten in einem anderen (z. B. Code-Streuung) zusammenfällt, melden wir es, damit Sie entscheiden können, ob es Aufmerksamkeit erfordert.",
|
|
117
|
+
"what_should_you_do": "Was sollten Sie tun?",
|
|
118
|
+
"what_should_you_do_text": "Konzentrieren Sie sich zuerst auf Einträge mit {action_required} oder {needs_attention}. Diese weisen auf Muster hin, die am ehesten Codequalität, Stabilität oder Sicherheit beeinträchtigen. Einträge mit {worth_monitoring} erfordern kein sofortiges Handeln, sollten aber überprüft werden, wenn sie anhalten. {healthy_pattern} und {informational} bestätigen, dass alles wie erwartet funktioniert.",
|
|
119
|
+
"supporting_evidence": "Unterstützende Nachweise",
|
|
120
|
+
"additional_insights_title": "Weitere Erkenntnisse"
|
|
121
|
+
},
|
|
122
|
+
"risk_banner": {
|
|
123
|
+
"critical_title": "Sofortige Überprüfung erforderlich",
|
|
124
|
+
"critical_text": "Ein oder mehrere Muster deuten auf ernsthafte Risiken hin, die Codequalität, Stabilität oder Sicherheit beeinträchtigen könnten. Überprüfen Sie die folgenden Einträge und beheben Sie \u201eHandlungsbedarf\u201c-Befunde vor Ihrem nächsten Release.",
|
|
125
|
+
"concern_title": "Aufmerksamkeit empfohlen",
|
|
126
|
+
"concern_text": "Einige Muster deuten auf sich entwickelnde Probleme hin, die sich verschlimmern könnten, wenn sie unbehandelt bleiben. Überprüfen Sie die mit \u201eBeobachtung nötig\u201c markierten Einträge und planen Sie Folgemaßnahmen.",
|
|
127
|
+
"watch_title": "Beobachtenswerte Trends",
|
|
128
|
+
"watch_text": "Mehrere Muster bewegen sich außerhalb des Normalbereichs. Keines erfordert sofortiges Handeln, aber die Beobachtung dieser Trends hilft, Probleme frühzeitig zu erkennen.",
|
|
129
|
+
"info_title": "Alles in Ordnung",
|
|
130
|
+
"info_text": "Erkannte Muster sind informativ oder gesund. Derzeit sind keine Maßnahmen erforderlich.",
|
|
131
|
+
"positive_title": "Sieht gut aus",
|
|
132
|
+
"positive_text": "Alle erkannten Muster sind gesund. Die Entwicklungsmuster Ihres Projekts funktionieren gut."
|
|
133
|
+
},
|
|
134
|
+
"severity": {
|
|
135
|
+
"action_required": "Handlungsbedarf",
|
|
136
|
+
"needs_attention": "Beobachtung nötig",
|
|
137
|
+
"worth_monitoring": "Beobachtenswert",
|
|
138
|
+
"healthy": "Gesundes Muster",
|
|
139
|
+
"informational": "Informativ"
|
|
140
|
+
},
|
|
141
|
+
"investigation": {
|
|
142
|
+
"title": "Nächste Schritte",
|
|
143
|
+
"prompt_title": "Untersuchungs-Prompt",
|
|
144
|
+
"step1_title": "Untersuchen",
|
|
145
|
+
"step1_text": "Kopieren Sie den Prompt unten und fügen Sie ihn in Ihren KI-Assistenten ein (Claude Code, Cursor, Copilot, ChatGPT). Er identifiziert Ursachen und schlägt Fixes vor.",
|
|
146
|
+
"step2_title": "Beheben",
|
|
147
|
+
"step2_text": "Wenden Sie die vorgeschlagenen Änderungen an. Wenn eine Abweichung beabsichtigt war, klicken Sie stattdessen auf <strong>Akzeptieren</strong> auf der zugehörigen Karte oben.",
|
|
148
|
+
"step3_title": "Verifizieren",
|
|
149
|
+
"step3_text": "Führen Sie <code>evo analyze . --verify</code> aus, um erneut zu analysieren und zu vergleichen. Ein Verifizierungsbanner zeigt, welche Abweichungen behoben, verbessert oder bestehen geblieben sind.",
|
|
150
|
+
"copy_prompt": "Prompt in Zwischenablage kopieren",
|
|
151
|
+
"save_prompt": "Prompt in Datei speichern",
|
|
152
|
+
"show_full": "Vollständigen Prompt anzeigen",
|
|
153
|
+
"show_full_hint": "Klicken Sie auf \u201eVollständigen Prompt anzeigen\u201c, um den kompletten Untersuchungs-Prompt mit Belegen zu sehen..."
|
|
154
|
+
},
|
|
155
|
+
"sources": {
|
|
156
|
+
"title": "Was EE sehen kann",
|
|
157
|
+
"subtitle_connected": "{n} verbunden",
|
|
158
|
+
"subtitle_available": ", {n} verfügbar",
|
|
159
|
+
"active": "Aktiv",
|
|
160
|
+
"not_connected": "Nicht verbunden",
|
|
161
|
+
"config_detected": "Konfiguration erkannt",
|
|
162
|
+
"connected": "Verbunden",
|
|
163
|
+
"connected_no_data": "Verbunden — Keine Daten",
|
|
164
|
+
"connected_no_deviations": "Verbunden — Keine Abweichungen",
|
|
165
|
+
"api_error": "API-Fehler",
|
|
166
|
+
"platform_mismatch": "Plattform-Abweichung",
|
|
167
|
+
"pro": "Pro",
|
|
168
|
+
"signals_analyzed": "{n} Signal{s} analysiert — alle im Normalbereich",
|
|
169
|
+
"pro_available": "Verfügbar mit Evolution Engine Pro.",
|
|
170
|
+
"see_plans": "Preise ansehen →",
|
|
171
|
+
"setup_guide": "Einrichtungsanleitung →",
|
|
172
|
+
"auto_detected": "Automatisch aus Dateien erkannt",
|
|
173
|
+
"token_set": "Token gesetzt. Diese Daten werden automatisch analysiert, wenn sie über GitHub Action oder GitLab CI ausgeführt werden.",
|
|
174
|
+
"connected_no_data_default": "Keine Ereignisse im Analysezeitraum gefunden.",
|
|
175
|
+
"ci_no_runs": "Keine Pipeline-Läufe im Analysezeitraum gefunden.",
|
|
176
|
+
"deployment_no_releases": "Keine veröffentlichten Releases im Analysezeitraum gefunden.",
|
|
177
|
+
"security_clean": "Keine Sicherheitswarnungen gefunden — Ihre Abhängigkeiten sind sauber.",
|
|
178
|
+
"error_no_events": "Keine Fehlerereignisse im Analysezeitraum gefunden.",
|
|
179
|
+
"testing_no_files": "Keine Testergebnis-Dateien (JUnit XML) gefunden.",
|
|
180
|
+
"coverage_no_files": "Keine Coverage-Dateien (Cobertura XML) gefunden.",
|
|
181
|
+
"via": "über"
|
|
182
|
+
},
|
|
183
|
+
"adapters": {
|
|
184
|
+
"title": "Erweitern Sie Ihre Abdeckung",
|
|
185
|
+
"intro": "Evolution Engine verfügt über <strong>{n} universelle Muster</strong>, die aus über 200 Open-Source-Repositories gelernt wurden. Je mehr Signalfamilien Sie verbinden, desto mehr familienübergreifende Muster können erkannt werden.",
|
|
186
|
+
"available_title": "Verfügbare Adapter",
|
|
187
|
+
"available_subtitle": "Aktivieren Sie diese Adapter, um zusätzliche Signalfamilien und familienübergreifende Mustererkennung freizuschalten.",
|
|
188
|
+
"how_to_title": "So verbinden Sie einen Adapter",
|
|
189
|
+
"step1": "<strong>Setzen Sie die Umgebungsvariable</strong>, die auf der Adapter-Karte angezeigt wird. Zum Beispiel: <code>export GITHUB_TOKEN=$(gh auth token)</code>",
|
|
190
|
+
"step2": "<strong>Für dateibasierte Adapter</strong> (Testing, Coverage): Erzeugen Sie zuerst Berichte in Ihrem Projekt. Zum Beispiel: <code>pytest --junitxml=junit.xml</code> oder <code>pytest --cov --cov-report=xml</code>",
|
|
191
|
+
"step3": "<strong>Analyse ausführen</strong>: <code>evo analyze .</code> — neue Adapter werden automatisch erkannt",
|
|
192
|
+
"step4": "<strong>Überprüfen</strong>: <code>evo sources</code> um zu bestätigen, welche Adapter aktiv sind",
|
|
193
|
+
"coming_soon": "Demnächst:"
|
|
194
|
+
},
|
|
195
|
+
"footer": {
|
|
196
|
+
"generated_by": "Erstellt von <strong>CodeQual</strong> Evolution Engine",
|
|
197
|
+
"advisory_line": "Advisory-ID: {id} • {date}",
|
|
198
|
+
"ai_disclaimer": "Diese Untersuchung wurde mit Unterstützung von künstlicher Intelligenz (Claude by Anthropic) erstellt. KI-generierte Inhalte sollten von einem Entwickler überprüft werden, bevor Empfehlungen umgesetzt werden."
|
|
199
|
+
},
|
|
200
|
+
"families": {
|
|
201
|
+
"git": "Versionskontrolle",
|
|
202
|
+
"version_control": "Versionskontrolle",
|
|
203
|
+
"ci": "CI / Build",
|
|
204
|
+
"testing": "Testing",
|
|
205
|
+
"coverage": "Code-Abdeckung",
|
|
206
|
+
"dependency": "Abhängigkeiten",
|
|
207
|
+
"schema": "API / Schema",
|
|
208
|
+
"deployment": "Deployment",
|
|
209
|
+
"config": "Konfiguration",
|
|
210
|
+
"security": "Sicherheit",
|
|
211
|
+
"error_tracking": "Fehlerverfolgung",
|
|
212
|
+
"monitoring": "Überwachung",
|
|
213
|
+
"quality_gate": "Quality Gate",
|
|
214
|
+
"security_scan": "Sicherheitsscan",
|
|
215
|
+
"incidents": "Vorfälle",
|
|
216
|
+
"work_items": "Arbeitspakete",
|
|
217
|
+
"feature_flags": "Feature Flags"
|
|
218
|
+
},
|
|
219
|
+
"metrics": {
|
|
220
|
+
"files_touched": "Geänderte Dateien",
|
|
221
|
+
"dispersion": "Änderungsstreuung",
|
|
222
|
+
"change_locality": "Änderungslokalität",
|
|
223
|
+
"cochange_novelty_ratio": "Co-Change-Neuheit",
|
|
224
|
+
"run_duration": "Build-Dauer",
|
|
225
|
+
"run_failed": "Build-Fehler",
|
|
226
|
+
"total_tests": "Testanzahl",
|
|
227
|
+
"skip_rate": "Übersprungrate",
|
|
228
|
+
"suite_duration": "Suite-Dauer",
|
|
229
|
+
"line_rate": "Zeilenabdeckung",
|
|
230
|
+
"branch_rate": "Branchabdeckung",
|
|
231
|
+
"dependency_count": "Abhängigkeiten gesamt",
|
|
232
|
+
"max_depth": "Abhängigkeitstiefe",
|
|
233
|
+
"endpoint_count": "API-Endpunkte",
|
|
234
|
+
"type_count": "API-Typen",
|
|
235
|
+
"field_count": "API-Felder",
|
|
236
|
+
"schema_churn": "Schema-Fluktuation",
|
|
237
|
+
"release_cadence_hours": "Release-Kadenz",
|
|
238
|
+
"is_prerelease": "Pre-Release",
|
|
239
|
+
"asset_count": "Release-Artefakte",
|
|
240
|
+
"resource_count": "Ressourcen",
|
|
241
|
+
"resource_type_count": "Ressourcentypen",
|
|
242
|
+
"config_churn": "Konfigurations-Fluktuation",
|
|
243
|
+
"vulnerability_count": "Schwachstellen",
|
|
244
|
+
"critical_count": "Kritische Schwachstellen",
|
|
245
|
+
"fixable_ratio": "Behebbar-Anteil",
|
|
246
|
+
"event_count": "Fehlerereignisse",
|
|
247
|
+
"user_count": "Betroffene Nutzer",
|
|
248
|
+
"is_unhandled": "Unbehandelte Ausnahme"
|
|
249
|
+
}
|
|
250
|
+
}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cover": {
|
|
3
|
+
"title": "Evolution Advisory",
|
|
4
|
+
"project": "Project:",
|
|
5
|
+
"period": "Period:",
|
|
6
|
+
"period_to": "to",
|
|
7
|
+
"advisory_id": "Advisory ID:",
|
|
8
|
+
"generated": "Generated:"
|
|
9
|
+
},
|
|
10
|
+
"exec": {
|
|
11
|
+
"title": "Executive Summary",
|
|
12
|
+
"significant_changes": "Significant Changes",
|
|
13
|
+
"areas_affected": "Areas Affected",
|
|
14
|
+
"patterns_matched": "Patterns Matched",
|
|
15
|
+
"new_observations": "New Observations",
|
|
16
|
+
"events_analyzed": "Events Analyzed",
|
|
17
|
+
"signals_computed": "Signals Computed",
|
|
18
|
+
"affected_areas": "Affected areas:",
|
|
19
|
+
"based_on": "Based on {n} prior commit{s}",
|
|
20
|
+
"commit_plural": "s",
|
|
21
|
+
"commit_singular": ""
|
|
22
|
+
},
|
|
23
|
+
"verify": {
|
|
24
|
+
"title": "Fix Verification: {status}",
|
|
25
|
+
"subtitle": "Comparing against previous analysis",
|
|
26
|
+
"all_resolved": "All issues resolved",
|
|
27
|
+
"progress": "Progress detected",
|
|
28
|
+
"no_change": "No change yet",
|
|
29
|
+
"resolved": "Resolved",
|
|
30
|
+
"improving": "improving",
|
|
31
|
+
"not_improving": "not improving",
|
|
32
|
+
"returned_normal": "returned to normal",
|
|
33
|
+
"stabilized": "stabilized at new level",
|
|
34
|
+
"still_deviating": "still actively deviating",
|
|
35
|
+
"new": "New",
|
|
36
|
+
"chip_resolved": "{n} resolved",
|
|
37
|
+
"chip_improving": "{n} improving",
|
|
38
|
+
"chip_not_improving": "{n} not improving",
|
|
39
|
+
"chip_new": "{n} new",
|
|
40
|
+
"th_area": "Area",
|
|
41
|
+
"th_signal": "Signal",
|
|
42
|
+
"th_before": "Before",
|
|
43
|
+
"th_after_normal": "After / Normal",
|
|
44
|
+
"th_trend": "Trend",
|
|
45
|
+
"transient_title": "Transient spike:",
|
|
46
|
+
"transient_text": "One-time spike from an older commit. The metric has since returned to its baseline. Safe to accept.",
|
|
47
|
+
"stabilized_title": "Stabilized drift:",
|
|
48
|
+
"stabilized_text": "An older commit shifted this metric to a new level and it stayed there. The statistical model absorbed the change, but the value differs from the original baseline. Consider whether this shift was intentional.",
|
|
49
|
+
"active_title": "Active deviation:",
|
|
50
|
+
"active_text": "This metric is still actively deviating in the latest data. Investigation recommended."
|
|
51
|
+
},
|
|
52
|
+
"findings": {
|
|
53
|
+
"title": "Key Findings",
|
|
54
|
+
"empty": "No unusual activity detected. Your project's development patterns are within normal ranges.",
|
|
55
|
+
"significant": "{fam} showed significant deviations in {metrics}.",
|
|
56
|
+
"moderate": "{fam} showed moderate deviations in {metrics}.",
|
|
57
|
+
"minor": "{fam} showed minor deviations in {metrics}.",
|
|
58
|
+
"known_patterns": "{n} known pattern{s} detected",
|
|
59
|
+
"new_patterns": "{n} new pattern{s} discovered"
|
|
60
|
+
},
|
|
61
|
+
"changes": {
|
|
62
|
+
"title": "What Changed in Your Codebase",
|
|
63
|
+
"empty": "No unusual changes detected.",
|
|
64
|
+
"detected": "We've detected {n} change{s} that differ from your project's normal patterns. Each change shows what typically happens versus what we observed this time.",
|
|
65
|
+
"accepted_not_shown": "{n} accepted deviation{s} not shown:",
|
|
66
|
+
"accepted_hint": "These were previously reviewed and marked as expected. Manage with <code>evo accept --list</code>",
|
|
67
|
+
"filter_all": "All",
|
|
68
|
+
"filter_critical": "Critical",
|
|
69
|
+
"filter_medium": "Medium",
|
|
70
|
+
"filter_low": "Low",
|
|
71
|
+
"resolved_of": "{resolved} of {total} resolved"
|
|
72
|
+
},
|
|
73
|
+
"card": {
|
|
74
|
+
"what_this_means": "What this means:",
|
|
75
|
+
"was_compared": "{metric} was {value}, compared to the typical value of {median}.",
|
|
76
|
+
"show_technical": "Show technical details",
|
|
77
|
+
"technical_text": "The {metric} for this change was {value}. Historically, similar changes had a value of {median}.",
|
|
78
|
+
"typical": "Typical:",
|
|
79
|
+
"this_time": "This Time:",
|
|
80
|
+
"above_range": "{dev}x above typical range",
|
|
81
|
+
"below_range": "{dev}x below typical range",
|
|
82
|
+
"accept_expected": "Accept — Expected",
|
|
83
|
+
"accept_permanent": "Accept permanently",
|
|
84
|
+
"accept_thisrun": "Accept for this run only",
|
|
85
|
+
"hint_permanent": "Never flag this signal again",
|
|
86
|
+
"hint_thisrun": "Dismiss now, flag again next analysis",
|
|
87
|
+
"accepted": "Accepted ✓",
|
|
88
|
+
"fix_with_ai": "Fix with AI",
|
|
89
|
+
"drift_prompt_title": "Drift Investigation Prompt",
|
|
90
|
+
"copy": "Copy",
|
|
91
|
+
"use_with": "Use with:",
|
|
92
|
+
"cursor_hint": "Cursor — paste in chat",
|
|
93
|
+
"claude_hint": "Claude Code — paste in terminal",
|
|
94
|
+
"copilot_hint": "Copilot — paste in chat panel",
|
|
95
|
+
"after_investigation": "After investigation:",
|
|
96
|
+
"after_step1": "AI suggests fixes → apply the changes to your code",
|
|
97
|
+
"after_step2": "Run <code>evo analyze . --verify</code> to re-analyze and compare against this run",
|
|
98
|
+
"after_step3": "If the change was intentional, click <strong>Accept</strong> above to dismiss it",
|
|
99
|
+
"trigger": "Trigger:",
|
|
100
|
+
"still_elevated": "→ Still elevated (latest deviation: {dev}σ)",
|
|
101
|
+
"returned_baseline": "↘ Returned to baseline"
|
|
102
|
+
},
|
|
103
|
+
"patterns": {
|
|
104
|
+
"title": "Patterns",
|
|
105
|
+
"what_this_means": "What this means:",
|
|
106
|
+
"recommendation": "Recommendation:",
|
|
107
|
+
"similar_severity": "{n} similar-severity patterns",
|
|
108
|
+
"show_more": "Show {n} more {heading}",
|
|
109
|
+
"known_pattern": "Known Pattern",
|
|
110
|
+
"new_pattern": "New Pattern",
|
|
111
|
+
"emerging_pattern": "Emerging Pattern",
|
|
112
|
+
"dedup_note": "{a} and {b} are treated as related metrics",
|
|
113
|
+
"dedup_shown": "shown as a single pattern.",
|
|
114
|
+
"accepted_hidden": "{n} pattern{s} not shown (accepted metric{ms}: {labels}).",
|
|
115
|
+
"what_are_patterns": "What are patterns?",
|
|
116
|
+
"what_are_patterns_text": "Patterns are recurring correlations between different areas of your project. When a change in one area (e.g. a deployment) consistently coincides with unusual behavior in another (e.g. code dispersion), we flag it so you can decide if it needs attention.",
|
|
117
|
+
"what_should_you_do": "What should you do?",
|
|
118
|
+
"what_should_you_do_text": "Focus on items marked {action_required} or {needs_attention} first. These indicate patterns that are most likely to affect code quality, stability, or security. Items marked {worth_monitoring} don't need immediate action but should be reviewed if they persist. {healthy_pattern} and {informational} confirm that things are working as expected.",
|
|
119
|
+
"supporting_evidence": "Supporting Evidence",
|
|
120
|
+
"additional_insights_title": "Additional Insights"
|
|
121
|
+
},
|
|
122
|
+
"risk_banner": {
|
|
123
|
+
"critical_title": "Immediate Review Required",
|
|
124
|
+
"critical_text": "One or more patterns indicate serious risks that could affect code quality, stability, or security. Review the items below and address \"Action Required\" findings before your next release.",
|
|
125
|
+
"concern_title": "Attention Recommended",
|
|
126
|
+
"concern_text": "Some patterns suggest developing issues that could grow into problems if left unaddressed. Review the items marked \"Needs Attention\" and plan follow-up actions.",
|
|
127
|
+
"watch_title": "Trends Worth Watching",
|
|
128
|
+
"watch_text": "Several patterns are shifting outside normal ranges. None require immediate action, but monitoring these trends will help you catch issues early.",
|
|
129
|
+
"info_title": "All Clear",
|
|
130
|
+
"info_text": "Patterns detected are informational or healthy. No issues require attention at this time.",
|
|
131
|
+
"positive_title": "Looking Good",
|
|
132
|
+
"positive_text": "All detected patterns are healthy. Your project's development patterns are working well."
|
|
133
|
+
},
|
|
134
|
+
"severity": {
|
|
135
|
+
"action_required": "Action Required",
|
|
136
|
+
"needs_attention": "Needs Attention",
|
|
137
|
+
"worth_monitoring": "Worth Monitoring",
|
|
138
|
+
"healthy": "Healthy Pattern",
|
|
139
|
+
"informational": "Informational"
|
|
140
|
+
},
|
|
141
|
+
"investigation": {
|
|
142
|
+
"title": "Next Steps",
|
|
143
|
+
"prompt_title": "Investigation Prompt",
|
|
144
|
+
"step1_title": "Investigate",
|
|
145
|
+
"step1_text": "Copy the prompt below and paste it into your AI assistant (Claude Code, Cursor, Copilot, ChatGPT). It will identify root causes and suggest fixes.",
|
|
146
|
+
"step2_title": "Fix",
|
|
147
|
+
"step2_text": "Apply the suggested changes. If a deviation was intentional, click <strong>Accept</strong> on its card above instead.",
|
|
148
|
+
"step3_title": "Verify",
|
|
149
|
+
"step3_text": "Run <code>evo analyze . --verify</code> to re-analyze and compare. A verification banner will show which deviations resolved, improved, or persist.",
|
|
150
|
+
"copy_prompt": "Copy Prompt to Clipboard",
|
|
151
|
+
"save_prompt": "Save Prompt to File",
|
|
152
|
+
"show_full": "Show Full Prompt",
|
|
153
|
+
"show_full_hint": "Click \"Show Full Prompt\" to see the complete investigation prompt with evidence..."
|
|
154
|
+
},
|
|
155
|
+
"sources": {
|
|
156
|
+
"title": "What EE Can See",
|
|
157
|
+
"subtitle_connected": "{n} connected",
|
|
158
|
+
"subtitle_available": ", {n} available",
|
|
159
|
+
"active": "Active",
|
|
160
|
+
"not_connected": "Not Connected",
|
|
161
|
+
"config_detected": "Config Detected",
|
|
162
|
+
"connected": "Connected",
|
|
163
|
+
"connected_no_data": "Connected — No Data",
|
|
164
|
+
"connected_no_deviations": "Connected — No Deviations",
|
|
165
|
+
"api_error": "API Error",
|
|
166
|
+
"platform_mismatch": "Platform Mismatch",
|
|
167
|
+
"pro": "Pro",
|
|
168
|
+
"signals_analyzed": "{n} signal{s} analyzed — all within normal range",
|
|
169
|
+
"pro_available": "Available with Evolution Engine Pro.",
|
|
170
|
+
"see_plans": "See plans →",
|
|
171
|
+
"setup_guide": "Setup guide →",
|
|
172
|
+
"auto_detected": "Auto-detected from files",
|
|
173
|
+
"token_set": "Token set. This data is analyzed automatically when running via GitHub Action or GitLab CI.",
|
|
174
|
+
"connected_no_data_default": "No events found in the analysis window.",
|
|
175
|
+
"ci_no_runs": "No pipeline runs found in the analysis window.",
|
|
176
|
+
"deployment_no_releases": "No published releases found in the analysis window.",
|
|
177
|
+
"security_clean": "No security alerts found — your dependencies look clean.",
|
|
178
|
+
"error_no_events": "No error events found in the analysis window.",
|
|
179
|
+
"testing_no_files": "No test result files (JUnit XML) found.",
|
|
180
|
+
"coverage_no_files": "No coverage files (Cobertura XML) found.",
|
|
181
|
+
"via": "via"
|
|
182
|
+
},
|
|
183
|
+
"adapters": {
|
|
184
|
+
"title": "Expand Your Coverage",
|
|
185
|
+
"intro": "Evolution Engine has <strong>{n} universal patterns</strong> learned from 200+ open-source repositories. The more signal families you connect, the more cross-family patterns can be detected.",
|
|
186
|
+
"available_title": "Available Adapters",
|
|
187
|
+
"available_subtitle": "Enable these adapters to unlock additional signal families and cross-family pattern detection.",
|
|
188
|
+
"how_to_title": "How to Connect an Adapter",
|
|
189
|
+
"step1": "<strong>Set the environment variable</strong> shown on the adapter card. For example: <code>export GITHUB_TOKEN=$(gh auth token)</code>",
|
|
190
|
+
"step2": "<strong>For file-based adapters</strong> (Testing, Coverage): generate reports in your project first. For example, <code>pytest --junitxml=junit.xml</code> or <code>pytest --cov --cov-report=xml</code>",
|
|
191
|
+
"step3": "<strong>Run analysis</strong>: <code>evo analyze .</code> — new adapters are detected automatically",
|
|
192
|
+
"step4": "<strong>Verify</strong>: <code>evo sources</code> to confirm which adapters are active",
|
|
193
|
+
"coming_soon": "Coming soon:"
|
|
194
|
+
},
|
|
195
|
+
"footer": {
|
|
196
|
+
"generated_by": "Generated by <strong>CodeQual</strong> Evolution Engine",
|
|
197
|
+
"advisory_line": "Advisory ID: {id} • {date}",
|
|
198
|
+
"ai_disclaimer": "This investigation was generated with the assistance of artificial intelligence (Claude by Anthropic). AI-generated content should be reviewed by a developer before acting upon recommendations."
|
|
199
|
+
},
|
|
200
|
+
"families": {
|
|
201
|
+
"git": "Version Control",
|
|
202
|
+
"version_control": "Version Control",
|
|
203
|
+
"ci": "CI / Build",
|
|
204
|
+
"testing": "Testing",
|
|
205
|
+
"coverage": "Code Coverage",
|
|
206
|
+
"dependency": "Dependencies",
|
|
207
|
+
"schema": "API / Schema",
|
|
208
|
+
"deployment": "Deployment",
|
|
209
|
+
"config": "Configuration",
|
|
210
|
+
"security": "Security",
|
|
211
|
+
"error_tracking": "Error Tracking",
|
|
212
|
+
"monitoring": "Monitoring",
|
|
213
|
+
"quality_gate": "Quality Gate",
|
|
214
|
+
"security_scan": "Security Scan",
|
|
215
|
+
"incidents": "Incidents",
|
|
216
|
+
"work_items": "Work Items",
|
|
217
|
+
"feature_flags": "Feature Flags"
|
|
218
|
+
},
|
|
219
|
+
"metrics": {
|
|
220
|
+
"files_touched": "Files Changed",
|
|
221
|
+
"dispersion": "Change Dispersion",
|
|
222
|
+
"change_locality": "Change Locality",
|
|
223
|
+
"cochange_novelty_ratio": "Co-change Novelty",
|
|
224
|
+
"run_duration": "Build Duration",
|
|
225
|
+
"run_failed": "Build Failure",
|
|
226
|
+
"total_tests": "Test Count",
|
|
227
|
+
"skip_rate": "Skip Rate",
|
|
228
|
+
"suite_duration": "Suite Duration",
|
|
229
|
+
"line_rate": "Line Coverage",
|
|
230
|
+
"branch_rate": "Branch Coverage",
|
|
231
|
+
"dependency_count": "Total Dependencies",
|
|
232
|
+
"max_depth": "Dependency Depth",
|
|
233
|
+
"endpoint_count": "API Endpoints",
|
|
234
|
+
"type_count": "API Types",
|
|
235
|
+
"field_count": "API Fields",
|
|
236
|
+
"schema_churn": "Schema Churn",
|
|
237
|
+
"release_cadence_hours": "Release Cadence",
|
|
238
|
+
"is_prerelease": "Pre-release",
|
|
239
|
+
"asset_count": "Release Assets",
|
|
240
|
+
"resource_count": "Resources",
|
|
241
|
+
"resource_type_count": "Resource Types",
|
|
242
|
+
"config_churn": "Config Churn",
|
|
243
|
+
"vulnerability_count": "Vulnerabilities",
|
|
244
|
+
"critical_count": "Critical Vulnerabilities",
|
|
245
|
+
"fixable_ratio": "Fixable Ratio",
|
|
246
|
+
"event_count": "Error Occurrences",
|
|
247
|
+
"user_count": "Affected Users",
|
|
248
|
+
"is_unhandled": "Unhandled Exception"
|
|
249
|
+
}
|
|
250
|
+
}
|