{"commit":{"body":[{"label":"Why","text":"군중 ROI 위험도를 Web 설정으로 판정하고 정확한 Frame의 Event 미디어를 전달해야 한다."},{"label":"What","text":"Crowd 필수값 fail-soft, 상태 집계와 DANGER episode, 6종 cooldown, 압축 cache와 heatmap을 연결했다."},{"label":"Impact","text":"test analytics/sidecar와 Crowd 출력만 확장한다. 기존 provider 계약과 전송/회수 보호를 유지한다."},{"label":"Verify","text":"Python3.12 표적검증, 복합2채널30초, Crowd2건 READY/SENT 및 clip 전체decode/PTS, HTML offline 검증 PASS. Web 수용과 현장 배포는 보류."},{"label":"Rollback","text":"승인 시 보존한 이전 image와 Compose/env로 복구한다. 자동 rollback은 하지 않았고 기존 원장/미디어는 보존한다."}],"title":"feat(crowd): 군중 위험 상태와 Event heatmap 및 시나리오 cooldown 연동"},"created_at":"2026-09-28T05:39:09+00:00","expires_at":"2026-10-05T05:39:09+00:00","job_id":"20260928-contextra-crowd-events-r01","paths":[{"change":"modified","content_sha256":"b17a7927a4459259491411254d97a54092ca4274056dfd37c098df73ba4c8849","path":"app/artifact_media.py"},{"change":"modified","content_sha256":"76fc8e471f952c4df4cc2ec4136dc21cb80e65fe943a0c9779f4a2154da26632","path":"app/contracts/visualization.py"},{"change":"added","content_sha256":"003af1f4bcbc30595acd7a5b669d7168a548dd7791ebaa6b62294d400c0ce127","path":"app/crowd_artifact_overlay.py"},{"change":"modified","content_sha256":"0d5bbd50b4e86f06c2fe98b6a6a79ab1d6a644eed280fe29795e93b078e138bd","path":"app/crowd_config.py"},{"change":"added","content_sha256":"590fd3dca5c0e75e446ae035a790c4876421cb8286178209d6de7414b858e50e","path":"app/crowd_event.py"},{"change":"modified","content_sha256":"56168d792e947169c6c799f57ede33bf953212dbf976bf414b4f92227206ad01","path":"app/crowd_result.py"},{"change":"modified","content_sha256":"b187f2506e0ccf985ce9363746868602892cf528a6219aadaa39f3f7196a9867","path":"app/crowd_scenario.py"},{"change":"modified","content_sha256":"426a6a16a9fe0cd63b46ce87d56875d2ec958fb5fe695b56fad74a13c4657439","path":"app/det_result_path.py"},{"change":"modified","content_sha256":"fc2f0ea720a44d3f4e0865c82e8a7f562172b0a30c23b21410cf6b96a99cc0ab","path":"app/event_artifact_contract.py"},{"change":"modified","content_sha256":"4f300ffa1f2742be280e66f688493fb3bb1b3f52a5ce0d7fc325df24baa2096a","path":"app/event_capture.py"},{"change":"modified","content_sha256":"3af6485dfd9c3daa3930fd34b1c0c5fe84a73d0ab7fcc287363e626537959176","path":"app/event_cooldown.py"},{"change":"modified","content_sha256":"af6e389fef781e494c9ae3a3246b423b7a23c1a58dcba2a9daaf0a635af81c41","path":"app/multi_provider_results.py"},{"change":"modified","content_sha256":"6cb9f8edfd2e65f6a25035794ab5748e27ff8f06aaaebc4ad4fe533d7ef9725a","path":"app/scenario_parameters.py"},{"change":"modified","content_sha256":"1a9d0f88f2082daf8ff1bbd9d9f8bdb9099f0a4397035eca2b17d5acd3d2e17c","path":"app/secure_control.py"},{"change":"modified","content_sha256":"98d8ce3e1b99e5353c90ccb3795d1475713292a77c661a7024160a03c6b4d548","path":"app/stream_manager.py"},{"change":"modified","content_sha256":"1b2d7af201bcef56d2fa2f82ceb9c18e8f540a984177a5f158899c701e9511c2","path":"control_sidecar/main.py"},{"change":"modified","content_sha256":"6a70f21e348c8095048e09ab30749f1c7728328f8e0ba9d2eaa9edd1f265726b","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/README.ko.md"},{"change":"added","content_sha256":"768659818d93509433b01fb1b5242423c9b51155a90b4135cb0485a811035cb8","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/decision/20260928T142231+0900-decision-crowd-events.md"},{"change":"added","content_sha256":"321327eece26c7ad9af4c1fcb7fb77ff50a1a68c1c85dd862dc332b7f04ad410","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/validation/20260928T142231+0900-validation-crowd-events.md"},{"change":"added","content_sha256":"0f31e795723dc94ac8a77ae5fc8f49cf5c3d39b1282235b71b77745eb4c9e0d8","path":"docs/scenarios/CROWD_EVENTS.ko.md"},{"change":"modified","content_sha256":"94c08d06b6220b9f370890e003b66d29a12bf4fc98d594ff0c9ec8330794cb24","path":"docs/scenarios/SCENARIO_PARAMETERS_INTERNAL.ko.md"},{"change":"added","content_sha256":"cf919159cc87e580db39dd3fe55010e1b36cd7bf35b3c7df2a086c20bfb69dec","path":"tests/test_crowd_events.py"},{"change":"modified","content_sha256":"0e647ceb3c527d4a46b7959020a831e43f4cc092cf2c79dbd996752c8329bb6b","path":"tests/test_secure_bridge.py"}],"plan_hash":"049122c2f713ba859e4bee9379b7066e9cade70c6af4e5b5eedd76cf8b05683c","profile":"ltb1021","push":{"branch":"task/runtime-lifecycle-refactor","mode":"upstream","remote":"origin","remote_identity":"sha256:3a9ce41319a2ebea","upstream_head":"13dfc206860ae6e0a5afd90c093f721dac8c72c2","upstream_ref":"origin/task/runtime-lifecycle-refactor"},"repository":{"baseline_head":"13dfc206860ae6e0a5afd90c093f721dac8c72c2","branch":"task/runtime-lifecycle-refactor","worktree":"/workspace/contextra-analytics-runtime-lifecycle-refactor"},"schema_version":"ltb1021.codex_hub.git_closeout_manifest.v1","session_alias":"work-session","verify":["git diff --check PASS; source-image hash PASS; Python3.12 targeted PASS; real Crowd2 READY/SENT; six trial children reaped; final36 stopped/Gateway held"]}
