Sky.Live production-resilience — hidden silent-failure class (2026-08-01)

Status: Tier 1 + Tier 2 SHIPPED + verified live (2026-08-01). Branch feat/skylive-resilience (pushed). All milestone gates green (runtime go test ./rt/, example-sweep 29/0, verify-cli 13/0, verify-all-web PASS). darraghstudio redeployed on the resilience runtime; the A1 fix is verified LIVE — a drifted-handler POST returns 200 + X-Sky-Status: desync (soft resync) instead of the bare stranding 404 "handler not found". Tier 3 (L5-L10, seq-gap) remains tracked below. Not yet merged to main / tagged (awaiting user decision).

Tracks a class of Sky.Live bugs that pass sky check + go build + tests, look healthy in prod, then strand or silently degrade real users in ways that are very hard to debug.

The meta-problem

Sky.Live prefers "keep limping" over "self-heal" or "fail loud." Every instance below is invisible to the compiler and the test suite, and only surfaces as a confusing production symptom.

Confirmed instances (production evidence: a Sky.Live shop on Postgres)

1. Desync → strand (the "reconnect after 20-30m idle, refresh fixes it" bug)

2. Store connect fails → silent memory fallback

3. Memoised-CAF effect freeze

Fundamental fix direction (to be finalized from the adversarial grill)

  1. Universal client resync invariant. The server ALWAYS marks its desync responses; a session-valid desync (handler-not-found, patch-target-missing) → SOFT resync (reopen SSE → re-render → DOM + handler IDs refresh), no reload, no lost session; session-gone → hard reload. Possibly also: on a handler miss, the server re-renders and re-dispatches (or falls back to the existing BuildAdtFromWire direct-send path) so the click isn't even lost.
  2. Explicit store = fail-loud, never silent-degrade. Retry-with-backoff at boot (ride out the DB-not-ready race), then FATAL in production / loud WARN + fallback in dev. Explicit opt-in for deliberate memory-in-prod.
  3. Self-healing DB handle. A boot-race connect failure must self-heal on the next query rather than freezing to Err for the process lifetime.
  4. Health that doesn't lie + any other landmines the completeness critic surfaces (readyz store probe, TTL sliding, model round-trip fidelity, …).

Synthesized fix plan (from three adversarial grills, 2026-08-01)

Meta-fix (highest leverage, both agents converged): health that doesn't lie. RegisterReadinessProbe (observability.go:83) has zero production callers, so /_sky/readyz returns 200 even when the store fell back to memory. Wiring it converts the ENTIRE silent class (store fallback, degraded broker, memory console) from invisible → orchestrator-visible.

✅ Tier 1 — DONE (feat/skylive-resilience: ab13572a, ab9edabd, 7882f4d6)

All three shipped with red-on-bug regressions; full runtime go test ./rt/ green. Remaining before merge: milestone gates (cargo test + xtask + example sweep + verify-all-web) + darraghstudio redeploy as the e2e check.

Tier 1 — core fundamental fixes (confirmed prod bug + meta-landmine)

✅ Tier 2 — DONE (feat/skylive-resilience: 9da61633)

L2/L3/L4 shipped with the L2 regression; full runtime go test ./rt/ green.

Tier 2 — session-lifecycle correctness (ship with Tier 1)

✅ Tier 3 — 5 of 7 DONE (feat/skylive-resilience-tier3)

Shipped with red-on-bug regressions: L5 persistent+sliding CSRF cookie · L6 multi-replica in-process-broker heads-up · L7 typed route params coerced (no reflect panic) · L8 dispatch panic → structured Error+errId+user notification · L9 sub-app no longer inherits the host's durable store.

Update (2026-08-01, post-grill): all four deep items were adversarially grilled (3 fresh-context agents). Outcomes:

✅ BOTH remaining items now SHIPPED (feat/skylive-9-drop-resync → v0.19.7), test-first + grilled + gated:

Tier 3 is now COMPLETE: L5-L10 + #9 all resolved (L10b correctly rejected as unsound). The Sky.Live silent-degrade/strand class is closed.

Superseded "remaining (2)" text:

Superseded original text (2 deep items):

Tier 3 — original catalogue (for reference)

False alarms (verified NOT live)

Verification bar

Each fix ships with a regression that is red-on-bug (reproduces the prod symptom before the fix), plus the full milestone gates. The darraghstudio app is the real-world e2e check. All fixes are pure-runtime (no compiler/stdlib change) → apps get them by rebuilding with the new sky.