Cluster/Replication:
- Drift-Banner: Button 'Resync erzwingen' baut die PG-Logical-Replication-
Subscription neu auf (via edgeguard-ctl cluster-setup-standby).
- Primary-Dispatch: Button auf dem Primary delegiert per mTLS an den
Standby (POST /agent/cluster/repair-replication); auf dem Standby lokal.
- Status-Proxy Primary->Standby via Aggregator.FanOut; Erfolg = Job-success
ODER drift_found wird false (--collect-Unit verschwindet nach Erfolg).
- Job als transiente systemd-Unit edgeguard-repair-replication.service
(sudoers exact-match + festes Script wie upgrade.sh).
- Banner-Text korrigiert (keine 'Outbox').
Frontend-Stabilität:
- Stale-Chunk-Auto-Reload: Lazy-Import-Fehler nach Deploy ('Failed to fetch
dynamically imported module') lösen einen einmaligen Reload aus (Loop-
Schutz via sessionStorage) statt einer Fehlerseite. Globaler
vite:preloadError-Listener + ErrorBoundary-Integration.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
27 lines
871 B
TypeScript
27 lines
871 B
TypeScript
import { StrictMode } from 'react'
|
|
import { createRoot } from 'react-dom/client'
|
|
import { ensureStorageSchema } from './lib/storageSchema'
|
|
import { installStaleChunkReload } from './lib/staleChunkReload'
|
|
|
|
// Vor allen anderen Imports die Storage prüfen — i18n und auth-store
|
|
// lesen beim Modul-Init aus Storage, also muss der Cleanup davor
|
|
// passieren wenn die Schema-Version nicht stimmt.
|
|
ensureStorageSchema()
|
|
|
|
// Stale-Chunk-Reload global registrieren: fängt Lazy-Import-Fehler nach
|
|
// einem Deploy ab und lädt einmalig neu, statt eine Fehlerseite zu zeigen.
|
|
installStaleChunkReload()
|
|
|
|
import './styles/enterprise.css'
|
|
import './i18n'
|
|
import App from './App.tsx'
|
|
import ErrorBoundary from './components/ErrorBoundary'
|
|
|
|
createRoot(document.getElementById('root')!).render(
|
|
<StrictMode>
|
|
<ErrorBoundary>
|
|
<App />
|
|
</ErrorBoundary>
|
|
</StrictMode>,
|
|
)
|