diff --git a/docs/ref-kb-correctness-program-2026-06.md b/docs/ref-kb-correctness-program-2026-06.md index 164f79c..fa3e31a 100644 --- a/docs/ref-kb-correctness-program-2026-06.md +++ b/docs/ref-kb-correctness-program-2026-06.md @@ -35,7 +35,7 @@ Fiks-manifest: `scripts/kb-eval/data/spor0-fix-manifest.json` (38 fikser, 25 fil ### Spor 2 — Press pålitelighet mot 100 % (hardningen) - **(a) Ensemble for recall:** union av N *diverse* judge-linser (f.eks. eksakt-verdi / strukturell / status-fokus). Mål single vs ensemble på gull-settet FØR adopsjon (operatørens «bygg begge og mål»). Union hever recall (mål: > 84,2 %), senker presisjon — tapet absorberes av menneske-i-loopen (c). Adopter kun hvis gull-målt forbedring. -- **(b) Gull-rekonsiliering:** løs hver judge-vs-gull-uenighet (v2: 6 FP + 6 FN) mot live kilde. Hver er enten judge-feil ELLER gull-feil; å løse dem kalibrerer judgen OG retter fasiten. (FP-ene inkluderer trolig diskutable gull-labels, f.eks. «100+» som nedre grense ble flagget — gull bør avgjøre om nedre-grense-påstander teller som feil.) Mål: 0 uløste uenigheter. +- **(b) Gull-rekonsiliering:** ✅ **FERDIG (2026-06-30)** — alle 12 uenigheter løst mot live kilde. **4 gull-feil rettet** + 1 note-fiks; **8 judge-feil** dokumentert som kalibreringsmål. Herdet fasit: presisjon 84,2 %→**92,1 %**, recall 84,2 %→**87,5 %** (judgen var bedre enn rå-bakeoffen viste — fasiten var kontaminert). Nedre-grense-policy vedtatt (grov understatement >~2× = feil). **0 uløste uenigheter.** Full logg: `ref-kb-gold-reconciliation-2026-06.md`; herdet rapport: `judge-bakeoff-report-v2-reconciled.{json,md}` (frozen v2 beholdt som gate-artefakt). - **(c) Menneske-i-loopen fiks-protokoll:** judge flagger → operatør/ekspert bekrefter mot kilde → fiks + `verified`-bump. Garanterer ~100 % *fiks*-presisjon selv ved 84 % *judge*-presisjon. **Aldri auto-fiks.** - **Verifisering:** ensemble P/R ≥ single på gull; 0 uløste judge-vs-gull-uenigheter; dokumentert at ingen fiks shippet uten menneske-bekreftelse. @@ -80,10 +80,10 @@ Garantien er en **invariant håndhevet av tre porter**, ikke et engangs-oppryddi | S1 (de-risk) | ✅ FULLFØRT | — (v2 GATE PASS) | | Spor 0 (fiks 38) | 🟡 STARTET (manifest klart) | Kjør manifest i fokusert sesjon m/ kilde-reverifisering | | Spor 1 (korpus-skala) | ⏳ grønt lys | Authority-backfill + frontmatter → korpus-pass (Voyage `/trekplan`) | -| Spor 2 (hardning) | ⏳ grønt lys | Ensemble-måling på gull + gull-rekonsiliering | +| Spor 2 (hardning) | 🟡 2b ✅ FERDIG (gull herdet) | 2a ensemble-måling på herdet gull (gjenstår) | | Spor 3 (mekanisme) | 🟢 Port 1+2+3 ✅ KOMPLETT (inkr/gulv/CT5 + full-pass worklist P3d) | Mekanismen ferdig; dormant til Spor 1. Neste spor: Spor 2b (gull-rekonsiliering) → Spor 1 korpus-pass | -**Avhengigheter:** Spor 0 uavhengig (nå). Spor 3 Port 2 (create-guard) MÅ på plass før/sammen med korpus-fiksing (ellers reverserer generatoren). Spor 2b (gull-rekonsiliering) bør før Spor 1 korpus-pass (bunnsolid fasit før vi skalerer målingen). Advisor-filer koordineres mot Cosmo-utfasing (S-Cosmo). +**Avhengigheter:** Spor 0 uavhengig (nå). Spor 3 Port 2 (create-guard) MÅ på plass før/sammen med korpus-fiksing (ellers reverserer generatoren). Spor 2b (gull-rekonsiliering) ✅ ferdig 2026-06-30 — bunnsolid fasit på plass før Spor 1 skalerer målingen. Advisor-filer koordineres mot Cosmo-utfasing (S-Cosmo). ## 7. Verifisering — slik beviser vi «nær-100 %» (nordstjerne) Etter Spor 0+1-fiksing: trekk et **NYTT, ferskt gull-utvalg** (friske påstander, ikke de vi fikset mot) og mål feilraten på maskin-verifiserbar populasjon → **mål < ~2 %**. Måling på den fikset-mot prøven er kontaminert; kun en fersk prøve beviser at korpuset faktisk er nær-100 %. Dette gull-utvalget blir også neste kalibreringssett for kadens-judgen. diff --git a/docs/ref-kb-gold-reconciliation-2026-06.md b/docs/ref-kb-gold-reconciliation-2026-06.md new file mode 100644 index 0000000..b138a51 --- /dev/null +++ b/docs/ref-kb-gold-reconciliation-2026-06.md @@ -0,0 +1,104 @@ +# Gull-rekonsiliering (Spor 2b) — herding av fasiten før korpus-skala + +_Opprettet 2026-06-30. Utfører Spor 2(b) i `ref-kb-correctness-program-2026-06.md` §3: «løs hver judge-vs-gull-uenighet (v2: 6 FP + 6 FN) mot live kilde. Hver er enten judge-feil ELLER gull-feil; å løse dem kalibrerer judgen OG retter fasiten. Mål: 0 uløste uenigheter.» Gjøres FØR Spor 1 (korpus-pass) — bunnsolid fasit før vi skalerer målingen (§6 avhengighet)._ + +## Sammendrag + +12 uenigheter mellom v2-judgen og gull-settet (`gold-correctness-set.json`) ble løst ved fersk re-henting av hver siterte kilde (Opus 4.8-subagenter, `microsoft_docs_fetch`, read-only). Resultat: + +- **4 gull-feil** (gull-verdikt rettet) + **1 note-fiks** (verdikt beholdt). +- **8 judge-feil** (gull sto; dokumentert som kalibreringsmål for Spor 2a / judge-prompt-v3). +- **0 uløste uenigheter** — hver av de 12 er adjudisert til en definitiv side med verbatim live-belegg. + +Effekt på målingen (judgen var **bedre** enn rå-bakeoffen viste — fasiten var kontaminert): + +| | TP | FP | FN | TN | presisjon | recall | F1 | +|---|---|---|---|---|---|---|---| +| v2 rå fasit (`judge-bakeoff-report-v2`) | 32 | 6 | 6 | 196 | 84,2 % | 84,2 % | 0,842 | +| **v2 herdet fasit (`-v2-reconciled`)** | **35** | **3** | **5** | **197** | **92,1 %** | **87,5 %** | **0,897** | + +Den frosne `judge-bakeoff-report-v2` beholdes urørt som gate-beslutnings-artefakt (pre-registrert gate ble vurdert på den fasiten). `judge-bakeoff-report-v2-reconciled` viser herdet fasit. + +## Resolusjonsprinsipp (konservativt — tillit-bærende fasit) + +For hver uenighet: finn den **sanne** verdikten mot live kilde. +- Sann ≠ gull → **gull-feil**: rett gull-verdikt. +- Sann = gull → **judge-feil**: gull står, judge føres som kalibreringsmål. +- Flytt gull **kun** der den sanne verdikten genuint avviker. En påstand som er *substansielt korrekt men upresis* (rett størrelsesorden / rett kjerneatferd) blir stående `correct`, og judge-flagget føres som over-streng. + +Verdikt-vokabular: `correct` (matcher dagens kilde) · `outdated` (var sant, kilden viser nå annet) · `wrong` (aldri sant / motsier kilden uten historisk grunnlag) · `unsourced` (kilden oppgir ikke verdien). + +## Nedre-grense-policy (§3-kjennelse, godkjent av operatør 2026-06-30) + +§3 ber gull avgjøre om nedre-grense-påstander («100+», «200k+») teller som feil. **Vedtatt policy:** grov understatement (>~2×, beslutnings-endrende) teller som feil; en *stram* nedre grense (sann verdi i samme størrelsesorden) blir stående `correct`. Anvendt på FN2 (200k+ vs ~1M ⇒ `outdated`). + +## De 12 adjudiseringene + +### FP-er (judge flagget `not_grounded`, gull var `correct`) + +| ID | Live ground truth (verbatim-belagt) | Sann | Resolusjon | +|---|---|---|---| +| **FP1** `azure-ai-foundry.md#2` (taxonomy) | `what-is-foundry`: «over 1,900 models from Microsoft, OpenAI, Anthropic…» = HELE katalogen; «sold by Azure» er en delmengde. «11000+» og «40+ regioner» finnes ikke (kun «most regions where Foundry Tools are available») | **wrong** | 🔴 GULL-FEIL `correct→wrong` | +| **FP2** `multimodal-prompt-design.md#7` (taxonomy) | `multimodal-search-overview`: image-to-vector ved query krever multimodal-embedding-vectorizer, men TO veier — AML-skill ELLER Azure Vision. «kun» utelukker AML-veien | **wrong** | 🔴 GULL-FEIL `correct→wrong` | +| **FP3** `rag-cost-optimization.md#8` (taxonomy) | `vector-search-how-to-quantization`: «up to 96% reduction» / «up to 28 times» (claim 96,875% = teoretisk 32x ≈). «92,5%» = MS blogg-tittel (reell MS-figur, kombinerte teknikker) | **correct** (substansielt; begge tall sporer til MS) | 🟡 JUDGE-FEIL (eksakt-streng-pedanteri) | +| **FP4** `multi-region-ai-gateway-design.md#2` (taxonomy) | `deployment-types`: 3 kjerne-residency-atferder bekreftet (Standard=deployment-region, DataZone=US/EU-sone, Global Standard=any region). Global Provisioned=any region (ikke single-region) | **correct** (men note «alle fire ordrett» overdrev) | 🟡 JUDGE-FEIL + note-fiks | +| **FP5** `service-level-documentation-dr.md#6` (taxonomy) | `distribute-data-globally`: «Build global active-active apps… every region supports both writes and reads» — multi-region-write reell | **correct** | 🟡 JUDGE-FEIL (ekte FP — kapabilitet-bom) | +| **FP6** `ai-foundry-disaster-recovery-planning.md#9` (status) | `openai/concepts/models`: Global training = GA (per-modell), ikke Public Preview; «billigere» + «ingen residency» stemmer; men Norway East er en GLOBAL trenings-region, ikke residency-regional | **outdated** | 🔴 GULL-FEIL `correct→outdated` | + +### FN-er (judge `grounded`/`source_silent`, gull var feil) + +| ID | Live ground truth | Sann | Resolusjon | +|---|---|---|---| +| **FN1** `real-time-reasoning-performance.md#5` (region) | `realtime-audio` + WebRTC/SIP/WebSockets-søsken: Realtime = global deployment-type i NØYAKTIG East US 2 + Sweden Central. To-region-grensen IKKE avløst — gull misleste «global deployments» | **correct** | 🔴 GULL-FEIL `outdated→correct` | +| **FN2** `rag-context-windows.md#2` (version) | `models-sold-directly-by-azure`: GPT-4.1 = **1 047 576** (~1M); praktisk 300k std. «200k+» sann nedre grense men understater ~5× | **outdated** (nedre-grense-policy) | 🟡 JUDGE-FEIL | +| **FN3** `llm-evaluation-production.md#3` (sku) | Databricks `mlflow3/.../judges`: Completeness/Fluency/Equivalence finnes ikke i dagens built-in-liste (`ConversationCompleteness` er en distinkt multi-turn-judge) | **outdated** | 🟡 JUDGE-FEIL (`source_silent` maskerte fravær) | +| **FN4** `endpoint-health-and-capacity-planning.md#3` (tpm) | `openai/quotas-limits`: «1 Unit Capacity»-rammen borte → Quota Tiers (Free/Tier 0–6, absolutte RPM/TPM). Ratioene overlever i tier-tabellene | **outdated** | 🟡 JUDGE-FEIL (ramme-skifte, tall overlever) | +| **FN5** `capacity-planning-dr-configurations.md#3` (status) | `reliability-ai-search` + `cognitive-search-common-errors-warnings`: ingen 99,99%-nivå — SLA er 99,9%; 2 vs 3 replikaer = lese vs lese-skrive (begge 99,9%) | **wrong** | 🟡 JUDGE-FEIL (`source_silent` maskerte faktafeil) | +| **FN6** `rag-query-cost-reduction.md#2` (sku) | `search-limits-quotas-capacity`: claim-tallene matcher kun «Before April 3, 2024»-raden; nå Basic 15/S1 160/S2 512/S3 1024 GB | **outdated** | 🟡 JUDGE-FEIL (matchet legacy-rad) | + +## Gull-endringer (anvendt 2026-06-30) + +| ID | Før | Etter | Begrunnelse (kort) | +|---|---|---|---| +| `azure-ai-foundry.md#2` | correct | **wrong** | «11000+» motsier live «1900+ totalt»; «sold by Azure» mis-tilskriver totalen | +| `multimodal-prompt-design.md#7` | correct | **wrong** | «kun» utelukker AML-skill (dokumentert annen vectorizer) | +| `ai-foundry-disaster-recovery-planning.md#9` | correct | **outdated** | Global training er GA, ikke Public Preview; Norway-East-framing feil | +| `real-time-reasoning-performance.md#5` | outdated | **correct** | to-region-grensen står; gull misleste kilden | +| `multi-region-ai-gateway-design.md#2` | correct | _correct_ (note-fiks) | fjernet «alle fire ordrett»; noterte Global-Provisioned-unntaket | + +Hver endret claim bærer en `RECONCILED 2026-06-30 (Spor 2b)`-tag i `notes` med live-belegg + fil-fiks-peker for Spor 0/1. + +## 8 judge-kalibreringsmål (mater Spor 2a / judge-prompt-v3) + +Disse er **ikke** gull-endringer — gull sto, judgen bommet. Grupperte feilmoduser: + +1. **Eksakt-streng-pedanteri (FP3):** judge flagget fordi eksakt-strengene (96,875% / 92,5%) ikke sto verbatim, selv om størrelsesorden og kilde-sporing var rett. → Judge bør tillate dokumentert teoretisk-vs-benchmark-ekvivalens. +2. **Taksonomi-nyanse / over-streng (FP4):** kjerneatferden var grunnet; judge flagget på en utelatt under-kategori. → Judge bør skille «kjernen grunnet, detalj utelatt» fra «kjernen ugrunnet». +3. **Kapabilitet-bom (FP5):** judge hentet evidence-URL (continuous-backup) som ikke nevner kapabiliteten prominent, og kunne ikke grunne en reell kapabilitet. → Judge bør følge kapabilitet til kanonisk side; ikke straffe illustrative tall (~0 RTO/RPO) når kapabiliteten er solid. +4. **Nedre-grense-understatement (FN2):** judge sa `grounded` fordi 1M ≥ 200k. → Judge bør flagge nedre grenser som grovt understater (>~2×), ikke bare sjekke ≥. +5. **`source_silent` maskerer fravær (FN3, FN5):** judge hentet siden, fant ikke de påståtte entitetene/tallene, og returnerte `source_silent` (ikke et flagg). For «X finnes i listen»-påstander er fravær på autoritativ side bevis FOR feil. → Behandle `source_silent` på eksistens-påstander som svakt not_grounded-signal. +6. **Ramme-skifte, tall overlever (FN4):** judge pattern-matchet overlevende ratioer og overså at organiserings-rammen (1 Unit Capacity → Quota Tiers) var avløst. → Judge bør detektere når påstandens ramme/enhet er erstattet selv om avledede tall holder. +7. **Legacy-rad-match (FN6):** judge matchet mot en tids-stemplet historisk tabellrad («Before April 3, 2024») og kalte det grunnet. → Judge må sammenligne mot GJELDENDE rad, ikke en hvilken som helst historisk rad. + +(FP3, FP4, FP5 = 3 FP; FN2, FN3, FN4, FN5, FN6 = 5 FN.) + +## Verifiseringslogg (nøkkelpåstander → kilder) + +| Påstand | Kilde (live, 2026-06-30) | +|---|---| +| 1900+ = hele katalogen, ikke «sold by Azure» | learn.microsoft.com/azure/foundry/what-is-foundry | +| image-to-vector: AML-skill ELLER Azure Vision | learn.microsoft.com/azure/search/multimodal-search-overview | +| binary quant «up to 96% / 28x»; 92,5% = blogg-tittel | learn.microsoft.com/azure/search/vector-search-how-to-quantization | +| Global Provisioned = any region | learn.microsoft.com/azure/foundry/foundry-models/concepts/deployment-types | +| Cosmos multi-region writes (active-active) | learn.microsoft.com/azure/cosmos-db/distribute-data-globally | +| Global training = GA; Norway East = global-region | learn.microsoft.com/azure/ai-foundry/openai/concepts/models | +| Realtime = East US 2 + Sweden Central (global type) | learn.microsoft.com/azure/foundry/openai/how-to/realtime-audio (+ WebRTC/SIP/WebSockets) | +| GPT-4.1 kontekst = 1 047 576 | learn.microsoft.com/azure/foundry/foundry-models/concepts/models-sold-directly-by-azure | +| MLflow built-in judges (ingen Completeness/Fluency/Equivalence) | learn.microsoft.com/azure/databricks/mlflow3/genai/eval-monitor/concepts/judges/ | +| Quota Tiers erstatter Unit Capacity | learn.microsoft.com/azure/foundry/openai/quotas-limits | +| AI Search SLA = 99,9% (ingen 99,99%); 2 vs 3 = lese vs lese-skrive | learn.microsoft.com/azure/reliability/reliability-ai-search (+ cognitive-search-common-errors-warnings) | +| AI Search storage nå Basic 15/S1 160/S2 512/S3 1024 | learn.microsoft.com/azure/search/search-limits-quotas-capacity | + +## Hva som IKKE ble gjort (scope-grense) + +Spor 2b retter **fasiten** (gull-settet), ikke reference-`.md`-filene. Fil-fiksene (FP1 11000+/40+, FP2 «kun», FP6 Public-Preview/Norway-East, FN2–FN6 utdaterte tall) er **Spor 0/1**-arbeid og er pekt ut i hver claims `notes`. Mange av FN-ene er reelle korpus-feil som hører til Spor 0-manifestet / Spor 1-korpus-passet. diff --git a/scripts/kb-eval/data/gold-correctness-set.json b/scripts/kb-eval/data/gold-correctness-set.json index a1942d7..1a5e86f 100644 --- a/scripts/kb-eval/data/gold-correctness-set.json +++ b/scripts/kb-eval/data/gold-correctness-set.json @@ -405,11 +405,11 @@ "stratum": "volatile", "claim": "1900+ Foundry Models sold by Azure; 11000+ totalt; 40+ regioner", "claim_type": "taxonomy", - "verdict": "correct", + "verdict": "wrong", "evidence_url": "https://learn.microsoft.com/azure/foundry/what-is-foundry", "lastmod_changed": false, "file_last_updated": "2026-06-24", - "notes": "1900+ bekreftet, men kilden rammer det som total fler-leverandør-tilgang, ikke smalt 'sold by Azure'. 11000+/40+ uverifisert." + "notes": "RECONCILED 2026-06-30 (Spor 2b): correct->wrong. Live (what-is-foundry): \"1,900+\" rammer HELE katalogen (Microsoft+OpenAI+partnere+community), ikke \"sold by Azure\" (en delmengde). \"11000+ totalt\" og \"40+ regioner\" finnes ikke pa kilden (kilden sier kun \"most regions where Foundry Tools are available\"). Fil-fiks (Spor 0/1): omramme til \"1900+ modeller totalt i katalogen\", fjern 11000+/40+. Judge not_grounded var korrekt." }, { "id": "ms-ai-advisor/platforms/azure-ai-foundry.md#3", @@ -730,11 +730,11 @@ "stratum": "volatile", "claim": "Image-to-vector queries kun med Azure Vision multimodal embeddings vectorizer", "claim_type": "taxonomy", - "verdict": "correct", + "verdict": "wrong", "evidence_url": "https://learn.microsoft.com/azure/search/multimodal-search-overview", "lastmod_changed": false, "file_last_updated": "2026-06-19", - "notes": "Bekreftet." + "notes": "RECONCILED 2026-06-30 (Spor 2b): correct->wrong. Live (multimodal-search-overview): image-to-vector ved query krever en multimodal-embedding-vectorizer, men det finnes TO veier - AML-skill ELLER Azure Vision multimodal embeddings skill. \"kun Azure Vision\" er for restriktivt (utelukker AML-veien). Fil-fiks: myk opp \"kun\" -> \"f.eks./primaert\". Judge not_grounded var korrekt pa eksklusiviteten." }, { "id": "ms-ai-advisor/prompt-engineering/multimodal-prompt-design.md#8", @@ -912,11 +912,11 @@ "stratum": "volatile", "claim": "Realtime API regions: East US 2, Sweden Central (global)", "claim_type": "region", - "verdict": "outdated", + "verdict": "correct", "evidence_url": "https://learn.microsoft.com/azure/foundry/openai/how-to/realtime-audio", "lastmod_changed": false, "file_last_updated": "2026-06-24", - "notes": "Kilde: tilgjengelig for global deployments, ikke begrenset til de to. To-region-begrensning avløst." + "notes": "RECONCILED 2026-06-30 (Spor 2b): outdated->correct. Live (realtime-audio + WebRTC/SIP/WebSockets-soesken): Realtime-modellene er global deployment-type tilgjengelig i NOEYAKTIG East US 2 + Sweden Central. To-region-bildet er IKKE avloest - forrige gull-note misleste \"global deployments\" som \"tilgjengelig overalt\". Judge grounded var korrekt." }, { "id": "ms-ai-advisor/prompt-engineering/real-time-reasoning-performance.md#6", @@ -2060,7 +2060,7 @@ "evidence_url": "https://learn.microsoft.com/azure/foundry/foundry-models/concepts/deployment-types", "lastmod_changed": false, "file_last_updated": "2026-06-24", - "notes": "Alle fire data-residency-oppførsler bekreftet ordrett." + "notes": "RECONCILED 2026-06-30 (Spor 2b): verdikt correct beholdt; note korrigert. Live (deployment-types): de tre kjerne-residency-atferdene bekreftet (Standard=deployment-region, Data Zone=innen US/EU-sone, Global Standard=any region). MEN \"alle fire ordrett\" overdrev - kilden grupperer residency etter Global/DataZone/Regional, og Global Provisioned = any region (ikke single-region). \"Standard/Provisioned=region\" er rimelig kortform for kjernemodellen men utelater Global/DataZone Provisioned. Judge not_grounded var over-streng (kjernen ER grunnet)." }, { "id": "ms-ai-engineering/api-management/multi-region-ai-gateway-design.md#3", @@ -3603,11 +3603,11 @@ "stratum": "volatile", "claim": "Global training (Public Preview) rimeligere, ingen datasuverenitet; bruk regional i Norway East/Sweden Central", "claim_type": "status", - "verdict": "correct", + "verdict": "outdated", "evidence_url": "https://learn.microsoft.com/azure/ai-foundry/openai/concepts/models", "lastmod_changed": false, "file_last_updated": "2026-06-24", - "notes": "Global training public preview, billigere, ingen residency; regional gir residency. Bekreftet." + "notes": "RECONCILED 2026-06-30 (Spor 2b): correct->outdated. Live (openai/concepts/models): Global training har INGEN egen \"Public Preview\"-status - tilbys for GA-modeller (gpt-4o/gpt-4.1 m.fl. = GA). \"billigere\" + \"ingen residency\" stemmer. MEN Norway East er listet som en GLOBAL trenings-region (uten residency), ikke en regional/residency-region - sa \"bruk regional i Norway East for residency\" er feil (Standard fine-tuning-regioner: North Central US/Sweden Central/East US 2). Fil-fiks: fjern \"(Public Preview)\", rett Norway-East-anbefalingen. Judge not_grounded var defensibel." }, { "id": "ms-ai-security/cost-optimization/gpt5-gpt41-pricing-models.md#1", diff --git a/scripts/kb-eval/data/judge-bakeoff-report-v2-reconciled.json b/scripts/kb-eval/data/judge-bakeoff-report-v2-reconciled.json new file mode 100644 index 0000000..67cb9d3 --- /dev/null +++ b/scripts/kb-eval/data/judge-bakeoff-report-v2-reconciled.json @@ -0,0 +1,234 @@ +{ + "_meta": { + "source": "gold-correctness-set.json + judge-bakeoff-results.json", + "thresholds": { + "minRecall": 0.8, + "minPrecision": 0.7 + }, + "judged": 255 + }, + "population": { + "total": 255, + "verifiable": 240, + "positives": 40, + "negatives": 200, + "unsourcedInP": 15 + }, + "arms": { + "staleness": { + "tp": 0, + "fp": 0, + "fn": 40, + "tn": 200, + "positives": 40, + "negatives": 200, + "flagged": 0, + "precision": null, + "recall": 0, + "f1": null, + "recallWilson": { + "p": 0, + "low": 0, + "high": 0.08762453925039232 + }, + "precisionWilson": null + }, + "judge": { + "tp": 35, + "fp": 3, + "fn": 5, + "tn": 197, + "positives": 40, + "negatives": 200, + "flagged": 38, + "precision": 0.9210526315789473, + "recall": 0.875, + "f1": 0.8974358974358975, + "recallWilson": { + "p": 0.875, + "low": 0.7388757932976187, + "high": 0.9454058022645873 + }, + "precisionWilson": { + "p": 0.9210526315789473, + "low": 0.792003210797347, + "high": 0.972785898605735 + } + }, + "hybrid": { + "tp": 35, + "fp": 3, + "fn": 5, + "tn": 197, + "positives": 40, + "negatives": 200, + "flagged": 38, + "precision": 0.9210526315789473, + "recall": 0.875, + "f1": 0.8974358974358975, + "recallWilson": { + "p": 0.875, + "low": 0.7388757932976187, + "high": 0.9454058022645873 + }, + "precisionWilson": { + "p": 0.9210526315789473, + "low": 0.792003210797347, + "high": 0.972785898605735 + } + } + }, + "sourceSilent": { + "onVerifiableNegative": 3, + "onVerifiableError": 2, + "agreesWithUnsourced": 5, + "disagreesWithUnsourced": 10 + }, + "byClaimType": { + "version": { + "tp": 6, + "fp": 0, + "fn": 1, + "tn": 21, + "positives": 7, + "negatives": 21, + "flagged": 6, + "precision": 1, + "recall": 0.8571428571428571, + "f1": 0.923076923076923, + "recallWilson": { + "p": 0.8571428571428571, + "low": 0.4868654966809701, + "high": 0.9743210440510252 + }, + "precisionWilson": { + "p": 1, + "low": 0.6096569663469354, + "high": 0.9999999999999999 + } + }, + "tpm": { + "tp": 4, + "fp": 0, + "fn": 1, + "tn": 20, + "positives": 5, + "negatives": 20, + "flagged": 4, + "precision": 1, + "recall": 0.8, + "f1": 0.888888888888889, + "recallWilson": { + "p": 0.8, + "low": 0.3755282641185388, + "high": 0.9637768390302125 + }, + "precisionWilson": { + "p": 1, + "low": 0.5100999795960008, + "high": 1 + } + }, + "region": { + "tp": 1, + "fp": 0, + "fn": 0, + "tn": 14, + "positives": 1, + "negatives": 14, + "flagged": 1, + "precision": 1, + "recall": 1, + "f1": 1, + "recallWilson": { + "p": 1, + "low": 0.2065432914738929, + "high": 1 + }, + "precisionWilson": { + "p": 1, + "low": 0.2065432914738929, + "high": 1 + } + }, + "status": { + "tp": 7, + "fp": 0, + "fn": 1, + "tn": 45, + "positives": 8, + "negatives": 45, + "flagged": 7, + "precision": 1, + "recall": 0.875, + "f1": 0.9333333333333333, + "recallWilson": { + "p": 0.875, + "low": 0.5291051942301386, + "high": 0.9775830911367038 + }, + "precisionWilson": { + "p": 1, + "low": 0.6456611570247934, + "high": 1 + } + }, + "taxonomy": { + "tp": 11, + "fp": 3, + "fn": 0, + "tn": 83, + "positives": 11, + "negatives": 86, + "flagged": 14, + "precision": 0.7857142857142857, + "recall": 1, + "f1": 0.88, + "recallWilson": { + "p": 1, + "low": 0.7411599827511859, + "high": 1 + }, + "precisionWilson": { + "p": 0.7857142857142857, + "low": 0.5241027622679172, + "high": 0.9242875166308363 + } + }, + "sku": { + "tp": 6, + "fp": 0, + "fn": 2, + "tn": 14, + "positives": 8, + "negatives": 14, + "flagged": 6, + "precision": 1, + "recall": 0.75, + "f1": 0.8571428571428571, + "recallWilson": { + "p": 0.75, + "low": 0.40926987910258916, + "high": 0.9285223111419724 + }, + "precisionWilson": { + "p": 1, + "low": 0.6096569663469354, + "high": 0.9999999999999999 + } + } + }, + "gate": { + "pass": true, + "recallOk": true, + "precisionOk": true, + "beatsStaleness": true, + "thresholds": { + "minRecall": 0.8, + "minPrecision": 0.7 + }, + "reasons": [ + "all criteria met" + ] + } +} diff --git a/scripts/kb-eval/data/judge-bakeoff-report-v2-reconciled.md b/scripts/kb-eval/data/judge-bakeoff-report-v2-reconciled.md new file mode 100644 index 0000000..d4fca07 --- /dev/null +++ b/scripts/kb-eval/data/judge-bakeoff-report-v2-reconciled.md @@ -0,0 +1,54 @@ +# Judge bake-off-rapport — S1 (Fase 3 de-risk) + +_Generert deterministisk av `run-judge-bakeoff.mjs` over `gold-correctness-set.json` + `judge-bakeoff-results.json`. Tall fra testet `lib/judge-bakeoff.mjs`. Ikke rediger for hånd — regenerer._ + +**Forhåndsregistrert gate (låst FØR fan-out):** recall ≥ 0.8, presisjon ≥ 0.7, OG judge-recall > staleness-recall. + +## Evaluerings-populasjon (P) + +Volatil stratum + fetchbare claim_types (price ekskludert) — der feilene bor; unngår «invertert leverage». + +| metrikk | verdi | +|---|---| +| P totalt | 255 | +| Verifiserbare (correct/outdated/wrong) | 240 | +| Positive (reelle feil å fange) | 40 | +| Negative (correct) | 200 | +| Unsourced i P (kjørt, men utenfor P/R) | 15 | + +## Arm-sammenligning (detektering over de 240 verifiserbare) + +| arm | TP | FP | FN | TN | presisjon | recall | recall Wilson 95% | F1 | +|---|---|---|---|---|---|---|---|---| +| staleness (billig baseline) | 0 | 0 | 40 | 200 | n/a | 0.0% | [0.0%, 8.8%] | n/a | +| judge (per-påstand groundedness) | 35 | 3 | 5 | 197 | 92.1% | 87.5% | [73.9%, 94.5%] | 0.897 | +| hybrid (union) | 35 | 3 | 5 | 197 | 92.1% | 87.5% | [73.9%, 94.5%] | 0.897 | + +## Judge per claim_type (verifiserbar delmengde) + +| claim_type | positive | TP | FP | FN | presisjon | recall | +|---|---|---|---|---|---|---| +| taxonomy | 11 | 11 | 3 | 0 | 78.6% | 100.0% | +| status | 8 | 7 | 0 | 1 | 100.0% | 87.5% | +| sku | 8 | 6 | 0 | 2 | 100.0% | 75.0% | +| version | 7 | 6 | 0 | 1 | 100.0% | 85.7% | +| tpm | 5 | 4 | 0 | 1 | 100.0% | 80.0% | +| region | 1 | 1 | 0 | 0 | 100.0% | 100.0% | + +## source_silent-diagnostikk + +Judgen hentet siden men fant ikke verdien. Diagnostisk, ikke et flagg. + +| signal | antall | tolkning | +|---|---|---| +| På verifiserbar feil | 2 | judge-bom: reell feil oversett via «kan ikke verifisere» | +| På verifiserbar correct | 3 | judge reproduserte ikke et korrekt faktum mennesket fant | +| Enig med unsourced | 5 | judge reproduserer den uverifiserbare grensen (godt) | +| Uenig med unsourced | 10 | judge hevdet grunnet/ugrunnet der mennesket ikke fant kilde | + +## GATE: ✅ PASS — bygg S3 + +- recall 0.875 ≥ 0.8? **ja** +- presisjon 0.921 ≥ 0.7? **ja** +- slår staleness (recall 0.000)? **ja** +- begrunnelse: all criteria met