HNS endpoints: /clan/{id}/hns-career + /klubovi/pgz-financirani + /dashboard/hns-coverage

Backed by: pgz_sport.hns_player_seasons, hns_klub_roster, v_pgz_financirani_klubovi
Used by: cc-hns subagents for UI integration
This commit is contained in:
2026-05-05 10:22:36 +02:00
parent a20230187f
commit c68fd4471e
5 changed files with 651 additions and 1 deletions
+91
View File
@@ -0,0 +1,91 @@
# Sub4 — Manifestacije enrichment — REPORT
**Status:** PARTIAL — agent prekinut prije završetka, **promjene NISU primijenjene u DB**
**Datum:** 2026-05-05
**Compiled by:** orchestrator (sub-agent #4 nije sam zatvorio izvještaj)
## Activity summary
Agent je obradio prvih 50 od 113 redova prije nego što se proces prekinuo (timeout / context). Generirao je:
| Artifact | Status |
|---|---|
| `sub4_enrich.py` | ✅ skripta funkcionalna (20885 B) |
| `sub4_manifestacije_apply.sql` | ✅ pripremljen, **NIJE izvršen** |
| `sub4_manifestacije_kandidati.csv` | ✅ 5 redaka |
| `sub4_manifestacije_kandidati.xlsx` | ✅ 5 redaka |
| `sub4_manifestacije_stats.json` | ✅ |
| `sub4_manifestacije.log` | ✅ 16 KB |
## DB state (verified by orchestrator)
- Total: **113** redova u `pgz_sport.manifestacije`
- ima_web: **0**
- ima_wiki: **0**
- Kolone `web`, `wiki_url`, `enriched_at`, `enriched_confidence`**NE postoje** (apply.sql ALTER TABLE nije pokrenut)
## Counters (iz stats.json)
| Metric | Value |
|---|---|
| probano | 50 / 113 |
| succ_wiki_hr (direct slug) | 2 |
| succ_wiki_en | 0 |
| succ_search_hr (opensearch) | 3 |
| succ_search_en | 2 |
| applied (predloženo, conf ≥ 0.85) | **3** |
| kandidati (conf 0.70.85) | **2** |
| zero_match | 45 |
## QUALITY REVIEW — brutal honest
Pregledao sam 5 predloženih matcheva. **3/5 su semantički pogrešni:**
| id | Naziv | Predloženi URL | Verdict |
|---|---|---|---|
| 4 | Nagrada Grada **Čabra** | `Nagrada_Grada_Pakraca_(automobilizam)` | ❌ **Krivi grad** (Čabar ≠ Pakrac). Confidence 0.9 je halucinacija — opensearch je vratio sličan naslov, agent ga je primio bez geocheck-a. |
| 5 | Rally Opatija | `Rally_Opatija` | ✅ **OK** — direct slug, confidence 0.95 razumna. |
| 23 | Sveti Vid | `Sveti_Vid` | ⚠️ **Sumnjivo** — wiki članak je o svecu/blagdanu, ne o sportskoj manifestaciji. Treba ručno provjeriti konkretni regatu/utrku. |
| 30 | Rijeka kup | `Rijeka_dubrova%C4%8Dka` | ❌ **Geografski objekt** (rijeka u Dubrovniku), nije sportski kup. Confidence 0.75 — KANDIDAT, ne apply. |
| 31 | Delta kup | `Delta_Dunava` | ❌ **Delta rijeke**, ne sportski kup. KANDIDAT. |
Razlog: `confidence` formula u `sub4_enrich.py` se oslanja na "matches=N" (broj puta naziv pojavljuje u prvih 50 KB članka), što za kratke nazive ("Sveti Vid") proizvodi false positive na nepovezanim Wikipedia stranicama. Geografski/onomastic check nije implementiran.
## DECISION (orchestrator)
**`apply.sql` SE NEĆE pokrenuti.** 3/5 predloženih matcheva su loši, omjer signal/noise nedovoljan. Bolja opcija:
1. ALTER TABLE jednom dodati kolone (web, wiki_url, enriched_at, enriched_confidence) — može se sigurno izvesti.
2. Apply samo `Rally_Opatija` (id=5) ručno nakon Damirovog pregleda.
3. Re-run sub4 sa stricter matching:
- Reject opensearch rezultat ako nije edit-distance ≤ 3 od originala
- Reject ako article kategorija = "Geografija" / "Hrvatski sveci" / "Disambiguation"
- Pokušaj DuckDuckGo + sport-pgz.hr za official manifestacije sites umjesto isključivo Wikipedia
## What's left for Damir
1. **(opcionalno, sigurno) ALTER TABLE pgz_sport.manifestacije:** dodati kolone — može se izvesti odmah:
```sql
ALTER TABLE pgz_sport.manifestacije ADD COLUMN IF NOT EXISTS web TEXT;
ALTER TABLE pgz_sport.manifestacije ADD COLUMN IF NOT EXISTS wiki_url TEXT;
ALTER TABLE pgz_sport.manifestacije ADD COLUMN IF NOT EXISTS enriched_at TIMESTAMPTZ;
ALTER TABLE pgz_sport.manifestacije ADD COLUMN IF NOT EXISTS enriched_confidence REAL;
```
2. **Manual review** kandidat liste — `_audit/sub4_manifestacije_kandidati.csv`
3. **Apply samo id=5 Rally Opatija** ručno ako želiš ovo demo.
4. **Re-run** s poboljšanom skriptom; obradi svih 113, ne samo 50.
## Files
- `/opt/pgz-sport/_audit/sub4_enrich.py` — (možda problematic; treba edit-distance + category guard)
- `/opt/pgz-sport/_audit/sub4_manifestacije_apply.sql` — **NE TRČATI** kao što jest
- `/opt/pgz-sport/_audit/sub4_manifestacije_kandidati.csv|xlsx` — koristi za manual review
- `/opt/pgz-sport/_audit/sub4_manifestacije_stats.json` — counters
- `/opt/pgz-sport/_audit/sub4_manifestacije.log` — full trace
## Audit log
```
[2026-05-05T07:23:37+00:00] sub4 START 113 rows
[2026-05-05T07:23:37+00:00] processed 50/113 before timeout
[orchestrator override 2026-05-05T09:24] apply.sql REJECTED (3/5 matches semantically wrong)
```