# Activity Log — line-0010 ## 2026-09-20 - 사용자 확인으로 `dcy-0010`을 confirmed 처리했다. - 사용자 승인으로 `req-0010`을 approved, `ac-0035`~`ac-0037`을 active 처리했다. - `proofline validate` 통과. 기존 line-0001~0009 status 누락 warning만 존재한다. - 구현 계획: 1. observed evidence strict parser, versioned gate record와 raw-byte digest receipt 2. explicit PRE/POST path와 trusted digest 기반 pair validator/manifest 3. regular file/symlink isolation type·size·hash manifest 4. operations-owned lifecycle 경계 문서화 5. focused/full/ProofLine 검증과 독립 review - 실제 production lifecycle command, runtime inspect, global lock과 checkout 복구는 범위 밖이며 실행하지 않는다. ### 구현 및 검증 - `release_provenance_gate.py`를 versioned `--observed-evidence-file` 입력과 machine-readable raw-byte digest receipt로 전환했다. - Strict observed evidence parser, v1 gate record, trusted-digest PRE/POST pair validator와 `scripts/verify_release_provenance_pair.py`를 추가했다. - Dirty checkout isolation을 regular file/symlink type·size·SHA-256 copy integrity manifest로 강화했다. - `docs/operations.md`에 source/operations 책임 경계와 새 gate/pair 절차를 반영했다. - Focused 검증: `32 passed, 3 skipped`; 변경 파일 Ruff 통과. - 전체 회귀: `1247 passed, 96 skipped`. - 저장소 전체 `ruff check .`는 변경 전부터 존재하는 광범위한 baseline 위반 719건으로 실패했다. 이번 변경 파일에 한정한 Ruff 결과는 PASS다. - 다음 작업: canonical ProofLine/diff 재검증, 독립 runtime/impact review, PR delivery. ### 독립 리뷰 차단사항 수정 - AC/security와 runtime/downstream 독립 리뷰가 동일하게 checkout 밖 symlink target 허용을 차단 결함으로 재현했다. - 원인은 symlink target text의 복사 무결성만 검사하고 target 해석 경계를 검사하지 않은 것이었다. - 절대 symlink target과 상대 `..` escape를 복사 전에 거부하고, 상대 target resolve 결과가 checkout 내부인지 검증하도록 수정했다. - 외부 absolute/relative escape fail-closed 및 source 불변 회귀와 내부 상대 symlink 성공 회귀를 추가했다. - 수정 후 focused 검증: `35 passed, 3 skipped`; 전체 회귀 `1250 passed, 96 skipped`. - 변경 파일 Ruff·compile, `proofline validate`, `git diff --check` 통과. ProofLine에는 기존 line-0001~0009 status warning만 남아 있다. - 차단사항 독립 재검토 PASS: focused isolation `4 passed`, 관련 persistence/CLI `22 passed, 3 skipped`, chained symlink escape 수동 probe도 fail-closed. 잔여 blocker 없음.