# 구현 진행 상황 — GitHub Issue #25 비정식 증적 > 이 문서는 ProofLine canonical lifecycle artifact가 아니다. #25 구현 당시 GitHub 댓글을 출처와 함께 원문 보존한 비정식 증적이다. > 이 증거는 로컬 구현·검증 상태를 기록하지만 ProofLine 정식 implementation chronology, delivery closure, push, publication, release 또는 deployment 완료를 소급 증명하지 않는다. > Source: https://github.com/fourblocks2020/portfolio-hub/issues/25#issuecomment-5277080186 > Comment ID: `IC_kwDOR4l8PM8AAAABOonaeg` > Author: `genichin` > Created: `2026-08-13T06:57:02Z` > Original body SHA-256: `1b616d14c9f05a75da1345ef58b7a69a05b1bf2e62b79063476490b758e06bd0` --- ## 구현 진행 상황 - **대상:** discovery: requester-versioned GHCR 이미지 게시 계약 - **브랜치:** `feat/25-ghcr-image-publication` - **기준:** `origin/main` (`35e85981af845489236c18d709d0545c830e7f03`) - **상태:** 구현·검증·독립 리뷰 완료 — 로컬 커밋 완료, push/PR/publication/배포 미수행 - **최종 업데이트:** `2026-08-13T16:23:22+09:00` ### 구현 계획 및 작업 목록 - [x] migration/Alembic resource를 installable package data로 전환하고 source↔wheel inventory parity를 검증한다. - [x] Python 3.11·`uv.lock` 기반 multi-stage non-root Docker image와 deny-by-default build context를 구현한다. - [x] strict `vX.Y.Z` tag-only, build-once, tested-artifact handoff, no-rebuild GHCR publication workflow를 구현한다. - [x] image ID·archive SHA-256·OCI revision·canary·commit/version selector same-digest fail-closed helper와 contract tests를 구현한다. - [x] installed payload, DB-disabled `/health`, isolated PostgreSQL migration + DB ping smoke와 cleanup 검증을 구현한다. - [x] branch/main 무게시 검증 CI와 tag publication 권한 경계를 구현한다. - [x] 게시된 image digest와 pre-start `pfhub migrate-db`, secret/read-only/writable mount의 operator handoff 경계를 문서화한다(배포 구현 제외). - [x] focused release tests와 전체 pytest, lock/diff hygiene 및 실제 local image smoke를 통과한다. - [x] 독립 코드 리뷰 결과를 반영하고 최종 작업 상태를 기록한다. ### 진행 기록 - `2026-08-13T15:56:37+09:00` — 승인된 OQ(`1-A`, `2-B`, `3-A`, `4-A`, `5-A`, `6-A`)를 구현 범위로 고정했다. - `2026-08-13T15:56:37+09:00` — 최신 원격 `origin/main` `35e85981af845489236c18d709d0545c830e7f03`에서 격리 worktree와 기능 브랜치를 생성했다. - PR 생성, tag push, 실제 GHCR publication, GitHub Release 및 운영 배포는 이 구현 실행 범위에 포함하지 않는다. - `2026-08-13T15:58:13+09:00` — requester 확인에 따라 운영 배포 기능·배포 설정·배포 실행을 명시적으로 제외했다. digest 관련 문서는 게시 산출물의 operator handoff identity와 image rollback 경계 설명에만 한정한다. - `2026-08-13T16:05:01+09:00` — release focused tests `22 passed`, scoped Ruff 통과. - `2026-08-13T16:06:34+09:00` — migration 경로 변경에 따른 기존 테스트를 정합화한 뒤 전체 pytest 통과. - `2026-08-13T16:07:00+09:00` — Python 3.11 locked non-root 로컬 이미지 build 성공. - `2026-08-13T16:07:26+09:00` — 구현 runner가 600초 제한으로 timeout 종료했다. 변경은 worktree에 보존되었고, 마지막 installed inventory/image smoke는 중단되어 미검증 상태다. 다음 담당은 팀장이며 diff 검토, 배포 문서 범위 보정, 실제 image smoke와 독립 리뷰를 계속한다. - `2026-08-13T16:08:49+09:00` — 보존된 로컬 이미지에서 installed inventory, DB-disabled `/health`, isolated PostgreSQL migration·DB ping, DB-enabled `/health`, non-root, cleanup smoke를 재실행해 exit 0 확인. - `2026-08-13T16:10:50+09:00` — 배포 범위를 넘던 실행 예시를 제거하고 publication artifact/operator handoff 계약만 남겼다. release contract에서 배포 명령 부재를 회귀 검증한다. - `2026-08-13T16:10:50+09:00` — 최종 스냅샷에서 `uv lock --check`, scoped Ruff, release `22 passed`, 전체 `620 passed, 6 skipped`, `git diff --check` 통과. 이미지 UID/GID `10001:10001`, OCI revision 기준 SHA 일치, installed migration 28개(0028 포함), `.proofline` 변경 없음 확인. - `2026-08-13T16:16:37+09:00` — 독립 리뷰 FAIL(1 MAJOR, 1 MINOR, 0 BLOCKER). MAJOR: canary가 `docker create` 출력에서 검출될 때 생성된 scan container cleanup이 누락될 수 있음. MINOR: startup cleanup tests가 정확한 attempted/removed resource identity 대신 호출 개수만 검사함. - `2026-08-13T16:20:45+09:00` — MAJOR를 수정해 `docker create` ID를 canary 검사 전에 보존하고 모든 post-create 실패에서 정확한 ID cleanup을 보장했다. MINOR를 수정해 attempted/removed container·network·volume identity가 정확히 일치하도록 구현·테스트를 강화했다. - `2026-08-13T16:21:20+09:00` — 보정 후 release `23 passed`, 전체 `621 passed, 6 skipped`, 실제 image canary scan 및 startup smoke, lock·Ruff·diff 검증 통과. - `2026-08-13T16:22:58+09:00` — 독립 재리뷰 PASS. 기존 MAJOR/MINOR 모두 CLOSED, 새 회귀 및 배포 범위 확장 없음. - `2026-08-13T16:23:22+09:00` — 로컬 커밋 `96260b6302e050c6e564f3eca4e723558f26246f`(`feat(release): add verified image publication pipeline`) 생성. 작업트리 clean 확인. - 구현·검증·독립 리뷰는 완료했다. 기능 브랜치 push, PR, tag push, 실제 GHCR publication, GitHub Release 및 운영 배포는 수행하지 않았다. > 각 작업이 실제로 완료되고 검증될 때마다 이 댓글의 체크박스와 진행 기록을 갱신한다. 체크 표시는 구현 완료 또는 해당 검증의 실제 통과를 의미하며, 배포·릴리스 완료를 의미하지 않는다.