
Cotton vocabulary
- prompt layers
- glossary
- generation
- revision
- judge
- hard gate
- score
- intake
- checkpoint
- spend control
- stale sweep
- approval
- correction
- audit trail
Prompt Layers: SYSTEM_PROMPT_L0 · buildTranslateUserMessage · L1 CONTRACT · L3 SPEAKER · L6 SOURCE · L7 INSTRUCTION · ICU PLACEHOLDER · INLINE TAG · TARGET TEXT ONLY · FORCED MAPPING · L2 GLOSSARY · speaker_keyGlossary: glossary_term · fetchGlossaryHits · canonical_form · forbidden_translations · SUBSTRING MATCH · FORCED MAPPING · FORBIDDEN ALTERNATIVE · L2 GLOSSARY · glossary_hits · glossary_complianceGeneration: AdapterRegistry · anthropic-sdk · openai-sdk · claude-local · codex-local · llm_plan · PIVOT_VIA · shouldPivot · COTTON_ADAPTER_CONCURRENCY · NODE_OPTIONS · pivot_register_carry · translation.refinedRevision: buildTranslateUserMessage · L7 INSTRUCTION · runRefinementLoop · priorAttempt · priorCritique · REJECTED BY THE JUDGE · maxTurns · willRetry · RefinementHooks · HOOK ABORT · turn_count_to_final · critique_for_retry · failingDimensions · cost_ceiling_usd · needs_reviewJudge: glossary_hits · runJudge · JUDGE_SYSTEM_PROMPT · judgeModel · TEMPERATURE 0 · parseJudgeResponse · FOUR-SECTION XML · VERBATIM CHUNKS · severity · critique_for_retry · judge_citation · missingHardGates · TRIGGER ABSENT = PASS · judge.scoredHard Gate: ICU PLACEHOLDER · INLINE TAG · FORBIDDEN ALTERNATIVE · hard_gate_fail · hardGatePassed · glossary_compliance · cps_budget_compliant · icu_validity · inline_tag_preserved · length_constraint · HARD GATE FIRST · missingHardGates · TRIGGER ABSENT = PASSScore: HARD GATE FIRST · computeVerdict · cottonEvalScore · WEIGHTED AVERAGE · tone_register · personality_consistent · emotional_state_match · cultural_marker_preserved · accuracy · pivot_register_carry · auto_approve_threshold · failingDimensions · approval_gate · judge.scoredIntake: processXlsxBytes · classifySheetName · parseGoogleSheetsUrl · source_file · content_sha256 · extractStageDirection · speaker_key · ingest_session · segment.ingested · github.push.receivedCheckpoint: translation_progress · last_completed_step · turn_translated · turn_judged · finalized · jobEntryGuard · SELECT FOR UPDATE · attempt_count · DEFAULT_MAX_RESUME_ATTEMPTS · TWO-TX SPLIT · ON CONFLICT DO NOTHINGSpend Control: llm_plan · costCap · cost_ceiling_usd · rateLimit · FailoverDispatcher · haltOnQuota · detectQuotaFromStream · quota_daily_exhausted · auth_revoked · NO AUTO-SWAP · needs_credential · POST /:id/resumeStale Sweep: COTTON_ADAPTER_CONCURRENCY · NODE_OPTIONS · attempt_count · runStaleSweep · STALE_THRESHOLD_INTERVAL · DLQ_ATTEMPT_CAP · LIMIT 200 · re_enqueued · dead_lettered · ORPHAN RE-ENQUEUE · IN-FLIGHT SET · /health/queues · maxStalledCount · needs_reviewApproval: auto_approve_threshold · ingest_session · SELECT FOR UPDATE · needs_credential · POST /:id/resume · POST /:id/approve · POST /:id/unapprove · POST /:id/reject · APPROVE_FROM · REJECT_FROM · needs_review · reviewer_id · HITL · approval_gate · translation.approved · EDIT & APPROVE · actor_idCorrection: POST /:id/correct · corrected_text · CORRECT_FROM · EDIT & APPROVE · human_corrected_segments · human-corrected-after-mt · translation.human_corrected · supersedes · NEW REVISION · IMMUTABLE HISTORYAudit Trail: turn_count_to_final · severity · judge_citation · content_sha256 · segment.ingested · github.push.received · translation.approved · human_corrected_segments · translation.human_corrected · IMMUTABLE HISTORY · event_log · appendNextEvent · ULID · AGGREGATE VERSION · translation_state_log · actor_id · llm_call_log · telemetryHook · judge.scored · translation.refined
번역 점수, 재시도, 사람 검토를 각자의 경계에 둡니다.
용어집을 생성과 판정에 함께 주고, 판정 모델이 보고한 hard gate 실패가 평균 점수로 상쇄되지 않게 했습니다. 번역과 판정의 중간 상태를 남기며 재시도 · 비용 한도와 자격 소진을 구분하고, 정체 작업은 원인에 따라 큐나 검토로 되돌립니다.
번역 생성, 모델의 품질 판정, 재시도와 사람 검토를 한 흐름으로 잇는 업무 프로젝트입니다.
저장소 시작부터 참여 기간 중 확인한 작업까지
번역 편집 · 승인 화면, API, 작업 처리기로 이루어진 웹 앱으로, 개발 환경에서 동작합니다.
등록 → 진입
DB 커밋 뒤 큐에 넣고, worker가 행을 잠가 시도를 확인한 뒤 draft를 만듭니다.
원문 · 목표 언어데이터: 원문커밋 뒤 작업 등록
API · 작업 등록원문 세그먼트와 프로젝트의 목표 언어가 DB에 저장됩니다. 고객 데이터는 싣지 않습니다.
커밋 뒤 작업 등록
API · 작업 등록데이터: 커밋 뒤BullMQ · 작업 ID작업 큐DB 커밋이 끝난 뒤 활성 목표 언어마다, 요청 단위로 정해진 ID의 작업을 넣습니다. 등록이 실패하면 경고만 남고 커밋은 되돌리지 않습니다(원자적 outbox 없음). 그래서 정체 점검이 필요합니다.
BullMQ · 작업 ID
작업 큐실행 · 판정: 작업 전달행 잠금 · 시도 확인작업 진입BullMQ가 worker에 작업을 비동기로 넘깁니다.
행 잠금 · 시도 확인
작업 진입데이터: 진행 행draft · 진행 상태번역 상태트랜잭션 안에서 진행 행을 잠그고 draft 번역을 만듭니다. 이미 확정됐거나 자격 문제로 멈춘 작업의 자동 재시도는 건너뛰고, 수동 요청은 따로 다룹니다.
행 잠금 · 시도 확인
작업 진입실행 · 판정: 시도 허용번역 생성 · 모델 호출번역 turn시도 횟수를 한도 안에서 하나 올린 뒤 번역 turn을 시작합니다.
생성 → 판정 → 확정
같은 용어집으로 생성 · 판정하고, 번역과 판정을 따로 기록한 뒤 코드가 판정을 집계해 확정합니다.
워크스페이스 용어집
용어집 · 문맥데이터: 용어집번역 생성 · 모델 호출번역 turn워크스페이스 용어집과 문맥을 찾아 번역 생성에 넣습니다.
워크스페이스 용어집
용어집 · 문맥데이터: 같은 용어집판정 모델 호출 · 파싱번역 turn판정에도 같은 용어집 제약을 넘깁니다.
번역 생성 · 모델 호출
번역 turn데이터: Tx1 · 번역번역 · 판정 기록번역 상태직접 또는 en-US pivot으로 모델을 불러 번역하고, 호출 · 이벤트 · 진행을 한 트랜잭션으로 남깁니다. 중단 뒤 다시 실행되면 번역 호출과 비용이 반복될 수 있습니다.
판정 모델 호출 · 파싱
번역 turn데이터: Tx2 · 판정번역 · 판정 기록번역 상태판정 점수와 근거는 번역 × turn마다 한 번만 넣고, 중복이면 기존 행을 찾습니다. 근거 인용은 처음 넣을 때만 씁니다. 번역과 같은 트랜잭션이 아닙니다.
판정 모델 호출 · 파싱
번역 turn데이터: 점수 · gatehard gate · 가중 평균판정 집계판정 모델의 응답을 파싱해 차원별 점수와 gate 결과를 넘깁니다. 용어집 통과 여부는 판정 모델이 보고한 값입니다.
hard gate · 가중 평균
판정 집계실행 · 판정: 판정turn · 비용 · quota재시도 · 지출 판단보고된 hard gate가 하나라도 실패면 0점 · 실패이고, 그다음에 가중 평균과 차원별 기준을 봅니다. 종합 기준 8.0은 설정 기본값이며 관측한 번역 품질이 아닙니다.
turn · 비용 · quota
재시도 · 지출 판단실행 · 판정: pass확정 트랜잭션결과 확정통과하면 translated로 확정합니다.
확정 트랜잭션
결과 확정데이터: 확정 기록상태 · 호출 기록번역 상태후보 · 상태 · 점수 · turn을 확정하고, 진행 finalized와 상태 기록을 한 트랜잭션으로 남깁니다. translated일 때만 번역 완료 이벤트를 냅니다.
재시도 · 지출 한도
통과하지 못하면 다음 turn, 한도면 사람 검토, quota · 인증이면 지출을 멈추고 운영자의 재개를 기다립니다.
hard gate · 가중 평균
판정 집계실행 · 판정: 판정turn · 비용 · quota재시도 · 지출 판단보고된 hard gate가 하나라도 실패면 0점 · 실패이고, 그다음에 가중 평균과 차원별 기준을 봅니다. 종합 기준 8.0은 설정 기본값이며 관측한 번역 품질이 아닙니다.
turn · 비용 · quota
재시도 · 지출 판단실행 · 판정: 다음 turn번역 생성 · 모델 호출번역 turn통과하지 못하면 이전 번역과 critique를 넣어 다음 turn을 생성합니다. hard gate 실패도 곧바로 사람에게 가지 않고, 먼저 다시 시도할 수 있습니다.
turn · 비용 · quota
재시도 · 지출 판단실행 · 판정: 한도 · 중단사람 검토turn을 다 쓰거나 비용 상한에 닿으면 needs_review로 확정합니다. finalized는 처리가 끝났다는 뜻이지 사람이 승인했다는 뜻이 아닙니다.
turn · 비용 · quota
재시도 · 지출 판단실패 · 한도: quota · 인증자격 확인quota나 인증 신호가 오면 지출을 멈추고 needs_credential로 둡니다. 다른 계정이나 공급사로 자동 전환하지 않습니다. 멈춤 신호가 아닌 전송 오류는 BullMQ 재시도로 넘깁니다.
자격 확인실행 · 판정: 수동 재개BullMQ · 작업 ID
작업 큐자격을 확인한 운영자가 명시적으로 다시 시작합니다.
정체 작업 복구
오래된 draft를 이유별로 나눠, 큐에 없으면 다시 넣고 시도를 다 썼으면 사람의 결정으로 보냅니다.
draft · 진행 상태
번역 상태관측 · 보고: 정체 draft10분 넘은 draft · 최대 200정체 점검10분 넘게 draft인 후보를 오래된 순으로 최대 200건 봅니다. 조회에 잠금이 없고 갱신 · 기록이 따로 실행되므로, 경합 없는 일괄 처리라고 쓰지 않습니다.
10분 넘은 draft · 최대 200
정체 점검실행 · 판정: 상한 미만큐 상태 대조큐 대조시도가 상한(3회)보다 적으면 active · waiting · delayed · prioritized 큐 상태와 대조합니다. 코드에서는 시도 소진 분기가 큐 대조보다 먼저 옵니다.
큐 상태 대조
큐 대조실행 · 판정: 재등록BullMQ · 작업 ID작업 큐큐에 없으면 같은 작업을 다시 넣습니다. API는 요청 접미사가 붙은 ID를 쓰고 점검은 세그먼트 · 언어 ID로 찾으므로, 진행 중인 모든 요청을 빠짐없이 맞춘다고 쓰지 않습니다.
10분 넘은 draft · 최대 200
정체 점검실행 · 판정: 결과 있음사람 검토3회를 다 썼고 번역 결과가 있으면 needs_review로 보냅니다.
10분 넘은 draft · 최대 200
정체 점검실행 · 판정: 결과 없음자격 확인3회를 다 썼는데 결과가 없으면 needs_credential로 보냅니다.
모든 연결을 같은 굵기로 보여 줍니다. 흐름을 고르면 그 경로만 번호와 함께 강조됩니다.
- 실선 · 입력 · 결과 · 기록이 흐르는 방향
- 파선 · 실행 · 판정 · 요청
- 긴 점선 · 관측 · 보고, 판정과 별개
- 짧은 파선 · 실패 · 중단 · 한도
- 굵은 검은 선 · 고른 흐름, 번호는 순서
- 상자 · 코드 · 상태 경계, 머리말에 이름
- 안쪽 칩 · 그 경계의 구성 요소
- 점선 상자 · 그 경계 밖
- 주황 테두리 · 모델이 판단하는 곳
- 생성 · 지출 판단 · 확정
- 진입 · 판정 집계 · 점검
- 큐 · 상태 · 기록
- 등록 · 큐 대조
비공개 구현 · 개발 기록 기준으로 그렸습니다. 고객 데이터와 코드 경로는 싣지 않았습니다.
- 정체 점검 1회
- May 26, 2026 개발환경 sweep 한 사이클: 200건 확인, 106건 상태 전환, 2건 재등록. 상태 전환은 번역 성공이 아니며, 106건의 목적 상태별 내역은 기록에 없습니다.
- 정확히 한 번이 아닌 이유
- 기록은 중복 없이 남지만, 중단 뒤 다시 실행되면 모델 호출과 비용은 반복될 수 있습니다. 동시 실행 한도도 프로세스 단위이며 클러스터 전체 한도가 아닙니다.
- 판정의 범위
- 용어집 실패를 평균이 덮지 못하게 하는 것은 보고된 gate의 집계 규칙입니다. 모든 금지어를 찾거나 원어민 수준의 품질을 증명하지 않습니다.