Skip to content

F4.4: telemetría de faults persistente + safe-mode#82

Merged
guillo93 merged 1 commit into
mainfrom
f4.4-telemetria-faults
Jun 3, 2026
Merged

F4.4: telemetría de faults persistente + safe-mode#82
guillo93 merged 1 commit into
mainfrom
f4.4-telemetria-faults

Conversation

@guillo93

@guillo93 guillo93 commented Jun 3, 2026

Copy link
Copy Markdown
Owner

Resumen

Libro de cuentas post-mortem que sobrevive a resets: contadores de fault por tarea, total acumulado, conteo de arranques y último FaultReport. Tras N faults el sistema entra en safe-mode y el supervisor deja de respawnear, degradándose de forma controlada en lugar de entrar en bucle de crash/respawn.

  • rugus-core (LOG-FREE): módulo telemetry con FaultTelemetry sellado por magic. boot() distingue arranque en frío (RAM con basura → reinicia) de reset en caliente (magic válido → preserva historial, incrementa boot_count). record() contabiliza faults; safe_mode() dispara por umbral total (16) o por tarea reincidente (5). 6 tests unitarios.
  • rugus-kernel: static FAULT_TELEMETRY en sección .uninit (cortex-m-rt no la pone a cero → sobrevive al reset). telemetry_init() valida el magic; fault_hook registra ANTES de matar la tarea. API pública: boot_count/total_faults/faults_for/safe_mode/last_fault.
  • ejemplos F407/F769: vuelcan estado al arrancar (frío/caliente + post-mortem); el supervisor consulta safe_mode() y detiene el respawn de bad_app.

Validación en placa (RTT)

Limitación conocida

F769 entra en un bucle de reset IWDG en safe-mode profundo (deriva de cadencia del IWDG windowed de F4.3). A diagnosticar con reset-cause en F4.6.

Test plan

  • cargo test -p rugus-core (6 telemetry) + host-tests (29)
  • clippy ×2 targets, fmt, cargo doc --workspace
  • Flash + RTT F407 (safe-mode estable) y F769 (persistencia warm-boot)

🤖 Generated with Claude Code

Libro de cuentas post-mortem que sobrevive a resets: contadores por
tarea, total acumulado, conteo de arranques y último FaultReport.

- rugus-core: módulo `telemetry` LOG-FREE con `FaultTelemetry`
  (magic-sealed). `boot()` distingue arranque en frío (RAM con basura,
  reinicia) de reset en caliente (magic válido, preserva historial e
  incrementa boot_count). `record()` contabiliza cada fault; `safe_mode()`
  dispara tras umbral total (16) o por-tarea reincidente (5). 6 tests.
- rugus-kernel: static `FAULT_TELEMETRY` en sección `.uninit` (no se
  pone a cero al arrancar → sobrevive al reset). `telemetry_init()` valida
  el magic; `fault_hook` registra en la telemetría ANTES de matar la tarea
  (sobrevive aunque el siguiente paso resetee). API: boot_count/
  total_faults/faults_for/safe_mode/last_fault.
- ejemplos F407/F769: vuelcan estado de telemetría al arrancar (frío vs
  caliente + post-mortem del último fault); el supervisor consulta
  safe_mode() y DEJA de respawnear bad_app para degradarse de forma
  controlada en lugar de entrar en bucle de crash/respawn.

Validado: F407 cold boot → safe-mode tras 5 faults, kernel sigue vivo
sin reset. F769 demuestra persistencia: tras reset IWDG el safe-mode
SOBREVIVE (warm boot, `.uninit` preservado). LIMITACIÓN: F769 entra en
bucle de reset IWDG en safe-mode profundo (deriva de cadencia del IWDG
windowed); a diagnosticar con reset-cause en F4.6.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@guillo93 guillo93 merged commit 60f52cf into main Jun 3, 2026
9 checks passed
@guillo93 guillo93 deleted the f4.4-telemetria-faults branch June 3, 2026 09:43
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