cuelo 0.10.112 → 0.10.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +43 -43
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  25. package/.next/server/app/api/subagents/eta/route.js +1 -1
  26. package/.next/server/app/api/updates/apply/route.js +2 -2
  27. package/.next/server/app/api/updates/route.js +1 -1
  28. package/.next/server/app/index.html +1 -1
  29. package/.next/server/app/index.rsc +4 -4
  30. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  31. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  32. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  34. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/page.js +4 -4
  36. package/.next/server/app/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/recover.html +1 -1
  39. package/.next/server/app/recover.rsc +2 -2
  40. package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
  41. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  44. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  45. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  46. package/.next/server/app-paths-manifest.json +43 -43
  47. package/.next/server/chunks/205.js +1 -1
  48. package/.next/server/chunks/4975.js +1 -1
  49. package/.next/server/middleware-build-manifest.js +1 -1
  50. package/.next/server/pages/404.html +1 -1
  51. package/.next/server/pages/500.html +1 -1
  52. package/.next/server/server-reference-manifest.json +1 -1
  53. package/.next/static/chunks/app/{layout-115531088b56e5b8.js → layout-f65c6505ac7e4f7b.js} +1 -1
  54. package/.next/static/chunks/app/{page-eebad992b39604fe.js → page-20cef200caf67724.js} +2 -2
  55. package/.next/trace +108 -108
  56. package/.next/trace-build +1 -1
  57. package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
  58. package/Tools/OMP_Global_Config/agent/AGENTS.md +1 -13
  59. package/Tools/OMP_Global_Config/agent/RULES.md +2 -3
  60. package/Tools/OMP_Global_Config/agent/extensions/command-guard/task-guard.ts +2 -2
  61. package/Tools/OMP_Global_Config/agent/prompt-copies/AGENTS.en.md +2 -14
  62. package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +3 -4
  63. package/Tools/OMP_Global_Config/agent/rules/deploy-ops.md +1 -2
  64. package/Tools/OMP_Global_Config/agent/rules/omp-harness.md +2 -0
  65. package/package.json +1 -1
  66. package/Tools/OMP_Global_Config/agent/tools/ci-chain/index.ts +0 -1085
  67. package/Tools/OMP_Global_Config/agent/tools/ci-chain/paths-filter.ts +0 -130
  68. /package/.next/static/{fFliQjzM2o72M2-5A4USH → -U-IFRIKLIBm-XAbrl-sF}/_buildManifest.js +0 -0
  69. /package/.next/static/{fFliQjzM2o72M2-5A4USH → -U-IFRIKLIBm-XAbrl-sF}/_ssgManifest.js +0 -0
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":69804561,"timestamp":398622,"id":14,"parentId":1,"tags":{},"startTime":1793325440839,"traceId":"7e1c16962db0b2c6"},{"name":"run-typescript","duration":14819915,"timestamp":70612233,"id":11058,"parentId":1,"tags":{},"startTime":1793325511052,"traceId":"7e1c16962db0b2c6"},{"name":"static-check","duration":2225119,"timestamp":85511132,"id":11061,"parentId":1,"tags":{},"startTime":1793325525951,"traceId":"7e1c16962db0b2c6"},{"name":"static-generation","duration":7152051,"timestamp":87816068,"id":11235,"parentId":1,"tags":{},"startTime":1793325528256,"traceId":"7e1c16962db0b2c6"},{"name":"collect-build-traces","duration":14694585,"timestamp":87800328,"id":11232,"parentId":1,"tags":{},"startTime":1793325528240,"traceId":"7e1c16962db0b2c6"},{"name":"telemetry-flush","duration":49,"timestamp":102498469,"id":11244,"parentId":1,"tags":{},"startTime":1793325542939,"traceId":"7e1c16962db0b2c6"},{"name":"next-build","duration":102164890,"timestamp":333647,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1793325440774,"traceId":"7e1c16962db0b2c6"}]
1
+ [{"name":"run-webpack","duration":67499040,"timestamp":378619,"id":14,"parentId":1,"tags":{},"startTime":1793360695757,"traceId":"24656bd507c13d79"},{"name":"run-typescript","duration":14437922,"timestamp":68287125,"id":11058,"parentId":1,"tags":{},"startTime":1793360763666,"traceId":"24656bd507c13d79"},{"name":"static-check","duration":2192606,"timestamp":82794447,"id":11061,"parentId":1,"tags":{},"startTime":1793360778173,"traceId":"24656bd507c13d79"},{"name":"static-generation","duration":5804641,"timestamp":85062320,"id":11235,"parentId":1,"tags":{},"startTime":1793360780441,"traceId":"24656bd507c13d79"},{"name":"collect-build-traces","duration":14634913,"timestamp":85047144,"id":11232,"parentId":1,"tags":{},"startTime":1793360780426,"traceId":"24656bd507c13d79"},{"name":"telemetry-flush","duration":62,"timestamp":99685557,"id":11244,"parentId":1,"tags":{},"startTime":1793360795064,"traceId":"24656bd507c13d79"},{"name":"next-build","duration":99368222,"timestamp":317419,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1793360695696,"traceId":"24656bd507c13d79"}]
@@ -9,7 +9,7 @@ const MEMORY_RE = /(const phase1Model = await resolveMemoryModel\(\{[^}]*?fallba
9
9
  const MEMORY_DONE = /const phase1Model = await resolveMemoryModel\(\{[^}]*?fallbackRole: "smol"/;
10
10
  const EXPECTED = {
11
11
  name: 'cuelo',
12
- version: '0.10.112',
12
+ version: '0.10.113',
13
13
  distribution: 'cuelo',
14
14
  coreVersion: '18.14.0',
15
15
  };
@@ -130,16 +130,4 @@ Child·다른 모델을 쓰는 턴에 역할·개수·이유를 알리고, 완
130
130
 
131
131
  ## 언제 무엇을 여는가
132
132
 
133
- 해당 행위를 **실제로 하기로 정했을 때만** 관련 규칙을 읽는다. 혼자 끝내는 routine 작업에서는 아래 규칙을 미리 읽지 않는다. `rule://task-guard`는 `task`를 실제로 발주하기 직전에만 읽는다. `rule://subagent`는 발주 직전과, 띄운 child의 결과를 검수·수용할 때 읽는다(2026-10-18 사용자 결정).
134
-
135
- | 상황 | 규칙 |
136
- |---|---|
137
- | SubAgent 위임·병렬 실행·검수 계약·모델 역할 배분 | `rule://subagent` |
138
- | `task` dispatch·요청당 budget·side quest 제한 | `rule://task-guard` |
139
- | 여러 파일·모듈 작업의 착수 계약·완료 판정 | `rule://verdict` |
140
- | OMP 전역 설정 미러 수정·동기화 | `rule://omp-harness` |
141
- | Agent 정의·SOP(`agent/sop`, `agent/agents`) 수정 | `rule://meta-harness` |
142
- | UI 시각 디자인·레이아웃·반응형·디자인 시스템 | `rule://frontend` |
143
- | VB.NET·VB6·레거시 설정/데이터 인코딩 | `rule://legacy-encoding` |
144
- | ChatGPT 6 Pro(`SHION`) 상담 | `rule://web6-consult` |
145
- | 배포 확인·WSL 배포·CI 감시·게시 뒤 Windows 사본 반영 | `rule://deploy-ops` |
133
+ 해당 행위를 **실제로 하기로 정했을 때만** 관련 규칙을 읽는다. 규칙별 여는 시점은 시스템이 함께 싣는 규칙 목록(domain rules)의 설명을 따르며, 혼자 끝내는 routine 작업에서는 미리 읽지 않는다. `rule://task-guard`는 `task`를 실제로 발주하기 직전에만 읽는다. `rule://subagent`는 발주 직전과, 띄운 child의 결과를 검수·수용할 때 읽는다(2026-10-18 사용자 결정).
@@ -71,7 +71,6 @@
71
71
  구분해 적용 이유를 짧게 설명한다. routine Skill 사용에는 이런 설명을 반복하지 않는다.
72
72
  - 조사할 때는 영향받는 symbol·필요한 파일 구간·기존 artifact와 실제 유효 runtime context 증거를
73
73
  먼저 사용한다. 그 증거 없이 context 압축 proxy, 영구 gate 또는 설정 임계값을 추가하거나 바꾸지 않는다.
74
- - 컨텍스트 창과 압축 시작점은 별개다. 먼저 실제 모델 ID에 적용된 창과 core의 `compaction.thresholdPercent`·`modelThresholds` 해석을 확인한다. 지원되는 core 설정으로 해결할 수 있으면 새 hook·JEV 호출을 붙이지 않는다. 임계값 조정은 같은 기준의 실제 요청·압축 후 재탐색·보고 비용과 품질 근거로 판단하며, cache read/write·압축 뒤 재작성 비용을 구분하고 없는 값은 unknown으로 남긴다. API 가격 환산을 구독 사용 한도로, 외부 개인 사례의 절감률을 이 하네스의 보장으로 바꾸지 않는다.
75
74
  - 압축·재개 뒤에는 기존 결정·보존 계약·미결 작업·검증 명령과 종료 코드·artifact locator를 먼저 이어받고 이미 검증된 범위를 다시 훑지 않는다. 결론에 영향을 주는 과거 지시가 불명확하면 사용 가능한 세션 원문 회수로 좁게 확인한다. 토큰 수만을 이유로 진행 중 작업을 끊거나 재시작 직전 강제 압축을 새 관행으로 만들지 않는다.
76
75
  - 알려진 공식 문서 URL은 직접 읽는다. 라이브러리·버전·API·migration 문서를 찾아야 하면 사용자에게
77
76
  묻지 않고 기존 Context7 CLI를 선택해도 되지만 모든 작업에 호출하지 않는다. `CTX7_TELEMETRY_DISABLED=1`을
@@ -82,7 +81,7 @@
82
81
  - 여러 파일을 훑거나 문서·README·저장소 구조를 조사할 때는 먼저 `skim`에 질문한다. 허용 텍스트 파일
83
82
  내용은 `skim` 역할 모델(기본 Codex의 GPT-6.1 Terra)로 전송된다. 실패 시 Hive의 DeepSeek 1017로 한 번 대체한다.
84
83
  처음부터 대체 모델을 썼다면 같은 모델로 재시도하지 않는다. 비밀 자료를 대상으로 삼지 말고, 수정할 정확한 줄은 `read`로 확인한다.
85
- - 새 글 또는 문단 단위 재작성 전에 Main·Maker 모두 `rule://writing-review-procedure`를 읽고 작성 범위별로 `draft`를 적용한다. 코드·설정·규칙·몇 줄의 정확한 수정·대화 답변은 제외다. `HANDOFF.md`·`doc/history` 산문은 draft 대상이지만 slop 게이트에서는 제외다. 사람이 실제로 보는 산출물(슬라이드·HTML·Office·PDF·보고서 csv·UI 문구·매뉴얼)은 공개 여부와 관계없이 `slop_check`를 통과해야 하며 면제는 사용자 명시 지시가 필요하다. 마크다운은 `.slop-gate.json` `visible`이 선언한 것만 대상이다. 실패한 검토를 통과로 바꾸지 않는다. 각 초안은 사실·형식과 해당 언어·UI 슬롭을 검토한 뒤 반영한다.
84
+ - 새 글 또는 문단 단위 재작성 전에 Main·Maker 모두 `rule://writing-review-procedure`를 읽고 그 절차대로 `draft`와 `slop_check`를 적용한다. 코드·설정·규칙·몇 줄의 정확한 수정·대화 답변은 제외다. 사람이 실제로 보는 산출물의 `slop_check` 면제는 사용자 명시 지시가 필요하며, 대상 범위의 정본은 그 규칙과 `slop_check` 도구 설명이다. 실패한 검토를 통과로 바꾸지 않는다.
86
85
  - **문서 기본 편집 도구는 LibreOffice다(2026-10-15 사용자 결정).** 기존 Word·Excel·PowerPoint 문서의
87
86
  열기·편집·변환은 Writer·Calc·Impress를 우선 사용한다. 새 문서 초안은 위 `draft` 규칙을 따른다.
88
87
  MS Office는 사용자가 지정했거나, 매크로·외부 연결·전용 기능·서식 호환성 때문에 필요한 경우에 쓴다.
@@ -107,7 +106,7 @@
107
106
  `HANDOFF.md`·`doc/README.md`·`doc/history` 기록을 만들어 같은 커밋에 넣는다.
108
107
  맞출 때는 남은 행동·관찰 조건·새 경계만 남기고, 이번에 끝난 행은 지운다. 그 자리에서 끝난 작업은
109
108
  HANDOFF가 아니라 `doc/history`에 기록한다(`rule://docs-handoff`).
110
- - 코드 변경이 high-risk이거나 트리거 marker·결정적 10% 표본에 해당하면 `git_finalize` 전에 `cross_review`로 다른 모델 계열(Anthropic 작성분은 OpenAI, OpenAI·그 밖 제공자 작성분은 Anthropic)의 검토를 받고 모든 finding을 근거와 함께 닫는다. 문서·테스트·생성물, 게이트가 파서로 주석·공백만 바꿨다고 증명한 TS/JS 수정, 버전 문자열(semver)만 바꾼 수정, git이 바이너리로 본 이미지·미디어·오피스·글꼴 자산은 제외한다. 타입만 바꾼 수정, 지시 주석 수정, 다른 언어의 주석 수정은 코드로 본다(VB 주석 줄은 marker 판정에서만 빠진다). high-risk 선언은 `crossReviewHighRisk`에 적은 파일에만 걸리고, 표본은 프로젝트·스타일·디자이너 파일을 빼고 바뀐 줄이 많은 코드 파일 5개까지만 요구한다(2026-10-27 사용자 결정). 검토 대상은 바뀐 실행 코드·설정이고, 관련된 바뀌지 않은 호출부·계약은 `inputs`·`references`로 넘긴다. 그 밖의 일반 수정은 Main이 `maker_route` 검토 필요성 자문을 보고 정하며, 자문은 게이트 요구를 면제하지 못한다. 검토는 자문 증거이며 PASS가 아니다. 사용자의 명시 지시 없이 이 gate를 면제하지 않는다. 정본은 `harness-policy.json` `mainLane.workerReview.crossFamilyReview`다.
109
+ - 코드 변경을 `git_finalize`할 때 그 게이트가 고르는 파일(high-risk 선언·트리거 marker·결정적 10% 표본, 대상·제외 범위는 `git_finalize` 도구 설명이 정본)은 먼저 `cross_review`로 다른 모델 계열의 검토를 받고 모든 finding을 근거와 함께 닫는다(`rule://cross-review-procedure`). 그 밖의 일반 수정은 Main이 `maker_route` 검토 필요성 자문을 보고 정하며, 자문은 게이트 요구를 면제하지 못한다. 검토는 자문 증거이며 PASS가 아니다. 사용자의 명시 지시 없이 이 gate를 면제하지 않는다. 정본은 `harness-policy.json` `mainLane.workerReview.crossFamilyReview`다.
111
110
  **검토 모델은 사용자가 정한 교차검증 경로만 쓴다(2026-10-26 사용자 지적).** 코드·문서·산출물의 검토, 검증, 게이트 판정에 쓰는 모델은 `config.yml` `modelRoles`의 `crossReviewOpenAI`·`crossReviewAnthropic` 슬롯(`cross_review`와 같은 계열 규칙)에서 읽는다. 자문 슬롯은 2026-10-29 사용자 결정으로 없앴다. slop 점검만 전용 슬롯 `slopReviewOpenAI`(Luna 단독)를 쓴다. 새 검토 기능이나 Maker 지시서에 다른 모델(예: Sonnet)을 비용·속도를 이유로 직접 지정하지 않고, 그 경로 밖의 모델로 본 결과를 교차검증·검토 통과라고 부르지 않는다. 경로를 바꾸려면 먼저 사용자에게 묻는다(2026-10-26: Main이 슬롭 게이트 검토 모델을 Sonnet으로 지시서에 넣었다가 사용자가 바로잡았다).
112
111
  - `git_finalize`는 상대경로 canonical target만 받고 한 호출에서 저장소 하나만 마감한다. 경로
113
112
  해석과 거부 대상, cwd 밖 별도 Git 저장소 허용, Main의 raw Git fallback 4조건과 사전 확인,
@@ -894,7 +894,7 @@ const EVAL_MODEL_BRIDGE_PATTERNS = [
894
894
  // 2026-10-29 SJF bg_15: eval cell의 `tool.git_finalize()`가 eval 데드라인(300s)에 걸려 셀이 실패 처리되고
895
895
  // 반환값(커밋 SHA)을 잃었다. 길이가 정해지지 않은 Main 게이트 도구는 eval 안에서 부르지 않고 직접
896
896
  // 호출한다. 직접 호출에는 eval 셀 데드라인이 없다.
897
- const EVAL_GATE_TOOL_NAMES = "git_finalize|cross_review|slop_check|ci_chain|deploy_verify";
897
+ const EVAL_GATE_TOOL_NAMES = "git_finalize|cross_review|slop_check|deploy_verify";
898
898
  const GATE_MEMBER = `(?:\\.\\s*|\\[\\s*["'\`])(?:${EVAL_GATE_TOOL_NAMES})(?![\\w$])(?:["'\`]\\s*\\])?`;
899
899
  const EVAL_GATE_TOOL_PATTERNS = [
900
900
  // tool.name(…) / tool["name"](…)
@@ -929,7 +929,7 @@ export function matchBlockedEvalModelBridge(input: EvalCallInput): string | unde
929
929
  }
930
930
  if (callsEvalGateTool(input.code)) {
931
931
  return (
932
- "[EvalGateGuard] eval 안에서 git_finalize/cross_review/slop_check/ci_chain/deploy_verify를 부르지 마세요. " +
932
+ "[EvalGateGuard] eval 안에서 git_finalize/cross_review/slop_check/deploy_verify를 부르지 마세요. " +
933
933
  "eval 셀 데드라인(30~300s)이 먼저 끝나면 셀이 실패 처리되어 도구 반환값(커밋 SHA·reviewId)을 잃습니다. " +
934
934
  "이 도구들은 eval 밖에서 직접 호출하세요."
935
935
  );
@@ -1,4 +1,4 @@
1
- <!-- source-fingerprint: c70d8ac79b32ecf -->
1
+ <!-- source-fingerprint: 44d00f8706d18359 -->
2
2
  # Global Agent Instructions
3
3
 
4
4
  (Model-facing English copy of the Korean source `AGENTS.md`. All user-facing prose stays Korean.)
@@ -133,16 +133,4 @@ When you show the user a comparison, trend or breakdown of three or more recorde
133
133
 
134
134
  ## What to open when
135
135
 
136
- Read the related rule **only once you have actually decided to do that action**. In routine work you finish alone, do not pre-read the rules below. Read `rule://task-guard` only right before actually dispatching a `task`. Read `rule://subagent` right before dispatching and when you review or accept the result of a child you launched (user decision, 2026-10-18).
137
-
138
- |Situation|Rule|
139
- |---|---|
140
- |SubAgent delegation, parallel runs, review contracts, model role allocation|`rule://subagent`|
141
- |`task` dispatch, per-request budget, side-quest limits|`rule://task-guard`|
142
- |Kickoff contract and completion verdict for multi-file/module work|`rule://verdict`|
143
- |Editing/syncing the OMP global settings mirror|`rule://omp-harness`|
144
- |Editing agent definitions/SOP (`agent/sop`, `agent/agents`)|`rule://meta-harness`|
145
- |UI visual design, layout, responsive, design systems|`rule://frontend`|
146
- |VB.NET·VB6·legacy settings/data encoding|`rule://legacy-encoding`|
147
- |ChatGPT 6 Pro (`SHION`) consult|`rule://web6-consult`|
148
- |Deploy confirmation, WSL deploy, CI watching, Windows checkout sync after publishing|`rule://deploy-ops`|
136
+ Read the related rule **only once you have actually decided to do that action**; when to open each rule follows the descriptions in the injected domain-rules list, and in routine work you finish alone, do not pre-read them. Read `rule://task-guard` only right before actually dispatching a `task`. Read `rule://subagent` right before dispatching and when you review or accept the result of a child you launched (user decision, 2026-10-18).
@@ -1,4 +1,4 @@
1
- <!-- source-fingerprint: 400603c9b02b8cec -->
1
+ <!-- source-fingerprint: dc052fdd3aa1c76b -->
2
2
  # Global Rules
3
3
 
4
4
  (Model-facing English copy of the Korean source `RULES.md`.)
@@ -32,11 +32,10 @@
32
32
  - Even before a final action that needs approval, first finish already-approved or reversible preparation and read-only investigation/review so there is a concrete target to review, then ask for approval. This preparation principle never grants or lowers existing prior-approval boundaries, including deletion, deployment, cost, and compatibility breaks.
33
33
  - Explicit user instructions take precedence over Skill guidance, but apply within higher-priority system/developer rules and existing approval boundaries. If a Skill or rule makes you ask for approval, stop, leave requested work unfinished, or go in a different direction than requested, name the exact file, quote the relevant instruction, distinguish its explicit requirement from your own interpretation, and briefly explain why it applies. Do not repeat that explanation for routine Skill use.
34
34
  - When investigating, first use the affected symbols, the needed file sections, existing artifacts, and evidence of the actual effective runtime context. Without that evidence, do not add or change context-compression proxies, permanent gates, or setting thresholds.
35
- - Context capacity and the compaction trigger are separate. First inspect the window of the exact effective model ID and the core resolution of `compaction.thresholdPercent` and `modelThresholds`. Prefer supported core settings over a new hook or JEV call. Change thresholds using consistently measured requests, post-compaction re-exploration, reported costs and quality evidence; distinguish cache reads/writes and rebuilding after compaction, and leave missing data unknown. API list-price estimates are not subscription allowances, and an external personal saving is not a guarantee for this harness.
36
35
  - After compaction/resume, carry forward existing decisions, preserved contracts, unfinished work, check commands/exit codes and artifact locators before re-exploring already verified scope. When an unclear past instruction affects the conclusion, use available original-session recall narrowly. Token count alone is not a reason to interrupt active work or establish forced compaction before restarts.
37
36
  - Read known official documentation URLs directly. When you need to find library/version/API/migration docs, you may choose the existing Context7 CLI without asking the user, but do not call it for every task. Apply `CTX7_TELEMETRY_DISABLED=1` to every command; with a minimal question containing no secrets, credentials, or internal source, run `ctx7 library <name> "<question>"`, then use the exact returned ID (the version ID if a version is needed) in `ctx7 docs <id> "<question>"`. Doc lookups work anonymously; authenticate only when a higher rate limit is needed. Do not add `ctx7 setup`, MCP, or Skills.
38
37
  - For multi-file scans and documentation, README, or repository-structure research, ask `skim` first. Eligible text files are sent to the configured `skim` role model (GPT-6.1 Terra via Codex by default). A failed call falls back once to DeepSeek 1017 hosted by Hive, unless that was already the primary model. Never target secrets, and use `read` to inspect exact lines before editing.
39
- - Before authoring new text or rewriting paragraphs, Main and Maker MUST read `rule://writing-review-procedure` and apply `draft` to each authored block. Code, configuration, rules, exact edits of a few lines and chat answers are excluded. `HANDOFF.md` and `doc/history` prose require drafting but are excluded from the slop gate. Artifacts a person actually sees (slides, HTML, Office, PDF, report csv, UI copy, manuals) require `slop_check` regardless of publication, with waiver only by explicit user instruction; markdown is in scope only when a `.slop-gate.json` `visible` glob declares it. Never pass a failed review. Check each draft's facts, format and applicable language/UI slop before applying it.
38
+ - Before authoring new text or rewriting paragraphs, Main and Maker MUST read `rule://writing-review-procedure` and apply `draft` and `slop_check` as it directs. Code, configuration, rules, exact edits of a few lines and chat answers are excluded. Waiving `slop_check` on an artifact a person actually sees needs explicit user instruction; that rule and the `slop_check` tool description are the source of truth for scope. Never pass a failed review.
40
39
  - **LibreOffice is the default document editor (user decision, 2026-10-15).** Prefer Writer, Calc and Impress for opening, editing and converting existing Word, Excel and PowerPoint documents. New document drafts still follow the `draft` rule above. Use MS Office when the user requests it or macros, external links, exclusive features or format fidelity require it. Re-saving existing documents with Craft tools or programming libraries requires a preservation check for that format and tool version. With any tool, preserve the original and work on a copy or a new output file; after saving or conversion, verify the affected Korean fonts, layout, tables, formulas and calculated values. If LibreOffice is unavailable or cannot handle the required format or feature, report that and select a verified alternative. This default does not authorize software installation/removal, MCP registration or permission changes.
41
40
  - **Select creation tools from the requested artifact without waiting for tool names (user decision, 2026-10-28).** For web UI, HTML report slides, PPT, Word or PDF creation and template reuse, Main and Maker MUST read `rule://creation-tools` first and choose only the relevant workflow. Treat HTML slides as presentation/report material like PPT, preserving the existing design system, originals and editability. Automatic consultation does not authorize unsolicited creation, software installation, MCP registration, costs or external publication.
42
41
  - Before browser work, screen verification, image checks, bulk document/log classification or long-job monitoring, read `rule://surface-verification-procedure`. Where ego lite is available use TaskSpace by default and `profile: "verify"` for CUELO screen verification; elsewhere isolate screen verification with `browser.open` and `app: { relay: false }`. Run tests and verification off the user's screen; display to the user only on request or approval. Close only your own tabs, windows and processes and preserve approval boundaries. Printing a web page to PDF is browser work too.
@@ -47,7 +46,7 @@
47
46
  - Modify only inside the project folder assigned to the task. When the user assigns both an app and a separate core repository it uses, both are allowed; the session cwd alone is not the allowed scope. Unassigned repositories/projects remain out of scope. Read outside files for reference but do not modify them; if something outside must change, stop and report why and what. One repository may contain several unrelated projects, so do not mistake the repository root for the work scope.
48
47
  <!-- main-only -->
49
48
  - For automatic staging/commit/push, use Main's `git_finalize` tool instead of raw `git add`·`git commit`·`git push`. SubAgents are never allowed a raw Git fallback. After verification, bring that project's `HANDOFF.md` to the current state, then pass the exact list of files changed in this task and the commit message. If no `HANDOFF.md` exists from the changed files up to the repository root, create `HANDOFF.md`, `doc/README.md` and a `doc/history` record in the worked project folder in the first source-change commit. Bringing it current means keeping only remaining actions, observation conditions and new boundaries, and deleting rows this task finished. Work that finished on the spot goes into `doc/history`, not `HANDOFF.md` (`rule://docs-handoff`).
50
- - When a code change is high-risk, or matches a trigger marker or the deterministic 10% sample, get a review through `cross_review` from the other model family (Anthropic-authored code by OpenAI; OpenAI- or other-provider-authored code by Anthropic) before `git_finalize`, and close every finding with evidence. Documentation, tests and generated files are excluded, and so are TS/JS edits the gate proves with a parser to change only comments and whitespace, edits that change only version (semver) strings, and images, media, office and font assets git treats as binary. Type-only edits, directive-comment edits and comment edits in other languages count as code (VB comment lines are skipped only for marker detection). A high-risk declaration covers only the files listed in `crossReviewHighRisk`, and a sample requires at most five code files with the most changed lines, excluding project, style and designer files (user decision, 2026-10-27). The review targets the changed executable code and configuration; pass relevant unchanged callers and contracts as `inputs`/`references`. For other ordinary changes Main decides from the `maker_route` review-necessity advice, and that advice cannot waive a gate requirement. A review is advisory evidence, never a PASS. Never waive this gate without an explicit user instruction. The source of truth is `harness-policy.json` `mainLane.workerReview.crossFamilyReview`. **Reviewer models come only from the user's cross-review route (user correction, 2026-10-26).** Any model used to review, verify, or decide a gate for code, documents, or deliverables is read from the `config.yml` `modelRoles` slots `crossReviewOpenAI` and `crossReviewAnthropic` (same family rule as `cross_review`). The advisory slot was removed by user decision on 2026-10-29; only slop checks use the dedicated slot `slopReviewOpenAI` (Luna alone). Never name another model (for example Sonnet) in a new review feature or a Maker brief for cost or speed, and never call a result from a model outside that route a cross-review or a passed review. To change the route, ask the user first (2026-10-26: Main put Sonnet into the slop-gate brief as the reviewer and the user corrected it).
49
+ - When `git_finalize` will commit code files its gate selects (high-risk declarations, trigger markers, the deterministic 10% sample; the `git_finalize` tool description is the source of truth for targets and exclusions), first get a `cross_review` from the other model family and close every finding with evidence (`rule://cross-review-procedure`). For other ordinary changes Main decides from the `maker_route` review-necessity advice, and that advice cannot waive a gate requirement. A review is advisory evidence, never a PASS. Never waive this gate without an explicit user instruction. The source of truth is `harness-policy.json` `mainLane.workerReview.crossFamilyReview`. **Reviewer models come only from the user's cross-review route (user correction, 2026-10-26).** Any model used to review, verify, or decide a gate for code, documents, or deliverables is read from the `config.yml` `modelRoles` slots `crossReviewOpenAI` and `crossReviewAnthropic` (same family rule as `cross_review`). The advisory slot was removed by user decision on 2026-10-29; only slop checks use the dedicated slot `slopReviewOpenAI` (Luna alone). Never name another model (for example Sonnet) in a new review feature or a Maker brief for cost or speed, and never call a result from a model outside that route a cross-review or a passed review. To change the route, ask the user first (2026-10-26: Main put Sonnet into the slop-gate brief as the reviewer and the user corrected it).
51
50
  - `git_finalize` accepts only relative canonical targets and finalizes one repository per call. The source of truth for path resolution and rejected targets, allowing a separate Git repository outside cwd, Main's four-condition raw Git fallback and its pre-checks, and the remote/upstream/ancestry/mutex contract is `rule://subagent` 「프로젝트와 Git 경계」. Do not use the fallback before confirming all four conditions.
52
51
  <!-- /main-only -->
53
52
  - Do not work around lock, ancestry, path, or non-fast-forward failures with raw Git commands, and do not auto rebase/reset/integrate; preserve the state and report. Another agent may be working in the same repository, so never delete `index.lock` or worktree locks; retry once after a short wait, and stop if it still fails.
@@ -9,6 +9,5 @@ description: 집·사무실 CUELO 배포 확인과 WSL 배포, 커밋 CI 감시,
9
9
  - 배포 확인(사용자, 2026-09-26·2026-09-29·2026-09-30): 집 PC(hostname `KYS`)와 사무실 PC(hostname은 비공개 배포 표에 있다)는 같은 확인 절차를 따른다. 그 PC의 CUELO 세션이 소스 변경을 검증하고 커밋·push했으면, 그 커밋의 GitHub CI가 끝날 때까지 지켜본 뒤 결과를 보고하고 배포 여부를 묻는다. 사용자가 승인하면 같은 revision으로 아래 「WSL 배포」를 실행한다. 라이브 서버는 Settings를 시작 때 한 번만 읽어 파일 변경·touch로는 반영되지 않으므로, 배포 없이 프로필만 바꿨으면 지원되는 프로필 갱신 뒤 서버를 재시작하고 `/api/models` 역할을 확인한다. 실행 전 `hostname`으로 PC를 확인한다. 예약 작업 같은 자동 배포는 두지 않는다. stage·rollback 삭제, 이 두 PC 밖의 배포, CLI 업데이트, 비용이 드는 작업은 따로 승인받는다.
10
10
  - WSL 배포(사용자, 2026-10-07): 두 PC 모두 WSL의 CUELO 하나로 돈다(집 배포판 `Ubuntu-24.04`, 사무실 `Ubuntu`). 재시작을 알리고 WSL에서 `systemd-run --user --unit=cuelo-update-$(date +%s) --collect --setenv=WSL_DISTRO_NAME="$WSL_DISTRO_NAME" bash ~/cuelo-run/Tools/CUELO_Setup/wsl/update.sh <revision> "$PI_SESSION_ID"`을 실행한다(Windows 세션이면 `wsl.exe -d <배포판> --exec bash -lc '…'`로 배포판 이름을 적어서). CUELO 세션 안에서는 두 번째 인자로 현재 세션 id를 꼭 넘긴다. 빠지면 drain이나 배포가 실패했을 때 깨우기가 `no-initiator`로 건너뛰어져 배포를 시작한 세션이 멈춘 채 남는다(2026-10-25). 세션 정지·빌드·WSL 프로필 반영·재시작·대기 화면 복귀까지 이 스크립트가 맡는다. `Tools/CUELO_Setup/deploy-live.ps1`과 앱 전체 `setup.ps1`은 지운 Windows 앱을 다시 설치하므로 두 PC에서 실행하지 않는다. `verify.ps1 -StrictRuntime`·`setup.ps1 -ProfileOnly`는 Windows 쪽 프로필·런타임을 보므로 WSL 배포의 증거가 아니다. 완료는 최신 `~/.omp/wsl-update/*.log`의 `READY <revision>`, `wsl\launch.ps1 -Status`의 `matched: true`(배포판이 기본값이 아니면 `-Distribution <배포판>`), `node install.mjs health` 4/4, `/api/models?cwd=<세션 cwd>` 역할 selector와 WSL `~/.omp/agent/config.yml` `modelRoles`의 일치로 본다(`cwd`가 없으면 403). 이 네 가지는 읽기 전용 도구 `deploy_verify`(`revision`, 세션 `cwd`, 필요하면 `distro`)를 한 번 불러 확인하고, 일회용 스크립트를 따로 짜지 않는다. exit 2(되돌림)·3(되돌리기 실패)은 배포 실패로 보고한다. 세부 절차와 함정은 `Tools/CUELO_Setup/WSL-SETUP.md` 「운영」에 있다.
11
11
  - CI 감시(사용자, 2026-09-28·2026-10-03): 커밋의 CI를 지켜볼 때는 기다릴 워크플로를 이름으로 지정하고(`gh run list --workflow <이름>` 등), 그 run이 끝나는 즉시 결과를 보고한다. 같은 SHA에 걸린 run 전체의 완료를 조건으로 삼지 않는다. CI 성공이 트리거하는 릴리스·배포 run(`workflow_run`)이 몇 초 뒤 같은 SHA로 생겨 CI 완료 보고를 붙잡기 때문이다. 이어 붙는 run은 보고한 뒤 따로 지켜본다. 감시는 `bash`의 `gh run watch <id> --exit-status`나 `gh run list` 직접 조회로 하고, `eval` 커널 안에서 `gh`를 subprocess로 부르는 폴링 루프로 짜지 않는다. 2026-10-03 그런 루프가 빈 출력을 "run 없음"으로 읽어, CI가 끝난 뒤에도 20분 넘게 보고하지 못했다. 직접 짠 폴링은 빈 출력·0이 아닌 exit를 즉시 오류로 끝낸다. 공개 미러 CI는 headSha가 원본 커밋과 다르므로 run 제목으로 찾는다.
12
- - CI 사슬 확인(2026-10-27): CUELO 커밋의 private `CI`·`Publish public mirror`와 공개 미러 `CI`의 현재 상태·실패 job·로그 꼬리는 읽기 전용 도구 `ci_chain`(`repo`, `sha`, `workflows`, `mirror`, 필요하면 `waitSeconds`)을 한 번 불러 확인한다. 게시 로그의 "nothing to publish"를 미러 CI 생략으로 판정하고 잘린 run 제목도 맞춘다. 끝날 때까지 지켜보는 감시는 위 항목대로 `gh run watch`를 bash async로 돌린다.
13
- - 경로 필터로 생략된 push(사용자 승인, 2026-10-28): private `CI`(`ci.yml`)와 `Publish public mirror`(`publish-public.yml`)는 `on.push` 경로 필터가 있어, 변경 파일이 전부 필터에 걸리는 push(작업 기록 `doc/`, HANDOFF·PC-SETUP, `Tools/*/*.md`, 기억 내보내기, 미러에 가지 않는 비공개 Tools 등)에는 run이 아예 생기지 않는다. run이 없다는 이유만으로 타임아웃까지 기다리거나 실패로 보고하지 않는다. `ci_chain`이 그 구간을 `skipped-paths-ignored`로 돌려주면(커밋의 변경 파일을 그 시점 워크플로 파일의 필터에 대 본 결과) 「CI 없음」으로 보고하고 통과로 센다. 직접 `gh`로 감시할 때도 run이 없으면 같은 대조를 한다. 이 상태는 코드가 바뀌지 않았다는 뜻일 뿐 배포 결정을 바꾸지 않는다. 배포는 이전처럼 바뀐 파일이 실행본·프로필에 닿을 때만 묻는다. 필터가 읽히지 않거나 변경 파일 목록을 믿을 수 없는 push(병합 커밋, 300개 이상)는 `pending`으로 남으니 run이 곧 생기는지 따로 확인한다. 워크플로 파일 자체나 `.publicignore`·`.publicdeny`가 바뀌면 필터에 걸리지 않으므로 run이 생긴다.
12
+ - 경로 필터로 생략된 push(사용자 승인, 2026-10-28): private `CI`(`ci.yml`)와 `Publish public mirror`(`publish-public.yml`)는 `on.push` 경로 필터가 있어, 변경 파일이 전부 필터에 걸리는 push(작업 기록 `doc/`, HANDOFF·PC-SETUP, `Tools/*/*.md`, 기억 내보내기, 미러에 가지 않는 비공개 Tools 등)에는 run이 아예 생기지 않는다. run이 없다는 이유만으로 타임아웃까지 기다리거나 실패로 보고하지 않는다. run이 없으면 그 커밋의 변경 파일(`git show --name-only --format= <sha>`)을 그 시점 워크플로 파일의 필터와 대 보고, 모두 걸러지면 「CI 없음」으로 보고하고 통과로 센다. 필터 판정은 `.github/scripts/paths-filter.ts`의 `pushStartsWorkflow`를 쓴다. 이 상태는 코드가 바뀌지 않았다는 뜻일 뿐 배포 결정을 바꾸지 않는다. 배포는 이전처럼 바뀐 파일이 실행본·프로필에 닿을 때만 묻는다. 병합 커밋처럼 변경 파일 목록을 믿을 수 없는 push는 run이 곧 생기는지 따로 확인한다. 워크플로 파일 자체나 `.publicignore`·`.publicdeny`가 바뀌면 필터에 걸리지 않으므로 run이 생긴다.
14
13
  - WSL 작업 결과의 Windows 반영(사용자, 2026-10-11, 모든 세션): 대응하는 기존 Windows 프로젝트 사본이 확인된 WSL 작업은 완료할 때 검증·커밋·게시한 소스와 문서를 Windows 사본에도 같은 커밋으로 자동 반영한다. UNC로 같은 WSL 폴더를 여는 것은 이 반영을 대신하지 않는다. 대상은 프로젝트 운영 문서의 명시 대응 경로와 실제 Git origin·branch로 확인하며, 경로를 추정해 다른 프로젝트를 갱신하거나 새 사본을 만들지 않는다. Main이 `git_finalize`로 게시를 마친 뒤 `bun ~/.omp/agent/tools/git-finalizer/sync-checkout.ts --source <WSL 저장소 루트> --target <대응 Windows 사본의 /mnt 경로> --revision <게시한 전체 SHA>`를 호출한다. 명령은 수정 없는 동일 origin·branch의 사본만 정확한 커밋으로 fast-forward하고 결과를 확인한다. 미커밋 수정·미추적 파일·분기 이력·락·인증 실패는 보존하고 막힌 이유를 알린다. reset·stash·강제 덮어쓰기·자동 rebase로 우회하지 않는다. 원본 작업 완료와 Windows 반영 완료는 구분해 보고하며 실패를 성공으로 감추지 않는다. 실시간·양방향 동기화나 감시 작업은 만들지 않고, 실행 산출물·설치된 프로필·인증 DB·세션·기억·독립 CLI를 복사하지 않는다. WSL 단일 CUELO의 실행본·활성 하네스 프로필 갱신은 기존 WSL 배포 절차를 따르며 Windows 앱을 다시 설치하지 않는다. Windows 전용 MSBuild·VB6·COM·장비 프로젝트의 기존 위치와 도구를 임의로 바꾸지 않는다.
@@ -21,6 +21,8 @@ globs: ["Tools/OMP_Global_Config/**", "Tools/CUELO_Setup/**"]
21
21
  - 적합한 동일 revision 빌드·서버·결과를 먼저 재사용한다. 2026-09-19의 dev CSS 파싱 실패를 현재 트리의 영구 제한으로 보지 않는다. 2026-09-25에 Next host의 `NODE_ENV=production`·`PORT`·`NEXT_RUNTIME`·private env 유출을 원인으로 확인해 자식 셸에서 제거했고, 2026-09-26에는 `NODE_ENV=development`, host Next env 제거, 격리 HOME/USERPROFILE로 package의 dev script를 실행해 실제 CSS·desktop/mobile 화면을 확인했다. cold compile이 길 수 있으므로 readiness만 보고 재시작하거나 같은 navigation을 반복하지 말고 로그로 컴파일 상태를 구분한다. 실제 환경을 교정해도 dev가 불가하거나 동일 revision production 산출물이 있으면 build/start를 사용한다. production build는 격리 source 또는 `CUELO_DIST_DIR`을 사용하고 HOME·USERPROFILE도 격리해 Windows 보호 junction의 `EPERM`을 피한다. 직접 만든 일회성 부산물만 정리하며 기존 유효 cache/stage는 보존한다. 자동 변경된 `tsconfig.json` include·`next-env.d.ts`를 정본에 섞지 않는다.
22
22
  - `modelRoles`나 `models.yml`의 provider 정의를 바꾼 뒤에는 `omp`를 재시작한다. 실행 중인 Main·세션의 역할 스냅샷과 ModelRegistry가 디스크 변경만으로 교체된다고 가정하지 않는다. SubAgent spawn 때 일부 설정을 다시 읽더라도 전체 런타임 반영의 증거는 아니다. 새 API 응답과 새 세션에서 실제 역할·설정과 저장된 자격증명 해석을 확인한다.
23
23
  - 새 모델 ID는 예전 ID의 `modelOverrides`를 상속하지 않는다. 모델을 추가·교체하면 실제 등록된 selector별 `contextWindow`와 core의 압축 발동점을 각각 대조하고, 기존에 승인한 창 정책의 누락인지 새 변경인지 구분한다. 표시 한도를 맞췄다는 사실만으로 제공자의 최대 크기 요청까지 검증했다고 보고하지 않는다.
24
+ - 컨텍스트 창과 압축 시작점은 별개다. 먼저 실제 모델 ID에 적용된 창과 core의 `compaction.thresholdPercent`·`modelThresholds` 해석을 확인한다. 지원되는 core 설정으로 해결할 수 있으면 새 hook·JEV 호출을 붙이지 않는다. 임계값 조정은 같은 기준의 실제 요청·압축 후 재탐색·보고 비용과 품질 근거로 판단하며, cache read/write·압축 뒤 재작성 비용을 구분하고 없는 값은 unknown으로 남긴다. API 가격 환산을 구독 사용 한도로, 외부 개인 사례의 절감률을 이 하네스의 보장으로 바꾸지 않는다.
25
+ - **하네스 동작 변경은 편집 전에 예측을 적는다(2026-10-30 사용자 결정).** 규칙·SOP·가드·extension·도구 설명·설정처럼 세션 행동을 바꾸는 변경은 편집 전에 작업 기록(`doc/history/.../main.md`)에 볼 지표와 현재 값, 기대 방향·크기, 재는 명령, 다시 잴 날짜를 적는다. 마감 때 그 예측을 `HANDOFF.md` 관찰 행의 종료 조건(`rule://docs-handoff`)으로 옮기고, 다시 잰 날 실제 값과 적중·빗나감을 같은 기록에 남긴다. 빗나가면 되돌릴지, 원인을 기록하고 조건을 고칠지 정한다. 근거: 수정마다 반증 가능한 예측을 먼저 적고 다음 관측과 대조한 루프가 하네스 개선을 수렴시켰다(AHE, arXiv 2604.25850). 예측은 관문이 아니며, 측정할 지표가 없는 문구 정리·문서 정합 수정은 해당하지 않는다.
24
26
  - omp는 CLI 실행마다 프로필 `config.yml`에 자기 기본값을 덧붙인다. 그래서 `verify.ps1`은 파일 완전일치가 아니라 미러 키·값이 프로필에 반영됐는지만 본다.
25
27
  - 인증 정보, 세션, 로그, 캐시, 플러그인 데이터는 미러에 넣지 않는다. 새 PC에서는 manifest로 다시 설치한다.
26
28
  - 완료 증거는 변경이 실제로 도달하는 범위에 맞춘다. 미러 문서·문구만 바꾼 작업은 diff 확인으로 닫는다. 프로필에 실제로 설치돼야 의미가 있는 변경은 `setup.ps1` 적용 결과와 그 범위를 덮는 `verify.ps1` 항목의 실제 출력까지 확인한다. 런타임 동작이 바뀌는 변경은 새 세션·실제 응답을 직접 구동해 확인한다. 이 우선순위는 `implementationOwnership.writerValidation.endConditions`·`reuseScope`와 같은 계약이다 — 가벼운 종료가 필요한 무거운 검사를 대체하지 않고, 무거운 검사도 변경이 닿지 않는 범위로 번지지 않는다. 같은 입력의 통과한 검사·빌드·서버는 재사용하고 재작업이 무효화한 범위만 다시 본다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cuelo",
3
- "version": "0.10.112",
3
+ "version": "0.10.113",
4
4
  "description": "CUELO — open-source AI coding agent workspace and harness for omp (oh-my-pi)",
5
5
  "homepage": "https://github.com/gim47656-ship-it/CUELO#readme",
6
6
  "repository": {