🎯 North Star Hub — PEAK CV
Reframe del North Star + plan multi-objetivo + hallazgos en vivo. 2026-07-06 · Claude1 (⭐ ARCO BALLNET: el muro de pelota era artefacto YOLO · CIP01 estructural 2/20→17/20 robusto · tool selectivo productizado)
NORTH STAR CANÓNICO — OFFLINE EVENT JUDGE (Nahuel, 2026-07-09)
Peak reconstruye el partido como una secuencia legal, no como decisiones frame-a-frame. El Judge recibe pelota, jugadores, pose, homografía, contactos, audio y actividad como evidencia ruidosa. Usa todo el pasado y el futuro, conserva hipótesis competidoras, revisa decisiones anteriores y puede abstenerse.
Ruta de desarrollo: PRO + PadelAPI exacto → PRO holdout bloqueado → amateur con la verdad que ya existe. n=4 suma evidencia; nunca bloquea. PadelAPI y scorebug son labels/oracle de evaluación, jamás selectores runtime.
| Nivel | Qué debe quedar exacto | Regla de progreso |
|---|---|---|
| POINT | Existencia, saque, terminal, winner/owner y game membership | Métrica fina primaria |
| GAME | Puntos legales ordenados, borde, ganador y transición de score | Se mide aunque point-exact todavía falle |
| SET | Games ordenados, borde y score exacto | Éxito agregado no se vende como point-exact |
| MATCH | Sets, score final y ganador | Último nivel del replay legal completo |
Datos disponibles hoy: 3.823 puntos PadelAPI en 22 PRO para secuencia/score (sin timestamps de video); cuatro timelines PRO timestamped (tres GOOD); trazas CV PRO densas; 160 filas canónicas amateur exportadas en cuatro matches. No esperamos labels nuevas para arrancar.
Arquitectura: scorer aprendido de evidencia local + decoder offline legal (beam/Viterbi/DP) sobre hipótesis de eventos y estados. Output obligatorio: path elegido, alternativas, confianza, contradicciones y provenance.
M0 MEDIDO — FAIL DE CONTRATO, AUDIT PASS
Corrida actual: 4 PRO + 4 amateur, 32 filas jerárquicas, sin usar ni esperar n=4. Runtime mutado: 0. Oracle como selector runtime: 0.
| Nivel | Resultado GOOD PRO actual | Lectura correcta |
|---|---|---|
| POINT | timing: 11/62 · 4/29 · holdout 20/89 | 13,8–22,5%; point-exact completo bloqueado |
| GAME | pred/truth: 17/27 · 20/19 · 14/22 | secuencia exacta 0/3 |
| SET | 0/7 sets exactos | sin crédito de set por conteo aproximado |
| MATCH | score final 0/3 · winner 1/3 | winner aislado no equivale a partido exacto |
Transfer amateur, recall de saque: 15/28 · 54/82 · 21/35 · 0/2.
Bloqueo real: artefacto cross-match no expone en un solo contrato saque, prueba terminal, hipótesis competidoras, confianza, contradicciones ni abstención.
Próximo gate M1: sidecar unificado CV-only para todo el split congelado → scorer PRO → decoder offline legal → holdout PRO → transfer amateur. No esperar n=4.
M1 COMPLETO, progreso de contrato: 8/8 sidecars, 1.405 hipótesis CV-only, 1.009 abstenciones estructuradas, audit PASS. PRO expone 1.183 candidatos con winner/tipo-terminal; amateur 0/222 y por eso abstiene. Alternativas siguen sin score: precisión North Star todavía no subió.
Ahora: M2 aprende/calibra emisiones por evento en PRO development; match2 queda holdout. M3 usa esas emisiones en decoder offline legal con pasado+futuro. Luego se repite POINT→GAME→SET→MATCH y se transfiere sin cambios a amateur.
Validación Tiago/P2: en `v102.791`, T1 serve coverage quedó `17/53` a ±6s con retime OFF y ON; `26/53` OFF versus `25/53` ON a ±12s. `v102.792` mejor guard: `66,7%` precisión; `v102.794` `2/2` solo dentro de un match. Retime no generaliza: queda review/feature evidence, no runtime. Event Judge continúa con terminal/state emissions y abstención explícita de saque.
AMATEUR M0 — REPLAY LEGAL END-TO-END v1 (v102.831 corregido 1:1 + v102.838 escalera n=5)
Primer ensamble completo de la escalera POINT→GAME→(SET) en los 4 matches amateur: timeline_v1.json canónico (POINT, lectura) → clasificador de LADO v102.813 FROZEN (coef far_depth=-0.721 far_spread=-2.213 far_count=0.105 intercept=7.215, sin evidencia far → abstain) → Viterbi 2-estados (p_stay=0.7288 congelado) → bloques/bordes de game → FSM legal con winner ABSTAIN explícito en TODO punto (muro CV cerrado, no re-litigado). CERO tuning/retrain — ensamble + medición de piezas ya validadas. CIP01+n4 fueron holdout del GATE del detector (ya juzgado, PROMOVER) — esta corrida no re-juzga el detector.
| Nivel | Resultado amateur (cit01 · CIP03 · CIP01 · n4 — POOL) | Lectura correcta |
|---|---|---|
| POINT | matching 1:1, recall saque timeline±6s: 21/35 · 54/82 · 15/27 · 11/39 — POOL 101/183 (55,2%) | contexto diagnóstico; n4 (28%) arrastra el pool abajo |
| GAME (lado, ancla timeline) | matching 1:1, side-acc: 13/14 · 20/24 · 9/9 · 8/9 — POOL 50/56 (89,3%) | señal diagnóstica fuerte; no se declara mejora estadística contra el probe previo |
| GAME (bordes ±10s) | matching 1:1, recall 2/4 · 4/12 · 1/4 · 5/10 — POOL 12/30 (40,0%) · precisión POOL 12/85 (14,1%) | recall > null medio en los 4; precisión baja y muchos flips espurios |
| GAME (conteo) | replay/bloques observados: 19/5 · 30/13 · 7/5 · 33/11 — POOL 89/34 | la verdad revisada es parcial: evidencia muchos flips espurios, pero no permite un ratio full-match exacto |
| SET / MATCH | winner ABSTAIN en TODO punto — sin crédito exacto (regla SOL) | verdad E13 tampoco cierra un set completo en ningún match (parcial, v102.827) → estructura no evaluable más allá de GAME |
Corrección de cobertura: los 34 bloques de verdad provienen de revisión parcial; 89/34 no es un ratio exacto de sobre-conteo de todo el partido. Sí demuestra baja precisión contra los bordes observables.
Verdad GAME-POINT Tiago: cola 18/18 completa; 13/18 winners conservadoramente resueltos, 1 conflicto, 3 unsure y 1 no_point. Eval-only; winner runtime sigue ABSTAIN.
Nulls (bordes random, 5 seeds, mismo N): recall real ≥ null medio en los 4 matches (n4 real 50% vs null 10%; CIP03 margen chico 33% vs 25%).
Bonus — persistencia E13 corpus completo (~101 saques, 4 matches): p_stay medido = 69,1% (n_pares=97) vs DEV-only 72,9% (n=59) vs el 85% documentado — no reproduce al escalar; el p_stay congelado de producción (0,7288) queda algo optimista para el corpus completo.
Handoff corregido: cv/data/diagnostics/agent_handoffs/HANDOFF_CODEX_LUNA_TO_FABLE5_v102831_measurement_correction_2026-07-10.md · tool: cv/scripts/claude1_legal_replay_amateur_v102831.py.
⚠️ n4 excluido temporalmente del pool (2026-07-10): diagnóstico v102.834 encontró que el TrackNet full-match de n4 (beelup_27916520) quedó truncado en t=75s de un video de 4801s (1,57% cobertura) — proceso interrumpido, nunca re-corrido. Con TN vacío después de t=75s, machine_v2_candidates() no puede validar saques reales tras el corte → colapsa a 3 candidatos, los tres en calentamiento. Marcado input_data_quality_blocked (no decode_failure): la cadena/decoder están intactos, es el insumo el que está roto. Fix en curso: tracknet_fullmatch_v3.py --full-match sobre n4 completo (v102.835, Opus 4.8 trabajando ahora). Las filas de n4 arriba quedan como referencia histórica, no como medición confiable hasta el re-run.
➕ 5º match, cero compute nuevo — lomas01 (v102.838, 2026-07-10)
lomas01 (beelup_28966665) tenía timeline_v1.json (n=23 puntos) y verdad E13 ya en disco y nunca había entrado a la escalera. Misma cadena CONGELADA v102.831 (Viterbi p_stay=0.7288) corrida sobre lomas01, cero tuning. Advertencia honesta: lomas01 es un fragmento de ~10min (VOD purgado), verdad = 13 puntos (2 T1 + 11 T3) pero solo los 2 T1 tienen ancla de saque (T3 = solo terminal, sin serve_t) y ningún punto tiene serve_side etiquetado — por diseño del evaluador (ancla = saque, side-acc = anclas de verdad), eso deja casi toda la fila GAME estructuralmente no evaluable en este match, no solo "n chico".
| Nivel | lomas01 (n=23 timeline, verdad 2 T1 con serve_t) | Lectura correcta |
|---|---|---|
| POINT | matching 1:1, recall saque ±6s: 0/2 (0,0%) Wilson CI [0,0–65,8%] | n=2 verdad, CI muy ancho — ningún saque timeline cae a ±6s de los 2 anclados (más cercano: 8,3s y 9,1s de gap) |
| GAME (lado) | side-acc: N/A (0 anclas etiquetadas) | 0/13 filas de verdad tienen serve_side — no evaluable, no es un cero real |
| GAME (bordes ±10s) | replay propone 10 bordes (11 bloques) · verdad = 0 bordes (sin serve_side, no hay flips que formen bloques) | recall N/A; precisión 0/10 no es comparable (denominador de verdad = 0) |
| BONUS decode L=4 (v102.832, congelado) | semi-Markov L=4 p_stay=0,7288 → 3 bloques (2 bordes) vs 11 bloques (10 bordes) del Viterbi simple; POINT recall idéntico 0/2 (no depende del decode) | el largo-mínimo sí reduce la sobre-segmentación (11→3 bloques) pero no hay verdad de lado para juzgar si los bloques resultantes son correctos |
lomas01 NO entra al POOL de 4 matches de arriba (mezclaría un match sin verdad de lado con los que sí tienen) — se reporta aparte, honesto, como 5ª fila exploratoria. Fuente: cv/scripts/claude1_legal_replay_amateur_v102838_lomas01.py (reusa build_match()/build_match_semimarkov() TAL CUAL, cero cambios a la cadena) · cv/data/diagnostics/claude1_legal_replay_amateur_v102838_lomas01/measurement_result_v102838_lomas01.json.
Plan rector: cv/docs/PLAN_EVENT_JUDGE_NORTHSTAR_CAMINO_A_2026-07-02.md · baseline medido: CODEX1_MAIN_TASK_OFFLINE_EVENT_JUDGE_NORTHSTAR_BASELINE_2026-07-09.md.
TODO el trabajo de CV (goals, planes, experimentos, hallazgos y labeling) pasa por y se documenta en este PORTAL/HUB. Verdad = export _labels/*.jsonl del portal, nunca un *_truth.json reconstruido. Labeling = siempre /review-queue. No es opcional.
⭐ SUPER GUÍA (2026-07-07 — leer PRIMERO cualquier agente): cv/docs/SUPER_GUIA_NORTHSTAR_2026-07-07.md — el objetivo actual y su validación, el camino P1→P4 con gates, el playbook "si encontrás X → hacé Y", el sistema de escepticismo de datos, y el reparto Opus/Codex. Gate de regresión (correr ANTES de commitear cambios de pipeline/verdad): cv/scripts/claude1_northstar_regression_check.py — congela los canónicos verificados; VERDE obligatorio.
Multi-agente (2026-07-06): protocolo obligatorio con el catálogo de errores reales y su prevención: cv/docs/AGENT_OPERATIONS_PROTOCOL_2026-07-06.md — provenance de modelos, medir→reconciliar→escribir, verdad canónica, claims de versión, handoffs committeados, defaults de reviewers = solo Nahuel.
La cola L5 de Codex1 había tomado el default de los 5 reviewers (pisando el re-labeleo D2 — incidente E5 del protocolo). Split ejecutado: Nahuel+Sara → D2 cit01-v3 (desbloquea precisión+winner+matriz BallNet) · Aldo+Tiago+Osorio → L5 v102-761 (43 ventanas, desbloquea v102.762 de Codex1). Regla permanente: defaults/playlists de reviewers los mueve SOLO Nahuel — protocolo E5. UPGRADE 2026-07-07: PLAYLIST live — cada reviewer tiene una lista ORDENADA (reviewer_queue_assign.py --playlist q1,q2); el tagger trabaja la primera con pendientes y avanza solo (mata el either/or estructuralmente). Playlists actuales: nahuel+sara → [D2-cit01v3, D2-lomas01] · aldo+tiago+osorio → [L5-v102.761, D2-lomas01].
F3 — fallback comercial, no techo técnico
CV reconstruye la ESTRUCTURA y el Event Judge intenta cerrar point→game→set→match. Mientras la confianza no alcance, el usuario puede aportar score o corregir bordes. Esa asistencia permite producto temprano, pero no reemplaza el North Star autónomo.
Métricas primarias = point-exact, game-exact, set-exact y match-exact contra PRO oracle y verdad humana amateur. Cada nivel se reporta por separado.
🚀 SHIPPED (2026-07-10) — v102.824: verdad de evaluación MATCH/SET por match + demo de estructura
/match-summary — sección "Estructura del partido": eje de tiempo con los puntos de timeline_v1.json (canónico, 5 amateur), click en cada bloque abre el punto en /court-view. Al lado, el score de referencia cargado por el usuario (v102.821) — tras la decisión de Nahuel (HANDOFF_NAHUEL_VIA_FABLE5_score_source_decision_2026-07-10.md) de que el score del producto final sale de CV puro (Event Judge), este score cargado es verdad de evaluación + fallback, no el producto final. Alineación puntos↔games: pendiente de anclas de borde-de-game, texto honesto en la propia vista.
Instrumentado el burden de carga del score (entry_duration_ms, medido client-side desde la primera interacción hasta Guardar, aditivo en provenance del schema v2) — convierte la pregunta pendiente de la decisión F3 de SOL en métrica medible con usuarios reales.
HISTÓRICO 2026-07-02 — heurísticas locales que fallaron
Un día de validación en PRO (verdad exacta sin humanos: PadelAPI + oráculos scorebug) mapeó por eliminación exhaustiva qué es y qué no es CV-resoluble en amateur:
| Capa | Estado amateur | Evidencia |
|---|---|---|
| Saques + puntos (estructura) | ✅ CV ~90%, 0 ruido | CIP01 18/20 vs Osorio; receta v2 maneja el colapso amateur |
| Games / sets | ⛔ MURO puro-CV (4 vías) | gap-clustering, formación (cutaway PRO), serve-rotation (near-bias), scorebug (no existe) — ninguno sobrevive cámara fija |
| Winner por punto | ⛔ MURO (azar, p=0.93) | cerrado 2× con oráculo timestamped |
| Score / marcador | 🎯 POR DISEÑO = usuario (2 taps) | Fase 3 ya construida (match-summary) |
Lectura vigente: estos resultados condenan gap-clustering, winner local y selectores one-pass; no condenan el Event Judge offline global. Los negativos son features y constraints para el decoder de hipótesis. La sección canónica de arriba supersede cualquier interpretación de “muro definitivo”.
🎾⭐ ARCO BALLNET (2026-07-06) — el "muro de ball-recall amateur" era ARTEFACTO: nunca corrimos nuestro propio modelo
Hallazgo de Nahuel, validado end-to-end: la pelota amateur se detectaba con yolov8n.pt COCO genérico (fallback); BallNet (=TrackNet v92, el modelo de pelota PROPIO de Peak) nunca se había corrido en amateur. Corriéndolo, ve la pelota 74–87% donde YOLO estaba ciego (0–24%), con trayectoria físicamente coherente. El 894kbps del video NO es el techo. GPU retrain = NO-GO (sin verdad de posición de pelota, entrenar = loop Goodhart v95→v98).
| Métrica (vs verdad humana del portal) | YOLO | BallNet | Veredicto |
|---|---|---|---|
| CIP01 cobertura ESTRUCTURAL (ventanas Osorio con in_play real) | 2/20 | 17/20 | [PROBADO] CIs Wilson DISJUNTOS (2.8–30% vs 64–95%) = el resultado más robusto del arco |
| cit01 cobertura de saque ±6s (7 pts D2) | 4/7 | 7/7 | [PROBADO-direccional] CIs solapan a n=7 |
| cit01 saque-cov vs verdad ORO AMPLIADA n=13 (semi-holdout: +6 puntos multi-punto nunca usados en tuning; auditada 2026-07-07, 2 dupes fixeados) | 2/13 (15%) | 8/13 (62%) ±6s · 11/13 (85%) ±12s | [PROBADO] generaliza a verdad no vista (holdout puro 6 nuevos: YOLO 0/6, BallNet 4/6); ±12s TOCA el KPI ≥85%; gap a ±6s = precisión del ancla |
| cit01 clip-granularity (clip aísla 1 punto) | 1/7 | 4/7 | [PROBADO-direccional] |
| lomas01 (YOLO recall 0.69) | N/A — regime YOLO | BallNet es REGIME-DEPENDENT: solo ayuda donde YOLO<40% | |
cv/scripts/claude1_ballnet_amateur_pipeline.py — selectivo por YOLO ball-recall (<0.40 → BallNet: inyecta ball TN + recomputa rallies/point_events/in_play + serve_anchored amateur) + min_players ADAPTIVO (baja a 3 si <35% frames con 4 jugadores — fix del in_play colapsado de CIP01). Escribe a processed_ballnet_amateur/, NO toca producción. Corpus 5/5 ruteado correcto.
padel_yolo_v3@1280 + filtro-ROI footpoint → recupera ~52% (verificado 1/2, espectadores bien rechazados). Probe: claude1_player_recall_farside_probe.py. Validar en ≥1 match antes de producto.
cv/docs/BALLNET_CAPABILITIES_AND_DETECTION_2026-07-06.md — qué es BallNet, mapa anti-confusión de modelos (pelota/jugadores, cómo se elige cada uno), certeza actual con CIs, qué NO reintentar. + handoff Codex2: cv/docs/HANDOFF_TO_FABLE5_BALLNET_AMATEUR_2026-07-07.md. Detalle completo: cv/ledger/NORTH_STAR_LEDGER_CLAUDE1.md filas 2026-07-06.
Abierto: precisión/over-materialización + winner necesitan MÁS VERDAD (re-labeleo D2 con saque+fin — cit01-v3 solo tiene 7 usables de nahuel; Sara/Osorio/Aldo tienen default=cit01-v3 pero 0 labels ahí). 8 auto-catches de overclaim en sesión — todo lo de arriba pasó verify adversarial.
La implementación local/one-pass perdió contra filtros simples sobre rallies y quedó debajo del null. Esto prueba que FSM/rotation pasivas y winner local no alcanzan. No prueba que la inferencia offline global sea inviable. La directiva vigente transplanta señales útiles a un Judge con pasado, futuro, hipótesis competidoras, leyes del pádel y replay completo PRO→amateur.
M1 (feed transplant) = ✅ GO, productizado — flag --machine-v2 (default-off, gate verde, smoke sin flag intacto): cit01 serve 19/23=83% · CIP01 20/20=100%.
M2 (rotación FIP como selector) = ❌ NO-GO, CERRADO [verify 2/2] — pierde en todas las celdas; causa raíz real: near/far por bbox-pixel degenerado por perspectiva de cámara (cit01 100% 'near', CIP01 ~93% 'far' — sesgo geométrico, no ruido). No re-litigar sin homografía de jugadores.
M3 (terminal v2) = ⚠️ MIXTO [verify 2/2] — corrige al propio handoff: el "71%" citado no era el artefacto real; points_v2.json da 65% (11/17), no 71%. Refinamiento physical-close no sube.
M4 (score-FSM) = diagnosticado — vacío por gate score_eligible (nunca 'accepted') + structure_score degenerado. Handoff a Codex escrito: agent_handoffs/HANDOFF_OPUS48_TO_CODEX_v102770_M4_score_fsm_l6l7_2026-07-07.md.
Detalle completo: ledger CLAUDE1. Todo en misma-verdad — el holdout de labels nuevos sigue siendo el desbloqueo real.
🗓️⭐ Timeline del producto (ruta F3) — v102.772 (2026-07-08)
Ruta CONFIRMADA por verify adversarial: CV entrega el TIMELINE (saques/puntos/rallies) desde machine_v2_candidates(), ahora productor oficial (timeline_v1.json, flag --timeline default-ON, aditivo, legacy byte-idéntico verificado). El SCORE lo pone el usuario (games/sets NO son CV-recuperables en amateur, verificado). Peak alinea ambos.
M2 — KPI del timeline vs verdad canónica (piso pre-registrado ≥24/35 cit01, ≥18/28 CIP01)
| Match | n_points | Verdad T1/T2/T3 | Serve-recall any [Wilson CI] | Serve-recall 1to1 [Wilson CI] | End-recall T1 any [Wilson CI] | Coverage serve/end | Piso |
|---|---|---|---|---|---|---|---|
| cit01 | 48 | 24/11/3 | 24/35=69% [52–81%] | 21/35=60% [44–74%] | 15/24=62% [43–79%] | 55% / 52% | ≥24/35 PASS |
| CIP01 | 52 | 27/1/0 | 18/28=64% [46–79%] | 15/28=54% [36–70%] | 18/27=67% [48–81%] | 63% / 60% | ≥18/28 PASS |
| lomas01 | 23 | 2/0/11 | 0/2=0% [0–66%] | 0/2=0% [0–66%] | 1/2=50% [9–91%] | 52% / 29% | sin piso (n=2, régimen YOLO, exploratorio) |
| CIP03 🎯 | 99 | 80/2/0 | 55/82=67% [56–76%] | 54/82=66% [55–75%] | 45/80=56% [45–67%] | 56% / 52% | n=3 HELD-OUT (2026-07-09) |
Veredicto piso: PASA en ambos matches con verdad (método any, pre-registrado). Honesto: el método 1to1 (robusto a doble-conteo) da ~9-10pp menos y NO pasaría si se usara como piso — no se esconde, ya está en el report. Verify adversarial 2/2 SOSTENIDO (matching, procedencia de verdad, gate de regresión). Fuente: cv/data/diagnostics/v102.772_timeline_kpi/report.md.
⭐ GENERALIZACIÓN n=3 (M3, 2026-07-09): serve-recall del timeline es ESTABLE across 3 canchas independientes: cit01 69% · CIP01 64% · CIP03 67% [56–76%]. CIP03 es 100% held-out (nada se tuneó con él) y es el n más grande (82 pts) → su CI angosto CONFIRMA que el ~67% es el techo real, no ruido. No hay degradación en cancha nueva. El entregable CV del producto (el timeline) tiene calidad medida y generalizante. Re-conteo a mano independiente = 55/82 ✓.
M4 — Alineación score-usuario (prototipo, validado en PRO)
DP de huecos temporales que parte la secuencia de puntos del timeline en K games consistentes con el score que declara el usuario. Gate pre-registrado ≥80% de puntos al game correcto: FALLA en ambos matches PRO — asu_m0 72.3% (47/65) vs null-baseline 33.8% · asu_m1 61.9% (86/139) vs null-baseline 25.9%. Hay señal real (2.1×–2.4× el baseline) pero no alcanza el piso. Causa dominante medida: drift acumulativo de "un game atrás" cuando el hueco de borde-de-game real cae en la zona de solapamiento con huecos intra-game normales (ej. borde real de 58s vs intra-game máx de 78s en el mismo match) — se autocorrige en el próximo hueco inequívoco. Verify adversarial: métrica SOSTENIDA (2/2), procedencia de matches corregida (no eran DATA_CATALOG §2c sino claude1_oracle_timeline/, sin cambio de números) → RECONCILE-5 agregado a DATA_CATALOG.md.
Handoff completo v102.772: cv/data/diagnostics/agent_handoffs/HANDOFF_SONNET5_TO_FABLE5_v102772_execution_report_2026-07-08.md. Detalle número-por-número: cv/ledger/NORTH_STAR_LEDGER_CLAUDE1.md filas 2026-07-08 (tarde/noche).
El ancla de borde-de-game que le FALTABA a M4 ahora tiene señal medida sobre datos reales. Trigger disparado (n4 = 15 saques etiquetados por Tiago). Holdout congelado CIP01+n4 (n=28), 1 sola corrida → balanced-acc 100% (confusión [[10,0],[0,18]]), recall near/far 100%/100%, 10/10 flips exactos ±0, 0 FALSOS. M3b (replay M4 con el error-model MEDIDO del holdout: 100% exacto / 0 falso) reproduce el ceiling: asu_m0 100%, asu_m1 92.8% plain / 100% +edges → gate SOL ≥80% ambos PASA. Las 3 condiciones de promoción de SOL PASAN (holdout + exact-boundary 100% + M4-replay≥80). El requisito duro que el ceiling v102.814 exponía (flips ±0, no ±1) SE CUMPLE. Próximo paso: Fable5 formaliza a SOL la emisión ADDITIVE amateur GAME-boundary para el Event Judge (aún no implementada). Cautela: n=28/10 flips = evidencia fuerte pero pequeña.
Fuentes: cv/scripts/claude1_serving_side_detector.py (--v2-far-only --holdout) · cv/scripts/claude1_m4_flip_anchor_ceiling.py (brazo e) · handoff de cierre cv/data/diagnostics/agent_handoffs/HANDOFF_OPUS48_TO_FABLE5_v102813_m3_verdict_2026-07-10.md · ledger NORTH_STAR_LEDGER_CLAUDE1.md fila 2026-07-10 (Opus 4.8) M3+M3b.
🗳️ DECISIONES PENDIENTES DE NAHUEL (2026-07-03) — 3 casos empaquetados, esperan SÍ/NO
Cada caso tiene su doc con números honestos (evaluador-verificados). Ninguno ejecutado — esperan tu decisión.
CASO_D1_terminal_modelD1: modelo detecta terminales en PRO (recall 83.9%/prec 92.2% holdout ASU) pero uso-real bloqueado + transfer amateur 0/4. El muro era ORQUESTACIÓN (ventanas TN cortan en end+0.6s), no visión. D1.5 (TN con ventanas +15s, sólo cómputo) COMPLETO — 7/7 matches gate-ados con evaluador-adversarial → VEREDICTO NO-GO. La firma física "pelota que muere post-terminal" aparece en 1 de 4 matches que votan (solo match2, lm 0.76 coherente); el resto da lm 0.40–0.50 (azar) con proxies≥física, y el "2º separador" (match1 lm 0.79) es artefacto de n=5 (post_span AUC 1.0, perm p=0.062, refutado 3/3). No generaliza ni entre broadcasts PRO limpios → no transfiere a amateur (consistente con muro D1). Palanca real = ball-recall upstream (retrain amateur / reframe), NO un clasificador post-terminal. Bonus: tracks _ext amateur (cit01+Lomas01) pre-computados, listos para el test de transferencia G5 apenas lleguen los labels del D2.
b1_ext_structureLos MISMOS tracks _ext del D1.5 (+15s, chunks fusionados) NO servían para la señal post-terminal, PERO sí mejoran la ESTRUCTURA amateur. Inyectando _ext vs original (mismo base guard-ON + shim + serve_anchored legacy, sólo cambia el track) sobre CIP01 (único con verdad Osorio): mismo recall usable (11/20) pero precision 2× (32→69%), cardinalidad casi perfecta (16≈20 reales vs 34=1.7× inflado), winner-accuracy +14pp (65→79%). El _ext llena gaps inter-rally → consolida fragmentos → menos ruido sin perder puntos reales netos (costo = 1 merge). Gate frag −20% cumplido ampliamente → GO: empaquetar para Codex + 2 refinamientos: (1) buffer sweep +2/+5s (recupera el 1 merge = Pareto), (2) confirmar con labels D2 (hoy verdad n=1). Nota honesta: preliminar era WASH (error de métrica: window-recall premia fragmentos), cazado por el refutador adversarial + recómputo propio. En matches sanos el _ext no cambia serves pero mejora terminals/winners downstream.
CASO_D2_labels_n52 colas LIVE en el tagger, asignadas a Aldo + Osorio + Tiago (colaborativo):
d2-truth-cit01 (37 ventanas) + d2-truth-lomas01 (22 ventanas). Pedido: ancla de saque + fin con slider + terminal; ganador opcional. ~15-20 min c/u repartido → KPI medido en n=4 cross-court. Verdad SOLO por export _labels del portal (gate O1). CASO_D3_promote_recipe4 flags default-OFF (envelope, interior-gap-guard). Byte-parity PROBADO (sha256 idéntico al runtime con flags OFF = cero-cambio, rollback trivial). Falta gate formal (sin holdout ciego). Recomendación: portar gated default-OFF (habilita A/B en prod); interior-gap NO on-by-default hasta resolver fragmentación 2.73×.
📊 MARCADOR AMATEUR — ESTRUCTURA (la métrica del North Star)
Receta anti-colapso: guard + envelope + shim + serve_anchored legacy-fallbacks. KPI de LA TAREA: ≥85% estructura, ~0 ruido, n≥5, en runtime. Evaluador-adjudicado 2026-07-02.
| Match | Receta | Pts CV | Cobertura | Ruido |
|---|---|---|---|---|
| CIP01 (27860467) brazo D recuperó win-3 (gate hardcodeado 0.65 descartaba serves reales conf 0.3; piso 0.30 opt-in = +1 ventana, cero pérdidas). Residuo final: win 12/15 = bola muerta (4-11% frames) — pared del detector. | D: envelope+legacy+conf-floor 0.30 | 17 | 18/20 ±5s (16/20 estricto) = 90% | 0 |
| Lomas01 (28966665) la receta correctamente NO disparó — diseño condicional funciona en video sano. | no-op (in_play sano 57%) | 28 | 9.8 min span | — |
| CIP03 (27864194) T2b: full-video captura el match ENTERO donde el envelope heredaba el miss de L3 (13→44 pts; 7/8 serves de verdad DENTRO de la ventana CV 64-1964s, match_window.json persistido). CAVEAT: el anclaje fino por-punto está AL AZAR (±3s 1:1: 0-1/5 — ver ledger CIERRE 02:00; los 8 serves timeados = 5 puntos únicos). Receta v2: no-op | envelope | full-video por player_visible_ratio (0.24 vs 0.85). | full-video (visible_ratio 0.85) | 44 | window 64-1964s (verdad: 63-1890) · 7/8 serves | — |
| 27869154 (cit01, fresco) video FRESCO corrido por la herramienta 1-comando: estructura sana, camino auto-elegido correcto (n=5). | no-op (kept 0.48) | 21 | span 1092-1998s · 1.39 pts/min | — |
| 28966688 (lomaspadel03, fresco) sesión con poco juego real (36% frames con solo 2 jugadores): la herramienta reportó honesto (1 punto) en vez de inventar. Sin verdad para separar recall de realidad. | full-video → juego escaso | 1 | in_play 43.6s/600s | — |
Verdad CIP01 v1: teamA 2-1 (VERDICTS-ONLY; gap 3 winners → re-do Osorio pendiente). Fases: ① estructura amateur (esto) → ② verdad n→5 (colas verdicts-only) → ③ producto (score = usuario + roster). Plan completo: cv/docs/PLAN_FABLE5_PARA_OPUS_amateur_structure_2026-07-01.md.
Hallazgos en vivo (esta sesión)
(reporte de guard-eval no encontrado — corré claude1_collapse_guard_window_eval.py)
Lever resuelto: +10pp serve-recall DELTA (guard A/B) @ precisión 100% (collapse-guard + clip al envelope). Nota (auditoría): el nivel absoluto 80→90% es GRUESO — las ventanas de saque están posicionadas en grilla; el DELTA y la precisión son lo robusto. Patch: cv/patches/claude1_collapse_guard_envelope.patch.
points[] (multi-punto con anclas+notas) Y export_truth.py los consume — al activarlo, la verdad ORO de cit01 saltó de 7→13 T1 (+6 puntos que estaban guardados sin usar). Detalle en el ledger.
Objetivos (por leverage)
Regla escrita + esta página. Toda la verdad por export _labels/*.jsonl del portal; labeling solo /review-queue.
HECHO: portal-only, prohíbe timestamps sintéticos, check anti-grilla (rechaza la verdad de 28s), source-integrity, barra "entendido". Auditado por agente evaluador.
HECHO: guard CONDICIONAL a coverage<30%. CIP01 (75min) +delta; Lomas01 (10min) no-op probado. Predictor n=2. Patch opt-in (default OFF).
Core: solo Game 1 (teamB) confiable; ventanas multi-punto rompen el resto → la cola 2-reviewers per-punto es necesaria. Go-live escribe en portal + asigna humanos → tu decisión (canal + reviewers).
Corrido: coverage 0.12 con court placeholder. Magnitud del confound DISPUTADA (mi +34pp vs evaluador +2.3pp). Gated por court correcto + verdad del portal. Recall sin verdad = bloqueado.
Video no en disco → re-fetch (download = tu OK). Court calibrado + verdad PadelAPI ✓ → el test más limpio que queda, a un download de distancia.
Veredicto: "¿probar con más partidos?"
4 lentes adversariales convergen: como pase amplio "¿entiende el partido?" → redundante (re-confirma muros). Vale SOLO como test de estructura amateur con eje pre-registrado + umbral + verdad del portal (= O4), y después de O1-O3. Disco: solo 4 unidades ready-now (1 PRO redundante + 3 amateur).
Docs
- Plan completo:
cv/docs/CLAUDE1_GOAL_v2_northstar_reframe_amateur_scaling_2026-06-30.md - Ledger:
cv/NORTH_STAR_LEDGER.md - Patch runtime:
cv/patches/claude1_collapse_guard_envelope.patch - Repros:
claude1_serve_recall_validate.py,claude1_collapse_guard_window_eval.py