{"commit":{"body":[{"label":"Why","text":"INTRUSION Event를 영상 Artifact와 Web 요청까지 연결하고 실제 성공 경계를 구분한다."},{"label":"What","text":"숫자 camera identity, bounded 압축 cache, 동일 PTS overlay, PostgreSQL 원장, 파일 HTTP와 최대2회 전송을 구현했다."},{"label":"Impact","text":"신규 기능은 환경 설정으로 활성화하며 기존 모델/Tracker/Redis 계약은 보존했다. Web 수용 전이므로 운영 완결로 표현하지 않는다."},{"label":"Verify","text":"표적54 tests와 PostgreSQL TEMP 원장 검증 PASS. 자연 Event18 READY 및 두 채널 GET200. Web은 HTTP404, 정상 FPS 미측정. 보완image unit7 및10FPS 렌더 PASS, 미반영."},{"label":"Rollback","text":"이번 사용자 계약은 자동복원 금지다. Analytics/시험16채널/sample sender를 정지하고 데이터와 변경을 보존했다."},{"label":"Related","text":"EVART-01 decision/run 및 Codex Docs LTB-COMPLETE-001."}],"title":"feat(event-artifact): 동일 Frame Artifact와 영속 Web 전달 경로 연결"},"created_at":"2026-09-17T04:14:28+00:00","expires_at":"2026-09-19T04:14:28+00:00","job_id":"20260917-event-artifact-source","paths":[{"change":"modified","content_sha256":"112920270963a56dcbf0cd51b1aa35c5ce017479e5b116eaad0162ac76c6b9a2","path":"app/api/streams.py"},{"change":"added","content_sha256":"cd11f8c820200bc259fe2cae6ce2269da1b6f257c5e613bf9563b256c9da6920","path":"app/artifact_media.py"},{"change":"modified","content_sha256":"87e93c66a64928ed356fa6aed4c72fc7f93c4d179239e6dbd9348d387b175b63","path":"app/contracts/visualization.py"},{"change":"modified","content_sha256":"02a5eb5ecc651cf9365dae00fe9de44a7a8f172a1578182e2b994772312ac2db","path":"app/det_result_path.py"},{"change":"added","content_sha256":"e3ee21185bfb189a51c40d7f6dd8a04868a67e68934e5ec0af7c8c6d8e8ad914","path":"app/event_artifact_contract.py"},{"change":"added","content_sha256":"e2c92e18f6ccceea85a70889605018679b69b9e880e9c4e74039357e62433535","path":"app/event_artifact_service.py"},{"change":"added","content_sha256":"d24c035421b7dc544853506f2e10a2e80f05fac62f9e129c667e2f419518ed3a","path":"app/event_artifact_store.py"},{"change":"added","content_sha256":"bd3e7a8964efa5da1a893451b809c8aa726a93b8d65ca5f9c596fac06cdfd8ac","path":"app/event_capture.py"},{"change":"modified","content_sha256":"33870b4e957ebb69ed0ef5de31b6332005612b4d1500ec303b2072d0c22bc751","path":"app/frame_time.py"},{"change":"modified","content_sha256":"e5a677cd22bceac2fd5a1666c09cd004e818668a2baffc98300283cc06fe84f9","path":"app/intrusion.py"},{"change":"modified","content_sha256":"62848b3a6d0ac5287d7f2d9eebf7481c81fefaf2f1aeff7272226488038caa9e","path":"app/main.py"},{"change":"modified","content_sha256":"6edccc21dab2ce06ad58375213f81897edc69bc12725686184d63562beb858f1","path":"app/multi_pipeline.py"},{"change":"modified","content_sha256":"e83bfc250a453069066a16d55a082e79918e8c7a8a1677b03fa3a0f835b03176","path":"app/stream_manager.py"},{"change":"added","content_sha256":"670d58fc32252262fb98c40c76fc35553ce78bfad95abfdc323255d1c4f1b555","path":"docs/artifacts/README.ko.md"},{"change":"added","content_sha256":"8dbb7bb5141939c9f8005afe441585b66496f7fcf95174f3b2bd6513a04ff453","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/EVENT_ARTIFACT_OPERATIONS.ko.md"},{"change":"modified","content_sha256":"2bbdf5d5f0aa332291c32089699e8f4d371b02ac8c581bbd5d6fe5b820a79c31","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/README.ko.md"},{"change":"added","content_sha256":"e68c0c6378c74278974e0dc12d4d2e172b5318e392d9cadbc8f340ed88713e37","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/decision/20260917T123200+0900-decision-event-artifact-web.md"},{"change":"added","content_sha256":"8c817a61230f8033a7a25d877ad6cd0a14bb0c4b842afe1ab694ea14bdd85fa8","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/runs/20260917T123200+0900-run-event-artifact-web.md"},{"change":"modified","content_sha256":"200b2a934263c49b61ba67f55ede0048dfd7730ebff0244d8db51667eddea0ff","path":"native/frame_metadata/Makefile"},{"change":"added","content_sha256":"7871de2501e42ef853cf2973929b15a63296acb4c8b6a102df849537cf63b39a","path":"native/frame_metadata/encoded_cache.hpp"},{"change":"modified","content_sha256":"83503067374981d5038b4a93a4f2f02c6c84b33f7cc054beae5eb21585bdac53","path":"native/frame_metadata/rtp_signal.cpp"},{"change":"added","content_sha256":"12c5d3dba3db4e6524e22534404347a16aa75da2a76b29164784bb6a49d87238","path":"tests/test_event_artifact.py"},{"change":"modified","content_sha256":"67b5c02f57952083450731d79709e3b9606aeea778a427b72f3f0465af1258d8","path":"tests/test_test_run.py"},{"change":"modified","content_sha256":"0781fab13b229004a030c7c448010daaf68871a7920030e0ec1a539be009e571","path":"tools/test_run.py"},{"change":"modified","content_sha256":"a8655ee48e1d29ddd2002e78d736892489049ac47d67c67a6569e5761d46ab13","path":"tools/test_run_manager.py"}],"plan_hash":"911dfee44ee40e1afa4ce15b81eb0716cce64b0c0d7d5f3d328e7e7af3e065a3","profile":"ltb1021","push":{"branch":"task/runtime-lifecycle-refactor","mode":"upstream","remote":"origin","remote_identity":"sha256:3a9ce41319a2ebea","upstream_head":"c30a1db4a68ae3133ce1a11f28cc2bf48e373dd7","upstream_ref":"origin/task/runtime-lifecycle-refactor"},"repository":{"baseline_head":"c30a1db4a68ae3133ce1a11f28cc2bf48e373dd7","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":["54 targeted tests; PostgreSQL TEMP fixture; natural Event18 Artifact READY; GET200; Web404 stopped; final-image unit7 and renderer PASS"]}
