\chapter{Anexos} \label{ch:anexos} \section{Datos fuente} Archivos: \texttt{informe/data/metricas.csv}, \texttt{capacidad.csv}, \texttt{memoria.csv}.\\ Markdown de campa\~na: \texttt{docs/plan\_pruebas/informes/2026-07-13-shared8g.md}. \section{Extracto ST-GW-01} \begin{lstlisting} checks 100% (13768) http_req_failed 0% p(95)=40.85ms avg=12.55ms reqs=6884 (~57/s) \end{lstlisting} \section{Extracto ST-BOT-01 \#2} \begin{lstlisting} checks 100% (75) p(95)=85.55ms max=98.31ms thresholds OK (p95<800) \end{lstlisting} \section{Unitarias} \begin{lstlisting} bots/bot_descarga/tests: 19 passed in 3.21s services/bot_descarga/tests: 7 passed in 1.45s count-api internal/pipeline: 3 passed (+8 features/clustering nuevos) Timing: go test -run Timing -v (3 PDFs en docs/plan_pruebas/data/) HTTP: bash docs/plan_pruebas/scripts/measure_count_latency.sh LLM: python docs/plan_pruebas/scripts/measure_llm_latency.py \end{lstlisting} \section{Scripts} \texttt{k6\_gateway\_health.js}, \texttt{k6\_bot\_heartbeats.js}, \texttt{k6\_bot\_events.js}, \texttt{k6\_count\_batches.js}, \texttt{k6\_smoke\_suite.js}, \texttt{st\_ext\_01\_arq\_bench.py}, \texttt{st\_ext\_02\_llm\_bench.py}, \texttt{llm\_mock\_server.py}, \texttt{measure\_count\_latency.*}, \texttt{estimate\_capacity.md}. \section{Extracto ST-EXT-01} \begin{lstlisting} mode=async queued=30/30 drained=True enqueue_wall_s=1.307 drain_s=22.544 total_s=23.851 throughput_docs_per_h ~ 4528 (mock; no SLO LLM) \end{lstlisting} \section{Documentos hermanos} \begin{itemize} \item Plan: \texttt{PlanPruebas\_IPSExtractor.pdf} \item Capacidad 100k: \texttt{Capacidad100k\_IPSExtractor.pdf} \end{itemize} \section{Reproducibilidad} \begin{enumerate} \item Registrar \texttt{hostnamectl}, \texttt{free -h}, \texttt{docker stats --no-stream}. \item Verificar \texttt{/health/live} y \texttt{/health}. \item Ejecutar k6 con \texttt{PROFILE=shared8g}. \item Adjuntar salida completa al directorio \texttt{informes/}. \end{enumerate}