짧은 모델 스트림은 실패한 패치입니다. 완전한 센티넬이 온전하게 도착할 때까지 아무것도 작성하지 마십시오. 일치하는 worktree 해시가 유일한 선박 신호입니다.
부분적인 모델 출력은 사용 가능한 diff가 아닙니다. 종료 코드 0이 완전한 파일을 증명하지는 않습니다. 이 스파이크는 스트림이 조기에 중단될 때 apply를 실패시킵니다.
가설 (Hypothesis)
이 스파이크에서는 하나의 주장이 테스트되고 있습니다. 클라이언트는 먼저 전체 스트림을 버퍼링해야 합니다. 네 개의 나쁜 수정(bad fixtures)은 추적된 모든 바이트를 변경하지 않도록 해야 합니다.
이 스파이크의 시계는 90분에 멈춥니다. 준비된 다섯 개의 로컬 수정에 대해 하나의 검사기(checker)를 실행하십시오. 스파이크 동안 두 번째 가설을 추가하지 마십시오.
스트림 계약 (Stream contract)
허용되는 스트림 형식은 일반 UTF-8 텍스트입니다. 스트림의 마지막 줄은 END_PATCH와 같아야 합니다. 첫 번째 줄은 PATH 접두사로 시작해야 합니다.
선언된 경로는 상대적이고 로컬이어야 합니다. 그 경로는 spike_wt 디렉토리 안에 남아 있어야 합니다. 금지된 이름은 어떤 쓰기 작업보다 먼저 닫힘 실패(fail closed)를 일으켜야 합니다.
나중에 행들이 비교 가능하도록 다음 안정적인 종료 코드를 사용하십시오.
- 종료 코드
2: 센티넬 라인이 누락됨을 의미합니다.
- 종료 코드
3: 헤더 라인이 사용할 수 없음을 의미합니다.
- 종료 코드
4: 요청된 경로가 금지되었음을 의미합니다.
- 종료 코드
5: 본문이 40줄을 초과함을 의미합니다.
- 종료 코드
6: 실패로 인해 worktree가 오염되었음을 의미합니다.
- 종료 코드
0: 허용된 파일 하나가 교체되었음을 의미합니다.
클라이언트 타임아웃은 종료 코드 2를 사용해야 합니다. 멈춘 읽기(hung read)는 결코 성공으로 간주되지 않습니다. 추가적인 종료 코드는 통과로 계산되지 않습니다.
버퍼가 먼저 오는 이유 (Why the buffer comes first)
모델 토큰 스트림은 보통 작은 조각들로 도착합니다. 순진한 클라이언트는 각 조각을 대상에 추가합니다. 소켓이 끊어지면 디스크에 반쪽짜리 파일이 남게 됩니다.
그 반쯤 작성된 파일도 여전히 로컬에서 편집 가능한 것처럼 보일 수 있습니다. 나중에 테스트에서는 심지어 손상된 모듈을 가져올 수도 있습니다. 이 스파이크는 그러한 상태를 진행(progress)이 아닌 데이터 손실로 취급합니다.
따라서 검사기는 stdin의 모든 내용을 완료할 때까지 읽습니다. 분류는 전체 문자열이 도착한 후에만 발생합니다. worktree는 그 분류가 반환되기 전에 해시됩니다.
90분 계획 (Ninety-minute plan)
분(Minutes) 0부터 15까지는 위에 작성된 계약을 잠급니다. spike_wt와 로컬 피처 디렉토리를 생성합니다. 이 블록 동안 원격 세션을 열지 마십시오.
분(Minutes) 15부터 40까지는 체커(checker)와 다섯 개의 피처를 입력합니다. 이 중간 블록 동안에는 로컬 파이프만 실행하십시오. 각 종료 코드를 일치하는 해시 옆에 기록하십시오.
분(Minutes) 40부터 55까지는 모든 실패 행에서 해시를 비교합니다. 다이제스트(digests)는 시작 전과 후에 정확히 일치해야 합니다. 단 하나의 해시 불일치도 스파이크를 조기에 종료시킵니다.
분(Minutes) 55부터 75까지는 로컬 행이 녹색(green)인 경우 원격 초안을 하나 허용합니다. 이 원격 초안은 해시된 작업 트리 외부에 저장하십시오. 저장된 초안 파일을 동일한 체커로 파이프합니다.
분(Minutes) 75부터 90까지는 출시(ship) 또는 종료(kill)를 표시해야 합니다. 출시하려면 다섯 개의 일치하는 로컬 행과 하나의 깨끗한 적용(clean apply)이 필요합니다. 그 외의 모든 것은 한 줄로 작성된 종료(kill)입니다.
체커 제안 (Checker proposal)
아래 프로그램은 실행되지 않은 제안일 뿐입니다. 이 초안에서 기록된 벤치마크가 아닙니다. 종료를 신뢰하기 전에 자신의 기계에서 실행하십시오.
# UNEXECUTED PROPOSAL — not executed for this article.
import hashlib
import os
...
.spike_tmp 디렉토리는 spike_wt 외부에 위치합니다. os.replace 이전에 충돌이 발생하더라도 해시된 트리를 변경해서는 안 됩니다. 모든 작업 행이 끝난 후에는 해당 임시 디렉토리를 삭제하십시오.
로컬 명령어 (Local commands)
첫 번째 파이프 전에 작은 트리(tiny tree)를 준비합니다. 모든 비밀 파일은 그 작은 트리 외부에 유지하십시오. 그런 다음 피처들을 고정된 순서로 파이프합니다.
mkdir -p spike_wt/notes fixtures .spike_tmp
printf 'seed\n' > spike_wt/notes/seed.txt
python3 check_stream.py < fixtures/trunc.txt; echo exit:$?
...
여기 있는 모든 피처 파일은 수작업으로 작성된 로컬 텍스트입니다. 그 어떤 것도 모델의 샘플 출력이 아닙니다. 예상되는 피처 모양은 아래 블록과 같습니다.
# fixtures/trunc.txt
PATH notes/seed.txt
seed
...
유효한 헤더와 마흔하나(41) 개의 본문 행으로 long.txt를 구축하십시오. 그 긴 피처는 필수적인 센티넬(sentinel)로 끝내야 합니다. 종료 코드 5가 예상되며, 완전히 변경되지 않은 작업 트리 해시가 나와야 합니다.
결정 테이블 (Decision table)
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
| Fixture | Exit | Hash rule | Next action |
|---|
| trunc.txt | 2 | unchanged | discard buffer |
| ... | | | |
| Read the decision table from top to bottom. Do not skip ahead to the success row. A red row above it cancels the remote step. | | | |
빨간 행 읽는 법
성공하는 행을 찾기 전에 exit 값을 일치시키세요. before hash가 after hash와 같은지 확인하세요. 그래야만 버퍼를 폐기하고 아래로 계속 진행할 수 있습니다.
타임아웃 규칙
이 스파이크에 대해 20초 읽기 제한을 설정하세요. 이 제한은 공급업체 설정이 아니라 로컬 선택입니다. 원격 소켓이 열릴 때 타이머를 시작합니다.
타이머가 작동하면, 열린 소켓을 닫으세요. 부분 버퍼는 메모리에 남아 있는 동안 폐기합니다. 새로운 파일을 생성하지 않고 exit 2를 반환하세요.
같은 90분 이내에 초안을 재시도하지 마세요. 재시도는 짧은 스트림을 나중에 온 완전한 스트림 뒤에 숨길 수 있습니다. 가설은 루프가 아니라 하나의 원격 초안만 허용합니다.
배포 또는 폐기
모든 테이블 행이 일치할 때만 스파이크를 배포하세요. 성공 행은 notes/seed.txt만 변경할 수 있습니다. 순수한 git status는 다른 변경된 경로가 없어야 합니다.
어떤 실패한 행이라도 파일을 작성하면 스파이크를 폐기하세요. exit 6이 단 한 번이라도 나타나면 스파이크를 폐기하세요. 로컬 행이 빨간색인 동안 원격 초안이 실행되면 폐기하세요.
배포 결정을 하나의 단어로 기록하세요. 그 단어 아래에 다섯 개의 기록된 exit 코드를 추가하세요. 폐기는 실패한 저자가 아니라 유효한 증거입니다.
선택적 초안이 실행되는 곳
로컬 fixture 행들이 실제 증거입니다. 원격 초안 단계는 선택적이고 늦게 유지됩니다. 그 원격 단계는 테이블이 녹색일 때만 시작됩니다.
MonkeyCode는 오직 그 선택적 원격 초안에만 속합니다. 공개: 이 문서는 MonkeyCode의 제품 아웃리치(product outreach)의 일환으로 준비되었습니다.
운영자 제공 메모에는 무료 모델 액세스와 무료 서버 옵션이 존재한다고 명시되어 있습니다. 본 문서는 모델, 할당량, 하드웨어 또는 임대 기간을 명시하지 않습니다. 해당 제품 세부 정보는 출처로 제공되지 않았습니다.
무료 서버는 스트림 소스로만 취급하세요. 그 출력을 해시된 트리 외부의 .spike_tmp/remote.txt에 기록하세요. 동일한 검사기를 이 저장된 파일에 대해 실행하세요.
종료 코드가 0이 아니면 해당 파일을 삭제하세요. 로컬 테이블이 이미 녹색(green)이라면, 그 접근 방식을 단일 초안에 사용하세요. 만약 로컬 행 중 어느 것이라도 빨간색(red)이라면, 원격 단계는 수행하지 마세요.
제한 사항 (Limitations)
종료 신호(end sentinel)는 모델이 위조하기 쉽습니다. 모델은 잘못된 편집 후에 END_PATCH를 방출할 수 있습니다. 이러한 형태 검사로는 그러한 거짓말을 잡아낼 수 없습니다.
40줄 제한은 임의적인 스파이크 한계입니다. 이는 지나치게 큰 사고를 막는 것이지, 일반적인 논리 버그를 막는 것은 아닙니다. 잘못된 3줄 파일도 여전히 0으로 종료될 수 있습니다.
해시는 .git을 건너뛰고 다른 모든 루트 디렉토리를 무시합니다. spike_wt 외부의 파일은 증명(proof)에 보이지 않습니다. 홈 디렉터리를 검사기에 지정하지 마세요.
Python의 os.replace는 단일 파일 시스템에서만 원자적(atomic)입니다. 다른 장치에 있는 임시 파일은 교체(replace)에 실패할 수 있습니다. .spike_tmp를 spike_wt와 같은 볼륨에 유지하세요.
무료 서버의 가용성은 지연 시간 서비스 수준 계약(latency SLA)이 아닙니다. 이 검사기 제안은 이 기사에 대해 실행되지 않았습니다. 본 페이지에서 복사한 숫자가 아닌, 자체 테이블을 게시하세요.
이 메모는 영속성 주장(permanence claim)을 내포하지 않습니다. 운영자(operator)에 의해 설명되는 접근 방식은 나중에 변경될 수 있습니다. 다음 스파이크 전에 현재 계획을 다시 읽어보세요.
누가 이를 건너뛰어야 하는가 (Who should skip this)
편집이 잠금 파일(lockfile)을 수정해야 할 경우 스파이크를 건너뛰세요. 그 금지된 경로 집합은 의도적이며 닫혀 있습니다. 이 금지된 집합을 우회하면 스파이크 결과가 무효화됩니다.
트리에 활성 자격 증명(live credentials)이 포함되어 있는 경우 스파이크를 건너뛰세요. 작업 트리 해시 함수는 원시 파일 바이트를 읽습니다. spike_wt에 있는 비밀 정보는 다이제스트 입력값으로 들어갈 것입니다.
의미론적 검토(semantic review)가 필요한 경우 스파이크를 건너뛰세요. 이 게이트는 스트림 프레이밍을 확인하는 것이지, 프로그램 동작을 확인하는 것이 아닙니다. 이미 신뢰하는 테스트와 짝을 지어 사용하거나, 배포하지 마세요.
클라이언트가 토큰을 바로 디스크로 플러시(flush)해야 하는 경우 건너뛰세요. 전체 스트림을 버퍼링하거나, 이 계획을 실행하지 마세요. 증분식 디스크 라이터는 해시 규칙을 만족할 수 없습니다.
이름이 지정된 할당량(quota)이나 모델 SLA가 필요할 때는 건너뛰세요. 이 메모에는 그러한 수치가 포함되어 있지 않습니다. 용량을 계획하기 전에 1차 출처를 찾으십시오.
저장해야 할 로그 라인
스파이크 로그는 지루하면서도 완전하게 유지하세요. 나중에 읽을 사람이 위해 저장할 라인은 네 줄이면 충분합니다. 모든 공급업체 스크린샷은 로그 폴더에서 제외하세요.
- 날짜, 가설 ID(hypothesis id), 그리고 시간 제한(clock limit)을 기록하세요.
- 고정 순서(fixture order)로 나열된 다섯 가지 종료(exits)를 모두 기록하세요.
- 모든 실패 행(failure row)에 대한 전후 해시(before and after hashes)를 기록하세요.
- 단어 'ship', 또는 단어 'kill'.
로그용으로 제안되는 가설 ID는 stream-sentinel-2026-10-10입니다. 이 날짜는 제품 출시가 아닌 계획된 스파이크를 나타냅니다. 기록된 해시 라인은 스파이크의 증거입니다.
이 스파이크가 증명하지 않는 것
이 스파이크는 원격 초안(remote draft)이 정확하다는 것을 증명하지 않습니다. 이는 클라이언트가 짧거나 불법적인 스트림을 거부했음을 증명합니다. 행동적 정확성(Behavioral correctness)은 여전히 기존 로컬 테스트가 필요합니다.
이 스파이크는 어떤 모델 공급업체도 비교하지 않습니다. 품질 점수나 지연 시간 테이블은 여기에 나타나지 않습니다. 이 두 가지 측정 기준 중 어느 것을 추가하더라도 두 번째 가설을 만들게 됩니다.
이 계획은 무인(unattended) 프로덕션 쓰기를 승인하지 않습니다. 여전히 사람이 변경된 파일을 읽어야 합니다. 만약 그 사람이 읽는 것이 불가능하다면, 적용(apply)을 취소하세요.
90분 시계가 끝날 때 작업을 멈추세요. 모델을 수정하기 위해서만 이 스파이크를 연장하지 마십시오. 빨간색 의사 결정표(red decision table) 자체가 이미 완료된 결과입니다.