{"commit":{"body":[{"label":"Why","text":"Loitering 단일 슬롯 제한을 해소하고 FIRE 선개발 연결부를 실제 task와 통합한다."},{"label":"What","text":"공유 Tracking 순차 fan-out, 독립 ROI·상태·EventID, FIRE 모델/category 전환, 공통 Metadata·Artifact·Sidecar·Gateway 연결과 표적 테스트를 보완했다."},{"label":"Impact","text":"test 대상3서비스만 반영했다. 카메라19개 stopped, Artifact On/HTTP On, 모델·SSIMS·공유서비스와 과거 Event 원장 보존. FALL 및 복수모델 Runtime은 미연결이다."},{"label":"Verify","text":"Python3.12 주요 표적270 PASS와 후속11 PASS(중복 포함), 실제 nginx 설정검사, Medium/Fire READY, WSS bootstrap4개/heartbeat5회, image source18파일hash 일치. 실제채널/영상/Event시험은 대기."},{"label":"Rollback","text":"자동 rollback 없음. 기존 image와 private 설정백업을 보존하며 필요시 별도 승인 후 대상서비스만 Stop/reap하고 복구한다. 원장/파일 삭제 및 Event재전송 금지."},{"label":"Related","text":"PR6 a095c95, PR7 367c62a; SCENARIO-FANOUT-01"}],"title":"feat(scenarios): Loitering 공존과 FIRE 단독 Web 실행 준비"},"created_at":"2026-09-20T09:44:14+00:00","expires_at":"2026-09-21T09:44:14+00:00","job_id":"20260920-contextra-scenario-ready-r01","paths":[{"change":"modified","content_sha256":"5cd8c97fca30640e23c2b0d92513769ddad0113d7912f8234da8f2270b795d38","path":".gitignore"},{"change":"modified","content_sha256":"efdf842cfe0e6b7735f5fb336e6adafb65764077594af683d4fab70029293b63","path":"app/api/streams.py"},{"change":"modified","content_sha256":"8a12383792b3eea393a936c5b6c8c74be27fefe6261cfa41ea258cae0012edd4","path":"app/artifact_media.py"},{"change":"modified","content_sha256":"00d4456bb9d7957a89179a86b654f5429d501dbf49a809e782098f0c7cd12f6d","path":"app/contracts/visualization.py"},{"change":"modified","content_sha256":"0b0bc23a331592f867280aa076c5b3945891d4e6f8396675123f2ffac1ec467a","path":"app/det_result_path.py"},{"change":"modified","content_sha256":"039469eeaa03cac3ac00656aa157a50f5aa4f2351c71dfe34160906b63617c04","path":"app/event_artifact_contract.py"},{"change":"modified","content_sha256":"f592e29b8cad0cf8f672c91b9c65fcb9021680dddcfb82aaa05252fe18dfdfaf","path":"app/event_capture.py"},{"change":"modified","content_sha256":"b0f9cd2ad683c185f6e4eff555c420497b2fdae9e34e5de9726a86113a385f19","path":"app/fire_config.py"},{"change":"added","content_sha256":"04d13c2af38bcaa61ea2e7672e4b98c3ec621d3c24899d72a8b8480425ddda82","path":"app/fire_result.py"},{"change":"added","content_sha256":"ad81cc89fa58ab5e0c9ef5233b537a4807dce5fd08356a6e4c04f31fe007e7ba","path":"app/fire_scenario.py"},{"change":"modified","content_sha256":"4622b5bf86efa8a79f3efb662fda5c3cacdcf1e1476f937c56ab34f5a59803f8","path":"app/intrusion.py"},{"change":"added","content_sha256":"bd4f8a7144de0d197ff4965b1efae89260e4d4517832ca3dbcc7d1e2f919065e","path":"app/loitering.py"},{"change":"modified","content_sha256":"a70ce6b979bb7be357064db277be12c7a7fb51fc8653150378100e9900f6e9d8","path":"app/metadata_render.py"},{"change":"added","content_sha256":"4f08d0d5eff3aa6a0bc16d918949c2ab51be772b56769c7449a6844fd0516ae8","path":"app/provider_composition.py"},{"change":"added","content_sha256":"9201039ca76ef00492bb1c821e4c7127df3b58b8354006021323a7169cc7e712","path":"app/region_scenario.py"},{"change":"modified","content_sha256":"a5d50894198e65d38250954f5e7ba30d824cbfa15cb39631a5b1c1a3d35a99d5","path":"app/secure_control.py"},{"change":"modified","content_sha256":"536cae4f900243ad85070b4c267fcfc3932ef757abdfc53b020ff547405bc2cf","path":"app/stream_manager.py"},{"change":"modified","content_sha256":"f11fbbbe152ea49e1c3913a5534c65b33e969992db65da9e1601b2db976c1070","path":"app/stream_settings.py"},{"change":"modified","content_sha256":"e51fd8e6bbe69a8afeff04a1f5b2c1c1551962e78c75e9e06dbcfdcb60b6059f","path":"control_sidecar/main.py"},{"change":"modified","content_sha256":"ebd7b5fa4b09cfda0acb74da92c290df8423fb8ce6850c6f8ff906e76dea9bb6","path":"docker/secure-gateway.conf.template"},{"change":"modified","content_sha256":"4a41f28e78c592a1f74ecf216f797a1744379800dd6557c5ce5d5204df62f668","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/README.ko.md"},{"change":"added","content_sha256":"99dd93d65c0f52e9c12ebd7c6bae1fde850af1a92dabb3ae56cc5afab5a325f2","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/decision/20260920T184100+0900-decision-scenario-fanout.md"},{"change":"added","content_sha256":"f8b4536f036b25d75fe2b5edccbd12b3cbe2b4a2dd7eaabf4c44f986055a1b5e","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/runs/20260920T184100+0900-run-scenario-web-ready.md"},{"change":"added","content_sha256":"dcff723cc68d0cf8fe622e70f5c2390f519610bc9944f1de7a5ed0853649bcd8","path":"docs/scenarios/FIRE_HANDOFF.ko.md"},{"change":"added","content_sha256":"ae50ce3f08d0d5f9265f577003b2f2a579e5745d428a656125ad6ee0117ee2bb","path":"docs/scenarios/FIRE_PROGRESS.ko.md"},{"change":"added","content_sha256":"1c18c7e2c586a5eabc8ec8d5070c2c611449f81b6115c897415ef024879789b1","path":"docs/scenarios/FIRE_V1.ko.md"},{"change":"added","content_sha256":"60e0f58ce24c246a627d299dbd1b91b8e81745f2abf8144f9a2f8eebffcce981","path":"docs/scenarios/FIRE_VERIFICATION.ko.md"},{"change":"added","content_sha256":"bd985a660e1046745bfc2f25a6d63328bfb8c7da4c56f96bd314e4f4c02cff15","path":"docs/scenarios/LOITERING_HANDOFF.ko.md"},{"change":"added","content_sha256":"bc7a25f3dab4370e0cb94ae4359f95f7de31b61134251f830c4ef6303f7272d3","path":"docs/scenarios/LOITERING_PROGRESS.ko.md"},{"change":"added","content_sha256":"98421ea52d73af2cd3392db20f17525b5061d3d99e42f1892ac2bc8f34ffa559","path":"docs/scenarios/LOITERING_V1.ko.md"},{"change":"added","content_sha256":"984ca50d3ba388e1489050c4e2ad41500c2ea22b0a7d3a332ecb3597ef56e912","path":"docs/scenarios/LOITERING_VERIFICATION.ko.md"},{"change":"added","content_sha256":"56e8e1653fbc3285dbecd6afde5190a493f2641a9ce4f98e0498d5e576795516","path":"docs/scenarios/SCENARIO_WEB_READY.ko.md"},{"change":"added","content_sha256":"e70f1f962ecd2ad72a128bf836d05040b0d8ef25702cea2ccc5b37f0a5e9ffcb","path":"tests/fixtures/loitering_legacy_wire.json"},{"change":"added","content_sha256":"09b2bb42207dc8c60a0b4c6b2d03625bb03d7f480b96d7c19a44f736e0e47c73","path":"tests/loitering_contract_helpers.py"},{"change":"added","content_sha256":"606a1c440b0634d3a123cff821b81d21811989335b319a4966280cefb88932ff","path":"tests/test_fire_predev_contracts.py"},{"change":"added","content_sha256":"cc0ca8b56823dd43354827f1501cd1351cebadf9bb110ccec55283151bc65d3a","path":"tests/test_fire_scenario.py"},{"change":"added","content_sha256":"07b3c0609f46493d8b7978f01293f2d1e495b7391a399bd0f08378c5db57feb4","path":"tests/test_loitering.py"},{"change":"added","content_sha256":"8d73a7bdd4eaef7a999ad4078a20c5197102736b88081c546b85dc4caa2650de","path":"tests/test_loitering_connection.py"},{"change":"added","content_sha256":"00762b21086aa56a457a93b36bf53f6def9a023f296b2fefac4e23db3662b891","path":"tests/test_loitering_contracts.py"},{"change":"added","content_sha256":"2995ea79248111ff70c55c73d46db5d56158fe53b6f61426b93afe8336f70081","path":"tests/test_loitering_settings.py"},{"change":"added","content_sha256":"48b1bc582bf43c801cdb4931ddcbc2fd302d6dfd3c30eb1d69b6eaa28179f041","path":"tests/test_loitering_wiring.py"},{"change":"added","content_sha256":"56fe279ef7f84c42b92e847387891fd4281b704ff024281b1bac78f7e7180576","path":"tests/test_scenario_integration.py"},{"change":"modified","content_sha256":"357740358d7ad22633d5ee0e10128eef02ae8a7d24574ecef28e99d2745d7d45","path":"tests/test_secure_bridge.py"}],"plan_hash":"9ef4b4c87debb3b6996a12c33f5f88bb9afeb883cd6fd6095fbe75b6887976bf","profile":"ltb1021","push":{"branch":"task/runtime-lifecycle-refactor","mode":"upstream","remote":"origin","remote_identity":"sha256:3a9ce41319a2ebea","upstream_head":"0c0f25c2dfd8d13f506f43d69c38caab77269b9c","upstream_ref":"origin/task/runtime-lifecycle-refactor"},"repository":{"baseline_head":"0c0f25c2dfd8d13f506f43d69c38caab77269b9c","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":["Targeted Python3.12 fixtures PASS after expectation correction; process CAS/restart/reap PASS; no camera test","Medium/Fire READY; WSS bootstrap4 heartbeat5; 19 stopped; Artifact On; ledger and 15 other containers unchanged","Running source hashes18 PASS; nginx -t PASS; git diff --check and Markdown links PASS"]}
