🟢 Caso 12 — Punto unico de conocimiento y riesgo operacional#
Implementacion operativa del caso 12 con paridad al stack PHP. El "runbook" esta codificado en el lenguaje: el modo distribuido usa optional chaining (
a?.b?.c ?? default) para evitar el crash que sufre el modo legacy con acceso ciego.
⬅️ Caso 12 · ⚖️ Comparativa de los 7 stacks · 🟢 Perfil de Node.js · 🧬 Todos los perfiles
Que resuelve#
Compara dos formas de manejar un incidente:
incident-legacy: depende de la persona clave. Anteowner_absent/tribal_script, el codigo accede a una estructura anidada sin validar y rompe conTypeError: Cannot read properties of undefined.incident-distributed: usa optional chaining + nullish coalescing. El mismo escenario degrada con HTTP 409 si la madurez es muy baja, pero nunca explota.
Escenarios: owner_available, owner_absent, night_shift, recent_change, tribal_script.
Domains: billing, deployments, integrations, reporting. Activities: runbook, pairing, drill.
Primitiva Node-especifica#
// Legacy: acceso ciego — equivalente a memoria tribal sin validacion
const _ = opaque.config.system[2].is_active; // TypeError
// Distributed: el runbook codificado en el lenguaje
const _ = opaque?.config?.system?.[2]?.is_active ?? false; // safeOptional chaining no es un patch — es la encarnacion en codigo del runbook "si no esta documentado, asume el default seguro y reporta". Cuando se combina con share-knowledge (sumar runbook/pairing/drill por dominio), mttr_min baja y bus_factor_min sube de forma medible.
Arranque#
docker compose -f compose.yml up -d --buildPuerto local: 8212 (modo aislado, ver opciones abajo).
Como consumir (dos opciones)#
Hub Node.js (recomendado, 8300 en compose.nodejs.yml): este caso queda servido en http://localhost:8300/12/... junto a los otros 11 casos.
Modo aislado (8212 en este compose.yml): levanta solo este caso, util cuando la medicion necesita procesar limpio (sin otros casos compartiendo runtime).
Endpoints#
curl http://localhost:8300/12/
curl http://localhost:8300/12/health
curl "http://localhost:8300/12/incident-legacy?scenario=owner_absent&domain=deployments"
curl "http://localhost:8300/12/incident-distributed?scenario=owner_absent&domain=deployments"
curl "http://localhost:8300/12/share-knowledge?domain=deployments&activity=runbook"
curl "http://localhost:8300/12/incidents?limit=10"
curl http://localhost:8300/12/diagnostics/summary
curl http://localhost:8300/12/metrics
curl http://localhost:8300/12/metrics-prometheus
curl http://localhost:8300/12/reset-labQue observar#
- Bajo
owner_absent/tribal_script, legacy devuelve 500 con stacktrace; distributed devuelve 200 o 409 segun madurez; - tras ejecutar
share-knowledgerepetidamente sobre un dominio,coverage[domain]sube ymttr_minbaja; bus_factor_minse calcula comomin(backup_people + 1)por dominio — refleja el peor caso operativo.