6.1 KiB
6.1 KiB
id, status, discovery, criteria
| id | status | discovery | criteria | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| req-0004 | approved | dcy-0004 |
|
requester-versioned·runtime-locked image publication
Objective
GHCR image publication authority를 요청자가 exact source commit에 생성·push하는 strict vX.Y.Z Git tag로 제한하고, repository verification과 container runtime installation이 동일한 repository-owned uv.lock resolution을 사용하게 한다. 기존의 검증 선행, single build, built-image smoke, tested artifact identity, canary·secret 방어, no-rebuild publication과 multi-tag same-digest 계약은 유지한다.
Scope
- GHCR publication workflow의 유일한 trigger를 strict
vX.Y.Ztag push로 제한한다. 숫자 구성요소는0또는 leading zero 없는 non-negative decimal integer이며 prerelease/build suffix, malformed tag, branch ref와 non-push event를 거부한다. - event, ref와 40자리 lowercase source commit을 registry credential 또는 write 전에 fail-closed로 검증하고, exact
${GITHUB_SHA}checkout 뒤 실제HEAD를 다시 비교한다. - strict version-tag event에서 pinned
uv와 repository-owneduv.lock으로 full Ruff와 full pytest를 실행하고, 성공한 경우에만 이미지를 한 번 빌드한다. - 일반
main과 branch push에서는 registry login,docker push,packages: write와 image publication을 수행하지 않으며, 요청자 결정에 따라 별도 비게시 CI workflow를 추가하지 않는다. - Docker runtime environment는
pyproject.toml,uv.lock과 allowlisted package source만으로uv sync --locked --no-dev --no-editable또는 의미상 동등한 locked install을 수행한다. missing/mismatched lockfile 또는 unlocked install은 build/publication 전에 실패한다. - single built image에 source commit 앞 12자리 tag와 selected
vX.Y.Ztag를 부여하고 두 push 결과가 동일 digest인지 확인한다.latest는 생성하지 않는다. - archive checksum, tested/loaded image ID, OCI revision, built-image package·CLI·migration smoke, canary surface scan, artifact handoff와 publish-job-only registry credential 경계를 유지한다.
- push 성공과 digest 검증 뒤에만 immutable image reference, digest, 전체 source commit과 selected version tag를 output·summary evidence로 기록한다. push 후 오류를 registry write 미발생으로 표현하지 않는다.
- operator documentation은 container publication version authority가 Git tag이고 package metadata version과 독립임을 설명하며, version 선택과 tag 생성·push가 구현·검증과 분리된 requester-approved external write임을 명시한다.
- workflow/parser/helper/Docker contract tests는 strict trigger, exact checkout, lock mismatch, locked runtime install, same-digest/no-
latest, no-rebuild와 기존 실패 경계를 독립적으로 검증한다.
Constraints
- Git tag version과
pyproject.toml의[project].version을 일치시키거나 자동 증분하지 않는다. - 기존 commit-derived selector와 immutable digest를 보존하고 기존 published tag·digest를 삭제하거나 이동하지 않는다.
- repository 전체를 Docker build input으로 copy하지 않으며 runtime config,
.env, credential, private key, 실제 connection string, ProofLine artifact와 synthetic canary를 image에 포함하지 않는다. - package write permission과 registry credential은 검증 job이 아닌 gated publish job에만 부여한다.
- 실제 account·database·RabbitMQ·Redis·KIS·portfolio-hub 연결, 운영 migration/reset과 다른 TREX repository 계약을 변경하지 않는다.
- Normative Design Documents: 없음. 이 REQ와 active AC가 normative specification을 소유한다.
Current Implementation Assessment
- 이 문서는 이미 로컬 기능 브랜치에서 구현된 GitHub issue #57을 현재 ProofLine schema에 사후 명세화한 것이다. 과거 구현이 ProofLine delivery chronology를 따랐다는 뜻이 아니다.
- 구현은
feat/issue-57-versioned-locked-publication의 local commite3fa8243d926efd0b81463dbfc5403cf6e4889f9(treeea05e23139965abed1f6a454c4ca2b5d356f8ab9)에 있으며, baseline1a2b50072238ea72186d99b3ec951fc9511100aa위 두 개의 append-only commit으로 기록되었다. 현재 localmain과origin/main에는 아직 반영되지 않았다. - issue comment evidence에는 release 집중
75 passed, 전체1065 passed, 51 skipped, Ruff·ProofLine·diff check, checkout mismatch fail-closed, Docker build·smoke·image ID·archive checksum·canary scan과 독립 read-only reviewPASS가 기록되어 있다. - 환경 의존 PostgreSQL 41건, RabbitMQ 9건, KIS sandbox 1건은 설정·credential 부재로 skip되었다. 로컬
actionlint도 실행 파일 부재로 수행되지 않았으며 향후 hosted workflow 실행 또는 별도 도구로 확인할 비차단 검증 공백이다. - version tag 생성·push, GHCR write, PR, main 반영, runtime rollout, deployment와 release는 수행되지 않았다. 따라서 live registry same-digest와 hosted Actions 실행 결과는 현재
unverifiedevidence다. - 이 REQ의
approved와 AC의active는 현재 specification authority를 나타내며 구현 통합, publication, delivery closure, release 또는 deployment 완료를 의미하지 않는다.
Non-Goals
- concrete version 선택, version tag 생성·push, 최초·후속 GHCR package write, production deployment, 운영 서버 pull/restart와 post-deployment verification
- 일반
main/branch push용 별도 lint/test CI workflow 또는 branch protection 정책 신설 - package version 변경, Git tag와 package version 일치 강제 또는 자동 version 증분
- 기존 published tag·digest의 삭제·이동 또는 registry retention 변경
- image signing, SBOM, provenance attestation, multi-architecture build와 moving
latest - live credential, 운영 account·database·broker·KIS 연결, database migration/reset 또는 운영 데이터 변경
- 다른 TREX repository의 workflow, image, wire/HTTP 계약 또는 release policy 변경
- ProofLine delivery/release lifecycle의 소급 완료 주장