5.8 KiB
5.8 KiB
구현 진행 상황 — 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_kwDOR4l8PM8AAAABOonaegAuthor:genichinCreated:2026-08-13T06:57:02ZOriginal 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
구현 계획 및 작업 목록
- migration/Alembic resource를 installable package data로 전환하고 source↔wheel inventory parity를 검증한다.
- Python 3.11·
uv.lock기반 multi-stage non-root Docker image와 deny-by-default build context를 구현한다. - strict
vX.Y.Ztag-only, build-once, tested-artifact handoff, no-rebuild GHCR publication workflow를 구현한다. - image ID·archive SHA-256·OCI revision·canary·commit/version selector same-digest fail-closed helper와 contract tests를 구현한다.
- installed payload, DB-disabled
/health, isolated PostgreSQL migration + DB ping smoke와 cleanup 검증을 구현한다. - branch/main 무게시 검증 CI와 tag publication 권한 경계를 구현한다.
- 게시된 image digest와 pre-start
pfhub migrate-db, secret/read-only/writable mount의 operator handoff 경계를 문서화한다(배포 구현 제외). - focused release tests와 전체 pytest, lock/diff hygiene 및 실제 local image smoke를 통과한다.
- 독립 코드 리뷰 결과를 반영하고 최종 작업 상태를 기록한다.
진행 기록
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/main35e85981af845489236c18d709d0545c830e7f03에서 격리 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 tests22 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, release22 passed, 전체620 passed, 6 skipped,git diff --check통과. 이미지 UID/GID10001: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 createID를 canary 검사 전에 보존하고 모든 post-create 실패에서 정확한 ID cleanup을 보장했다. MINOR를 수정해 attempted/removed container·network·volume identity가 정확히 일치하도록 구현·테스트를 강화했다.2026-08-13T16:21:20+09:00— 보정 후 release23 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 및 운영 배포는 수행하지 않았다.
각 작업이 실제로 완료되고 검증될 때마다 이 댓글의 체크박스와 진행 기록을 갱신한다. 체크 표시는 구현 완료 또는 해당 검증의 실제 통과를 의미하며, 배포·릴리스 완료를 의미하지 않는다.