From ba2808a19c1dbd15e347d5623961d9b45f469483 Mon Sep 17 00:00:00 2001 From: Hyeonjun0527 Date: Wed, 27 May 2026 04:12:30 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EB=A6=B4=EB=A6=AC=EC=A6=88=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=EC=97=90=20registry=20pointer=20=EC=8B=A4=ED=8C=A8=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 후속 PR 경로에서 backend previous_deploy_image를 registry pointer로 해석할 때, pointer 부재나 canonical digest 불일치가 나면 bootstrap 승인 또는 중단이 필요하다는 점을 shared contract에 명시했다. release record와 registry의 역할도 더 분명히 적었다. Constraint: backend/frontend 운영 문서는 pointer 기반 복구와 release record 역할을 함께 설명해야 한다 Rejected: backend repo 문구만 보강 | frontend shared contract에서도 실패 조건을 동일하게 봐야 한다 Confidence: high Scope-risk: narrow Reversibility: clean Directive: pointer 기반 복구 규칙이 바뀌면 backend dispatch 문서와 release contract를 함께 업데이트할 것 Tested: git diff --check Not-tested: workflow runtime behavior change 없음 --- ops/backend-release-dispatch.md | 1 + ops/release-record-shared-contract.md | 1 + 2 files changed, 2 insertions(+) diff --git a/ops/backend-release-dispatch.md b/ops/backend-release-dispatch.md index aeb700fa..3f57538f 100644 --- a/ops/backend-release-dispatch.md +++ b/ops/backend-release-dispatch.md @@ -105,6 +105,7 @@ The frontend workflow that receives this event is: - `summary` - `metadata.previous_deploy_image` - backend Jenkins resolves the image behind the registry `latest-prod`/`prod` pointer before the new deploy +- When the registry pointer is missing or no canonical digest match exists, backend deployment must stop or require explicit bootstrap approval. - `metadata.pull_request_number` - `metadata.pull_request_labels` diff --git a/ops/release-record-shared-contract.md b/ops/release-record-shared-contract.md index 4ce73efc..feec7db3 100644 --- a/ops/release-record-shared-contract.md +++ b/ops/release-record-shared-contract.md @@ -132,6 +132,7 @@ The frontend script also accepts the inner `client_payload` object directly when - `summary` - `metadata.previous_deploy_image` - backend Jenkins resolves the image behind the registry `latest-prod`/`prod` pointer before the new deploy +- The release record is still the audit trail; the registry pointer only helps backend Jenkins recover the previous immutable backend image before dispatch. - `metadata.pull_request_number` - `metadata.pull_request_labels` From 57bcc81494d3fb5f17ac1643e3497d8daf3efca1 Mon Sep 17 00:00:00 2001 From: Hyeonjun0527 Date: Wed, 27 May 2026 04:16:06 +0900 Subject: [PATCH 2/2] =?UTF-8?q?main=20=EB=B0=B0=ED=8F=AC=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=97=90=20PR+release=20label=20=ED=95=84=EC=88=98=20?= =?UTF-8?q?=EA=B7=9C=EC=B9=99=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit frontend 운영 문서와 shared release contract에 direct push 금지와 main 대상 PR + release label 전제를 명시했다. backend dispatch와 release record가 어떤 입력을 정상 production release로 보는지 혼동을 줄인다. Constraint: release record는 main 대상 PR과 release label이 있을 때만 정상 production 입력으로 해석돼야 한다 Rejected: contract 문서만 수정 | frontend 운영 가이드에서도 같은 금지 규칙을 보여줘야 한다 Confidence: high Scope-risk: narrow Reversibility: clean Directive: production release 입력 규칙이 바뀌면 ops/version-management.md와 shared contract를 함께 수정할 것 Tested: git diff --check Not-tested: runtime behavior change 없음 --- ops/release-record-shared-contract.md | 2 ++ ops/version-management.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/ops/release-record-shared-contract.md b/ops/release-record-shared-contract.md index feec7db3..e15a4010 100644 --- a/ops/release-record-shared-contract.md +++ b/ops/release-record-shared-contract.md @@ -2,6 +2,8 @@ This is the shared production release-record contract between `study-platform-mvp` backend and `study-platform-client` frontend. +Direct pushes to `main` without a PR and its `release:major|minor|patch` label are not valid production release inputs. + It fixes two schemas: 1. the backend-to-frontend release payload schema, and diff --git a/ops/version-management.md b/ops/version-management.md index 7e02bc72..02c43bef 100644 --- a/ops/version-management.md +++ b/ops/version-management.md @@ -4,6 +4,8 @@ This document is the frontend repository source of truth for ZERO-ONE production This document follows the shared FE/BE contract in `ops/release-record-shared-contract.md`. +- Do not direct-push commits to `main` or bypass the PR path. Production deploy/release recording depends on the PR and its `release:major|minor|patch` label. + ## Responsibility - `study-platform-client` owns the final production release record because it is the user-facing application and the running product depends on a compatible frontend/backend/database combination.