{"commit":{"body":[{"label":"Why","text":"기존 추론과 Event 원장 소유권을 유지하면서 관제 인증 연결 준비가 필요하다."},{"label":"What","text":"PR4 후보를 통합하고 bounded 명령 접수 SUCCESS, 지연 실패 조회, synthetic Anchor 보존 및 Compose 가이드를 보완했다."},{"label":"Impact","text":"새 Analytics image에서 내부 인증 제어만 활성화했다. 두 채널 running과 Artifact Off를 유지하며 외부 Sidecar/Gateway는 미기동이다."},{"label":"Verify","text":"image-owned 표적31개 PASS. helper revision 비교 보정 후 추가확인1회, 두 채널 첫Frame 및 한 채널 Stop/reap/재Start PASS. 21.21초 결과10.09FPS와 Redis10.04/10.00FPS, queue/stale/drop0. Event969건 fingerprint 불변. 실제 Web 인증과 사용자 시각화는 대기다."},{"label":"Rollback","text":"실패 시 대상 Stop/reap만 수행하고 image/config 자동복원은 하지 않는다. 기존 산출물은 보존했다."},{"label":"Related","text":"PR4 da0149bfe1d3f2bc81c6c3c28889f5c4b4f696c9; SECUREBRIDGE-02."}],"title":"feat(secure-bridge): REST 후보 통합과 두 채널 내부 제어 수용"},"created_at":"2026-09-17T12:31:19+00:00","expires_at":"2026-09-18T12:31:19+00:00","job_id":"20260917-contextra-secure-rest-r01","paths":[{"change":"modified","content_sha256":"3c8ff221cf3a3b55d64993c735e4f7b0b429dde6449b432b15738a351d9d7791","path":"app/event_artifact_service.py"},{"change":"added","content_sha256":"d00c337086d641650ed06ee952c7455530a59aa40873a59d82a5db60731548f4","path":"app/secure_control.py"},{"change":"added","content_sha256":"acf38b31ae0935abf1bd5045636357ab44ffefe13597e9538888c97ad6c7ed71","path":"app/secure_event_transport.py"},{"change":"added","content_sha256":"ab86aefcafc2a1e1689cb0743c94693ac52c1a74591098fcc0eff135d7035c46","path":"app/secure_runtime.py"},{"change":"added","content_sha256":"a1c800a1cc0ea034e8a0671509d7052ce1953a05558a8b560291dbccd7213cb3","path":"control_sidecar/.dockerignore"},{"change":"added","content_sha256":"352df29cec39b6e5eb15b806888caaf49ea1a72ee9ca35ac39f29ec70c9dd146","path":"control_sidecar/Dockerfile"},{"change":"added","content_sha256":"d1c9ee9ce2e7f6e23772f3306ed12f2134fb61628d5e3c58ba647136dac6fd26","path":"control_sidecar/__init__.py"},{"change":"added","content_sha256":"6f8c2e916b14f42db3034a9095762f964bb5082cac922e1aa64d5d92cd51b286","path":"control_sidecar/auth.py"},{"change":"added","content_sha256":"da5db2984ad4d870dbd2a4903157fa028085841e57494cd19b609097c1c14684","path":"control_sidecar/config.py"},{"change":"added","content_sha256":"02047c66162170dd385070fe7f42eb0ef7a28bd6568a4c43d1181e7af7087fc7","path":"control_sidecar/main.py"},{"change":"added","content_sha256":"5e0f190e4c0cf509d2e356530989b9e65e398dfe5f60508b1f13997c242a4023","path":"control_sidecar/protocol.py"},{"change":"added","content_sha256":"90d1553ade08153fdc4f5edef6a4c72790ea34f954e209f6a2c026706d75e5e2","path":"control_sidecar/requirements.txt"},{"change":"added","content_sha256":"b8959afb520ae84487e563b561d20a2f39b97a31f74e45c851571788ca5edd24","path":"control_sidecar/transport.py"},{"change":"added","content_sha256":"c8b4aedc29319570fa0d95083b97af6334b4308bb17e3a4776c6433ce8e3625a","path":"deploy/secure-bridge.compose.yml"},{"change":"added","content_sha256":"5bced48aeb0750b9b407c2412564fab7de504062c0a9db8548712b543c98bdf5","path":"deploy/secure-bridge.env.example"},{"change":"modified","content_sha256":"374aeda4eba5fdbbf6943d68f62a9ff11cc785e89d4f707c0f9242e0d394cb35","path":"docker/entrypoint.sh"},{"change":"added","content_sha256":"b76b1310e303f5cd61b3badfb16bf8eebf44a3418f8160f65e30c8d144957257","path":"docker/secure-gateway.conf.template"},{"change":"added","content_sha256":"3e24d7963b39aafa571dc12d912fabf2ba382ad848e8e6f687671c5316c03f82","path":"docs/integration/SECURE_REST_BRIDGE.ko.md"},{"change":"added","content_sha256":"09ce0b0400d0a354279d2f0c14ff8621a03c94ca10bd88e90e15484c4a601e84","path":"docs/integration/SECURE_REST_BRIDGE_HANDOFF.ko.md"},{"change":"added","content_sha256":"55340b069d3090dfd9786f5a026894adba933bcf9f635bdca76cc8efbfb65827","path":"docs/integration/SECURE_REST_BRIDGE_VERIFICATION.ko.md"},{"change":"modified","content_sha256":"9b9ee4adfdb85b9dc7094c927d2b2c7b3fab34896fba6d2cab208acd2e550b7e","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/README.ko.md"},{"change":"added","content_sha256":"865dcccc694ccf2198c2497b1d2d712c45c772da81803fb2db2b4859df115d16","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/decision/20260917T212657+0900-decision-secure-rest-internal.md"},{"change":"added","content_sha256":"5ad65497915b9fbe4af7ebbab2ec4f6d58cdd77bbf32f4db8a50de8a61bd2f3a","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/runs/20260917T212657+0900-run-secure-rest-two.md"},{"change":"added","content_sha256":"d8c0c4d1d9e0ea155c6478026a41767cba1fe2b2da3267936f431164e0c95da3","path":"tests/test_secure_bridge.py"},{"change":"added","content_sha256":"ec558ac2d817108742699f548990309b57073f9b334e9793213ba5ea0f48479a","path":"tests/test_secure_bridge_tls_gateway.py"},{"change":"added","content_sha256":"f62bf62d561b9bd186435db761bdd60b598db84c24e358f1b836d0983cc8436a","path":"tools/secure_bridge_tls.py"}],"plan_hash":"59daedd26049a6c9cda134daf375bf2ea731530cf7464f3f02139383d707697d","profile":"ltb1021","push":{"branch":"task/runtime-lifecycle-refactor","mode":"upstream","remote":"origin","remote_identity":"sha256:3a9ce41319a2ebea","upstream_head":"b64446185d87d6ab21b45b669bd81c92613fbf22","upstream_ref":"origin/task/runtime-lifecycle-refactor"},"repository":{"baseline_head":"b64446185d87d6ab21b45b669bd81c92613fbf22","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":["image-owned targeted pytest: 31 passed / 35 deselected","two-channel internal control: Start/first Frame, Stop/reap/reStart, 21.21s observation PASS","Artifact Off/HTTP On, ledger fingerprint and non-target containers preserved","bash -n, git diff --check, actual Compose and app source hash PASS","external HTTPS/Manager and user visual acceptance NOT RUN/PENDING"]}
