유료 워크스페이스를 취소하기 전에 코딩 에이전트에서 병합(merge) 훅을 분리해야 합니다. 왜냐하면 이 훅은 공급업체 관계가 끝난 후에도 여전히 차이점(diff)을 적용할 수 있기 때문입니다. 유료 제품은 종종 제안, 검토, 적용을 하나의 신뢰받는 동작으로 취급하며, 무료 대체품은 그 신뢰를 상속받지 못합니다. 무료 모델도 유용한 패치(patch)를 작성할 수 있지만, 실행기(runner)가 이를 밀어붙이는 자격 증명(credential)을 받아서는 안 됩니다. 승인(approval)을 자신이 통제하는 곳에 다시 연결하고, 이 바인딩이 테스트될 때까지 이전 키를 그대로 두세요.
남겨진 것은 프롬프트가 아니라 병합입니다
위험한 잔여물은 거의 프롬프트가 아니며, 보통 여전히 어떻게 병합할지 아는 스크립트, 워크플로우 또는 웹훅입니다. 그 자동화는 공급업체 신원(identity), 안정적인 워크스페이스, 그리고 이전 인터페이스에 존재했던 검토 클릭을 신뢰했습니다. 전환 이후에도 동일한 자동화는 감시되는 경로(watched path)에 차이점을 떨어뜨릴 수 있는 모든 프로세스를 신뢰합니다. 만약 무료 서버가 그 경로를 쓸 수 있다면, 당신은 이전의 검토 과정 없이도 이전의 특권을 재구축한 것입니다.
당신은 세 가지 다른 것을 마이그레이션하고 있으며, 이 중 오직 하나만이 더 저렴한 호스트로 이동해야 합니다. 제안 채널은 이동할 수 있습니다. 왜냐하면 초안 차이점(draft diff)은 아직 기본 브랜치에 대한 변경 사항이 아니기 때문입니다. 승인 기록은 모델이 편집할 수 없는 풀 리퀘스트(pull request)나 보호된 파일에 검토자들과 함께 남아 있어야 합니다. 적용 자격 증명은 실제 작업을 비교할 때까지 보호된 CI 또는 사람에게 남아 있어야 합니다.
환경 변수나 웹훅을 단 하나 변경하기 전에 이 세 가지 소유자를 기록하세요. 이름이 지정되지 않은 전환은 채팅 로그가 되며, 그 채팅 로그는 유료 워크스페이스가 닫힐 때 사라집니다. 당신은 즐거운 출시 메모를 작성할 때가 아니라 첫 번째 나쁜 패치(bad patch) 동안 이 이름들을 원하게 될 것입니다.
단계 1: 차이점을 적용할 수 있는 모든 경로를 인벤토리화하세요
깨끗한 체크아웃 상태에서 시작하여 생성된 텍스트를 커밋이나 배포로 전환하는 동사들을 검색하세요. 아직 모델의 품질을 판단하는 것이 아니며, 공급업체에 관계없이 살아남을 수 있는 부작용만을 찾는 것입니다. 로컬 스크립트와 에디터 작업도 포함해야 합니다. 왜냐하면 노트북 훅(hook)은 호스팅된 워크플로우만큼 쉽게 취소될 수 있기 때문입니다.
apply, merge, push 동작을 위해 워크플로우와 스크립트를 검색하고, 파일 목록을 다이어리에 저장하세요. 일치하는 경로들을 'apply paths'라는 제목 아래에 붙여넣어 나중에 표가 기억이 아닌 증거를 갖도록 하세요. 해당 파일의 명령어가 브랜치를 변경하거나 배포 대상을 바꿀 수 있는 경우가 아니라면 문서화된 검색 결과는 무시하세요.
git grep -nE 'git apply|gh pr merge|git push|patch -p' -- .github scripts || true
- 에이전트 프로세스가 읽을 수 있는 모든 시크릿(secret) 이름을 나열하고,
push, 배포 또는 방화벽 변경을 수행할 수 있는 이름은 표시하세요. 로그만 읽는 시크릿은 일단 유지해도 되지만, 푸시를 하는 시크릿은 다이어리에서 굵게 언급해야 합니다. 그 값들을 다이어리에 복사하지 말고, 이름, 소유자, 그리고 그것들을 참조하는 워크플로우 파일만을 기록하세요.
git grep -nE 'GITHUB_TOKEN|DEPLOY_KEY|SSH_KEY|API_KEY' -- .github scripts .env.example || true
- 최근 에이전트 실행을 열어 병합(merge) 이벤트 전에 인간 검토자 식별자가 나타나는지 확인하세요.
유효한 제안(proposal)은 작업 ID, 기본 리비전(base revision), 통합 diff(unified diff), 그리고 팀이 이미 사용하는 목록에서 가져온 위험 레이블을 포함합니다. 유효한 적용(apply)은 동일한 작업 ID, 해당 diff의 해시, 그리고 검토와 연결된 인간 행위자(human actor)를 인용합니다. 모델이 제안을 작성할 수는 있지만, 패치가 작거나 명백해 보여도 모델이 승인(approval)을 작성하지는 않을 수 있습니다.
체커(checker)는 지루하게 유지하고, 필수 필드가 비어 있거나 행위자가 에이전트 자체일 때는 실패 처리(fail closed)해야 합니다. 다음 프로그램은 이 다이어리가 실행했다고 주장하는 정책 엔진이 아니라, 로컬에서 실행하고 조정해야 할 예시입니다. 이 코드는 두 개의 JSON 파일을 읽고, 모델이 작성한 승인을 거부하며, 해시가 일치할 때만 적용을 허용합니다.
# 예시 체커. 본인이 직접 파일에 실행하기 전까지는 레이블: unexecuted.
import hashlib
import json
...
네트워크 호출이 존재하기 전에 노트북에서 명령을 재현할 수 있도록 두 개의 샘플 파일을 만드세요. 제안 파일에는 승인 필드가 포함되어서는 안 되며, 승인 파일은 직접 계산한 해시를 담고 있어야 합니다. 의도적인 불일치는 유용한 첫 번째 테스트입니다. 왜냐하면 통과(pass)를 신뢰하기 전에 게이트가 실패하는 것을 보고 싶기 때문입니다.
{
"task_id": "task-184",
"base_rev": "a1b2c3d4",
...
python -c 'import hashlib,json,pathlib,sys; p=json.loads(pathlib.Path(sys.argv[1]).read_text()); print(hashlib.sha256(p["diff"].encode()).hexdigest())'
proposals/task-184.json
python check_apply.py proposals/task-184.json approvals/task-184.json
러너가 작성할 수 있는 곳에 제안을 저장하고, 러너가 푸시할 수 없는 경로에 승인을 저장해야 합니다. 느슨한 권한을 가진 단일 공유 디렉터리는 분리를 무너뜨리며, 심지어 체커 함수가 노트북에서 엄격해 보여도 마찬가지입니다. 코드 오너(code owners)를 사용하거나 별도의 승인 리포지토리(approvals repository)를 사용하고, 에이전트 토큰이 그곳에 쓰려고 할 때 거부되는지 확인하세요.
proposals/<task_id>.json
approvals/<task_id>.json
3단계: 제안 작성자에게만 자유 옵션을 지정하기
공지: 이 문서는 MonkeyCode의 제품 홍보 활동의 일환으로 작성되었습니다.
운영자는 MonkeyCode를 제안서 작성을 위한 무료 모델 접근 및 무료 서버 옵션을 제공하는 오픈 소스 프로젝트로 설명합니다. 해당 작성자는 푸시 자격 증명(push credential)을 보유해서는 안 되며, 의존하기 전에 반드시 프로젝트 문서를 통해 현재 약관을 확인해야 합니다. 만약 프로젝트 페이지에 무료 토큰 할당량이 명시되어 있다면, 그 실시간 수치를 직접 기록해 두십시오. 이전 채팅에서 사용했던 토큰 번호를 재사용하지 마세요. 왜냐하면 할당량은 변하며 이 초안에서는 이를 검증하지 않았기 때문입니다.
가용성 참고 사항(availability note)은 품질 결과물이 아니며, 로그가 얼마나 오래 유지될지에 대한 약속도 아닙니다. 무료 옵션은 리뷰를 건너뛸 수 있다는 증거로 취급하기보다는, 제안서 작성기를 실행할 장소로 간주하십시오. 해당 호스트가 청구서를 보내지 않더라도, 귀하의 리포지토리 규칙(repository rules)은 계속 유효합니다.
작성자를 이동하는 동안에는 유료 워크스페이스를 읽기 가능하게 유지하고, '적용(apply)' 작업을 같은 변경 사항에서 수행하지 마십시오. 무료 서버는 제안 파일(proposal file)을 생성한 후 종료되어야 하며, 기본 브랜치(default branch)를 업데이트할 수 있는 토큰이 없어야 합니다. 보호된 CI(Protected CI)는 검사기(checker)를 실행해야 하며, apply allowed가 출력된 후에만 별도의 작업에서 diff를 적용해야 합니다. 만약 무료 서버 이미지에 이전 배포 키(deploy key)가 여전히 포함되어 있다면, 첫 번째 원격 작업 전에 해당 키를 제거하십시오.
- 이미 수락한 세 가지 작업을 선택하세요: 낮은 위험의 수정 하나, 종속성 증가(dependency bump) 하나, 그리고 인증(auth), 결제(billing), 또는 데이터 마이그레이션에 영향을 주는 변경 사항 하나입니다.
- 유료 실행의 파일 목록, 기본 리비전(base revision), 및 diff 해시를 저장하고, 전환 주간 동안 새로운 작업을 임의로 만들지 마십시오.
- 동일한 작업을 무료 모델을 통해 실행하고, 프로세스가 제안 파일을 작성하도록만 허용하십시오.
- 주변 설명이 아니라 경로와 고정된 기본 리비전(pinned base revision)을 비교하세요. 왜냐하면 범위는 변해서는 안 되지만 문구는 달라질 수 있기 때문입니다.
- 기다리는 동안 노트북에서 아무것도 적용하지 말고, 리뷰어가 일치하는 승인(approval)을 작성할 때까지 CI가 작업을 거부하도록 하십시오.
저장된 목록 외의 파일은 예상되는 파일에 대한 테스트가 성공적(green)일지라도 중단점(stop)입니다. 범위 이탈(Scope drift)이란 검토되지 않은 수정 사항이 추가 경로를 전혀 확인하지 않고도 배지를 통과하는 방식입니다. 이 중단점을 일지에 기록하고, 이번 한 번만 개인 체크아웃의 추가 파일을 적용하지 마십시오.
또한 비교하기 전에 기본 리비전(base revision)을 고정(pin)하거나, 이동하는 기본 브랜치(moving default branch)가 두 호스트를 모두 잘못 보이게 만들 수 있습니다. 이 명령어는 두 실행이 시작할 의도된 끝점(tip)을 기록하며, 그 값을 제안서에 붙여넣어야 합니다. 무료 실행에서 다른 부모(parent)를 보고하면, 제안서를 거부하고 고정된 리비전 대비하여 다시 실행하십시오.
git rev-parse origin/main
비교 주간 동안 생성된 diff를 수동으로 rebase하지 마십시오. 왜냐하면 그것이 새로운 호스트가 계약을 준수했는지 여부를 숨기기 때문입니다. 수동 정리(Hand cleanup)는 게이트가 통과된 후에 할 수 있으며, 전환하는 데 사용하는 증거의 일부가 되어서는 안 됩니다. 수동으로 편집된 diff는 더 깨끗해 보일 수 있지만, 고정했던 기본 리비전을 무시한 호스트를 숨길 수 있습니다.
4단계: 유료 키를 삭제하기 전에 결정표 읽기
이 표를 이미 마이그레이션이 끝난 후 대충 훑어보는 요약본이라기보다는 게이트(gate)로 취급하십시오. 알 수 없는 셀은 제안서 생성만으로도 더 저렴하거나 편리해 보이는 상황에서도 트래픽 적용이 이전 경로에 머물러 있음을 의미합니다. 이번 주에 다시 확인하지 않은 기능 목록에서가 아니라, 1단계의 인벤토리(inventory)를 기준으로 각 행을 판단하십시오.
| 항목 | 오늘 유료 측면 | 무료 측면 요구 사항 | 적용 이동 여부? |
|---|
| Diff 작성기 | 공급업체 에이전트 식별자 | 제안 경로만 | 제안만 함 |
| ... | | | |
제안서 작성기는 diff-writer 행과 push-secret 행 둘 다 충족될 때만 이동시키십시오. 적용 작업(apply job)은 저장한 세 가지 작업의 모든 다른 행이 충족될 때만 이동시키십시오. 유료 키가 여전히 존재하는 또 다른 주는, 어떤 검토자도 보지 못한 병합을 되돌리는 것보다 저렴합니다.
녹색 체크 이후에도 남아 있는 제한 사항들
일치하는 해시(hash)는 승인된 바이트가 제안된 바이트임을 증명할 뿐이며, 해당 바이트가 배포하기에 안전하다는 것을 증명하지는 않습니다. 무료 모델은 예상 파일을 수정하여 호출자(caller), 마이그레이션(migration), 또는 깜빡 잊고 명시한 권한 검사까지도 망가뜨릴 수 있습니다. 작업에는 실행 가능한 테스트를 유지하고, 새로운 라이터(writer)에서 해당 테스트가 성공할 때까지 신뢰할 수 있는 경로를 확보해야 합니다.
샘플 체커는 승인 경로를 에이전트 토큰으로부터 보호하기 위해 사용자의 리포지토리 권한을 신뢰합니다. 만약 그 토큰이 해당 경로에 푸시(push)할 수 있다면, 이 게이트는 형식적인 것이므로 아예 적용 작업(apply job)을 마이그레이션해서는 안 됩니다. 무료 모델 접근 및 무료 서버 옵션은 새로운 계약 없이도 지연 시간(latency), 컨텍스트(context), 보유 기간(retention)을 변경할 수 있습니다. 유료 워크스페이스가 닫히면서 이전 실행 기록까지 가져갈 것이므로, 제안 파일을 사용자가 통제하는 스토리지로 복사하십시오.
이 문서는 제품 순위를 매기거나 벤치마크, 토큰 가격 또는 하드웨어 형태를 보고하지 않습니다. 저장된 세 가지 작업만이 적용 작업이 진행될지 여부를 결정해야 하는 유일한 증거입니다. 만약 해당 작업들이 프로덕션 위험에 전혀 영향을 미치지 않는다면, 문서 편집에서 인증(auth) 변경으로 일반화해서는 안 됩니다.
아직 이 전환을 사용하면 안 되는 경우
현재 에이전트가 풀 리퀘스트(pull request)나 동등한 변경 기록 없이 프로덕션에 배포할 수 있는 상황이라면, 이 계획을 사용하지 마십시오. JSON 파일보다 더 강력한 통제가 필요하며, 호스트를 변경하기 전에 그 통제를 설치해야 합니다. 이름이 지정된 검토자(reviewer)가 고위험 차이점(diffs)을 읽지 않을 것이라면 이 계획을 사용하지 마십시오. 왜냐하면 빈 대기열은 남겨진 것을 재현시키기 때문입니다.
작업에 비밀 정보, 고객 데이터 또는 미출시 취약점의 세부 사항이 포함된 경우 무료 서버를 건너뛰십시오. 더 적은 비용이 이미 유료 에이전트를 위해 수락한 데이터 규칙을 완화하지는 않습니다. 만약 팀이 여전히 노트북에서 패치를 적용하고 보호되는 CI(Continuous Integration)가 없다면, 다른 라이터를 추가하기 전에 해당 장치들을 재고 조사하십시오.
테이블이 진실일 때까지 적용 키를 남겨두십시오
체커가 세 개의 실제 작업에 대해 apply allowed를 출력한 후에는 에이전트 환경에서 푸시 자격 증명(push credential)을 제거하고 제안서 작성 기능은 그대로 유지하세요. 필요한 보존 데이터, 여기에는 이전의 diff와 그 옆의 검토 메모를 포함하여 복사할 때까지 유료 워크스페이스는 읽기 가능 상태로 두세요. 만약 무료 서버가 해당 라이터(writer)를 호스팅해야 한다면, MonkeyCode의 현재 프로젝트 노트를 읽고 테이블이 안전하다고 표시하는 내용만 유지하세요.