Skip to content

Commit d73c5d2

Browse files
committed
chore: remove orphan portal_scout code (SO no longer produces it)
1 parent 1479544 commit d73c5d2

5 files changed

Lines changed: 3 additions & 116 deletions

File tree

src/agent_context_builder/render.py

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@
1212
from .sources.di import DatasetIncubatorFetcher
1313
from .sources.so import SourceObservatoryFetcher
1414
from .signals import (
15-
DICleanCatalog,
16-
PortalScoutSummary,
1715
RadarSummary,
18-
RepoSignals,
1916
SourceObservatorySignals,
2017
)
2118
from .triage import build_workspace_triage
@@ -65,8 +62,7 @@ def render_session_bootstrap(self) -> str:
6562
# ── SCOUTING ────────────────────────────────────────────────────
6663
radar = self._fetch_radar_summary()
6764
so = self._fetch_source_observatory_signals()
68-
scout = self._fetch_portal_scout()
69-
has_scouting = radar is not None or so is not None or scout is not None
65+
has_scouting = radar is not None or so is not None
7066

7167
if has_scouting:
7268
lines.append("## 🔍 SCOUTING")
@@ -107,19 +103,6 @@ def render_session_bootstrap(self) -> str:
107103
f"({so.sources_checked} sources checked)"
108104
)
109105

110-
# Portal scout
111-
if scout is not None:
112-
lines.append(
113-
f"**Portal Scout**: {scout.total_portals} portali · "
114-
f"{scout.new_candidates} nuovi candidati · "
115-
f"{scout.new_confirmed_protocol} strutturati"
116-
)
117-
if scout.new_structured:
118-
domains = [c.domain for c in scout.new_structured[:3]]
119-
extra = f" + {len(scout.new_structured) - 3} altri" if len(scout.new_structured) > 3 else ""
120-
lines.append(f" · **Nuovi CKAN**: {', '.join(domains)}{extra}")
121-
else:
122-
lines.append("**Portal Scout**: unavailable")
123106
lines.append("")
124107

125108
# ── INTAKE ────────────────────────────────────────────────────────
@@ -224,10 +207,6 @@ def _fetch_radar_summary(self) -> RadarSummary | None:
224207
return self._so_fetcher.fetch_radar_summary()
225208

226209

227-
def _fetch_portal_scout(self) -> PortalScoutSummary | None:
228-
return self._so_fetcher.fetch_portal_scout()
229-
230-
231210
def _fetch_source_observatory_signals(self) -> SourceObservatorySignals | None:
232211
return self._so_fetcher.fetch_catalog_signals()
233212

src/agent_context_builder/signals.py

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -352,54 +352,3 @@ def parse_radar_summary(raw: str) -> RadarSummary:
352352
persistent_red=data.get("persistent_red", 0),
353353
sources=sources,
354354
)
355-
356-
357-
@dataclass
358-
class PortalCandidate:
359-
"""Single portal candidate from discovered_portals_summary.json."""
360-
361-
domain: str
362-
protocol: str
363-
probe_url: str
364-
365-
366-
@dataclass
367-
class PortalScoutSummary:
368-
"""Portal discovery summary from source-observatory discovered_portals_summary.json."""
369-
370-
generated_at: str
371-
total_portals: int
372-
new_candidates: int
373-
new_confirmed_protocol: int
374-
known_registry_seen: int
375-
by_protocol: dict[str, int]
376-
new_structured: list[PortalCandidate] = field(default_factory=list)
377-
known_registry_healthcheck: list[PortalCandidate] = field(default_factory=list)
378-
379-
380-
def parse_portal_scout_summary(raw: str) -> PortalScoutSummary:
381-
try:
382-
data: dict[str, Any] = json.loads(raw)
383-
except json.JSONDecodeError as exc:
384-
raise ValueError(f"Invalid JSON: {exc}") from exc
385-
386-
def _parse_candidates(items: list[dict[str, Any]]) -> list[PortalCandidate]:
387-
return [
388-
PortalCandidate(
389-
domain=c.get("domain", ""),
390-
protocol=c.get("protocol", ""),
391-
probe_url=c.get("probe_url", ""),
392-
)
393-
for c in items
394-
]
395-
396-
return PortalScoutSummary(
397-
generated_at=data.get("generated_at", "unknown"),
398-
total_portals=data.get("total_portals", 0),
399-
new_candidates=data.get("new_candidates", 0),
400-
new_confirmed_protocol=data.get("new_confirmed_protocol", 0),
401-
known_registry_seen=data.get("known_registry_seen", 0),
402-
by_protocol=data.get("by_protocol", {}),
403-
new_structured=_parse_candidates(data.get("new_structured", [])),
404-
known_registry_healthcheck=_parse_candidates(data.get("known_registry_healthcheck", [])),
405-
)

src/agent_context_builder/sources/so.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66

77
from ..github import GitHubCollector
88
from ..signals import (
9-
PortalScoutSummary,
109
RadarSummary,
1110
SourceObservatorySignals,
12-
parse_portal_scout_summary,
1311
parse_radar_summary,
1412
parse_source_observatory_signals,
1513
)
@@ -21,7 +19,6 @@ class SourceObservatoryData:
2119

2220
radar: RadarSummary | None
2321
catalog_signals: SourceObservatorySignals | None
24-
portal_scout: PortalScoutSummary | None
2522

2623

2724
class SourceObservatoryFetcher:
@@ -31,14 +28,12 @@ def __init__(self, collector: GitHubCollector):
3128
self.collector = collector
3229
self._radar_cache: RadarSummary | None | object = _UNSET
3330
self._catalog_signals_cache: SourceObservatorySignals | None | object = _UNSET
34-
self._portal_scout_cache: PortalScoutSummary | None | object = _UNSET
3531

3632
def fetch(self) -> SourceObservatoryData:
3733
"""Fetch all source-observatory artifacts."""
3834
return SourceObservatoryData(
3935
radar=self.fetch_radar_summary(),
4036
catalog_signals=self.fetch_catalog_signals(),
41-
portal_scout=self.fetch_portal_scout(),
4237
)
4338

4439
def fetch_radar_summary(self) -> RadarSummary | None:
@@ -71,23 +66,6 @@ def fetch_catalog_signals(self) -> SourceObservatorySignals | None:
7166
self._catalog_signals_cache = result
7267
return result
7368

74-
def fetch_portal_scout(self) -> PortalScoutSummary | None:
75-
if self._portal_scout_cache is not _UNSET:
76-
return self._portal_scout_cache # type: ignore[return-value]
77-
raw = self.collector.get_raw_file(
78-
"source-observatory", "data/portal_scout/discovered_portals_summary.json"
79-
)
80-
if raw is None:
81-
self._portal_scout_cache = None
82-
return None
83-
try:
84-
result = parse_portal_scout_summary(raw)
85-
except ValueError as exc:
86-
self.collector.fetch_errors["source-observatory:portal_scout"] = str(exc)
87-
result = None
88-
self._portal_scout_cache = result
89-
return result
90-
9169

9270
class _Unset:
9371
pass

src/agent_context_builder/triage.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ def build_workspace_triage(
5454
"source_health": _build_source_health_dict(so_fetcher, github_collector),
5555
"pipeline_state": _build_pipeline_state_dict(di_fetcher, github_collector),
5656
"dataset_catalog": _build_dataset_catalog_dict(di_fetcher, github_collector),
57-
"portal_scout": _build_portal_scout_dict(so_fetcher),
5857
}
5958

6059

@@ -221,23 +220,6 @@ def _build_dataset_catalog_dict(
221220
}
222221

223222

224-
def _build_portal_scout_dict(fetcher: SourceObservatoryFetcher) -> dict[str, Any]:
225-
scout = fetcher.fetch_portal_scout()
226-
if scout is None:
227-
return {"available": False}
228-
return {
229-
"available": True,
230-
"generated_at": scout.generated_at,
231-
"total_portals": scout.total_portals,
232-
"new_candidates": scout.new_candidates,
233-
"new_confirmed_protocol": scout.new_confirmed_protocol,
234-
"by_protocol": scout.by_protocol,
235-
"new_structured": [
236-
{"domain": c.domain, "protocol": c.protocol} for c in scout.new_structured
237-
],
238-
}
239-
240-
241223
def _collect_warnings(
242224
github_collector: GitHubCollector,
243225
prs: list[PR],

tests/test_render.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,14 +398,13 @@ def _raw_file_side_effect(repo, path, ref="main"):
398398
renderer.render_session_bootstrap()
399399
renderer.render_workspace_triage()
400400

401-
# Five distinct files fetched once each
402-
assert gh.get_raw_file.call_count == 5
401+
# Four distinct files fetched once each (portal_scout removed — SO no longer produces it)
402+
assert gh.get_raw_file.call_count == 4
403403
paths_fetched = [call.args[1] for call in gh.get_raw_file.call_args_list]
404404
assert "data/radar/radar_summary.json" in paths_fetched
405405
assert "data/catalog/catalog_signals.json" in paths_fetched
406406
assert "registry/pipeline_signals.json" in paths_fetched
407407
assert "registry/clean_catalog.json" in paths_fetched
408-
assert "data/portal_scout/discovered_portals_summary.json" in paths_fetched
409408

410409

411410
def test_render_topic_index():

0 commit comments

Comments
 (0)