Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions gitgalaxy/galaxyscope.py
Original file line number Diff line number Diff line change
Expand Up @@ -621,8 +621,8 @@ def _process_file_worker(rel_path: str) -> dict[str, Any]:
"coding_loc": refraction["coding_loc"],
"doc_loc": refraction["doc_loc"],
"mitigations": refraction.get("mitigations", []), # <--- THE FIX: Route the suppressions
"raw_imports": list(raw_imports),
"named_tokens": list(named_tokens),
"raw_imports": sorted(raw_imports),
"named_tokens": sorted(named_tokens),
"popularity_hits": popularity_hits,
"regex_telemetry": (logic_data.pop("regex_telemetry", {}) if is_profiling else {}),
}
Expand Down Expand Up @@ -1061,7 +1061,7 @@ def execute_pipeline(self, output_file: str = "galaxy.json"):
if isinstance(ts, dict) and isinstance(eqs, dict):
keys_to_delete_ts = [
k
for k in ts.keys()
for k in ts.keys() # noqa: SIM118
if k in mitigs
or f"sec_{k}" in mitigs
or k.replace("sec_", "") in mitigs
Expand All @@ -1072,7 +1072,7 @@ def execute_pipeline(self, output_file: str = "galaxy.json"):
]
keys_to_delete_eqs = [
k
for k in eqs.keys()
for k in eqs.keys() # noqa: SIM118
if k in mitigs
or k.replace("sec_", "") in mitigs
or k in ignored_rules
Expand All @@ -1089,11 +1089,11 @@ def execute_pipeline(self, output_file: str = "galaxy.json"):
if k in eqs:
del eqs[k]

if "GG-AGENT-VULNERABILITY" in ignored_rules or "ai_appsec" in mitigs:
if "GG-AGENT-VULNERABILITY" in ignored_rules or "ai_appsec" in mitigs: # noqa: SIM102
if "ai_appsec" in file_data.get("telemetry", {}):
del file_data["telemetry"]["ai_appsec"]

if "GG-AGENT-GUARDRAIL" in ignored_rules or "ai_guardrails" in mitigs:
if "GG-AGENT-GUARDRAIL" in ignored_rules or "ai_guardrails" in mitigs: # noqa: SIM102
if "ai_guardrails" in file_data.get("telemetry", {}):
del file_data["telemetry"]["ai_guardrails"]

Expand Down Expand Up @@ -1146,7 +1146,7 @@ def execute_pipeline(self, output_file: str = "galaxy.json"):

# THE FIX: Bulletproof Truthiness Check
ts = file_data.get("telemetry", {}).get("threat_snippets", {})
if isinstance(ts, dict):
if isinstance(ts, dict): # noqa: SIM102
if ts.get("hardcoded_secrets") or ts.get("sec_hardcoded_secrets"):
has_secrets = True

Expand Down Expand Up @@ -1679,6 +1679,9 @@ def _extract_features_parallel(self):
# the pipeline sees a deterministic sequence regardless of thread
# scheduling.
self.ram_cache = dict(sorted(self.ram_cache.items()))
self.file_speed_telemetry["phase_totals"] = dict(sorted(self.file_speed_telemetry["phase_totals"].items()))
self.splicing_telemetry["regex_totals"] = dict(sorted(self.splicing_telemetry["regex_totals"].items()))
self.splicing_telemetry["top_slowest"].sort(key=lambda x: (x["time"], x["path"]), reverse=True)

# unparsable_files is appended to from the same as_completed() loop
# (the "parser_bypass" branch above) as well as from the earlier
Expand All @@ -1704,8 +1707,8 @@ def _resolve_dependency_graph(self):
"""
logger.info("PASS_1.5: Resolving import graphs via O(1) Pre-computed Suffix Hash Maps...")

self.popularity_scores = dict.fromkeys(self.stem_map.values(), 0)
repo_file_paths = set(self.stem_map.values())
self.popularity_scores = dict.fromkeys(sorted(self.stem_map.values()), 0)
repo_file_paths = sorted(set(self.stem_map.values()))

# --- O(1) SUFFIX MAP ---
suffix_map = {}
Expand Down Expand Up @@ -1798,7 +1801,7 @@ def _resolve_dependency_graph(self):
external_imports_tally = {} # <--- NEW: Track external dependencies

for rel_path, meta in self.ram_cache.items():
raw_imports = meta.get("raw_imports", set())
raw_imports = sorted(meta.get("raw_imports", set()))
for raw_import in raw_imports:
clean_path = import_cleaner.sub("", raw_import.strip())
if "from" in clean_path:
Expand Down Expand Up @@ -2572,7 +2575,7 @@ def execute_incremental_scan(
self.ext_tally = {}
self.stem_map = {}

for rel_path in self.ram_cache.keys():
for rel_path in self.ram_cache.keys(): # noqa: SIM118
stem = Path(rel_path).stem.lower()
ext = Path(rel_path).suffix.lower()
name = Path(rel_path).name.lower()
Expand All @@ -2595,7 +2598,7 @@ def execute_incremental_scan(
self._extract_features_parallel()

# 5. The Ripple Effect (Recalculate Downstream Exposure for ALL files)
self.stem_map = {f: f for f in self.ram_cache.keys()}
self.stem_map = {f: f for f in self.ram_cache.keys()} # noqa: SIM118
self._resolve_dependency_graph()
self._calculate_risk_exposures()

Expand Down
Loading