소스만 압축했다는 말도 공개 안전을 뜻하지 않았다. 개발 지침과 과거 기록에 실제 계정이나 로컬 경로가 섞일 수 있기 때문이다. 북극성에는 개발 보관용 소스 압축과 공개용 소스 생성이 따로 있다. 이 차이를 읽으며 필요한 코드를 남기는 일과 개인 환경을 내보내지 않는 일을 함께 설계했다.
이름이 소스 ZIP이어도 포함 기준은 다르다
source_archive는 runtime 데이터와 의존성을 제외하지만 루트 AGENTS와 넓은 docs·scripts·tests를 보관한다. 이것은 개발을 다시 이어 갈 자료로는 의미가 있어도 공개용 선별과 같지 않다. 압축 파일 이름에source가 있다는 이유로 그대로 공개하는 절차를 만들지 않았다.
public_release는 별도의 허용 목록으로 파일을 고르고 개인 지침·인증·경로 설정·연결 파일을 거절한다. 실제 프로필·DB·로그·캡처와 실행 자료도 공개 구성에 섞지 않는다. 보관본의 완전성과 공개본의 최소 필요 범위가 다른 질문이라는 점을 먼저 정해야 했다. 일반 ZIP에서 몇 파일을 지웠다는 설명보다 선택한 목록을 남기는 편이 검토하기 좋았다.
실행 코드는 바이트를 보존하고 시험 예시는 따로 다룬다
공개 생성기는 앱·패키지·SDK·MCP 같은 실행 소스를 정본과 바이트로 대조한다. 공개 준비를 하며 제품 코드를 조용히 다른 것으로 바꾸지 않는다. 반면 시험과 보관 회귀 자료에는 지정한 개인 예시 문자열을 가상 값으로 치환하는 경로가 있다.
두 작업의 목적이 다르므로 결과도 나눠 적는다. runtime 동일 파일 수와 전체 공개 파일 수가 같은 숫자일 필요는 없다. 치환 목록은 알고 있는 예시를 바꾸는 규칙이지 모든 개인 정보를 알아서 찾는 익명화 시스템이 아니다. 새로운 자료가 추가되면 목록과 내용 검토를 다시 해야 한다. 코드 동일성과 개인정보 검토를 서로 대신시키지 않았다.
과거 코드가 필요한 이유도 분명히 적는다
현재 공개 구성에는 archive의 내장 CLI TypeScript 자료 일부가 오프라인 회귀와 타입 의존성 때문에 들어간다. 그 코드가 있다는 사실을 현재 설치판에서 내장 CLI가 실행된다는 증거로 쓰지 않는다. 설치 진입점과 명시적 포함 목록은 별도다.
반대로 폴더 이름만 보고 모두 제거하면 공개 ZIP의 타입 검사나 회귀가 깨질 수 있다. 필요한 이유와 현재 runtime 미연결을 문서에 함께 남기고 별도 추출 경로에서 확인해야 한다. 공개 파일을 줄이는 일은 가장 적은 수를 만드는 경쟁이 아니라 수정 가능한 구성을 유지하며 개인 환경을 분리하는 일이다. 과거 기능을 되살리는 작업은 이 목적에 포함하지 않는다.
패턴0건은 내용 검토의 종료가 아니다
생성기는 자격 증명처럼 보이는 몇 가지 패턴과 금지 파일을 검사하고 발견하면 멈춘다. 압축 내부 오류도 확인한다. 하지만 보고서의credential pattern0은 그 정규식에 맞는 항목이 없었다는 뜻이다. 실제 업체 이름·원고·비정형 비밀이 전혀 없다는 보증서가 아니다.
현재 공개 안내도 파일 목록 확인을 별도로 요구한다. 나는 문서와 주석, 시험 예시를 자료로 읽고 공개할 의미와 범위를 다시 봐야 한다고 생각한다. 이 글에서는 원래 개인 파일을 열어 지우는 대신 생성 규칙을 검토했다. 원본 개발 환경을 보존하며 공개용 후보를 별도 폴더에서 만드는 방식이 비교와 검토에도 도움이 된다.
공개본은 자기 힘으로 검사할 수 있어야 한다
새 ZIP을 다른 폴더에 풀고 잠금파일에 맞는 의존성으로 타입·경계·회귀를 확인한다. 개발 폴더에만 있던 파일이 우연히 누락을 가려 주지 않게 하는 절차다. 그렇다고 새 네트워크 의존성 설치나 다른 PC 전체 호환성까지 했다고 쓰지 않는다. 실행한 조건과 보고서의 한계를 따른다.
이번에는 원래 공개 생성기를 실행하거나 업로드하지 않았다. 현재 규칙과 과거 결과를 글의 재료로 사용했고 홈페이지에는 독립 합성 모듈을 별도로 검증해 제공한다. 누군가 소스를 받아 수정하려 할 때 필요한 구조는 남고 제작자의 로그인과 실제 업무는 따라가지 않는 공개본을 만드는 것이 내가 공유하려는 배포 노하우다.