Skip to content

feat(AG-60): enriquecer incidencias y correlacionar fallos sin mutaciones - #197

Open
Rafa-Innerchispa wants to merge 9 commits into
mainfrom
local-agent/ag60-inventory-causal-diagnostics-20261019
Open

Rafa-Innerchispa wants to merge 9 commits into
mainfrom
local-agent/ag60-inventory-causal-diagnostics-20261019

Conversation

@Rafa-Innerchispa

@Rafa-Innerchispa Rafa-Innerchispa commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

AG-60: diagnóstico y reconciliación de equipos sin mutaciones

Tarea existente: ops_0784065f1fb1 (sustituta explícita de parte del frente AG-60; no crear otra). HEAD: 404b631e88b5ee4f8d1bb9469f61b368be57af00. Desarrollo local AMD.

Código implementado

  • Enriquecimiento de incidentes con nombre humano, tipo, fabricante/modelo, ubicación y dependencias conocidas; marca lo desconocido, distingue sondas ICMP/TCP de causa física real y evita probabilidades inventadas.
  • bellini_guardian_status()/dashboard incorporan diagnostics; cloud GWN se consulta solo cuando se solicita el dashboard.
  • ag60_source_reconciliation.py: compara GWN Cloud con Guardian por MAC documentada, sin confundir igualdad de IP con identidad verificada; informa AP de cloud fuera de los objetivos de monitorización.
  • mongo_sample_evidence: lee exclusivamente MongoDB existente pcdoctor_swarm.bellini_telemetry, exige dos documentos con _id y timestamps distintos y recientes; si faltan o falla el acceso, informa insuficiencia.
  • Nuevos probes opt-in, solo lectura: platform/tests/probe_ag60_live_mongo_readonly.py y platform/tests/probe_ag60_shadow_readonly.py. No son pruebas automáticas de CI ni ejecutan mutaciones de red.

Evidencia verificada en AMD, 20 oct 2026

  • 42 pruebas de regresión local: PASS.
  • Probe directo Mongo: 1 passed, dos muestras con IDs y timestamps reales.
  • Canary en sombra Mongo+GWN Cloud+dashboard: 1 passed in 10.33s. Datos reales: 9 dispositivos Cloud comparados, 5 AP sin objetivo Guardian, 2 coincidencias solo por IP no verificadas, 8 sin respuesta a sondeos Guardian. Dos muestras bellini_telemetry recientes: 6ad6fa49e47a7c287a4c60c1 a 2026-10-20T05:20:36.454736Z; 6ad6fa1ae47a7c287a4c60bf a 2026-10-20T05:19:49.085882Z.
  • GitHub Actions en este HEAD: AG-60 Protocol Guardian Tests SUCCESS y InnerOS P0 Runtime Safety Gates SUCCESS.

NO ES ENTREGA COMPLETA

  • main sigue protected=false, ruleset #24944199 enforcement=disabled (issue [P0] Reactivar protección de main para integrar AG-60 (PR #197) #204). CODEOWNERS solo @Rafa-Innerchispa y no hay revisión independiente registrada.
  • No fusionar ignorando protección. No consta código nuevo activo en MCP/Temporal, recargas autorizadas, timers AG-60 verificados en systemd ni canary real orden→ejecución→evidencia→cierre.
  • El canary en sombra demuestra funcionamiento de la rama con datos reales, pero NO equivale a un despliegue productivo.
  • Prohibidos reinicios/cambios de red y modelos/agentes externos de pago sin autorización.

Próximo paso: administrador repara ruleset #24944199, obtiene revisión independiente y realiza merge gobernado; después despliegue controlado y comprobación de versión de runtime, timers y canary real.

@Rafa-Innerchispa
Rafa-Innerchispa marked this pull request as ready for review October 19, 2026 21:08

Copy link
Copy Markdown
Owner Author

Evidencia de continuidad | AG-60, 19 oct 2026, 21:20 Ecuador

HEAD publicado actual: cca7b6ab417401419ae0ef59a609b2fc02251f0f. AG-60 Protocol Guardian Tests y InnerOS P0 Runtime Safety Gates: SUCCESS para ese SHA. El PR sigue sin merge.

Trabajo posterior probado solo localmente: commit e53ac7fe (código para buscar 2 muestras recientes distintas en bellini_telemetry, exponer IDs/timestamps, y marcar INSUFFICIENT/UNAVAILABLE cuando no cumple la evidencia). La suite local relacionada informó 42 passed; no atribuir esos 42 tests ni este commit al HEAD remoto. El push está pendiente debido a conflicto de lock con la tarea nebius-physical-ai-runtime-20261019, que no se debe desplazar ni evadir.

Canary/runtime: la respuesta MCP bellini_guardian_status de 2026-10-20T02:19:14Z carece de diagnostics y mongo_sample_evidence. Esta es evidencia de que la respuesta activa no expone los cambios del PR. No declarar producción ni ENTREGA COMPLETA.

Gobernanza: main registra protected=false; ruleset #24944199 está deshabilitado, issue canónica #204. Reconciliar rama con el main actual, obtener revisión y restablecer protecciones efectivas antes de merge y despliegue gobernado. No reinicios, cambios de red ni proveedores de pago.

Copy link
Copy Markdown
Owner Author

Evidencia nueva | 20 oct 2026, 00:15 Ecuador | MongoDB real, solo lectura

Ejecuté en AMD pytest -q -s platform/tests/probe_ag60_live_mongo_readonly.py contra MongoDB local existente (pcdoctor_swarm), sin insertar/actualizar registros. Resultado: 1 passed, VERIFIED_TWO_RECENT.

  • Último estado bellini_guardian_state.timestamp: 2026-10-20T05:14:21.976871+00:00.
  • Documento real 1, colección bellini_telemetry: _id=6ad6f8d2e47a7c287a4c60b1, timestamp 2026-10-20T05:14:21.976871+00:00.
  • Documento real 2, colección bellini_telemetry: _id=6ad6f8a3e47a7c287a4c60af, timestamp 2026-10-20T05:13:35.386997+00:00.

Requisito >=2 muestras recientes independientes con IDs/horas: ACREDITADO para este instante. Coinciden la colección escrita en capture_single_sweep() y la leída por _read_mongo_sample_evidence().

Añadí en el HEAD de PR un probe opt-in platform/tests/probe_ag60_live_mongo_readonly.py para repetir la auditoría sin autoejecutarlo en CI, commit e6da293c. Las 42 pruebas locales de regresión AG-60 también pasaron.

NO certificados aún: protección efectiva de main (issue #204), merge, hash del código MCP/Temporal actualmente cargado, estado activo de ambos timers systemd AG-60, recargas autorizadas y canary orden→ejecución→evidencia→cierre. systemctl --user list-timers --all fue denegado por command_not_allowlisted; no se eludió el control. Los timers declarados en git son inneros-ag60-communications.timer (90s) e inneros-ag60-lan-discovery.timer (15min), ambos para home_pcdoctor_lab, pero existencia en git no prueba activación. No hubo cambios de red/servicios ni gastos externos.

Copy link
Copy Markdown
Owner Author

AG-60 | canary en sombra real de solo lectura | 20 oct 2026, 00:21 Ecuador

Se ejecutó explícitamente en AMD, sin desplegar, pytest -q -s platform/tests/probe_ag60_shadow_readonly.py sobre los archivos de la rama. El archivo se añadió a este mismo PR con commit 404b631e88b5ee4f8d1bb9469f61b368be57af00; no se autoselecciona en CI. El canary prohíbe en código cualquier get_guardian que pudiera activar sweep, probe_icmp, probe_tcp y probe_tailscale; envuelve las colecciones Mongo con interfaces solo find/find_one.

Resultado: 1 passed in 10.33s. Muestras reales de pcdoctor_swarm.bellini_telemetry por _id y hora: 6ad6fa49e47a7c287a4c60c1 a 2026-10-20T05:20:36.454736Z; 6ad6fa1ae47a7c287a4c60bf a 2026-10-20T05:19:49.085882Z. VERIFIED_TWO_RECENT, diagnosis_status=CURRENT, cloud_snapshot_status=CURRENT, 9 dispositivos GWN Cloud cotejados, 5 AP cloud sin objetivo Guardian, 2 coincidencias solo IP no verificadas por MAC y 8 objetivos sin respuesta en la muestra. Sin evidencia causal física ni cambios de red. Las 42 pruebas locales de regresión también aprobaron.

Alcance preciso del PASS: conecta datos Mongo reales + inventario GWN Cloud vivo + lógica de la rama + respuesta dashboard, de forma read-only. NO equivale al canary productivo orden→ejecución→evidencia→cierre, ni prueba código publicado en MCP/Temporal.

Sigue bloqueado: gobernanza de main (ruleset #24944199 disabled; issue #204), review, fusión, runtime SHA, recargas y estado systemd timers. Los dos checks CI del último commit 404b631e deben validarse antes de merge.

Copy link
Copy Markdown
Owner Author

Corrección autónoma de seguridad del diagnóstico | 20 oct 2026

Se corrigió y publicó sobre el MISMO PR #197 el commit 8b28401c062865c6fa020b6980370fd5bfa07114 (tarea canónica ops_0784065f1fb1), sin agentes externos.

Defectos reparados:

  1. ag60_source_reconciliation.reconcile ya no acepta como saludable una llamada GWN cuyo envoltorio declara éxito pero devices.all.ok=false, falta items o devuelve inventario vacío. Reporta UNAVAILABLE en lugar de 0 falsos dispositivos.
  2. Datos lastSeen obsoletos no se presentan como AP recién desaparecidos: CLOUD_STALE / PARTIAL_CLOUD_STALE y CLOUD_SAMPLE_STALE se distinguen del estado actual.
  3. Se separa correctamente la familia de switch Grandstream GWN78xx, routers GWN7052F y AP GWN76xx; si la fuente expone la lista de access_points, se usa preferentemente ese índice por MAC. No clasificar routers o switches como AP por prefijo GWN7.

Evidencia: suite local relevante 47 passed (0.38s). Reejecuté canary en sombra con lecturas reales de MongoDB/GWN Cloud 1 passed (9.90s), CURRENT, 9 dispositivos GWN cotejados, 5 AP cloud sin objetivo Guardian, 2 coincidencias solo IP/no verificadas y 2 documentos Mongo distintos: _id=6ad6fcd5e47a7c287a4c60dd a 2026-10-20T05:31:29.320269Z; _id=6ad6fca7e47a7c287a4c60db a 2026-10-20T05:30:42.912764Z. Sin mutaciones productivas. Los nuevos CI GitHub deben confirmarse antes de revisión/fusión.

No es despliegue: main aún sin protección efectiva (issue #204), PR sin revisión independiente, código nuevo no acreditado como activo MCP/Temporal, timers systemd sin estado verificado y sin canary productivo orden→ejecución→evidencia→cierre.

Copy link
Copy Markdown
Owner Author

Dependencia productiva descubierta el 21 oct 2026

Antes de fusionar AG-60 #197, integrar o reconciliar el PR crítico #210 (5 defectos reales de aprobación/cancelación WhatsApp y aislamiento Mongo de Temporal). El PR #210 parte de main actual, tiene 66+56 pruebas enfocadas aprobadas y dos CI SUCCESS. El PR #197 conserva HEAD 8b28401c y 47 pruebas AG-60, canary en sombra read-only PASS con muestra 21-oct 16:24Z y 2 documentos Mongo independientes; no está fusionado ni desplegado. No mezclar pruebas de ramas antiguas con certeza de runtime. Main desprotegida (#204) y Dev Swarm sin ticks recientes acreditados (#193).

Copy link
Copy Markdown
Owner Author

Diagnóstico Ruijie/Reyee P0: credenciales NO perdidas, APPID rechazado por proveedor (22-oct 2026, 22:40 GYT)

Se auditó en AMD sin revelar secretos y sin escribir en equipos/infraestructura. Las 4 referencias canónicas de owner_vault:ruijie_reyee/{app_id,secret_key,account,password} están presentes, desencriptan y el runner aislado puede cargarlas. También existen bajo ruijie_cloud y reyee_cloud y su contenido se verificó idéntico a la categoría canónica (comparación en memoria sin valores en salida). ENV efectiva del runner local y Vault coinciden para los cuatro datos; aliases de SECRET y SECRET_KEY no tienen conflicto. La bóveda persiste en colección Mongo ralfia_owner_vault, key local protegido chmod 0600. Account/password guardados el 01-oct; app_id/secret_key actualizados el 13-oct.

Prueba real, única y solo login, desde runner AMD: HTTPS cloud-la.ruijienetworks.com, HTTP 200 pero respuesta Ruijie code=1 (Appid is invalid según documentación de Ruijie). No se imprimieron usuario, appid, contraseña, token ni API secret. group_id de Bellini resuelve 9927074. device_fabric_inventory(live=true) en MCP Small también confirma ruijie_live={ok:false,error:login_failed,group_id:9927074}. El entorno activo de MCP systemd AÚN no fue comparado con el runner aislado; no declarar ROOT CAUSE de promoción antes de probarlo.

NO pedir al dueño volver a introducir las cuatro credenciales. Verificar App ID emitido, región/host de Ruijie, permisos y vigencia con el registro original o portal del proveedor. Reparar solo el dato o asociación inválida con la región si se acredita y conservar referencias en una única fuente de verdad, evitando copias ENV obsoletas. Exponer a Nebius/NVIDIA/AG-60 mediante capacidad device_fabric de solo lectura autorizada (no por distribución de plaintext). Canary de aceptación: login Ruijie code=0, tenant/grupo 9927074, switch Bellini ES228GS-LP + puertos reales, llamada MCP Small desde consumidor Nebius con trazabilidad. Sin mutaciones de switches/red.

Handoff de estos hallazgos a mensajes existentes de Antigravity/AG-25; evidencia MCP 6adad772356ee5ba07bfc51e. No se creó una tarea paralela de reparación.

Copy link
Copy Markdown
Owner Author

23-oct-2026 | Reparación local directa de credenciales (sin Antigravity)

El owner solicitó continuar localmente. PR nuevo #218 (commit 6364015b2ac1902c56f647c4db0ccd57a2ef89fb) endurece el Owner Vault canónico: no regenera clave maestra si existen registros cifrados o Mongo está inaccesible; no sobrescribe secreto existente con clave equivocada; retorna error de descifrado explícito. Ruijie da prioridad al Vault sobre ENV antiguas, expone metadata de conflictos sin secretos, distingue provider code 1 (App ID inválido), invalida caché cuando cambian Secret/password. 11 unit branch PASS + 9 owner vault bridge PASS + 6 Device Fabric PASS + 1 probe metadata PASS.

Se auditó Owner Vault read-only en AMD: 58 registros, Ruijie 12 entradas recuperables en 3 categorías duplicadas, GWN Cloud 2, no categorías directas Hikvision/Dahua/ZKTeco/UniFi/Intelbras. No concluir que credenciales de equipos no existen en otros almacenes. La autenticación productiva Ruijie sigue FALLANDO por APPID, no hay código fusionado ni despliegue; no inventar PASS. Registrar decisiones de Ruijie y evidencias de portal del proveedor, después canary de group 9927074 desde AG-60/Nebius. Evidencia MCP 6adb169f356ee5ba07bfc53f. La protección de main continúa deshabilitada issue #204. No se usaron créditos Antigravity/Cursor.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant