Skip to content

Commit 1fcaa0f

Browse files
authored
chore: remove orphan portal_scout code (SO no longer produces it) (#32)
* chore: remove orphan portal_scout code (SO no longer produces it) * docs: remove portal_scout references from schema doc and README (SO no longer produces it)
1 parent 1479544 commit 1fcaa0f

7 files changed

Lines changed: 5 additions & 121 deletions

File tree

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ frontmatter o README manuali. Oggi consuma:
2222
|---|---|---|
2323
| `source-observatory` | `data/radar/radar_summary.json` | health complessivo delle fonti nel registry |
2424
| `source-observatory` | `data/catalog/catalog_signals.json` | drift/inventory per singola fonte |
25-
| `source-observatory` | `data/portal_scout/discovered_portals_summary.json` | nuovi portali PA scoperti da portal-scout |
2625
| `dataset-incubator` | `registry/pipeline_signals.json` | stato operativo dei dataset candidate |
2726
| `dataset-incubator` | `registry/clean_catalog.json` | dataset clean/queryable disponibili |
2827

schemas/workspace_triage.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ Contiene stato incrociato di PR, issue, discussion, git e segnali operativi.
3939
"radar": { "generated_at": "...", "green": 20, "yellow": 2, "red": 0, "unhealthy": [] },
4040
"source_health": { "captured_at": "...", "alerts": [] },
4141
"pipeline_state": { "generated_at": "...", "actionable": [] },
42-
"dataset_catalog": { "schema_version": "1", "updated_at": "...", "clean_ready": [] },
43-
"portal_scout": { "generated_at": "...", "new_candidates": 0, "new_structured": [] }
42+
"dataset_catalog": { "schema_version": "1", "updated_at": "...", "clean_ready": [] }
4443
}
4544
```
4645

@@ -66,7 +65,6 @@ Contiene stato incrociato di PR, issue, discussion, git e segnali operativi.
6665
| `source_health` | object \| null | Segnali drift/inventory da `catalog_signals.json` |
6766
| `pipeline_state` | object \| null | Stato candidati da `pipeline_signals.json` |
6867
| `dataset_catalog` | object \| null | Dataset clean-ready da `clean_catalog.json` |
69-
| `portal_scout` | object \| null | Portali scoperti da `discovered_portals_summary.json` |
7068

7169
## `git_state[repo]`
7270

@@ -82,5 +80,5 @@ Contiene stato incrociato di PR, issue, discussion, git e segnali operativi.
8280
## Valori null
8381

8482
I campi `open_prs`, `open_issues`, `open_discussions` sono `null` in caso di errore fetch.
85-
Le sezioni `radar`, `source_health`, `pipeline_state`, `dataset_catalog`, `portal_scout`
83+
Le sezioni `radar`, `source_health`, `pipeline_state`, `dataset_catalog`
8684
sono `null` se l'artifact upstream non è disponibile o non è stato ancora prodotto.

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)