'mysql:host=localhost;dbname=move_detect;charset=utf8mb4', 'db_user' => 'CHANGEME', 'db_pass' => 'CHANGEME', 'snapshot_dir' => __DIR__ . '/storage/snapshots', // Every key App\Config reads is listed, defaults included. They all have `?? default` // fallbacks, so an omitted key is silently absent rather than an error — an operator // who never sees it here cannot know the knob exists. 'nonce_ttl' => 86400, 'timestamp_window' => 300, 'rate_limit_per_min' => 60, 'ingest_ip_rate_limit_per_min' => 300, // PIPA retention: worker snapshots are purged after this many days (0 disables). 'snapshot_retention_days' => 7, 'event_retention_days' => 0, // 0 = 이벤트 기록 영구 보존 (안전사고 기록; 스냅샷만 만료) // --- 통보 (tools/dispatch_alerts.php) -------------------------------------------- // 대시보드의 외부 접속 주소. 알림 메시지의 사건 링크에 쓰인다. 비어 있으면 디스패처가 // 실행을 거부한다 — 열리지 않는 링크가 담긴 알림을 보내는 것보다 낫다. 'public_base_url' => '', // 예: 'https://example.com/move_detect' // 위급/높음 이벤트가 이 시간(초) 동안 미확인이면 unacked_escalation 이벤트를 발행한다. 'escalate_after_seconds' => 300, // --- 보존 / 용량 ------------------------------------------------------------------ // 하트비트 시계열 보존일. 장치당 하루 약 2,880행이 쌓인다 (tools/prune.php 가 정리). 'metric_retention_days' => 30, // 스냅샷 볼륨 여유 공간 하한(MB). 밑돌면 device_fault 로 알린다. 0 = 검사 안 함. 'storage_min_free_mb' => 200, ];