docs(index): ScadaBridge#34 FIXED — PID-1 crash wedge root-caused (SIGABRT ignored for PID 1); handler + init:true, live-verified

Claude-Session: https://claude.ai/code/session_014WNM4vjoVksyyBraTXSZE1
This commit is contained in:
Joseph Doherty
2026-08-08 05:24:20 -04:00
parent 46523db2bd
commit 2f96709341
2 changed files with 11 additions and 6 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+10 -5
View File
@@ -271,11 +271,16 @@ endpoint failover between them is safe.
- **Rewrap fan-out collapsed:** on ScadaBridge, `secret rewrap-all` is now ONE run against
central's shared SQL store + both nodes of every site pair (runbook updated; the "both central
nodes" caveat deleted). The denial-warning alerting note (sum per-window deltas) stands.
- **Residual carried out:** [ScadaBridge#34](https://gitea.dohertylan.com/dohertj2/ScadaBridge/issues/34)
— a pre-Serilog unhandled boot exception **wedges the container** (100% CPU spin, stays
`running`, restart policy never fires). Pre-existing (old SQLite path too); reproduced twice
during the gate. Not a secrets defect, but every pre-host fail-closed refusal lands in this
window.
- **Residual carried out — now FIXED+CLOSED (2026-08-08):** [ScadaBridge#34](https://gitea.dohertylan.com/dohertj2/ScadaBridge/issues/34)
— a pre-Serilog unhandled boot exception **wedged the container** (100% CPU spin, stays
`running`, restart policy never fires). Root cause: dotnet as container PID 1 — Linux
ignores the SIGABRT the runtime's crash path raises against PID 1, so `abort()` could
never kill the process. Fixed at `ScadaBridge main @ e9c412e5`: an
`AppDomain.UnhandledException` handler exits `134` via the `exit()` syscall (any thread,
registered before anything can throw; inert under test hosts) plus `init: true` on all 8
compose nodes for the paths that bypass the managed event (`FailFast`, runtime aborts).
Live-verified: the wedge repro now exits 134 with `RestartCount` climbing, trace intact,
with and without init. Every pre-host fail-closed refusal now actually fail-fasts.
ScadaBridge pins `0.5.1`; the other three apps stay on the `0.2.3` libraries. Replication
remains default-OFF in the product — production enablement is an operator action and no longer