승격 대기 — 매트릭스 정본 후보
{
"contract": "matrix-component-v1",
"component_id": "module.risu.174678332.context-cutter",
"component_version": "1.0.0",
"component_type": "module",
"provenance": {
"review_status": "candidate",
"runtime_status": "inactive",
"availability_verdict": "untested",
"source_refs": [
{
"source_id": "risu:174678332",
"source_version": "module.risum",
"sha256": "sha256:0c95062f010a58321ec3b55fdf62c046537e28a3fb86472d3fb60d43bf567780"
}
],
"source_kind": "risu_attachment",
"static_analysis_only": true,
"active_code_policy": "static_preserve_no_execute",
"fixture_kind": "parsed_risu_projection",
"publishable": false
},
"capabilities": {
"provides": [
"context.token_budget",
"context.anchor_continuity",
"context.protected_roles"
],
"requires": [
"hook.edit_request",
"chat_state_kv"
],
"conflicts": []
},
"payload": {
"namespace": "risu.module",
"controller": "user",
"triggers": [
"editRequest 시점에 메시지 열을 받아 토큰 추정치를 계산한다."
],
"state_effects": {
"omitted_count": "오버플로우 시 앞쪽 제거 가능 메시지 수, 다음 턴에 누적 전달",
"anchor": "살아남은 첫 대화 메시지의 역할+길이+해시 서명, 컷 후에도 대화 흐름을 이어준다",
"estimated_tokens": "현재 컨텍스트의 추정 토큰, 임계치 비교에 사용"
},
"activation_rules": [
"전역 토글로 켜짐/꺼짐. 켜져 있을 때만 editRequest가 메시지를 수정한다.",
"system/tool/function 역할 메시지는 항상 보존하고 제거 대상에서 뺀다.",
"설정된 최근 메시지 꼬리 개수만큼은 보존해 직전 문맥이 잘리지 않게 한다."
],
"invariants": [
"토큰 임계치를 넘으면 보호 역할·최근 꼬리를 뺀 앞쪽 메시지부터 우선 제거한다.",
"컷 후 첫 대화 메시지를 앵커로 저장해 다음 턴에 같은 지점부터 이어간다.",
"앵커를 잃으면 제거 누적분에서 다시 시작해 급격한 컨텍스트 도약을 막는다."
],
"boundaries": [
"활성 코드 본문(Lua/CJS/정규식 패턴)은 포함하지 않는다 — 정적 구조/원리/역할만 기술.",
"실행·sandbox 재현·승격은 사람 승인 전까지 금지.",
"candidate 상한: 검토 전 runtime catalog 공급 없음."
],
"idea_layers": {
"evidence": {
"source_post": "174678332",
"source_format": "module.risum",
"lead_id": "risu.deep.module.174678332",
"analysis_mode": "static_projection_read",
"code_executed": false
},
"situation": {
"concrete_scene": "대화가 길어져 한도에 가까워지면 모듈이 조용히 오래된 일반 메시지를 덜어내고, 가장 최근 살아남은 발화를 다음 차례의 이어짐 기점으로 찍어둔다.",
"emotion_evoked": "안도와 안정감 — 긴 호흡의 서사가 갑자기 끊기지 않는다.",
"why_memorable": "제거는 누적되지만 앵커 서명 하나로 독자와 AI 모두 “지금 어디까지 읽었는가”를 잃지 않는다는 점.",
"transferable_lesson": "컨텍스트 한계를 다룰 때는 무엇을 지울까뿐 아니라 무엇으로 이어짐을 증명할까를 함께 설계해야 한다."
},
"core": {
"core_idea": "토큰 예산을 지키면서도 서사 연속성을 앵커로 보존하는 런타임 컨텍스트 관리.",
"behavioral_cause": "editRequest 훅이 매 턴 메시지 열을 가로채 토큰을 추정하고 임계치와 비교한다.",
"invariant_conflict": "정보 보존(많이 남기기)과 예산 준수(과감히 자르기)의 긴장.",
"core_drive": "보호 역할과 최근 꼬리를 뺀 오래된 일반 메시지를 우선 제거해 예산 안으로 들인다.",
"core_dilemma": "충분히 잘라 안정을 얻되, 너무 많이 잘라 맥락을 잃지 않는 균형."
},
"swappable_parts": {
"tokenizer_profile": "tiktoken/claude/gemini/deepseek 별 문자당 토큰 비율",
"max_context": "상한 토큰",
"preserve_latest": "보호할 최근 메시지 수",
"trim_percent": "오버플로우 시 추가 절단 비율"
},
"lineage": {
"promotion_status": "candidate",
"origin": "risu_deep_dive_lead",
"reverse_translation": "module.risum -> matrix-component-v1(module)"
}
}
},
"projection": {
"title": "컨텍스트 커터 — 런타임 토큰 예산·연속성 앵커",
"prompt": "대화가 길어지면 오래된 일반 메시지부터 점차 덜어내 토큰 예산을 지킨다. 단, system·tool·function 역할과 최근 몇 발화는 항상 남기고, 살아남은 첫 대화 메시지를 다음 차례의 이어짐 기점으로 기억한다. 이 모듈은 메시지를 자르는 원리와 연속성을 보존하는 원리만 기술하며, 실행 코드나 정확한 치환 패턴은 포함하지 않는다.",
"prompt_sha256": "sha256:05aaa73785840a4779ac10348d3e6f8df2acc480691f4f2facdcd362b59dfc1d",
"summary": "토큰 예산을 지키면서도 서사 연속성을 앵커로 보존하는 런타임 컨텍스트 관리.",
"tags": [
"context-management",
"token-budget",
"continuity",
"runtime"
],
"flagship": false,
"core": false,
"content_labels": [
"risu-module",
"static-analysis"
],
"harness_compatibility": "display_only",
"replay_status": "not_run"
}
}