feat(h5-fix): fixture v3 (Ruta B) + CP-01a-95 cumplido (eval-95) + ADR-0016 accepted#32
Merged
Conversation
…OSRM
Ruta B del ADR-0016. Nuevo --modo {basesxincidentes, cartesiano} y
--n-objetivo. El modo cartesiano genera una grilla 8×8 de anclas sobre el
bbox (-71.45,-30.10,-71.15,-29.85) + jitter amplio 0.01° (~1.1 km) en
ambos extremos: cubre todo el bbox con rutas largas inter-comuna, frente
al modo basesxincidentes (default, v2) anclado al clúster urbano. El
fixture marca version 3 y modo.
H5-fix-2/3. Nuevo fixture osrm_oracle_v3.json (300 pares cartesianos
contra OSRM 5.27.1 Docker); v2 se mantiene intacto. bootstrap_cp01a.py y
analyze_outliers.py ahora capturan NoRutaDisponibleError: los pares que
OSRM rutea (snapeando anclas oceánicas a la costa) pero el grafo propio
no conecta (componentes desconectados) se cuentan como miss/outlier de
conectividad, no se descartan (evita survivorship bias). Render de ambos
parametrizado por N. Re-corridos sobre v3: bootstrap-cp01a-v3.md +
outliers-cp01a-v3.{md,csv} (18 clasificados + 13 irruteables / 300).
test_cp01a_95_fixture_v3 (slow, fuera del CI rápido): sobre el fixture v3 (N≥300), assert IC95_inferior(fracción dentro de ±30%) ≥ 0.75 y P(fracción ≥ 0.75) ≥ 0.95 vía bootstrap no paramétrico (B=1000, semilla 2026). Criterio sobre fracción (independiente de N). Irruteables por el grafo propio contados como miss. Usa el A* operativo (mide distance, distinto de CP-01c' que mide duration).
Resultado eval-95 sobre fixture v3 (A* operativo, B=1000, semilla 2026): fracción dentro de ±30% = 0.897, IC95 inferior 0.860 ≥ 0.75, P(fracción ≥ 0.75) = 100% ≥ 0.95. El margen estrecho de v2 (78/100) era artefacto del sesgo a rutas urbanas cortas (ADR-0011 §V/L#3), no del A*. - ADR-0016 → accepted, §Resultado + tabla de tareas Ruta A+B completas. - ADR-0011 §V/L#5 → RESUELTO. - trazabilidad.md: RF-03 + sección IT-01 con el cierre CP-01a-95. - CHANGELOG: entradas H5-fix + H5-eval-95.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumen
Cierra la Ruta B del ADR-0016 (fixture v3, N≥300) y ejecuta la verificación final H5-eval-95. Resultado: CP-01a-95 ✅ CUMPLIDO con holgura, lo que promueve ADR-0016 a
acceptedy resuelve ADR-0011 §V/L#5.El hallazgo central: el margen estrecho de v2 (78/100, IC95 inferior 69) era un artefacto del sesgo de muestra (jitter pequeño → rutas urbanas cortas donde el error de snap ~150 m domina el error relativo), no una limitación del A*. Con un fixture cartesiano que cubre todo el bbox (rutas largas inter-comuna), el mismo snap se diluye y la fidelidad de
distancesube a 89.7 %.Cambios
tools/generate_osrm_fixture.py(H5-fix-1) — nuevos flags--modo {basesxincidentes, cartesiano}y--n-objetivo. Modocartesiano: grilla 8×8 de anclas sobre el bbox + jitter amplio0.01°(~1.1 km) en ambos extremos. El fixture marcaversion: "3"ymodo.core-python/tests/fixtures/osrm_oracle_v3.json(H5-fix-2) — nuevo fixture, 300 pares contra OSRM 5.27.1 Docker. El v2 (osrm_oracle.json) queda intacto (línea histórica del experimento).tools/bootstrap_cp01a.py+tools/analyze_outliers.py(H5-fix-3) — robustos aNoRutaDisponibleError: los pares que OSRM rutea (snapeando anclas oceánicas a la costa) pero el grafo propio no conecta (componentes desconectados) se cuentan como miss / outlier de conectividad, no se descartan (evita survivorship bias). Render parametrizado por N.docs/quality/bootstrap-cp01a-v3.md+outliers-cp01a-v3.{md,csv}— evidencia re-corrida sobre v3.test_routing_vs_osrm.py::test_cp01a_95_fixture_v3— testslowque automatiza el criterio eval-95.accepted+ §Resultado; ADR-0011 §V/L#5RESUELTO; trazabilidad RF-03 + sección IT-01; CHANGELOG.Métricas
compare)domain/ni el path operativo{red:0, sin_ruta:0, distancia_corta:2}Cumplimiento — CP-01a-95 (eval-95)
Sobre el fixture v3 (A* operativo, snap-to-node; bootstrap B=1000, semilla 2026):
13/300 pares irruteables por el grafo propio (anclas oceánicas, componentes desconectados) contados como miss — aun así pasa.
DoD
acceptedcon evidencia.domain/ni el path operativo (solo tools/, tests/, fixture); RT-02 no se ve afectado.