{"commit":{"body":[{"label":"Why","text":"실제 관제 계약과 초기 인증 순서를 맞추고 네트워크 장애와 인증 및 Runtime 수용을 분리한다."},{"label":"What","text":"최신 로그인 body와 CSR CLI, bounded WSS/heartbeat, 부모 상태 조회, session 인계와 transient backoff 및 Gateway 경로를 연결했다."},{"label":"Impact","text":"source와 후보 이미지만 준비했다. 단일 neighbor 임시 우회 외 기존 Runtime과 모델 및 원격 관제 설정은 변경하지 않았다."},{"label":"Verify","text":"초기32/영향22/최종image5 표적검증 PASS(중복 포함). Compose/source hash 및 SSH/CA/HTTPS 확인. 실제 로그인은 관제 NULL boolean 매핑 오류로 중단했고 CSR/WSS/REST 실제 수용은 대기다."},{"label":"Rollback","text":"코드/image 자동 rollback 없음. 기존 두 채널/Artifact Off를 유지했고 임시 neighbor 제거값과 재개 원장을 private에 남겼다."}],"title":"feat(secure-bridge): 인증 bootstrap과 최소 WSS 후보 준비"},"created_at":"2026-09-18T04:06:42+00:00","expires_at":"2026-09-19T04:06:42+00:00","job_id":"20260918-contextra-secure-wss-r01","paths":[{"change":"modified","content_sha256":"69ae47e1475559de5dd5233bb8fb6c3dc6a81cf5adf1485e81f462a308f335a1","path":"app/secure_control.py"},{"change":"modified","content_sha256":"9cf86d9b20284ac9cd7fe71c096566714646387dd8b21847759542577a1002a7","path":"control_sidecar/Dockerfile"},{"change":"modified","content_sha256":"49d0c249b8797cc388e07520b905946f85a45cb865109e58ba80c58da615c75b","path":"control_sidecar/auth.py"},{"change":"modified","content_sha256":"269bfb0e96356f214c15cf6127cd5ceb7420e0e4267577e956fc70ceb8fd6973","path":"control_sidecar/config.py"},{"change":"modified","content_sha256":"354722aa160edcb148f68ffd4fc3afc3f571de4986a01df8a2bb475aa8115f3d","path":"control_sidecar/main.py"},{"change":"modified","content_sha256":"8c0e00f82ba754d60fdb14b8d9cad56768d025f0018f4b6c6e28b44cc9a064df","path":"control_sidecar/requirements.txt"},{"change":"modified","content_sha256":"4d411e88cfc7b1ee3acfccb4f827b673596709b32b22fc02f687366cb5ce9ec1","path":"control_sidecar/transport.py"},{"change":"added","content_sha256":"b232b82d9962139062ee18a844a3603f9b94bfa1e46735e4219cc50562d9b2d9","path":"control_sidecar/websocket.py"},{"change":"modified","content_sha256":"42f7dbe1ca266382cf08efa06e08f7b8bfa5a5edc6ee1435b8af039ac1c8d719","path":"deploy/secure-bridge.compose.yml"},{"change":"modified","content_sha256":"c8555d1463624f7e25b46038533491632ca5ad27c20c45a071d6f33d25f8fe50","path":"deploy/secure-bridge.env.example"},{"change":"modified","content_sha256":"861ef63ea6f648cfb0c4d0fc12c4b640a92c4893f265e4168e27eacb0da50780","path":"docker/secure-gateway.conf.template"},{"change":"modified","content_sha256":"b7cc5a0e02995d12fa92858b8290931d1a58d7f1509d6f413601e5d12ba660d9","path":"docs/integration/SECURE_BRIDGE_PROVISION.ko.md"},{"change":"modified","content_sha256":"a7c90054c2d4ebed1124b69183d7d32b7d9b74f59269d0067530b9e666ba7de5","path":"docs/integration/SECURE_REST_BRIDGE.ko.md"},{"change":"modified","content_sha256":"c3ffd26b0861775cf5987ea726ef39171aa8ae062c376d8712e002af3a5e5733","path":"docs/integration/SECURE_REST_BRIDGE_HANDOFF.ko.md"},{"change":"modified","content_sha256":"baef7b8c55507608b1ca9292876652d5b3e7be4d432d51b8d958233e2bd349a5","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/README.ko.md"},{"change":"added","content_sha256":"b6a1e9c54ebb0a487ef971c8866cc856bfcaf24ffb9f928248e779d07db0e66f","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/decision/20260918T130122+0900-decision-secure-bootstrap.md"},{"change":"added","content_sha256":"d8345cc505c02be510997a2c1d546cc414d55214ce32c230d68bdd644b37bd27","path":"docs/profiles/ltb1021/topics/runtime-lifecycle/runs/20260918T130122+0900-run-secure-wss-prepared.md"},{"change":"modified","content_sha256":"68da7f8d15a34693240c357b54aeac7f8ca093434a05c83266a356d29cbfa778","path":"tests/test_secure_bridge.py"},{"change":"modified","content_sha256":"6dbdf8293cd47d57d477c97bd9f7ac779afb55115d4cdb06ad7697bfd6787ea7","path":"tests/test_secure_bridge_provision.py"},{"change":"modified","content_sha256":"9e7698c1d5064d6c03561a8d63746166450f1b798243e76348904a5a6614b3ba","path":"tests/test_secure_bridge_tls_gateway.py"},{"change":"added","content_sha256":"c25503698062a3925a25cef955881ab6f35a608096fcbf8b6fa47b4f40631f68","path":"tests/test_secure_bridge_wss.py"},{"change":"added","content_sha256":"610420e6bf93f676f60a5ae6de453430bcc876e84e4f4f1cd3aef545cb819ed1","path":"tools/secure_bridge_enroll.py"}],"plan_hash":"653d2fd261087c3b0d9a44d47cc4bc46f36a2cc156bc70ab402b21daf94b5526","profile":"ltb1021","push":{"branch":"task/runtime-lifecycle-refactor","mode":"upstream","remote":"origin","remote_identity":"sha256:3a9ce41319a2ebea","upstream_head":"1fade25380833fce299ffb56aedf54a38c9cd3be","upstream_ref":"origin/task/runtime-lifecycle-refactor"},"repository":{"baseline_head":"1fade25380833fce299ffb56aedf54a38c9cd3be","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 32 + impact22 + image5 PASS; overlapping tests not summed","Compose config/source hash/AST/local links/diff check PASS; original two streams unchanged","Manager login blocked; no CSR POST, deployment or runtime restart"]}
